Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
dumux-repositories
dumux
Commits
df1220a4
Commit
df1220a4
authored
Dec 18, 2018
by
Timo Koch
Browse files
Merge branch 'cherry-pick-
12b07f0b
' into 'releases/3.0'
Merge branch 'cleanup/doxygen-for-3.0-tests' into 'master' See merge request
!1422
parents
ae0d66b5
6385c520
Changes
293
Hide whitespace changes
Inline
Side-by-side
doc/handbook/dumux-handbook.bib
View file @
df1220a4
...
...
@@ -1772,3 +1772,68 @@ url = {http://www.sciencedirect.com/science/article/pii/0094454874901507},
doi
=
{10.2514/6.1992-439}
,
url
=
{http://dx.doi.org/10.2514/6.1992-439}
}
@book
{
Donea2003
,
title
=
{Finite element methods for flow problems}
,
author
=
{Donea, Jean and Huerta, Antonio}
,
year
=
{2003}
,
publisher
=
{John Wiley \& Sons}
}
@inproceedings
{
Angeli2017
,
title
=
{FVCA8 Benchmark for the Stokes and Navier--Stokes Equations with the TrioCFD Code—Benchmark Session}
,
author
=
{Angeli, P-E and Puscas, M-A and Fauchet, G and Cartalade, A}
,
booktitle
=
{International Conference on Finite Volumes for Complex Applications}
,
pages
=
{181--202}
,
year
=
{2017}
,
organization
=
{Springer}
}
@InProceedings
{
Kovasznay1948
,
author
=
{Kovasznay, L. I. G.}
,
title
=
{Laminar flow behind a two-dimensional grid}
,
booktitle
=
{Mathematical Proceedings of the Cambridge Philosophical Society}
,
year
=
{1948}
,
volume
=
{44}
,
pages
=
{58--62}
,
organization
=
{Cambridge Univ Press}
,
}
@PHDTHESIS
{
Class2001
,
author
=
{H. Class}
,
title
=
{{Theorie und numerische Modellierung nichtisothermer Mehrphasenprozesse in NAPL-kontaminierten por"osen Medien}}
,
school
=
{Universit\"at Stuttgart}
,
year
=
{2001}
}
@Article
{
Shi2011
,
author
=
{Shi, J. X. and Wang, J. H.}
,
title
=
{A Numerical Investigation of Transpiration Cooling with Liquid Coolant Phase Change}
,
journal
=
{Transport in Porous Media}
,
year
=
{2011}
,
volume
=
{87}
,
number
=
{3}
,
pages
=
{703--716}
,
doi
=
{10.1007/s11242-010-9710-9}
,
url
=
{https://doi.org/10.1007/s11242-010-9710-9}
}
@article
{
nagel2014
,
title
=
{The influence of gas--solid reaction kinetics in models of thermochemical heat storage under monotonic and cyclic loading}
,
author
=
{Nagel, T and Shao, H and Ro{\ss}kopf, C and Linder, M and W{\"o}rner, A and Kolditz, O}
,
journal
=
{Applied Energy}
,
volume
=
{136}
,
pages
=
{289--302}
,
year
=
{2014}
,
publisher
=
{Elsevier}
}
@article
{
shao2013
,
title
=
{{Non-equilibrium thermo-chemical heat storage in porous media: Part 2--A 1D computational model for a calcium hydroxide reaction system}}
,
author
=
{Shao, H and Nagel, T and Ro{\ss}kopf, C and Linder, M and W{\"o}rner, A and Kolditz, O}
,
journal
=
{Energy}
,
volume
=
{60}
,
pages
=
{271--282}
,
year
=
{2013}
,
publisher
=
{Elsevier}
}
dumux/material/fluidstates/2p2c.hh
View file @
df1220a4
...
...
@@ -55,12 +55,10 @@ public:
int
wettingPhase
()
const
{
return
phase0Idx
;
}
/*!
* \name access functions
* \todo doc me!
*/
//@{
/*****************************************************
* Generic access to fluid properties (No assumptions
* on thermodynamic equilibrium required)
*****************************************************/
/*!
* \brief Returns the saturation \f$S_\alpha\f$ of a fluid phase \f$\alpha\f$ in \f$\mathrm{[-]}\f$.
*
...
...
@@ -197,10 +195,11 @@ public:
return
phaseMassFraction
(
phaseIdx
);
}
/*!
* \name Functions to set Data
*/
//@{
/*****************************************************
* Setter methods. Note that these are not part of the
* generic FluidState interface but specific for each
* implementation...
*****************************************************/
/*!
* \brief Sets the viscosity of a phase \f$\mathrm{[Pa*s]}\f$.
* \param phaseIdx the index of the phase
...
...
test/freeflow/navierstokes/angeli/main.cc
View file @
df1220a4
...
...
@@ -18,9 +18,11 @@
*****************************************************************************/
/*!
* \file
*
* \brief Test for the instationary staggered grid Navier-Stokes model with analytical solution (Angeli et al., 2017)
* \ingroup NavierStokesTests
* \brief Test for the instationary staggered grid Navier-Stokes model
* with analytical solution (Angeli et al. 2017, \cite Angeli2017).
*/
#include
<config.h>
#include
<ctime>
...
...
@@ -106,10 +108,10 @@ int main(int argc, char** argv) try
auto
gridVariables
=
std
::
make_shared
<
GridVariables
>
(
problem
,
fvGridGeometry
);
gridVariables
->
init
(
x
);
// intialize the vtk output module
// in
i
tialize the vtk output module
StaggeredVtkOutputModule
<
GridVariables
,
SolutionVector
>
vtkWriter
(
*
gridVariables
,
x
,
problem
->
name
());
using
IOFields
=
GetPropType
<
TypeTag
,
Properties
::
IOFields
>
;
IOFields
::
initOutputModule
(
vtkWriter
);
//
!<
Add model specific output fields
IOFields
::
initOutputModule
(
vtkWriter
);
// Add model specific output fields
vtkWriter
.
addField
(
problem
->
getAnalyticalPressureSolution
(),
"pressureExact"
);
vtkWriter
.
addField
(
problem
->
getAnalyticalVelocitySolution
(),
"velocityExact"
);
vtkWriter
.
addFaceField
(
problem
->
getAnalyticalVelocitySolutionOnFace
(),
"faceVelocityExact"
);
...
...
test/freeflow/navierstokes/angeli/problem.hh
View file @
df1220a4
...
...
@@ -19,8 +19,10 @@
/*!
* \file
* \ingroup NavierStokesTests
* \brief Test for the instationary staggered grid Navier-Stokes model with analytical solution (Angeli et al., 2017)
* \brief Test for the instationary staggered grid Navier-Stokes model
* with analytical solution (Angeli et al. 2017, \cite Angeli2017).
*/
#ifndef DUMUX_ANGELI_TEST_PROBLEM_HH
#define DUMUX_ANGELI_TEST_PROBLEM_HH
...
...
@@ -34,13 +36,11 @@
#include
<dumux/freeflow/navierstokes/model.hh>
#include
"../l2error.hh"
namespace
Dumux
{
namespace
Dumux
{
template
<
class
TypeTag
>
class
AngeliTestProblem
;
namespace
Properties
{
namespace
Properties
{
// Create new type tags
namespace
TTag
{
struct
AngeliTest
{
using
InheritsFrom
=
std
::
tuple
<
NavierStokes
,
StaggeredFreeFlowModel
>
;
};
...
...
@@ -71,13 +71,16 @@ template<class TypeTag>
struct
EnableGridFluxVariablesCache
<
TypeTag
,
TTag
::
AngeliTest
>
{
static
constexpr
bool
value
=
true
;
};
template
<
class
TypeTag
>
struct
EnableGridVolumeVariablesCache
<
TypeTag
,
TTag
::
AngeliTest
>
{
static
constexpr
bool
value
=
true
;
};
}
}
// end namespace Properties
/*!
* \ingroup NavierStokesTests
* \brief Test problem for the staggered grid (Angeli 1947)
* \todo doc me!
* \brief Test problem for the staggered grid (Angeli et al. 2017, \cite Angeli2017).
*
* The unsteady, 2D, incompressible Navier-Stokes equations for a zero source and a Newtonian
* flow is solved and compared to an analytical solution (sums/products of trigonometric functions).
* The velocities and pressures decay exponentially. The Dirichlet boundary conditions are
* time-dependent and consistent with the analytical solution.
*/
template
<
class
TypeTag
>
class
AngeliTestProblem
:
public
NavierStokesProblem
<
TypeTag
>
...
...
@@ -136,7 +139,7 @@ public:
}
/*!
* \brief Return the temperature within the domain in [K].
* \brief Return
s
the temperature within the domain in [K].
*
* This problem assumes a temperature of 10 degrees Celsius.
*/
...
...
@@ -145,7 +148,7 @@ public:
/*!
* \brief Return the sources within the domain.
* \brief Return
s
the sources within the domain.
*
* \param globalPos The global position
*/
...
...
@@ -199,7 +202,7 @@ public:
}
/*!
* \brief Return
d
irichlet boundary values at a given position
* \brief Return
s D
irichlet boundary values at a given position
.
*
* \param globalPos The global position
*/
...
...
@@ -210,7 +213,7 @@ public:
}
/*!
* \brief Return the analytical solution of the problem at a given position
* \brief Return
s
the analytical solution of the problem at a given position
.
*
* \param globalPos The global position
* \param time The current simulation time
...
...
@@ -239,7 +242,7 @@ public:
// \{
/*!
* \brief Evaluate the initial value for a control volume.
* \brief Evaluate
s
the initial value for a control volume.
*
* \param globalPos The global position
*/
...
...
@@ -249,7 +252,7 @@ public:
}
/*!
* \brief Returns the analytical solution for the pressure
* \brief Returns the analytical solution for the pressure
.
*/
auto
&
getAnalyticalPressureSolution
()
const
{
...
...
@@ -257,7 +260,7 @@ public:
}
/*!
* \brief Returns the analytical solution for the velocity
* \brief Returns the analytical solution for the velocity
.
*/
auto
&
getAnalyticalVelocitySolution
()
const
{
...
...
@@ -265,7 +268,7 @@ public:
}
/*!
* \brief Returns the analytical solution for the velocity at the faces
* \brief Returns the analytical solution for the velocity at the faces
.
*/
auto
&
getAnalyticalVelocitySolutionOnFace
()
const
{
...
...
@@ -284,7 +287,9 @@ public:
}
/*!
* \brief Adds additional VTK output data to the VTKWriter. Function is called by the output module on every write.
* \brief Adds additional VTK output data to the VTKWriter.
*
* Function is called by the output module on every write.
*/
void
createAnalyticalSolution
()
{
...
...
@@ -331,6 +336,6 @@ private:
std
::
vector
<
VelocityVector
>
analyticalVelocity_
;
std
::
vector
<
VelocityVector
>
analyticalVelocityOnFace_
;
};
}
//end namespace
}
//
end namespace
Dumux
#endif
test/freeflow/navierstokes/channel/1d/main.cc
View file @
df1220a4
...
...
@@ -18,9 +18,10 @@
*****************************************************************************/
/*!
* \file
*
* \brief Test for a 1-D staggered grid Navier-Stokes model
*
\ingroup NavierStokesTests
* \brief Test for a 1-D staggered grid Navier-Stokes model
.
*/
#include
<config.h>
#include
<ctime>
...
...
@@ -96,7 +97,7 @@ int main(int argc, char** argv) try
// intialize the vtk output module
using
IOFields
=
GetPropType
<
TypeTag
,
Properties
::
IOFields
>
;
StaggeredVtkOutputModule
<
GridVariables
,
SolutionVector
>
vtkWriter
(
*
gridVariables
,
x
,
problem
->
name
());
IOFields
::
initOutputModule
(
vtkWriter
);
//
!<
Add model specific output fields
IOFields
::
initOutputModule
(
vtkWriter
);
// Add model specific output fields
vtkWriter
.
addField
(
problem
->
getAnalyticalPressureSolution
(),
"pressureExact"
);
vtkWriter
.
addField
(
problem
->
getAnalyticalVelocitySolution
(),
"velocityExact"
);
vtkWriter
.
addFaceField
(
problem
->
getAnalyticalVelocitySolutionOnFace
(),
"faceVelocityExact"
);
...
...
test/freeflow/navierstokes/channel/1d/problem.hh
View file @
df1220a4
...
...
@@ -19,7 +19,7 @@
/*!
* \file
* \ingroup NavierStokesTests
* \brief Test for the 1-D Navier-Stokes model with an analytical solution
* \brief Test for the 1-D Navier-Stokes model with an analytical solution
.
*
* \copydoc Dumux::NavierStokesAnalyticProblem
*/
...
...
@@ -38,13 +38,11 @@
#include
"../../l2error.hh"
namespace
Dumux
{
namespace
Dumux
{
template
<
class
TypeTag
>
class
NavierStokesAnalyticProblem
;
namespace
Properties
{
namespace
Properties
{
// Create new type tags
namespace
TTag
{
struct
NavierStokesAnalytic
{
using
InheritsFrom
=
std
::
tuple
<
NavierStokes
,
StaggeredFreeFlowModel
>
;
};
...
...
@@ -76,15 +74,15 @@ struct EnableGridVolumeVariablesCache<TypeTag, TTag::NavierStokesAnalytic> { sta
template
<
class
TypeTag
>
struct
NormalizePressure
<
TypeTag
,
TTag
::
NavierStokesAnalytic
>
{
static
constexpr
bool
value
=
false
;
};
}
}
// end namespace Properties
/*!
* \ingroup NavierStokesTests
* \brief Test for the 1-D Navier-Stokes model with an analytical solution
* \brief Test for the 1-D Navier-Stokes model with an analytical solution
.
*
* The 1-D analytic solution is given by
* \f[ p = 2 - 2 \cdot x \f]
* \f[ v_\text{x} = 2 \cdot x^3 \f]
* \f[ v_\text{x} = 2 \cdot x^3 \f]
.
*/
template
<
class
TypeTag
>
class
NavierStokesAnalyticProblem
:
public
NavierStokesProblem
<
TypeTag
>
...
...
@@ -144,7 +142,7 @@ public:
}
/*!
* \brief Return the temperature within the domain in [K].
* \brief Return
s
the temperature within the domain in [K].
*
* This problem assumes a temperature of 10 degrees Celsius.
*/
...
...
@@ -152,7 +150,7 @@ public:
{
return
298.0
;
}
/*!
* \brief Return the sources within the domain.
* \brief Return
s
the sources within the domain.
*
* \param globalPos The global position
*/
...
...
@@ -239,7 +237,7 @@ public:
}
/*!
* \brief Return
d
irichlet boundary values at a given position
* \brief Return
s D
irichlet boundary values at a given position
*
* \param globalPos The global position
*/
...
...
@@ -250,7 +248,7 @@ public:
}
/*!
* \brief Return the analytical solution of the problem at a given position
* \brief Return
s
the analytical solution of the problem at a given position
*
* \param globalPos The global position
*/
...
...
@@ -321,7 +319,7 @@ public:
// \{
/*!
* \brief Evaluate the initial value for a control volume.
* \brief Evaluate
s
the initial value for a control volume.
*
* \param globalPos The global position
*/
...
...
@@ -339,7 +337,7 @@ public:
}
/*!
* \brief Returns the analytical solution for the velocity
* \brief Returns the analytical solution for the velocity
.
*/
auto
&
getAnalyticalVelocitySolution
()
const
{
...
...
@@ -347,7 +345,7 @@ public:
}
/*!
* \brief Returns the analytical solution for the velocity at the faces
* \brief Returns the analytical solution for the velocity at the faces
.
*/
auto
&
getAnalyticalVelocitySolutionOnFace
()
const
{
...
...
@@ -357,7 +355,9 @@ public:
private:
/*!
* \brief Adds additional VTK output data to the VTKWriter. Function is called by the output module on every write.
* \brief Adds additional VTK output data to the VTKWriter.
*
* Function is called by the output module on every write.
*/
void
createAnalyticalSolution_
()
{
...
...
@@ -401,6 +401,6 @@ private:
std
::
vector
<
GlobalPosition
>
analyticalVelocity_
;
std
::
vector
<
GlobalPosition
>
analyticalVelocityOnFace_
;
};
}
//end namespace
}
//
end namespace
Dumux
#endif
test/freeflow/navierstokes/channel/2d/main.cc
View file @
df1220a4
...
...
@@ -18,9 +18,10 @@
*****************************************************************************/
/*!
* \file
*
* \brief Channel flow test for the staggered grid (Navier-)Stokes model
*
\ingroup NavierStokesTests
* \brief Channel flow test for the staggered grid (Navier-)Stokes model
.
*/
#include
<config.h>
#include
<ctime>
...
...
@@ -113,7 +114,7 @@ int main(int argc, char** argv) try
// initialize the vtk output module
using
IOFields
=
GetPropType
<
TypeTag
,
Properties
::
IOFields
>
;
StaggeredVtkOutputModule
<
GridVariables
,
SolutionVector
>
vtkWriter
(
*
gridVariables
,
x
,
problem
->
name
());
IOFields
::
initOutputModule
(
vtkWriter
);
//
!<
Add model specific output fields
IOFields
::
initOutputModule
(
vtkWriter
);
// Add model specific output fields
vtkWriter
.
write
(
restartTime
);
// the assembler with time loop for instationary problem
...
...
test/freeflow/navierstokes/channel/2d/problem.hh
View file @
df1220a4
...
...
@@ -19,8 +19,9 @@
/*!
* \file
* \ingroup NavierStokesTests
* \brief Channel flow test for the staggered grid (Navier-)Stokes model
* \brief Channel flow test for the staggered grid (Navier-)Stokes model
.
*/
#ifndef DUMUX_CHANNEL_TEST_PROBLEM_HH
#define DUMUX_CHANNEL_TEST_PROBLEM_HH
...
...
@@ -34,13 +35,11 @@
#include
<dumux/discretization/staggered/freeflow/properties.hh>
#include
<dumux/freeflow/navierstokes/model.hh>
namespace
Dumux
{
namespace
Dumux
{
template
<
class
TypeTag
>
class
ChannelTestProblem
;
namespace
Properties
{
namespace
Properties
{
// Create new type tags
namespace
TTag
{
#if !NONISOTHERMAL
...
...
@@ -77,12 +76,18 @@ template<class TypeTag>
struct
EnableGridFluxVariablesCache
<
TypeTag
,
TTag
::
ChannelTest
>
{
static
constexpr
bool
value
=
true
;
};
template
<
class
TypeTag
>
struct
EnableGridVolumeVariablesCache
<
TypeTag
,
TTag
::
ChannelTest
>
{
static
constexpr
bool
value
=
true
;
};
}
}
// end namespace Properties
/*!
* \ingroup NavierStokesTests
* \brief Test problem for the one-phase (Navier-) Stokes problem in a channel.
* \todo doc me!
*
* Flow from left to right in a two-dimensional channel is considered. At the inlet (left),
* fixed values for velocity are set, while at the outlet (right), a fixed pressure
* boundary condition is used. The channel is confined by solid walls at the top and bottom
* of the domain which corresponds to no-slip/no-flow conditions.
* For the non-isothermal test, water of increased temperature is injected at the inlet
* while the walls are fully isolating.
*/
template
<
class
TypeTag
>
class
ChannelTestProblem
:
public
NavierStokesProblem
<
TypeTag
>
...
...
@@ -122,7 +127,7 @@ public:
}
/*!
* \brief Return the temperature within the domain in [K].
* \brief Return
s
the temperature within the domain in [K].
*
* This problem assumes a temperature of 10 degrees Celsius.
*/
...
...
@@ -130,7 +135,7 @@ public:
{
return
273.15
+
10
;
}
// 10C
/*!
* \brief Return the sources within the domain.
* \brief Return
s
the sources within the domain.
*
* \param globalPos The global position
*/
...
...
@@ -182,8 +187,7 @@ public:
}
/*!
* \brief Evaluate the boundary conditions for a dirichlet
* control volume.
* \brief Evaluates the boundary conditions for a Dirichlet control volume.
*
* \param globalPos The center of the finite volume which ought to be set.
*/
...
...
@@ -212,7 +216,7 @@ public:
// \{
/*!
* \brief Evaluate the initial value for a control volume.
* \brief Evaluate
s
the initial value for a control volume.
*
* \param globalPos The global position
*/
...
...
@@ -259,6 +263,6 @@ private:
Scalar
inletVelocity_
;
TimeLoopPtr
timeLoop_
;
};
}
//end namespace
}
//
end namespace
Dumux
#endif
test/freeflow/navierstokes/channel/3d/main.cc
View file @
df1220a4
...
...
@@ -16,11 +16,12 @@
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
*****************************************************************************/
/*!
* \file
*
* \brief 3D Channel flow test for the staggered grid (Navier-)Stokes model
*/
/*!
* \file
* \ingroup NavierStokesTests
* \brief 3D Channel flow test for the staggered grid (Navier-)Stokes model
*/
#include
<config.h>
#include
<ctime>
...
...
@@ -97,7 +98,7 @@ int main(int argc, char** argv) try
// intialize the vtk output module
using
IOFields
=
GetPropType
<
TypeTag
,
Properties
::
IOFields
>
;
StaggeredVtkOutputModule
<
GridVariables
,
SolutionVector
>
vtkWriter
(
*
gridVariables
,
x
,
problem
->
name
());
IOFields
::
initOutputModule
(
vtkWriter
);
//
!<
Add model specific output fields
IOFields
::
initOutputModule
(
vtkWriter
);
// Add model specific output fields
vtkWriter
.
write
(
0.0
);
// the assembler with time loop for instationary problem
...
...
test/freeflow/navierstokes/channel/3d/problem.hh
View file @
df1220a4
...
...
@@ -18,13 +18,13 @@
*****************************************************************************/
/*!
* \file
*
*
\ingroup NavierStokesTests
* \brief Channel flow test for the staggered grid (Navier-)Stokes model.
*
* The channel is either modeled in 3D or in 2D, using an additional wall friction term
* to mimic the 3D behavior of the flow.
*
*/
#ifndef DUMUX_3D_CHANNEL_PROBLEM_HH
#define DUMUX_3D_CHANNEL_PROBLEM_HH
...
...
@@ -42,15 +42,12 @@
#define DIM_3D 0
#endif
namespace
Dumux
{
namespace
Dumux
{
template
<
class
TypeTag
>
class
ThreeDChannelTestProblem
;
namespace
Properties
{
namespace
Properties
{
// Create new type tags
namespace
TTag
{
struct
ThreeDChannelTest
{
using
InheritsFrom
=
std
::
tuple
<
NavierStokes
,
StaggeredFreeFlowModel
>
;
};
...
...
@@ -83,11 +80,18 @@ template<class TypeTag>
struct
EnableGridFluxVariablesCache
<
TypeTag
,
TTag
::
ThreeDChannelTest
>
{
static
constexpr
bool
value
=
true
;
};
template
<
class
TypeTag
>
struct
EnableGridVolumeVariablesCache
<
TypeTag
,
TTag
::
ThreeDChannelTest
>
{
static
constexpr
bool
value
=
true
;
};
}
}
// end namespace Properties
/*!
* \brief Test problem for the one-phase model:
\todo doc me!
* \brief Test problem for the one-phase (Navier-) Stokes model in a 3D or pseudo 3D channel.
*
* Flow from left to right in a three-dimensional channel is considered. At the inlet (left)
* and outlet (right) fixed values for pressure are set.
* The channel is confined by solid walls at all other sides of the domain which corresponds
* to no-slip/no-flow conditions.
* The value of an analytical solution for the given flow configuration is furthermore provided.
* For sake of efficiency, the 3D problem can be reduced to a two-dimensional one by including
* an additional wall friction term to the momentum balance (Flekkoy et al., 1995 \cite flekkoy1995a).
*/
template
<
class
TypeTag
>
class
ThreeDChannelTestProblem
:
public
NavierStokesProblem
<
TypeTag
>
...
...
@@ -142,7 +146,7 @@ public:
// \{
/*!
* \brief Return the temperature within the domain in [K].
* \brief Return
s
the temperature within the domain in [K].
*
* This problem assumes a temperature of 10 degrees Celsius.
*/
...
...
@@ -151,8 +155,8 @@ public:
/*!
* \brief Evaluate the source term for all phases within a given
* sub-control
-
volume face.
* \brief Evaluate
s
the source term for all phases within a given
* sub-control
volume face.
*/
using
ParentType
::
source
;
template
<
class
ElementVolumeVariables
,
class
ElementFaceVariables
>
...
...
@@ -208,8 +212,7 @@ public:
}
/*!
* \brief Evaluate the boundary conditions for a dirichlet