MaMiCo
1.2
Toggle main menu visibility
Loading...
Searching...
No Matches
coupling
configurations
TimeIntegrationConfiguration.h
1
// Copyright (C) 2023 Helmut Schmidt University
2
// This file is part of the Mamico project. For conditions of distribution
3
// and use, please see the copyright notice in Mamico's main folder
4
5
#pragma once
6
7
#include "tarch/configuration/Configuration.h"
8
#include "tarch/configuration/ParseConfiguration.h"
9
#include <iostream>
10
11
namespace
coupling
{
12
namespace
configurations {
13
class
TimeIntegrationConfiguration
;
14
}
15
}
// namespace coupling
16
23
class
coupling::configurations::TimeIntegrationConfiguration
:
public
tarch::configuration::Configuration
{
24
public
:
26
TimeIntegrationConfiguration
() : _pint_domains(1), _pint_iterations(1), _auto_iteration(false), _visc_multiplier(1), _isValid(true) {}
27
29
virtual
~TimeIntegrationConfiguration
() {}
30
31
void
parseSubtag
(
tinyxml2::XMLElement
* node) {
32
int
buf;
33
tarch::configuration::ParseConfiguration::readIntMandatory
(buf, node,
"number-subdomains"
);
34
if
(buf <= 0) {
35
std::cout <<
"ERROR coupling::TimeIntegrationConfiguration: "
36
"number-subdomains = "
37
<< buf <<
"!"
<< std::endl;
38
_isValid =
false
;
39
exit(EXIT_FAILURE);
40
}
41
_pint_domains = buf;
42
43
if
(isPintEnabled()) {
44
#if (COUPLING_MD_PARALLEL != COUPLING_MD_YES)
45
std::cout <<
"ERROR coupling::TimeIntegrationConfiguration: PinT is enabled but COUPLING_MD_PARALLEL disabled"
<< std::endl;
46
std::cout <<
"Disable PinT in XML config, or enable BUILD_WITH_MPI in cmake."
<< std::endl;
47
_isValid =
false
;
48
exit(EXIT_FAILURE);
49
#endif
50
51
std::string value;
52
tarch::configuration::ParseConfiguration::readStringMandatory
(value, node,
"number-iterations"
);
53
if
(value ==
"auto"
) {
54
_auto_iteration =
true
;
55
_pint_iterations = 0;
56
}
else
{
57
_auto_iteration =
false
;
58
tarch::configuration::ParseConfiguration::readIntMandatory
(buf, node,
"number-iterations"
);
59
if
(buf <= 0) {
60
std::cout <<
"ERROR TimeIntegrationConfiguration::number-iterations too small!"
<< std::endl;
61
_isValid =
false
;
62
exit(EXIT_FAILURE);
63
}
64
if
(buf > _pint_domains) {
65
std::cout <<
"ERROR TimeIntegrationConfiguration::number-iterations too large!"
<< std::endl;
66
_isValid =
false
;
67
exit(EXIT_FAILURE);
68
}
69
_pint_iterations = buf;
70
}
71
72
tarch::configuration::ParseConfiguration::readDoubleOptional
(_visc_multiplier, node,
"visc-multiplier"
);
73
}
74
}
75
79
std::string
getTag
()
const
{
return
"time-integration"
; }
80
84
bool
isValid
()
const
{
return
_isValid; }
85
86
int
getPintDomains()
const
{
return
_pint_domains; }
87
bool
isPintEnabled()
const
{
return
_pint_domains > 1; }
88
int
getPintIterations()
const
{
return
_pint_iterations; }
89
bool
isAutoIteration()
const
{
return
_auto_iteration; }
90
double
getViscMultiplier()
const
{
return
_visc_multiplier; }
91
92
private
:
93
int
_pint_domains;
94
int
_pint_iterations;
95
bool
_auto_iteration;
96
double
_visc_multiplier;
97
98
bool
_isValid;
99
};
coupling::configurations::TimeIntegrationConfiguration
reads time integration configuration
Definition
TimeIntegrationConfiguration.h:23
coupling::configurations::TimeIntegrationConfiguration::parseSubtag
void parseSubtag(tinyxml2::XMLElement *node)
Definition
TimeIntegrationConfiguration.h:31
coupling::configurations::TimeIntegrationConfiguration::~TimeIntegrationConfiguration
virtual ~TimeIntegrationConfiguration()
Definition
TimeIntegrationConfiguration.h:29
coupling::configurations::TimeIntegrationConfiguration::getTag
std::string getTag() const
Definition
TimeIntegrationConfiguration.h:79
coupling::configurations::TimeIntegrationConfiguration::TimeIntegrationConfiguration
TimeIntegrationConfiguration()
Definition
TimeIntegrationConfiguration.h:26
coupling::configurations::TimeIntegrationConfiguration::isValid
bool isValid() const
Definition
TimeIntegrationConfiguration.h:84
tarch::configuration::Configuration
Definition
Configuration.h:22
tarch::configuration::ParseConfiguration::readStringMandatory
static void readStringMandatory(std::string &storage, tinyxml2::XMLElement *node, std::string tag)
Definition
ParseConfiguration.h:201
tarch::configuration::ParseConfiguration::readIntMandatory
static void readIntMandatory(int &storage, tinyxml2::XMLElement *node, std::string tag)
Definition
ParseConfiguration.h:115
tarch::configuration::ParseConfiguration::readDoubleOptional
static void readDoubleOptional(double &storage, tinyxml2::XMLElement *node, std::string tag)
Definition
ParseConfiguration.h:96
tinyxml2::XMLElement
Definition
tinyxml2.h:1124
coupling
everything necessary for coupling operations, is defined in here
Definition
AdditiveMomentumInsertion.h:15
Generated by
1.17.0