Commit 7daea9ba authored by Kilian Lackhove's avatar Kilian Lackhove

Merge branch 'master' into feature/Coupling

parents 69ca11be 08b211b5
......@@ -22,7 +22,7 @@ v5.0.0
- Simplify RawType typedefs (!840)
- Remove unused files from BasicUtils (!841)
- Remove checks for old boost versions which are no longer supported (!841)
- Refactor ParseUtils to be more consistent (!843, !896)
- Refactor ParseUtils to be more consistent (!843, !896, !908)
- Added support for using the distance to a specific region (e.g. outlet) in the
function definitions for the Absorption Forcing (!769)
- Improve performance of DisContField2D::v_ExtractTracePhys (!824)
......@@ -34,11 +34,19 @@ 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)
- Fix bug in MeshPartition.cpp which caused incorrect array access when
WeightPartitions was used in parallel (!923)
- Removed instance count from beginning of Array storage to improve memory
alignment (!921)
**NekMesh**:
- Add feature to read basic 2D geo files as CAD (!731)
......@@ -74,6 +82,8 @@ v5.0.0
- Fixed interppoints module (!760)
- Fix OutputTecplot in 2DH1D (!818)
- Move StreamFunction utility to a FieldConvert module (!809)
- Allow using expansion from session file with new `--useSessionExpansion`
command line option (!842)
- Extend wss module to compressible flows (!810)
- Allow explicitly setting bool options of FieldConvert modules as false (!811)
- Enable output to multiple files (!844)
......@@ -86,6 +96,7 @@ v5.0.0
- Replace steady-state check based on difference of norms by check based on
norm of the difference, to be consistent with the compressible solver (!832)
- Updated SVV to allow for the DGKernel extension (!851)
- Pre-calculate Time invariant portion of Womersley Solution (!814)
**CompressibleFlowSolver**
- Add 3D regression tests (!567)
......@@ -93,6 +104,7 @@ v5.0.0
- Allow performing axi-symmetric Euler and NS simulations (!771, !866)
- Add ability to use an exponential filtering for stabilization with
seg, quad and hex elements (!771, !862)
- Fix compressible solver with NUMMODES=1 (!868)
- Introduce equations of state to account for real gas effects (!880)
**APESolver:**
......@@ -130,6 +142,9 @@ v4.4.2
**FieldConvert**
- Allow passing input name with trailing separator (!879)
**Utilities**
- Fix VtkToPng to account for deprecated VTK API for VTK version > 8.1 (!925)
v4.4.1
------
**Library**
......
......@@ -1518,6 +1518,91 @@ This leads to small grid spacing required to resolve all physical scales associa
Schmidt number = kinematic viscosity/diffusion coefficient). Hence, small diffusion coefficient might lead to spurious
oscillations if the mesh spacing is not small enough.
\section{Imposing a constant flowrate}
In some simulations, it may be desirable to drive the flow by fixing a value of
the volumetric flux through a boundary surface. A common use case for this is a
channel flow, where the inflow and outflow are treated using periodic boundary
conditions, requiring a use of either a body force or a flowrate condition to
drive the flow. Often, the use of a body force is sufficient, but in some cases
(e.g. transitional or turbulent simulations), it may be difficult to determine
the correct body force to use in order to attain a specific Reynolds number. The
incompressible solver supports the use of an alternative forcing whereby the
volumetric flux,
%
\[
Q(\mathbf{u}) = \frac{1}{\mu(R)} \int_R \mathbf{u}\cdot d\mathbf{s},
\]
%
through a user-defined surface $R$ of area $\mu(R)$ is kept constant. This is
supported for standard two- and three-dimensional simulations, where $R$ is a
boundary region, as well as three-dimensional homogeneous simulations. In the
latter case, the forcing can be imposed either in the homogeneous direction (in
the $x-y$ plane) or perpendicular to it (in the $z$ direction).
The flowrate correction works by taking each timestep's velocity field
$\mathbf{u}^{n}$, and computing a scalar $\alpha$ so that the corrected flow
%
\[
\tilde{\mathbf{u}}^n = \mathbf{u}^n + \alpha\mathbf{u}_s
\]
has the desired flowrate. Here, $\mathbf{u}_s$ is a linear Stokes solution that
is calculated once at the start of the simulation, so that the condition is not
expensive to implement.
To enable flowrate corrections, three things must be defined in the session
file:
\begin{itemize}
\item The \inltt{Flowrate} parameter in the parameters section, which defines
the desired value of the volumetric flux $Q(\mathbf{u})$ through the reference
region. To set $Q = 1$ we would therefore define:
\begin{lstlisting}[style=XMLStyle]
<PARAMETERS>
<P> Flowrate = 1.0 </P>
</PARAMETERS>
\end{lstlisting}
\item A boundary condition must be tagged with the \inltt{Flowrate}
user-defined type to define the reference region $R$. For example, a 2D
channel flow with periodic boundary conditions might use the following
arrangement:
\begin{lstlisting}[style=XMLStyle]
<BOUNDARYCONDITIONS>
<REGION REF="0">
<P VAR="u" VALUE="[1]" USERDEFINEDTYPE="Flowrate" />
<P VAR="v" VALUE="[1]" USERDEFINEDTYPE="Flowrate" />
<P VAR="p" VALUE="[1]" USERDEFINEDTYPE="Flowrate" />
</REGION>
<REGION REF="1">
<P VAR="u" VALUE="[0]" />
<P VAR="v" VALUE="[0]" />
<P VAR="p" VALUE="[0]" />
</REGION>
</BOUNDARYCONDITIONS>
\end{lstlisting}
\item a \inltt{FlowrateForce} function with components \inltt{ForceX},
\inltt{ForceY} and \inltt{ForceZ} that defines the direction in which the
forcing will be applied. This should be a unit vector (i.e. of magnitude 1)
and constant (i.e. not dependent on $x$, $y$, $z$ or $t$). As an example, to
impose a force in the $x$-direction we specify:
\begin{lstlisting}[style=XMLStyle]
<FUNCTION NAME="FlowrateForce">
<E VAR="ForceX" VALUE="1.0" />
<E VAR="ForceY" VALUE="0.0" />
<E VAR="ForceZ" VALUE="0.0" />
</FUNCTION>
\end{lstlisting}
\end{itemize}
Note that in homogeneous simulations where the forcing is in the $z$-direction,
only the \inltt{Flowrate} parameter is required and the reference area $R$ is
taken to be the homogeneous plane.
Optionally, the \inltt{IO\_FlowSteps} parameter can be defined. If set to a
non-zero integer, this produces a file \inltt{session.prs} which records the
value of $\alpha$ used in the flowrate correction, every \inltt{IO\_FlowSteps}
steps.
\section{Examples}
\subsection{Kovasznay Flow 2D}
......
......@@ -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,21 @@ 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_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 +96,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)" />