From 47f22646b44cb880b405f6b97faebff3dd8312d0 Mon Sep 17 00:00:00 2001
From: Kutscher <kutscher@irmb.tu-bs.de>
Date: Fri, 28 Apr 2023 22:04:54 +0200
Subject: [PATCH] refactoring of pythonbindings

---
 apps/cpu/TPMSRow/TPMSRow.cpp                  | 112 +++++++++---------
 .../src/cpu/submodules/boundaryconditions.cpp |  32 ++---
 .../simulationconfig/AbstractLBMSystem.h      |   6 +-
 .../include/simulationconfig/D3Q27LBMSystem.h |   4 +-
 .../include/simulationconfig/Simulation.h     |  14 +--
 .../simulationconfig/src/D3Q27LBMSystem.cpp   |   4 +-
 src/cpu/simulationconfig/src/Simulation.cpp   |  47 ++++----
 7 files changed, 109 insertions(+), 110 deletions(-)

diff --git a/apps/cpu/TPMSRow/TPMSRow.cpp b/apps/cpu/TPMSRow/TPMSRow.cpp
index 15df6e243..9adcaadde 100644
--- a/apps/cpu/TPMSRow/TPMSRow.cpp
+++ b/apps/cpu/TPMSRow/TPMSRow.cpp
@@ -78,46 +78,46 @@ void run(string configname)
 
         ////////////////////////////////////////////////////////////////////////
         // BC Adapter
-        // BCAdapterPtr gradientAdapter(new VelocityBCAdapter(true, true, true, pdxC, pdyC, pdzC, 0.0,
+        // BCPtr gradientAdapter(new VelocityBC(true, true, true, pdxC, pdyC, pdzC, 0.0,
         // BCFunction::INFCONST));
-        // gradientAdapter->setBcAlgorithm(BCAlgorithmPtr(new FluxBCAlgorithm()));
-        // BCAdapterPtr cubeNoslipAdapter(new NoSlipBCAdapter(1));
-        SPtr<BCAdapter> tpmsNoslipAdapter(new NoSlipBCAdapter());
-        //SPtr<BCAdapter> funnelNoslipAdapter(new NoSlipBCAdapter(1));
-
-           // SPtr<BCAdapter> xMinApr(new DensityBCAdapter(0.0000001));
-         SPtr<BCAdapter> xMinApr(new DensityBCAdapter());
-        //  SPtr<BCAdapter> xMinApr(new VelocityBCAdapter(vx, 0., BCFunction::INFCONST, 0., 0., BCFunction::INFCONST,
+        // gradientAdapter->setBcAlgorithm(BCStrategyPtr(new FluxBCStrategy()));
+        // BCPtr cubeNoslipAdapter(new NoSlipBC(1));
+        SPtr<BC> tpmsNoslipAdapter(new NoSlipBC());
+        //SPtr<BC> funnelNoslipAdapter(new NoSlipBC(1));
+
+           // SPtr<BC> xMinApr(new DensityBC(0.0000001));
+         SPtr<BC> xMinApr(new DensityBC());
+        //  SPtr<BC> xMinApr(new VelocityBC(vx, 0., BCFunction::INFCONST, 0., 0., BCFunction::INFCONST,
          //  0.,0., BCFunction::INFCONST));
 
-        SPtr<BCAdapter> xMaxApr(new DensityBCAdapter(0.));
-        //SPtr<BCAdapter> yMinApr(new NoSlipBCAdapter(1));
-        //SPtr<BCAdapter> yMaxApr(new NoSlipBCAdapter(1));
-        SPtr<BCAdapter> zMinApr(new NoSlipBCAdapter());
-        SPtr<BCAdapter> zMaxApr(new NoSlipBCAdapter());
+        SPtr<BC> xMaxApr(new DensityBC(0.));
+        //SPtr<BC> yMinApr(new NoSlipBC(1));
+        //SPtr<BC> yMaxApr(new NoSlipBC(1));
+        SPtr<BC> zMinApr(new NoSlipBC());
+        SPtr<BC> zMaxApr(new NoSlipBC());
 
