MaMiCo 1.2
Loading...
Searching...
No Matches
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
11namespace coupling {
12namespace configurations {
14}
15} // namespace coupling
16
24public:
26 TimeIntegrationConfiguration() : _pint_domains(1), _pint_iterations(1), _auto_iteration(false), _visc_multiplier(1), _isValid(true) {}
27
30
32 int buf;
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;
53 if (value == "auto") {
54 _auto_iteration = true;
55 _pint_iterations = 0;
56 } else {
57 _auto_iteration = false;
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
92private:
93 int _pint_domains;
94 int _pint_iterations;
95 bool _auto_iteration;
96 double _visc_multiplier;
97
98 bool _isValid;
99};
reads time integration configuration
Definition TimeIntegrationConfiguration.h:23
void parseSubtag(tinyxml2::XMLElement *node)
Definition TimeIntegrationConfiguration.h:31
virtual ~TimeIntegrationConfiguration()
Definition TimeIntegrationConfiguration.h:29
std::string getTag() const
Definition TimeIntegrationConfiguration.h:79
TimeIntegrationConfiguration()
Definition TimeIntegrationConfiguration.h:26
bool isValid() const
Definition TimeIntegrationConfiguration.h:84
Definition Configuration.h:22
static void readStringMandatory(std::string &storage, tinyxml2::XMLElement *node, std::string tag)
Definition ParseConfiguration.h:201
static void readIntMandatory(int &storage, tinyxml2::XMLElement *node, std::string tag)
Definition ParseConfiguration.h:115
static void readDoubleOptional(double &storage, tinyxml2::XMLElement *node, std::string tag)
Definition ParseConfiguration.h:96
Definition tinyxml2.h:1268
everything necessary for coupling operations, is defined in here
Definition AdditiveMomentumInsertion.h:15