MaMiCo
1.2
Toggle main menu visibility
Loading...
Searching...
No Matches
coupling
filtering
FilterPipeline.h
1
// This file is part of the Mamico project. For conditions of distribution
2
// and use, please see the copyright notice in Mamico's main folder, or at
3
// www5.in.tum.de/mamico
4
5
#pragma once
6
7
// #define DEBUG_FILTER_PIPELINE
8
#define POST_MULTI_INSTANCE_FILTERING_YES true
9
#define POST_MULTI_INSTANCE_FILTERING_NO false
10
11
// include dependencies
12
#include "coupling/filtering/sequencing/AsymmetricalFilterJunction.h"
13
#include "coupling/filtering/sequencing/FilterJunction.h"
14
#include "coupling/filtering/sequencing/FilterSequence.h"
15
#include "tarch/configuration/ParseConfiguration.h"
16
#include "tarch/tinyxml2/tinyxml2.h"
17
18
using
tarch::configuration::ParseConfiguration
;
19
20
namespace
coupling
{
21
namespace
filtering
{
22
template
<
class
CellIndex_T,
unsigned
int
dim>
class
FilterPipeline
;
23
24
/*
25
* Used as member of FilterPipeline. Displays where that FP is used.
26
* per instance: apply filtering for each MD instance
27
* individually, before merging instances post multi instance: apply filtering
28
* after MD instances have been merged
29
*/
30
enum class
Scope { perInstance, postMultiInstance };
31
}
// namespace filtering
32
}
// namespace coupling
33
34
/*
35
* Manages different branches of filtering sequences.
36
* These filtering sequences may be interdependant by using another's sequences
37
* input or completely isolated. As this entire filtering process is applied
38
* during MD to Macro communication, it uses the MD simulation's output
39
* Macro-Cells as input and output. All configuration is made using an
40
* XML-config file and does not require recompilation when modified.
41
*
42
* @author Felix Maurer
43
*/
44
template
<
class
CellIndex_T,
unsigned
int
dim>
class
coupling::filtering::FilterPipeline
{
45
public
:
46
FilterPipeline(
const
coupling::datastructures::CellContainer<CellIndex_T, dim>
inputCells,
const
coupling::filtering::Scope scope,
47
const
tarch::utils::MultiMDService<dim>
& multiMDService,
const
char
* cfgpath);
48
49
~FilterPipeline() {
50
for
(
auto
sequence : _sequences)
51
delete
sequence;
52
// TODO: do i have to delete the _...cells as well?
53
54
#ifdef DEBUG_FILTER_PIPELINE
55
std::cout <<
"FP: FilterPipeline deconstructed."
<< std::endl;
56
#endif
57
}
58
59
/*
60
* Applies each FilterSequence in order of their appearance in the config
61
* file. Ouput of the specified output-FilterSequence will be written to
62
* _md2MacroCells.
63
*
64
* @returns The runtime of the filter pipeline in usec.
65
*/
66
double
operator()();
67
68
/*
69
* Getters for FilterSequences.
70
* Not that Junction is a subtype of Sequence, so this is how to get Junctions
71
* as well.
72
*/
73
coupling::filtering::FilterSequence<dim>
* getSequence(
const
char
* identifier)
const
;
74
std::vector<coupling::filtering::FilterSequence<dim>*> getAllSequences()
const
{
return
_sequences; }
75
76
#if (COUPLING_MD_PARALLEL == COUPLING_MD_YES)
77
/*
78
* Get MPI communicator used by all parallel filters.
79
*/
80
MPI_Comm getFilteringCommunicator() {
return
_comm; };
81
#endif
82
83
private
:
84
/*
85
* Detects errors in XML config file.
86
*/
87
bool
configIsValid(
ParseConfiguration::XMLConfiguration
& xmlConfig);
88
89
/*
90
* Interprets configuration of sequences and intializes them. Parameters
91
* known:
92
* -"input": Name of another FilterSequence previously defined (optional,
93
* uses MD output (i.e. _md2MacroCells) by default)
94
*
95
* Also detects which sequence will be used as output to this FilterPipeline.
96
*/
97
void
loadSequencesFromXML(
tinyxml2::XMLElement
* metaNode);
98
99
/*
100
* Input cells within the local, md2macro, ghost layer excluding domain
101
*/
102
std::vector<coupling::datastructures::CouplingCell<dim>*> _md2MacroCells;
103
/*
104
* Input cells that do not match the criteria to be in _md2MacroCells.
105
*/
106
std::vector<coupling::datastructures::CouplingCell<dim>*> _outerCells;
107
108
ParseConfiguration::XMLConfiguration
_config;
109
110
/*
111
* Scope in which this FilterPipeline is applied. Cf. coupling::Scope
112
* definition.
113
*/
114
const
coupling::filtering::Scope _scope;
115
116
std::vector<coupling::filtering::FilterSequence<dim>*> _sequences;
117
118
#if (COUPLING_MD_PARALLEL == COUPLING_MD_YES)
119
MPI_Comm _comm;
120
#endif
121
};
122
123
// include implementation of header
124
#include "FilterPipeline.cpph"
coupling::datastructures::CellContainer
provides access to the coupling cells. Base class for the class coupling::datastructures::LinkedCellC...
Definition
CellContainer.h:26
coupling::filtering::FilterPipeline
Definition
FilterPipeline.h:44
coupling::filtering::FilterSequence
Definition
FilterSequence.h:51
tarch::configuration::ParseConfiguration::XMLConfiguration
Definition
ParseConfiguration.h:26
tarch::configuration::ParseConfiguration
Definition
ParseConfiguration.h:20
tarch::utils::MultiMDService
Definition
MultiMDService.h:30
tinyxml2::XMLElement
Definition
tinyxml2.h:1124
coupling::filtering
Definition
FilterPipeline.h:21
coupling
everything necessary for coupling operations, is defined in here
Definition
AdditiveMomentumInsertion.h:15
Generated by
1.17.0