-        //SPtr<BCAdapter> zMinFunnelApr(new NoSlipBCAdapter(1));
-        //SPtr<BCAdapter> zMaxFunnelApr(new NoSlipBCAdapter(1));
+        //SPtr<BC> zMinFunnelApr(new NoSlipBC(1));
+        //SPtr<BC> zMaxFunnelApr(new NoSlipBC(1));
 
-         //tpmsNoslipAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithm()));
-         //tpmsNoslipAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new ThinWallNoSlipBCAlgorithm()));
+         //tpmsNoslipAdapter->setBcAlgorithm(BCStrategyPtr(new NoSlipBCStrategy()));
+         //tpmsNoslipAdapter->setBcAlgorithm(SPtr<BCStrategy>(new ThinWallNoSlipBCStrategy()));
 
-        tpmsNoslipAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
-        //funnelNoslipAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
+        tpmsNoslipAdapter->setBCStrategy(SPtr<BCStrategy>(new NoSlipBCStrategy()));
+        //funnelNoslipAdapter->setBcAlgorithm(SPtr<BCStrategy>(new NoSlipBCStrategy()));
 
-         //xMinApr->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm()));
-        // xMinApr->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm()));
-         xMinApr->setBcAlgorithm(SPtr<BCAlgorithm>(new NonReflectingInflowBCAlgorithm())); 
-        // xMinApr->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityWithDensityBCAlgorithm()));
-         //xMaxApr->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm()));
-         xMaxApr->setBcAlgorithm(SPtr<BCAlgorithm>(new NonReflectingOutflowBCAlgorithmWithRelaxation()));
-        //yMinApr->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
-        //yMaxApr->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
-        zMinApr->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
-        zMaxApr->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
+         //xMinApr->setBcAlgorithm(SPtr<BCStrategy>(new NonEqDensityBCStrategy()));
+        // xMinApr->setBcAlgorithm(SPtr<BCStrategy>(new VelocityBCStrategy()));
+        xMinApr->setBCStrategy(SPtr<BCStrategy>(new NonReflectingInflowBCStrategy())); 
+        // xMinApr->setBcAlgorithm(SPtr<BCStrategy>(new VelocityWithDensityBCStrategy()));
+         //xMaxApr->setBcAlgorithm(SPtr<BCStrategy>(new NonEqDensityBCStrategy()));
+         xMaxApr->setBCStrategy(SPtr<BCStrategy>(new NonReflectingOutflowWithRelaxationBCStrategy()));
+        //yMinApr->setBcAlgorithm(SPtr<BCStrategy>(new NoSlipBCStrategy()));
+        //yMaxApr->setBcAlgorithm(SPtr<BCStrategy>(new NoSlipBCStrategy()));
+         zMinApr->setBCStrategy(SPtr<BCStrategy>(new NoSlipBCStrategy()));
+         zMaxApr->setBCStrategy(SPtr<BCStrategy>(new NoSlipBCStrategy()));
 
-        //zMinFunnelApr->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
-        //zMaxFunnelApr->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
+        //zMinFunnelApr->setBcAlgorithm(SPtr<BCStrategy>(new NoSlipBCStrategy()));
+        //zMaxFunnelApr->setBcAlgorithm(SPtr<BCStrategy>(new NoSlipBCStrategy()));
 
         ////////////////////////////////////////////////////////////////////////
         // BC visitor
@@ -160,8 +160,8 @@ void run(string configname)
         // 		 kernel->setWithForcing(true);
         //
         // SPtr<ThinWallBCProcessor> bcProc(new ThinWallBCProcessor());
-        SPtr<BCProcessor> bcProc(new BCProcessor());
-        kernel->setBCProcessor(bcProc);
+         SPtr<BCSet> bcProc(new BCSet());
+         kernel->setBCSet(bcProc);
 
 
             SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(
@@ -170,10 +170,10 @@ void run(string configname)
         //////////////////////////////////////////////////////////////////////////
         // restart
         SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart));
