Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Mpp
MLUQ
Commits
d1f4c9ed
Commit
d1f4c9ed
authored
Mar 23, 2020
by
niklas.baumgarten
Browse files
refactored main
parent
6e00674f
Changes
6
Show whitespace changes
Inline
Side-by-side
CMakeLists.txt
View file @
d1f4c9ed
...
...
@@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.5.1)
project
(
MLMC
)
#---------------------------------------------------------------------------------------#
#
set(CMAKE_CXX_FLAGS_DISTRIBUTION "-O0")
set
(
CMAKE_CXX_FLAGS_DISTRIBUTION
"-O0"
)
#set(CMAKE_CXX_FLAGS_DISTRIBUTION "-O1")
#set(CMAKE_CXX_FLAGS_DISTRIBUTION "-O2")
#set(CMAKE_CXX_FLAGS_DISTRIBUTION "-O3")
...
...
@@ -34,11 +34,11 @@ include_directories(${PROJECT_SOURCE_DIR}/mlmc/src)
# Subdirectories
add_subdirectory
(
mlmc/src
)
add_subdirectory
(
mlmc/
tests
)
add_subdirectory
(
tests
)
#---------------------------------------------------------------------------------------#
# Executables
add_executable
(
MLMC-M++ mlmc/src/Main.
C
)
add_executable
(
MLMC-M++ mlmc/src/Main.
cpp
)
# Linking
target_link_libraries
(
MLMC-M++ MLMC sprng SRC LIB_PS
${
SUPERLU
}
...
...
mlmc/src/CMakeLists.txt
View file @
d1f4c9ed
set
(
MLMC_SRC
Main.
C
Main.
cpp
Utils.C
M
LMCMain.C
MultilevelMonteCarlo.
C
M
ainProgram.cpp
MultilevelMonteCarlo.
cpp
utils/IndentedLogger.cpp
mc/MonteCarlo.cpp
mc/MonteCarloElliptic.
C
mc/MonteCarloTransport.
C
mc/MonteCarloElliptic.
cpp
mc/MonteCarloTransport.
cpp
assemble/EllipticAssemble.C
assemble/MixedEllipticAssemble.C
assemble/HybridEllipticAssemble.C
assemble/DGEllipticAssemble.C
stochastics/RNManager.C
stochastics/CirculantEmbedding.C
problem/StochasticEllipticProblem.hpp stochastics/SampleGenerator.h stochastics/HybridFluxGenerator.C stochastics/HybridFluxGenerator.h problem/StochasticProblemFactory.hpp mc/MonteCarlo.cpp utils/MultilevelPlotter.cpp utils/MultilevelPlotter.hpp utils/MatrixGraphContainer.cpp utils/MatrixGraphContainer.hpp
)
problem/StochasticEllipticProblem.hpp
stochastics/SampleGenerator.h
stochastics/HybridFluxGenerator.C
stochastics/HybridFluxGenerator.h
mc/MonteCarlo.cpp
utils/MultilevelPlotter.cpp
utils/MultilevelPlotter.hpp
)
add_library
(
MLMC STATIC
${
MLMC_SRC
}
)
mlmc/src/MainProgram.cpp
View file @
d1f4c9ed
...
...
@@ -10,18 +10,19 @@ void MainProgram::Initialize() {
problem
=
createStochasticProblem
();
assemble
=
createAssemble
();
plots
=
new
MultilevelPlotter
(
*
meshes
);
plots
=
make_unique
<
MultilevelPlotter
>
(
*
meshes
);
mlmc
=
new
MultilevelMonteCarlo
(
initLevels
,
initSampleAmount
,
meshes
,
*
plots
,
stochField
,
assemble
);
mlmc
=
make_unique
<
MultilevelMonteCarlo
>
(
initLevels
,
initSampleAmount
,
meshes
,
stochField
,
assemble
,
plots
);
}
void
MainProgram
::
Run
()
{
this
->
PrintInfo
();
mlmc
->
PrintInfo
();
meshes
->
PrintInfo
();
// disc->PrintInfo();
// stochField->PrintInfo();
// assemble->PrintInfo();
// Stochastic field info
mlmc
->
PrintInfo
();
if
(
experimentName
==
"ConvergenceTest"
)
{
headConvergenceTest
();
...
...
@@ -36,11 +37,6 @@ void MainProgram::Run() {
mlmc
->
ShowResultsMLMCRun
(
epsilon
);
mlmc
->
ShowKurtosisWarning
();
mlmc
->
ShowExponentResults
();
}
else
if
(
experimentName
==
"MLMCOverEpsilon"
)
{
headMLMCOverEpsilon
();
mlmc
->
Method
(
epsilonList
);
mlmc
->
ShowMCTable
();
mlmc
->
ShowResultsOverEpsilon
(
epsilonList
);
}
}
...
...
@@ -53,91 +49,124 @@ void MainProgram::PrintInfo() {
<<
" Experiment: "
<<
experimentName
<<
endl
;
if
(
experimentName
==
"MLMCExperiment"
)
Vout
(
1
)
<<
" epsilon: "
<<
epsilon
<<
endl
;
if
(
experimentName
==
"MLMCOverEpsilon"
)
Vout
(
1
)
<<
" epsilonList: "
<<
vec2str
(
epsilonList
)
<<
endl
;
Vout
(
1
)
<<
endl
;
}
unique_ptr
<
Meshes
>
MainProgram
::
createMeshes
()
{
void
MainProgram
::
checkValues
()
{
if
(
verbose
==
-
1
)
Exit
(
"
\n
Please set MainVerbose
\n
"
)
if
(
problemName
.
empty
())
Exit
(
"
\n
Please set Problem
\n
"
)
if
(
modelName
.
empty
())
Exit
(
"
\n
Please set Model
\n
"
)
if
(
problemName
.
empty
())
Exit
(
"
\n
Please set StochasticField
\n
"
)
if
(
experimentName
.
empty
())
Exit
(
"
\n
Please set Experiment
\n
"
)
if
(
epsilon
==
0.0
&&
experimentName
!=
"ConvergenceTest"
)
Exit
(
"
\n
Please set epsilon
\n
"
)
if
(
pLevel
==
-
1
)
Exit
(
"
\n
Please set plevel
\n
"
)
if
(
maxLevel
==
-
1
)
Exit
(
"
\n
Please set maxLevel
\n
"
)
if
(
degree
==
-
1
)
Exit
(
"
\n
Please set degree
\n
"
)
if
(
initLevels
.
empty
())
Exit
(
"
\n
Please set initLevels
\n
"
)
if
(
initSampleAmount
.
empty
()
&&
experimentName
==
"MLMCExperiment"
)
Exit
(
"
\n
Please set initSampleAmount
\n
"
)
if
(
experimentName
==
"ConvergenceTest"
)
{
if
(
uniformSampleAmount
!=
-
1
)
Exit
(
"
\n
Please set uniformSampleAmount
\n
"
)
initSampleAmount
=
{};
for
(
auto
&
level
:
initLevels
)
initSampleAmount
.
push_back
(
uniformSampleAmount
);
}
if
(
initSampleAmount
.
size
()
!=
initLevels
.
size
())
Exit
(
"
\n
initLevels and initSampleAmount have to be of the same size
\n
"
)
if
(
maxLevel
<
initLevels
.
back
())
Exit
(
"
\n
Last element of initLevels has to be smaller or equal to maxLevel
\n
"
)
}
shared_ptr
<
Meshes
>
MainProgram
::
createMeshes
()
{
if
(
problemName
.
find
(
"1D"
)
!=
string
::
npos
)
return
make_unique
<
Meshes
>
(
"Line"
,
pLevel
,
maxLevel
);
if
(
problemName
.
find
(
"2D"
)
!=
string
::
npos
)
return
make_
unique
<
Meshes
>
(
"UnitSquare"
,
pLevel
,
maxLevel
);
return
make_
shared
<
Meshes
>
(
"UnitSquare"
,
pLevel
,
maxLevel
);
Exit
(
"
\n
Mesh not found in "
+
problemName
+
"
\n
"
)
}
unique
_ptr
<
Discretization
>
MainProgram
::
createDiscretization
()
{
shared
_ptr
<
Discretization
>
MainProgram
::
createDiscretization
()
{
if
(
modelName
==
"LagrangeFEM"
&&
degree
==
1
)
return
make_
unique
<
Discretization
>
(
"linear"
,
1
,
meshes
->
dim
());
return
make_
shared
<
Discretization
>
(
"linear"
,
1
,
meshes
->
dim
());
if
(
modelName
==
"LagrangeFEM"
&&
degree
==
2
)
return
make_
unique
<
Discretization
>
(
"serendipity"
,
1
,
meshes
->
dim
());
return
make_
shared
<
Discretization
>
(
"serendipity"
,
1
,
meshes
->
dim
());
if
(
modelName
==
"MixedFEM"
||
modelName
==
"HybridFEM"
)
return
make_
unique
<
Discretization
>
(
"RT0_P0"
,
1
,
meshes
->
dim
());
return
make_
shared
<
Discretization
>
(
"RT0_P0"
,
1
,
meshes
->
dim
());
if
(
modelName
==
"DGFEM"
)
return
make_
unique
<
DGDiscretization
>
(
new
DGDoF
(
degree
));
return
make_
shared
<
DGDiscretization
>
(
new
DGDoF
(
degree
));
if
(
modelName
==
"DGTransport"
)
return
make_
unique
<
DGDiscretization
>
(
new
DGDoF
(
degree
));
return
make_
shared
<
DGDiscretization
>
(
new
DGDoF
(
degree
));
Exit
(
"
\n
Discretization not found in "
+
modelName
+
"
\n
"
)
}
unique_ptr
<
StochasticField
>
MainProgram
::
createStochasticField
()
{
if
(
meshes
==
nullptr
)
Exit
(
"
\n
Meshes have to be initialized to create stochastic field
\n
"
)
shared_ptr
<
StochasticField
>
MainProgram
::
createStochasticField
()
{
if
(
problemName
.
find
(
"Stochastic"
)
!=
string
::
npos
)
{
if
(
problemName
.
find
(
"Laplace"
)
!=
string
::
npos
)
return
make_
unique
<
StochasticField
>
(
*
meshes
,
"CirculantEmbedding"
);
return
make_
shared
<
StochasticField
>
(
*
(
meshes
.
get
())
,
"CirculantEmbedding"
);
if
(
problemName
.
find
(
"Pollution"
)
!=
string
::
npos
)
return
make_
unique
<
StochasticField
>
(
*
meshes
,
"HybridFluxGenerator"
);
return
make_
shared
<
StochasticField
>
(
*
(
meshes
.
get
())
,
"HybridFluxGenerator"
);
}
if
(
problemName
.
find
(
"Deterministic"
)
!=
string
::
npos
)
{
if
(
problemName
.
find
(
"Laplace"
)
!=
string
::
npos
)
return
make_
unique
<
StochasticField
>
(
*
meshes
,
"DeterministicPermeabilityGenerator"
);
return
make_
shared
<
StochasticField
>
(
*
(
meshes
.
get
())
,
"DeterministicPermeabilityGenerator"
);
if
(
problemName
.
find
(
"Pollution"
)
!=
string
::
npos
)
return
make_
unique
<
StochasticField
>
(
*
meshes
,
"DeterministicHybridFluxGenerator"
);
return
make_
shared
<
StochasticField
>
(
*
(
meshes
.
get
())
,
"DeterministicHybridFluxGenerator"
);
}
Exit
(
"
\n
Stochastic field not found in "
+
problemName
+
"
\n
"
)
}
unique_ptr
<
StochasticProblem
>
MainProgram
::
createStochasticProblem
()
{
if
(
problemName
.
find
(
"StochasticLaplace1D"
)
!=
-
1
||
problemName
.
find
(
"DeterministicLaplace1D"
)
!=
-
1
)
return
make_unique
<
StochasticLaplace1D
>
();
if
(
problemName
.
find
(
"StochasticLaplace2D"
)
!=
-
1
||
problemName
.
find
(
"DeterministicLaplace2D"
)
!=
-
1
)
return
make_unique
<
StochasticLaplace2D
>
();
if
(
problemName
.
find
(
"StochasticPollution1D"
)
!=
-
1
||
problemName
.
find
(
"DeterministicPollution1D"
)
!=
-
1
)
return
make_unique
<
StochasticPollution1D
>
();
if
(
problemName
.
find
(
"StochasticPollutionCosHat1D"
)
!=
-
1
||
problemName
.
find
(
"DeterministicPollutionCosHat1D"
)
!=
-
1
)
return
make_unique
<
StochasticPollutionCosHat1D
>
();
if
(
problemName
.
find
(
"StochasticPollution2D"
)
!=
-
1
||
problemName
.
find
(
"DeterministicPollution2D"
)
!=
-
1
)
return
make_unique
<
StochasticPollution2D
>
();
if
(
problemName
.
find
(
"StochasticPollutionCosHat2D"
)
!=
-
1
||
problemName
.
find
(
"DeterministicPollutionCosHat2D"
)
!=
-
1
)
return
make_unique
<
StochasticPollutionCosHat2D
>
();
if
(
problemName
.
find
(
"StochasticPollutionMollifiedBar2D"
)
!=
-
1
||
problemName
.
find
(
"DeterministicPollutionMollifiedBar2D"
)
!=
-
1
)
return
make_unique
<
StochasticPollutionMollifiedBar2D
>
();
shared_ptr
<
StochasticProblem
>
MainProgram
::
createStochasticProblem
()
{
if
(
problemName
.
find
(
"StochasticLaplace1D"
)
!=
string
::
npos
||
problemName
.
find
(
"DeterministicLaplace1D"
)
!=
string
::
npos
)
return
make_shared
<
StochasticLaplace1D
>
();
if
(
problemName
.
find
(
"StochasticLaplace2D"
)
!=
string
::
npos
||
problemName
.
find
(
"DeterministicLaplace2D"
)
!=
string
::
npos
)
return
make_shared
<
StochasticLaplace2D
>
();
if
(
problemName
.
find
(
"StochasticPollution1D"
)
!=
string
::
npos
||
problemName
.
find
(
"DeterministicPollution1D"
)
!=
string
::
npos
)
return
make_shared
<
StochasticPollution1D
>
();
if
(
problemName
.
find
(
"StochasticPollutionCosHat1D"
)
!=
string
::
npos
||
problemName
.
find
(
"DeterministicPollutionCosHat1D"
)
!=
string
::
npos
)
return
make_shared
<
StochasticPollutionCosHat1D
>
();
if
(
problemName
.
find
(
"StochasticPollution2D"
)
!=
string
::
npos
||
problemName
.
find
(
"DeterministicPollution2D"
)
!=
string
::
npos
)
return
make_shared
<
StochasticPollution2D
>
();
if
(
problemName
.
find
(
"StochasticPollutionCosHat2D"
)
!=
string
::
npos
||
problemName
.
find
(
"DeterministicPollutionCosHat2D"
)
!=
string
::
npos
)
return
make_shared
<
StochasticPollutionCosHat2D
>
();
if
(
problemName
.
find
(
"StochasticPollutionMollifiedBar2D"
)
!=
string
::
npos
||
problemName
.
find
(
"DeterministicPollutionMollifiedBar2D"
)
!=
string
::
npos
)
return
make_shared
<
StochasticPollutionMollifiedBar2D
>
();
Exit
(
"
\n
Problem field not found in "
+
problemName
+
"
\n
"
)
}
unique_ptr
<
Assemble
>
MainProgram
::
createAssemble
()
{
if
(
problemName
.
find
(
"Laplace"
)
!=
string
::
npos
)
{
auto
ellipticProblem
=
dynamic_cast
<
StochasticEllipticProblem
*>
(
problem
.
get
());
shared_ptr
<
Assemble
>
MainProgram
::
createAssemble
()
{
shared_ptr
<
StochasticEllipticProblem
>
ellipticProblem
=
dynamic_pointer_cast
<
StochasticEllipticProblem
>
(
problem
);
shared_ptr
<
StochasticTransportProblem
>
transportProblem
=
dynamic_pointer_cast
<
StochasticTransportProblem
>
(
problem
);
if
(
ellipticProblem
!=
nullptr
)
{
if
(
modelName
==
"LagrangeFEM"
)
return
make_
unique
<
EllipticAssemble
>
(
disc
,
ellipticProblem
);
return
make_
shared
<
EllipticAssemble
>
(
disc
,
ellipticProblem
);
if
(
modelName
==
"MixedFEM"
)
return
new
MixedEllipticAssemble
(
disc
,
ellipticProblem
);
return
make_shared
<
MixedEllipticAssemble
>
(
disc
,
ellipticProblem
);
if
(
modelName
==
"HybridFEM"
)
return
new
HybridEllipticAssemble
(
disc
,
ellipticProblem
);
return
make_shared
<
HybridEllipticAssemble
>
(
disc
,
ellipticProblem
);
if
(
modelName
==
"DGFEM"
)
return
new
DGEllipticAssemble
(
disc
,
ellipticProblem
);
}
else
if
(
problemName
.
find
(
"Pollution"
)
!=
string
::
npos
)
{
auto
transportProblem
=
dynamic_cast
<
StochasticTransportProblem
*>
(
problem
);
Plot
plot
(
meshes
->
fine
(),
meshes
->
dim
(),
2
);
return
new
DGTransportAssemble
(
disc
,
transportProblem
,
&
plot
);
return
make_shared
<
DGEllipticAssemble
>
(
disc
,
ellipticProblem
);
}
Exit
(
"
\n
Assembling for this problem not implemented yet
\n
"
)
// Todo
if
(
transportProblem
!=
nullptr
)
{
return
nullptr
;
// Plot plot(meshes->fine(), meshes->dim(), 2);
// return make_shared<DGTransportAssemble>(disc, transportProblem, &plot);
}
Exit
(
"
\n
Assembling for this problem with this discretization not implemented
\n
"
)
}
mlmc/src/MainProgram.hpp
View file @
d1f4c9ed
...
...
@@ -3,37 +3,40 @@
#include "assemble/AssembleHeader.h"
#include "problem/StochasticEllipticProblem.hpp"
#include "MultilevelMonteCarlo.h"
#include "MultilevelMonteCarlo.h
pp
"
#include "discretization/DGDiscretization.h"
#include "stochastics/StochasticField.h"
#include "utils/MultilevelPlotter.hpp"
#include
"utils/MatrixGraphContainer.hpp"
#include
<memory>
class
MainProgram
{
public:
int
verbose
=
0
;
int
verbose
=
-
1
;
string
problemName
=
""
,
modelName
=
""
;
string
fieldName
=
""
,
experimentName
=
""
;
string
problemName
=
""
;
string
modelName
=
""
;
string
fieldName
=
""
;
string
experimentName
=
""
;
double
epsilon
=
0.
1
;
int
pLevel
=
0
;
int
maxLevel
=
8
;
int
degree
=
0
;
double
epsilon
=
0.
0
;
int
pLevel
=
-
1
;
int
maxLevel
=
-
1
;
int
degree
=
-
1
;
vector
<
int
>
initLevels
=
{
3
,
4
,
5
}
;
vector
<
int
>
initSampleAmount
=
{
12
,
6
,
3
}
;
vector
<
double
>
epsilonList
=
{
0.1
,
0.05
,
0.01
}
;
vector
<
int
>
initLevels
;
vector
<
int
>
initSampleAmount
;
int
uniformSampleAmount
=
-
1
;
unique_ptr
<
Meshes
>
meshes
=
nullptr
;
unique_ptr
<
Discretization
>
disc
=
nullptr
;
unique_ptr
<
StochasticField
>
stochField
=
nullptr
;
unique_ptr
<
StochasticProblem
>
problem
=
nullptr
;
unique_ptr
<
Assemble
>
assemble
=
nullptr
;
shared_ptr
<
Meshes
>
meshes
;
shared_ptr
<
Discretization
>
disc
;
shared_ptr
<
StochasticField
>
stochField
;
MultilevelPlotter
*
plots
=
nullptr
;
MultilevelMonteCarlo
*
mlmc
=
nullptr
;
shared_ptr
<
StochasticProblem
>
problem
;
shared_ptr
<
Assemble
>
assemble
;
shared_ptr
<
MultilevelPlotter
>
plots
;
shared_ptr
<
MultilevelMonteCarlo
>
mlmc
;
MainProgram
()
{
config
.
get
(
"MainVerbose"
,
verbose
);
...
...
@@ -43,31 +46,13 @@ public:
config
.
get
(
"degree"
,
degree
);
config
.
get
(
"initLevels"
,
initLevels
);
config
.
get
(
"initSampleAmount"
,
initSampleAmount
);
config
.
get
(
"
epsilonList"
,
epsilonLis
t
);
config
.
get
(
"
uniformSampleAmount"
,
uniformSampleAmoun
t
);
config
.
get
(
"Problem"
,
problemName
);
config
.
get
(
"Model"
,
modelName
);
config
.
get
(
"StochasticField"
,
fieldName
);
config
.
get
(
"Experiment"
,
experimentName
);
if
(
initSampleAmount
.
size
()
!=
initLevels
.
size
()
&&
experimentName
!=
"ConvergenceTest"
)
Exit
(
"
\n
initLevels and initSampleAmount have to be of the same size.
\n
"
)
if
(
maxLevel
<
initLevels
.
back
())
Exit
(
"
\n
Last element of initLevels has to be smaller or equal to maxLevel.
\n
"
)
int
uniformSampleAmount
;
config
.
get
(
"uniformSampleAmount"
,
uniformSampleAmount
);
if
(
experimentName
==
"ConvergenceTest"
)
{
initSampleAmount
=
{};
for
(
auto
&
level
:
initLevels
)
initSampleAmount
.
push_back
(
uniformSampleAmount
);
}
}
~
MainProgram
()
{
delete
problem
;
delete
assemble
;
delete
mlmc
;
checkValues
();
}
void
Run
();
...
...
@@ -77,16 +62,17 @@ public:
void
PrintInfo
();
private:
void
checkValues
();
unique
_ptr
<
Meshes
>
createMeshes
();
shared
_ptr
<
Meshes
>
createMeshes
();
unique
_ptr
<
Discretization
>
createDiscretization
();
shared
_ptr
<
Discretization
>
createDiscretization
();
unique
_ptr
<
StochasticField
>
createStochasticField
();
shared
_ptr
<
StochasticField
>
createStochasticField
();
unique
_ptr
<
StochasticProblem
>
createStochasticProblem
();
shared
_ptr
<
StochasticProblem
>
createStochasticProblem
();
unique
_ptr
<
Assemble
>
createAssemble
();
shared
_ptr
<
Assemble
>
createAssemble
();
static
void
headConvergenceTest
()
{
mout
<<
endl
<<
"**********************************************************"
...
...
@@ -97,14 +83,7 @@ private:
static
void
headMLMCExperiment
()
{
mout
<<
endl
<<
"**********************************************************"
<<
endl
<<
"*** MultilevelMonteCarlo test run ***"
<<
endl
<<
"**********************************************************"
<<
endl
;
}
static
void
headMLMCOverEpsilon
()
{
mout
<<
endl
<<
"**********************************************************"
<<
endl
<<
"*** MultilevelMonteCarlo over epsilon ***"
<<
endl
<<
"*** Run Multilevel Monte Carlo Method ***"
<<
endl
<<
"**********************************************************"
<<
endl
;
}
...
...
tests/CMakeLists.txt
View file @
d1f4c9ed
...
...
@@ -14,7 +14,7 @@ file(MAKE_DIRECTORY ${PROJECT_TEST_BINARY_DIR}/data/dual)
# Test Executables
add_executable
(
TestMainProgram
${
PROJECT_TEST_DIR
}
/TestMainProgram.cpp
)
add_executable
(
TestMainProgram
${
PROJECT_TEST_DIR
}
/TestMainProgram.cpp
TestEllipticMonteCarlo.cpp
)
# Linking
target_link_libraries
(
TestMainProgram MLMC sprng SRC LIB_PS fftw3 m
${
SUPERLU
}
...
...
tests/TestMainProgram.cpp
View file @
d1f4c9ed
...
...
@@ -5,21 +5,34 @@
using
namespace
::
testing
;
class
TestMainProgram
:
public
::
Test
{
protected:
map
<
string
,
string
>
configMapMLMCExperiment
=
{
{
"MainVerbose"
,
"0"
},
{
"Problem"
,
"StochasticLaplace1D"
},
{
"Model"
,
"LagrangeFEM"
},
{
"Experiment"
,
"MLMCExperiment"
},
{
"epsilon"
,
"0.1"
},
{
"plevel"
,
"0"
},
{
"maxLevel"
,
"8"
},
{
"degree"
,
"1"
},
{
"initLevels"
,
"[3, 4, 5]"
},
{
"initSampleAmount"
,
"[12, 6, 3]"
}
};
std
::
unique_ptr
<
MainProgram
>
mainProgram
;
void
SetUp
()
override
{
config
=
Config
(
configMapMLMCExperiment
);
mainProgram
=
std
::
make_unique
<
MainProgram
>
();
mainProgram
->
Initialize
();
}
};
TEST
(
MainProgram
,
TestConstructor
)
{
std
::
unique_ptr
<
MainProgram
>
mainProgram
=
std
::
make_unique
<
MainProgram
>
();
ASSERT_EQ
(
mainProgram
->
problemName
,
""
);
ASSERT_EQ
(
mainProgram
->
modelName
,
""
);
ASSERT_EQ
(
mainProgram
->
fieldName
,
""
);
ASSERT_EQ
(
mainProgram
->
verbose
,
0
);
ASSERT_EQ
(
mainProgram
->
epsilon
,
0.1
);
}
TEST
(
MainProgram
,
TestCreateMeshes
)
{
TEST_F
(
TestMainProgram
,
TestRunMLMCExperiment
)
{
mainProgram
->
Run
();
}
int
main
(
int
argc
,
char
**
argv
)
{
InitGoogleTest
(
&
argc
,
argv
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment