MaMiCo 1.2
Loading...
Searching...
No Matches
PintableMacroSolver.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
7namespace coupling {
8namespace interface {
11} // namespace interface
12} // namespace coupling
13
14#include <memory>
15
31public:
32 using State = PintableMacroSolverState;
33 enum class Mode { supervising, coupling };
34
35 virtual ~PintableMacroSolver() {}
36
38 virtual std::unique_ptr<State> getState() = 0;
39
41 virtual void setState(const std::unique_ptr<State>&, int cycle = 0) = 0;
42
44 virtual std::unique_ptr<State> operator()(const std::unique_ptr<State>&, int cycle = 0) = 0;
45
47 virtual Mode getMode() const = 0;
48
50 virtual std::unique_ptr<PintableMacroSolver> getSupervisor(int num_cycles, double visc_multiplier = 1) const = 0;
51
53 virtual void print(std::ostream& os) const = 0;
54
57 virtual double get_avg_vel(const std::unique_ptr<State>& state) const { return 0; }
58 friend std::ostream& operator<<(std::ostream& os, const coupling::interface::PintableMacroSolver& s) {
59 s.print(os);
60 return os;
61 }
62};
63
68public:
69 using State = PintableMacroSolverState;
70
71 virtual std::unique_ptr<State> clone() const = 0;
72
73 virtual ~PintableMacroSolverState() {}
74
76 virtual int getSizeBytes() const = 0; //
77
79 virtual std::unique_ptr<State> operator+(const State&) = 0;
80
82 virtual std::unique_ptr<State> operator-(const State&) = 0;
83
84 friend bool operator==(const State& lhs, const State& rhs) { return lhs.__equals__(rhs); }
85
87 virtual double* getData() = 0;
88
90 virtual const double* getData() const = 0;
91
93 virtual void print(std::ostream& os) const = 0;
94
95 friend std::ostream& operator<<(std::ostream& os, const coupling::interface::PintableMacroSolverState& s) {
96 s.print(os);
97 return os;
98 }
99
100protected:
102 virtual bool __equals__(const State&) const = 0;
103};
Definition PintableMacroSolver.h:67
virtual std::unique_ptr< State > operator-(const State &)=0
virtual void print(std::ostream &os) const =0
virtual bool __equals__(const State &) const =0
virtual const double * getData() const =0
virtual std::unique_ptr< State > operator+(const State &)=0
Definition PintableMacroSolver.h:30
virtual std::unique_ptr< PintableMacroSolver > getSupervisor(int num_cycles, double visc_multiplier=1) const =0
virtual std::unique_ptr< State > getState()=0
virtual std::unique_ptr< State > operator()(const std::unique_ptr< State > &, int cycle=0)=0
virtual void setState(const std::unique_ptr< State > &, int cycle=0)=0
virtual double get_avg_vel(const std::unique_ptr< State > &state) const
Definition PintableMacroSolver.h:57
virtual void print(std::ostream &os) const =0
everything necessary for coupling operations, is defined in here
Definition AdditiveMomentumInsertion.h:15