-        SPtr<MPIIOMigrationCoProcessor> migCoProcessor(
-            new MPIIOMigrationCoProcessor(grid, mSch,metisVisitor, pathname + "/mig", comm));
-        migCoProcessor->setLBMKernel(kernel);
-        migCoProcessor->setBCProcessor(bcProc);
+        SPtr<MPIIOMigrationSimulationObserver> migSimulationObserver(
+            new MPIIOMigrationSimulationObserver(grid, mSch,metisVisitor, pathname + "/mig", comm));
+        migSimulationObserver->setLBMKernel(kernel);
+        migSimulationObserver->setBCSet(bcProc);
         //////////////////////////////////////////////////////////////////////////
 
         if (newStart) {
@@ -247,10 +247,10 @@ void run(string configname)
             GenBlocksGridVisitor genBlocks(gridCube);
             grid->accept(genBlocks);
 
-            SPtr<CoProcessor> ppblocks(new WriteBlocksCoProcessor(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname,
+            SPtr<SimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname,
                                                                   WbWriterVtkXmlBinary::getInstance(), comm));
 
-            ppblocks->process(0);
+            ppblocks->update(0);
 
             // GbObject3DPtr solidcube(new GbCuboid3D(0, g_minX2, g_minX3, TPMSL[0], g_maxX2, g_maxX3));
             // if (myid == 0) GbSystem3D::writeGeoObject(solidcube.get(), pathname + "/geo/solidcube",
@@ -363,7 +363,7 @@ void run(string configname)
             PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
             grid->accept(pqPartVisitor);
 
-            ppblocks->process(0);
+            ppblocks->update(0);
             ppblocks.reset();
 
             //////////////////////////////////////////////////////////////////////////
@@ -419,8 +419,8 @@ void run(string configname)
             // boundary conditions grid
             {
                 SPtr<UbScheduler> geoSch(new UbScheduler(1));
-                SPtr<CoProcessor> ppgeo(new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm));
-                ppgeo->process(0);
+                SPtr<SimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm));
+                ppgeo->update(0);
                 ppgeo.reset();
             }
             if (myid == 0)
@@ -440,7 +440,7 @@ void run(string configname)
                 UBLOG(logINFO, "path = " << pathname);
             }
 
-            migCoProcessor->restart((int)restartStep);
+            migSimulationObserver->restart((int)restartStep);
             grid->setTimeStep(restartStep);
 
             if (myid == 0)
@@ -456,11 +456,11 @@ void run(string configname)
         
 
         SPtr<UbScheduler> visSch(new UbScheduler(outTime/*,beginTime,endTime*/));
-        SPtr<CoProcessor> pp(new WriteMacroscopicQuantitiesCoProcessor(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
+        SPtr<SimulationObserver> pp(new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
         
         SPtr<UbScheduler> tavSch(new UbScheduler(100, timeAvStart, timeAvStop));
-        SPtr<TimeAveragedValuesCoProcessor> tav(new TimeAveragedValuesCoProcessor(grid, pathname, WbWriterVtkXmlBinary::getInstance(), tavSch, comm,
-        TimeAveragedValuesCoProcessor::Density | TimeAveragedValuesCoProcessor::Velocity | TimeAveragedValuesCoProcessor::Fluctuations));
+        SPtr<TimeAveragedValuesSimulationObserver> tav(new TimeAveragedValuesSimulationObserver(grid, pathname, WbWriterVtkXmlBinary::getInstance(), tavSch, comm,
+        TimeAveragedValuesSimulationObserver::Density | TimeAveragedValuesSimulationObserver::Velocity | TimeAveragedValuesSimulationObserver::Fluctuations));
         tav->setWithGhostLayer(true);        
         
         SPtr<UbScheduler> nuSch(new UbScheduler(100, 0, endTime / 2));
@@ -471,25 +471,25 @@ void run(string configname)
         fnu.DefineConst("T", endTime);
         fnu.DefineConst("L", (UnitEdgeLength / dx));
         fnu.DefineConst("u", vx);
-        SPtr<CoProcessor> nupr(new DecreaseViscosityCoProcessor(grid, nuSch, &fnu, comm));
+        SPtr<SimulationObserver> nupr(new DecreaseViscositySimulationObserver(grid, nuSch, &fnu, comm));
 
         SPtr<UbScheduler> nupsSch(new UbScheduler(100, 100, 100000000));
-        SPtr<CoProcessor> npr(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm));
+        SPtr<SimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm));
 
         //omp_set_num_threads(numOfThreads);
         numOfThreads = 1;
         SPtr<UbScheduler> stepGhostLayer(visSch);
-        SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, int(endTime)));
+        SPtr<Simulation> calculator(new Simulation(grid, stepGhostLayer, int(endTime)));
 
-        //calculator->addCoProcessor(nupr);
-        calculator->addCoProcessor(npr);
-        calculator->addCoProcessor(pp);
-        calculator->addCoProcessor(migCoProcessor);
-        calculator->addCoProcessor(tav);
+        //calculator->addSimulationObserver(nupr);
+        calculator->addSimulationObserver(npr);
+        calculator->addSimulationObserver(pp);
+        calculator->addSimulationObserver(migSimulationObserver);
+        calculator->addSimulationObserver(tav);
 
         if (myid == 0)
             UBLOG(logINFO, "Simulation-start");
-        calculator->calculate();
+        calculator->run();
         if (myid == 0)
             UBLOG(logINFO, "Simulation-end");
     } catch (std::exception &e) {
diff --git a/pythonbindings/src/cpu/submodules/boundaryconditions.cpp b/pythonbindings/src/cpu/submodules/boundaryconditions.cpp
index d7cd0b578..40ad9f0a9 100644
--- a/pythonbindings/src/cpu/submodules/boundaryconditions.cpp
+++ b/pythonbindings/src/cpu/submodules/boundaryconditions.cpp
@@ -32,14 +32,14 @@
 //=======================================================================================
 #include <pybind11/pybind11.h>
 #include <pybind11/stl.h>
-#include <BoundaryConditions/DensityBCAdapter.h>
-#include <BoundaryConditions/NonReflectingOutflowBCAlgorithm.h>
-#include <BoundaryConditions/BCAdapter.h>
-#include <BoundaryConditions/NoSlipBCAdapter.h>
-#include <BoundaryConditions/VelocityBCAdapter.h>
-#include <BoundaryConditions/NoSlipBCAlgorithm.h>
-#include <BoundaryConditions/VelocityBCAlgorithm.h>
-#include <BoundaryConditions/HighViscosityNoSlipBCAlgorithm.h>
+#include <BoundaryConditions/DensityBC.h>
+#include <BoundaryConditions/NonReflectingOutflowBCStrategy.h>
+#include <BoundaryConditions/BC.h>
+#include <BoundaryConditions/NoSlipBC.h>
+#include <BoundaryConditions/VelocityBC.h>
+#include <BoundaryConditions/NoSlipBCStrategy.h>
+#include <BoundaryConditions/VelocityBCStrategy.h>
+#include <BoundaryConditions/HighViscosityNoSlipBCStrategy.h>
 
 namespace boundaryconditions
 {
@@ -47,8 +47,8 @@ namespace boundaryconditions
     using namespace py::literals;
 
     template<class adapter, class algorithm,
-            class = std::enable_if_t<std::is_base_of<BCAdapter, adapter>::value>,
-            class = std::enable_if_t<std::is_base_of<BCAlgorithm, algorithm>::value>>
+            class = std::enable_if_t<std::is_base_of<BC, adapter>::value>,
+            class = std::enable_if_t<std::is_base_of<BCStrategy, algorithm>::value>>
     class PyBoundaryCondition : public adapter
     {
     public:
@@ -60,22 +60,22 @@ namespace boundaryconditions
     };
 
     template<class adapter, class algorithm>
-    using bc_class = py::class_<PyBoundaryCondition<adapter, algorithm>, BCAdapter,
+    using bc_class = py::class_<PyBoundaryCondition<adapter, algorithm>, BC,
             std::shared_ptr<PyBoundaryCondition<adapter, algorithm>>>;
 
     void makeModule(py::module_ &parentModule)
     {
         py::module_ bcModule = parentModule.def_submodule("boundaryconditions");
 
-        auto _ = py::class_<BCAdapter, std::shared_ptr<BCAdapter>>(bcModule, "BCAdapter");
+        auto _ = py::class_<BC, std::shared_ptr<BC>>(bcModule, "BC");
 
-        bc_class<NoSlipBCAdapter, NoSlipBCAlgorithm>(bcModule, "NoSlipBoundaryCondition")
+        bc_class<NoSlipBC, NoSlipBCStrategy>(bcModule, "NoSlipBoundaryCondition")
                 .def(py::init());
 
-        bc_class<NoSlipBCAdapter, HighViscosityNoSlipBCAlgorithm>(bcModule, "HighViscosityNoSlipBoundaryCondition")
+        bc_class<NoSlipBC, HighViscosityNoSlipBCStrategy>(bcModule, "HighViscosityNoSlipBoundaryCondition")
                 .def(py::init());
 
-        bc_class<VelocityBCAdapter, VelocityBCAlgorithm>(bcModule, "VelocityBoundaryCondition")
+        bc_class<VelocityBC, VelocityBCStrategy>(bcModule, "VelocityBoundaryCondition")
                 .def(py::init())
                 .def(py::init<bool &, bool &, bool &, mu::Parser &, real &, real &>(),
                      "vx1"_a, "vx2"_a, "vx3"_a,
@@ -89,7 +89,7 @@ namespace boundaryconditions
                      "vx2"_a, "vx2_start_time"_a, "vx2_end_time"_a,
                      "vx3"_a, "vx3_start_time"_a, "vx3_end_time"_a);
 
-        bc_class<DensityBCAdapter, NonReflectingOutflowBCAlgorithm>(bcModule, "NonReflectingOutflow")
+        bc_class<DensityBC, NonReflectingOutflowBCStrategy>(bcModule, "NonReflectingOutflow")
                 .def(py::init());
     }
 
diff --git a/src/cpu/simulationconfig/include/simulationconfig/AbstractLBMSystem.h b/src/cpu/simulationconfig/include/simulationconfig/AbstractLBMSystem.h
index 156649c6f..77ab8798d 100644
--- a/src/cpu/simulationconfig/include/simulationconfig/AbstractLBMSystem.h
+++ b/src/cpu/simulationconfig/include/simulationconfig/AbstractLBMSystem.h
@@ -2,7 +2,7 @@
 #define VIRTUALFLUIDSPYTHONBINDINGS_ABSTRACTLBMSYSTEM_H
 
 #include <Interactors/Interactor3D.h>
-#include <BoundaryConditions/BCAdapter.h>
+#include <BoundaryConditions/BC.h>
 #include <memory>
 
 class AbstractLBMSystem {
@@ -19,11 +19,11 @@ public:
 
     virtual std::shared_ptr<Interactor3D>
     makeInteractor(std::shared_ptr<GbObject3D> object, std::shared_ptr<Grid3D> grid,
-                   std::shared_ptr<BCAdapter> bcAdapter, int type) = 0;
+                   std::shared_ptr<BC> bcAdapter, int type) = 0;
 
     virtual std::shared_ptr<Interactor3D>
     makeInteractor(std::shared_ptr<GbObject3D> object, std::shared_ptr<Grid3D> grid,
-                   std::shared_ptr<BCAdapter> bcAdapter, int type, Interactor3D::Accuracy accuracy) = 0;
+                   std::shared_ptr<BC> bcAdapter, int type, Interactor3D::Accuracy accuracy) = 0;
 
 };
 
diff --git a/src/cpu/simulationconfig/include/simulationconfig/D3Q27LBMSystem.h b/src/cpu/simulationconfig/include/simulationconfig/D3Q27LBMSystem.h
index c9883a61a..374d64318 100644
--- a/src/cpu/simulationconfig/include/simulationconfig/D3Q27LBMSystem.h
+++ b/src/cpu/simulationconfig/include/simulationconfig/D3Q27LBMSystem.h
@@ -16,10 +16,10 @@ public:
     makeInteractor(std::shared_ptr<GbObject3D> object, std::shared_ptr<Grid3D> grid, int type) override;
 
     std::shared_ptr<Interactor3D> makeInteractor(std::shared_ptr<GbObject3D> object, std::shared_ptr<Grid3D> grid,
-                                                 std::shared_ptr<BCAdapter> bcAdapter, int type) override;
+                                                 std::shared_ptr<BC> bcAdapter, int type) override;
 
     std::shared_ptr<Interactor3D> makeInteractor(std::shared_ptr<GbObject3D> object, std::shared_ptr<Grid3D> grid,
-                                                 std::shared_ptr<BCAdapter> bcAdapter, int type,
+                                                 std::shared_ptr<BC> bcAdapter, int type,
                                                  Interactor3D::Accuracy accuracy) override;
 };
 
diff --git a/src/cpu/simulationconfig/include/simulationconfig/Simulation.h b/src/cpu/simulationconfig/include/simulationconfig/Simulation.h
index 63298db81..ba5c5eb27 100644
--- a/src/cpu/simulationconfig/include/simulationconfig/Simulation.h
+++ b/src/cpu/simulationconfig/include/simulationconfig/Simulation.h
@@ -9,9 +9,9 @@
 
 #include <geometry3d/GbPoint3D.h>
 #include <Interactors/Interactor3D.h>
-#include <BoundaryConditions/BCAdapter.h>
+#include <BoundaryConditions/BC.h>
 #include <Visitors/BoundaryConditionsBlockVisitor.h>
-#include <CoProcessors/CoProcessor.h>
+#include <SimulationObservers/SimulationObserver.h>
 #include <LBM/LBMUnitConverter.h>
 #include "KernelFactory.h"
 #include "AbstractLBMSystem.h"
@@ -31,7 +31,7 @@ private:
     std::shared_ptr<Grid3D> grid;
     std::vector<std::shared_ptr<Interactor3D>> interactors;
     BoundaryConditionsBlockVisitor bcVisitor;
-    std::set<std::shared_ptr<BCAdapter>> registeredAdapters;
+    std::set<std::shared_ptr<BC>> registeredAdapters;
 
     std::shared_ptr<LBMKernelConfiguration> kernelConfig;
     std::shared_ptr<RuntimeParameters> simulationParameters;
@@ -57,10 +57,10 @@ public:
 
     void setKernelConfiguration(const std::shared_ptr<LBMKernelConfiguration> &kernel);
 
-    void addObject(const std::shared_ptr<GbObject3D> &object, const std::shared_ptr<BCAdapter> &bcAdapter, int state,
+    void addObject(const std::shared_ptr<GbObject3D> &object, const std::shared_ptr<BC> &bcAdapter, int state,
                    const std::string &folderPath);
 
-    void addBCAdapter(const std::shared_ptr<BCAdapter> &bcAdapter);
+    void addBC(const std::shared_ptr<BC> &bcAdapter);
 
     void run();
 
@@ -73,7 +73,7 @@ private:
 
     void writeBoundaryConditions() const;
 
-    std::shared_ptr<CoProcessor> makeMacroscopicQuantitiesCoProcessor(const std::shared_ptr<LBMUnitConverter> &converter,
+    std::shared_ptr<SimulationObserver> makeMacroscopicQuantitiesSimulationObserver(const std::shared_ptr<LBMUnitConverter> &converter,
                                                            const std::shared_ptr<UbScheduler> &visualizationScheduler) const;
 
     static std::shared_ptr<LBMUnitConverter> makeLBMUnitConverter();
@@ -93,7 +93,7 @@ private:
 
     void initializeDistributions();
 
-    std::shared_ptr<CoProcessor> makeNupsCoProcessor() const;
+    std::shared_ptr<SimulationObserver> makeNupsSimulationObserver() const;
 };
 
 #endif
\ No newline at end of file
diff --git a/src/cpu/simulationconfig/src/D3Q27LBMSystem.cpp b/src/cpu/simulationconfig/src/D3Q27LBMSystem.cpp
index b1a01ca7b..1e34e91c7 100644
--- a/src/cpu/simulationconfig/src/D3Q27LBMSystem.cpp
+++ b/src/cpu/simulationconfig/src/D3Q27LBMSystem.cpp
@@ -20,14 +20,14 @@ D3Q27LBMSystem::makeInteractor(std::shared_ptr<GbObject3D> object, std::shared_p
 
 std::shared_ptr<Interactor3D>
 D3Q27LBMSystem::makeInteractor(std::shared_ptr<GbObject3D> object, std::shared_ptr<Grid3D> grid,
-                               std::shared_ptr<BCAdapter> bcAdapter, int type)
+                               std::shared_ptr<BC> bcAdapter, int type)
 {
     return std::shared_ptr<Interactor3D>(new D3Q27Interactor(object, grid, bcAdapter, type));
 }
 
 std::shared_ptr<Interactor3D>
 D3Q27LBMSystem::makeInteractor(std::shared_ptr<GbObject3D> object, std::shared_ptr<Grid3D> grid,
-                               std::shared_ptr<BCAdapter> bcAdapter, int type, Interactor3D::Accuracy accuracy)
+                               std::shared_ptr<BC> bcAdapter, int type, Interactor3D::Accuracy accuracy)
 {
     return std::shared_ptr<Interactor3D>(new D3Q27Interactor(object, grid, bcAdapter, type, accuracy));
 }
diff --git a/src/cpu/simulationconfig/src/Simulation.cpp b/src/cpu/simulationconfig/src/Simulation.cpp
index 098f913d6..8fd14885d 100644
--- a/src/cpu/simulationconfig/src/Simulation.cpp
+++ b/src/cpu/simulationconfig/src/Simulation.cpp
@@ -10,15 +10,14 @@
 #include <geometry3d/GbCuboid3D.h>
 #include <geometry3d/GbSystem3D.h>
 
-#include <BoundaryConditions/BCProcessor.h>
-#include <CoProcessors/CoProcessor.h>
-#include <CoProcessors/NUPSCounterCoProcessor.h>
-#include <CoProcessors/WriteBlocksCoProcessor.h>
-#include <CoProcessors/WriteBoundaryConditionsCoProcessor.h>
-#include <CoProcessors/WriteMacroscopicQuantitiesCoProcessor.h>
-#include <Grid/BasicCalculator.h>
-#include <Grid/Calculator.h>
-#include <Grid/Grid3D.h>
+#include <BoundaryConditions/BCSet.h>
+#include <SimulationObservers/SimulationObserver.h>
+#include <SimulationObservers/NUPSCounterSimulationObserver.h>
+#include <SimulationObservers/WriteBlocksSimulationObserver.h>
+#include <SimulationObservers/WriteBoundaryConditionsSimulationObserver.h>
+#include <SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.h>
+#include <Simulation/Simulation.h>
+#include <Simulation/Grid3D.h>
 #include <Interactors/InteractorsHelper.h>
 #include <LBM/CompressibleOffsetMomentsInterpolationProcessor.h>
 #include <LBM/LBMKernel.h>
@@ -61,7 +60,7 @@ void Simulation::setRuntimeParameters(std::shared_ptr<RuntimeParameters> paramet
 }
 
 void
-Simulation::addObject(const std::shared_ptr<GbObject3D> &object, const std::shared_ptr<BCAdapter> &bcAdapter, int state,
+Simulation::addObject(const std::shared_ptr<GbObject3D> &object, const std::shared_ptr<BCA> &bcAdapter, int state,
                       const std::string &folderPath)
 {
     const bool is_in = registeredAdapters.find(bcAdapter) != registeredAdapters.end();
@@ -72,7 +71,7 @@ Simulation::addObject(const std::shared_ptr<GbObject3D> &object, const std::shar
     GbSystem3D::writeGeoObject(object, writerConfig.outputPath + folderPath, writerConfig.getWriter());
 }
 
-void Simulation::addBCAdapter(const std::shared_ptr<BCAdapter> &bcAdapter)
+void Simulation::addBCAdapter(const std::shared_ptr<BC> &bcAdapter)
 {
     registeredAdapters.insert(bcAdapter);
     this->bcVisitor.addBC(bcAdapter);
@@ -150,15 +149,15 @@ void Simulation::run()
 #endif
 
     auto visualizationScheduler = std::make_shared<UbScheduler>(simulationParameters->timeStepLogInterval);
-    auto mqCoProcessor = makeMacroscopicQuantitiesCoProcessor(converter,
+    auto mqSimulationObserver = makeMacroscopicQuantitiesSimulationObserver(converter,
                                                               visualizationScheduler);
 
-    auto nupsCoProcessor = makeNupsCoProcessor();
+    auto nupsSimulationObserver = makeNupsSimulationObserver();
 
     auto calculator = std::make_shared<BasicCalculator>(grid, visualizationScheduler,
                                                         simulationParameters->numberOfTimeSteps);
-    calculator->addCoProcessor(nupsCoProcessor);
-    calculator->addCoProcessor(mqCoProcessor);
+    calculator->addSimulationObserver(nupsSimulationObserver);
+    calculator->addSimulationObserver(mqSimulationObserver);
 
     if (isMainProcess()) UBLOG(logINFO, "Simulation-start")
     calculator->calculate();
@@ -223,7 +222,7 @@ Simulation::makeLBMUnitConverter()
 void Simulation::writeBoundaryConditions() const
 {
     auto geoSch = std::make_shared<UbScheduler>(1);
-    WriteBoundaryConditionsCoProcessor ppgeo(grid, geoSch, writerConfig.outputPath, writerConfig.getWriter(),
+    WriteBoundaryConditionsSimulationObserver ppgeo(grid, geoSch, writerConfig.outputPath, writerConfig.getWriter(),
                                              communicator);
     ppgeo.process(0);
 }
@@ -232,7 +231,7 @@ void Simulation::writeBlocksToFile() const
 {
     UBLOG(logINFO, "Write block grid to VTK-file")
     auto scheduler = std::make_shared<UbScheduler>(1);
-    auto ppblocks = std::make_shared<WriteBlocksCoProcessor>(grid,
+    auto ppblocks = std::make_shared<WriteBlocksSimulationObserver>(grid,
                                                              scheduler,
                                                              writerConfig.outputPath,
                                                              writerConfig.getWriter(),
@@ -272,23 +271,23 @@ void Simulation::initializeDistributions()
     grid->accept(initVisitor);
 }
 
-std::shared_ptr<CoProcessor>
-Simulation::makeMacroscopicQuantitiesCoProcessor(const std::shared_ptr<LBMUnitConverter> &converter,
+std::shared_ptr<SimulationObserver>
+Simulation::makeMacroscopicQuantitiesSimulationObserver(const std::shared_ptr<LBMUnitConverter> &converter,
                                                  const std::shared_ptr<UbScheduler> &visualizationScheduler) const
 {
-    auto mqCoProcessor = std::make_shared<WriteMacroscopicQuantitiesCoProcessor>(grid, visualizationScheduler,
+    auto mqSimulationObserver = std::make_shared<WriteMacroscopicQuantitiesSimulationObserver>(grid, visualizationScheduler,
                                                                                  writerConfig.outputPath,
                                                                                  writerConfig.getWriter(),
                                                                                  converter,
                                                                                  communicator);
-    mqCoProcessor->process(0);
-    return mqCoProcessor;
+    mqSimulationObserver->process(0);
+    return mqSimulationObserver;
 }
 
-std::shared_ptr<CoProcessor> Simulation::makeNupsCoProcessor() const
+std::shared_ptr<SimulationObserver> Simulation::makeNupsSimulationObserver() const
 {
     auto scheduler = std::make_shared<UbScheduler>(100, 100);
-    return std::make_shared<NUPSCounterCoProcessor>(grid, scheduler,
+    return std::make_shared<NUPSCounterSimulationObserver>(grid, scheduler,
                                                     simulationParameters->numberOfThreads,
                                                     communicator);
 }
-- 
GitLab