diff --git a/Python/cubeflow/simulation.py b/Python/cubeflow/simulation.py index 6db6f34a1d0a4642fe9903d3ea23122cd7a87147..628e8321975dbb3d3f7c552b1a16397327171d21 100644 --- a/Python/cubeflow/simulation.py +++ b/Python/cubeflow/simulation.py @@ -1,10 +1,9 @@ from pyfluids import Simulation -from pyfluids.boundaryconditions import NoSlipBCAlgorithm, NoSlipBCAdapter, VelocityBCAdapter, DensityBCAdapter, \ - VelocityBCAlgorithm, NonReflectingOutflowBCAlgorithm +from pyfluids.boundaryconditions import NoSlipBoundaryCondition, VelocityBoundaryCondition, DensityBoundaryCondition from pyfluids.geometry import GbCuboid3D from pyfluids.kernel import LBMKernel, KernelType -from pyfluids.parameters import PhysicalParameters, SimulationParameters, GridParameters -from pyfluids.writer import Writer, WriterType +from pyfluids.parameters import PhysicalParameters, RuntimeParameters, GridParameters +from pyfluids.writer import Writer, OutputFormat from pymuparser import Parser import os @@ -22,23 +21,23 @@ physical_params.lattice_viscosity = 0.005 grid_params = GridParameters() grid_params.number_of_nodes_per_direction = [200, 120, 120] grid_params.blocks_per_direction = [2, 2, 2] -grid_params.delta_x = 0.125 +grid_params.node_distance = 0.125 grid_params.periodic_boundary_in_x1 = False grid_params.periodic_boundary_in_x2 = True grid_params.periodic_boundary_in_x3 = True -sim_params = SimulationParameters() -sim_params.timestep_log_interval = 1000 -sim_params.number_of_timesteps = 50000 -sim_params.number_of_threads = int(os.environ.get("OMP_NUM_THREADS", 4)) +runtime_params = RuntimeParameters() +runtime_params.timestep_log_interval = 1000 +runtime_params.number_of_timesteps = 50000 +runtime_params.number_of_threads = int(os.environ.get("OMP_NUM_THREADS", 4)) def run_simulation(physical_parameters=physical_params, grid_parameters=grid_params, - sim_parameters=sim_params): - wall_thickness = 3 * grid_parameters.delta_x + runtime_parameters=runtime_params): + wall_thickness = 3 * grid_parameters.node_distance min_x, min_y, min_z = 0, 0, 0 - max_x, max_y, max_z = get_max_length(grid_parameters.number_of_nodes_per_direction, grid_parameters.delta_x) + max_x, max_y, max_z = get_max_length(grid_parameters.number_of_nodes_per_direction, grid_parameters.node_distance) bottom_wall = GbCuboid3D(min_x - wall_thickness, min_y - wall_thickness, min_z, max_x + wall_thickness, max_y + wall_thickness, min_z - wall_thickness) @@ -62,17 +61,14 @@ def run_simulation(physical_parameters=physical_params, grid_parameters=grid_par outflow_boundary = GbCuboid3D(max_x, min_y - wall_thickness, min_z - wall_thickness, max_x + wall_thickness, max_y + wall_thickness, max_z + wall_thickness) - no_slip_bc = NoSlipBCAdapter() - no_slip_bc.algorithm = NoSlipBCAlgorithm() + no_slip_bc = NoSlipBoundaryCondition() - outflow_bc = DensityBCAdapter() - outflow_bc.algorithm = NonReflectingOutflowBCAlgorithm() + outflow_bc = DensityBoundaryCondition() velocity_function = Parser() velocity_function.define_constant("u", 0.07) velocity_function.expression = "u" - velocity_bc = VelocityBCAdapter(True, False, False, velocity_function, 0, -10) - velocity_bc.algorithm = VelocityBCAlgorithm() + velocity_bc = VelocityBoundaryCondition(True, False, False, velocity_function, 0, -10) kernel = LBMKernel(KernelType.CompressibleCumulantFourthOrderViscosity) # kernel.use_forcing = True @@ -80,14 +76,14 @@ def run_simulation(physical_parameters=physical_params, grid_parameters=grid_par writer = Writer() writer.output_path = "./output" - writer.type = WriterType.BINARY + writer.output_format = OutputFormat.BINARY builder = Simulation() builder.set_writer(writer) builder.set_physical_parameters(physical_parameters) builder.set_grid_parameters(grid_parameters) - builder.set_simulation_parameters(sim_parameters) + builder.set_simulation_parameters(runtime_parameters) builder.set_kernel_config(kernel) # builder.add_object(bottom_wall, no_slip_bc, 1, "/geo/bottomWall") diff --git a/Python/liddrivencavity/simulation.py b/Python/liddrivencavity/simulation.py index 132949c46a3f4fd8a46a8af605e87afdad963f95..fc40f418f1ecac9bc6f240d1eb8f01fa2bd673ca 100644 --- a/Python/liddrivencavity/simulation.py +++ b/Python/liddrivencavity/simulation.py @@ -1,15 +1,15 @@ from pyfluids import Simulation -from pyfluids.boundaryconditions import NoSlipBCAdapter, NoSlipBCAlgorithm, VelocityBCAdapter, VelocityBCAlgorithm +from pyfluids.boundaryconditions import NoSlipBoundaryCondition, VelocityBoundaryCondition from pyfluids.geometry import GbCuboid3D from pyfluids.kernel import LBMKernel, KernelType -from pyfluids.parameters import GridParameters, PhysicalParameters, SimulationParameters -from pyfluids.writer import Writer, WriterType +from pyfluids.parameters import GridParameters, PhysicalParameters, RuntimeParameters +from pyfluids.writer import Writer, OutputFormat from pymuparser import Parser -sim_params = SimulationParameters() -sim_params.number_of_threads = 4 -sim_params.number_of_timesteps = 10000 -sim_params.timestep_log_interval = 1000 +runtime_params = RuntimeParameters() +runtime_params.number_of_threads = 4 +runtime_params.number_of_timesteps = 10000 +runtime_params.timestep_log_interval = 1000 physical_params = PhysicalParameters() physical_params.lattice_viscosity = 0.005 @@ -17,38 +17,36 @@ physical_params.lattice_viscosity = 0.005 grid_params = GridParameters() grid_params.number_of_nodes_per_direction = [64, 64, 64] grid_params.blocks_per_direction = [2, 2, 2] -grid_params.delta_x = 1 / 10 +grid_params.node_distance = 1 / 10 -def run_simulation(physical_params=physical_params, grid_params=grid_params, sim_params=sim_params): +def run_simulation(physical_params=physical_params, grid_params=grid_params, runtime_params=runtime_params): simulation = Simulation() kernel = LBMKernel(KernelType.CompressibleCumulantFourthOrderViscosity) writer = Writer() - writer.type = WriterType.BINARY writer.output_path = "./output" + writer.output_format = OutputFormat.BINARY simulation.set_grid_parameters(grid_params) simulation.set_physical_parameters(physical_params) - simulation.set_simulation_parameters(sim_params) + simulation.set_simulation_parameters(runtime_params) simulation.set_kernel_config(kernel) simulation.set_writer(writer) - no_slip_bc_adapter = NoSlipBCAdapter() - no_slip_bc_adapter.algorithm = NoSlipBCAlgorithm() + no_slip_bc_adapter = NoSlipBoundaryCondition() fct = Parser() fct.expression = "u" fct.define_constant("u", 0.005) - velocity_bc_adapter = VelocityBCAdapter(True, True, False, fct, 0, -10.0) - velocity_bc_adapter.algorithm = VelocityBCAlgorithm() + velocity_bc_adapter = VelocityBoundaryCondition(True, True, False, fct, 0, -10.0) g_min_x1, g_min_x2, g_min_x3 = 0, 0, 0 - g_max_x1 = grid_params.number_of_nodes_per_direction[0] * grid_params.delta_x - g_max_x2 = grid_params.number_of_nodes_per_direction[1] * grid_params.delta_x - g_max_x3 = grid_params.number_of_nodes_per_direction[2] * grid_params.delta_x + g_max_x1 = grid_params.number_of_nodes_per_direction[0] * grid_params.node_distance + g_max_x2 = grid_params.number_of_nodes_per_direction[1] * grid_params.node_distance + g_max_x3 = grid_params.number_of_nodes_per_direction[2] * grid_params.node_distance - dx = grid_params.delta_x + dx = grid_params.node_distance wall_x_min = GbCuboid3D(g_min_x1 - dx, g_min_x2 - dx, g_min_x3 - dx, g_min_x1, g_max_x2 + dx, g_max_x3) wall_x_max = GbCuboid3D(g_max_x1, g_min_x2 - dx, g_min_x3 - dx, g_max_x1 + dx, g_max_x2 + dx, g_max_x3) diff --git a/Python/poiseuille/simulation.py b/Python/poiseuille/simulation.py index 035fb43031c44779fb7a94fa2e8e229f5d888608..6906cef8f2fd7e2c8e18352693061c64c5134455 100644 --- a/Python/poiseuille/simulation.py +++ b/Python/poiseuille/simulation.py @@ -1,12 +1,12 @@ from pyfluids import Simulation -from pyfluids.boundaryconditions import NoSlipBCAdapter, NoSlipBCAlgorithm +from pyfluids.boundaryconditions import NoSlipBoundaryCondition from pyfluids.geometry import GbCuboid3D, State from pyfluids.kernel import LBMKernel, KernelType -from pyfluids.parameters import SimulationParameters, GridParameters, PhysicalParameters -from pyfluids.writer import Writer, WriterType +from pyfluids.parameters import RuntimeParameters, GridParameters, PhysicalParameters +from pyfluids.writer import Writer, OutputFormat grid_params = GridParameters() -grid_params.delta_x = 1 +grid_params.node_distance = 1 grid_params.number_of_nodes_per_direction = [2, 2, 10] grid_params.blocks_per_direction = [1, 1, 1] grid_params.periodic_boundary_in_x1 = True @@ -15,13 +15,13 @@ grid_params.periodic_boundary_in_x2 = True physical_params = PhysicalParameters() physical_params.lattice_viscosity = 0.005 -sim_params = SimulationParameters() -sim_params.number_of_threads = 4 -sim_params.number_of_timesteps = 10000 -sim_params.timestep_log_interval = 1000 +runtime_params = RuntimeParameters() +runtime_params.number_of_threads = 4 +runtime_params.number_of_timesteps = 10000 +runtime_params.timestep_log_interval = 1000 -def run_simulation(physical_params=physical_params, grid_params=grid_params, sim_params=sim_params): +def run_simulation(physical_params=physical_params, grid_params=grid_params, runtime_params=runtime_params): simulation = Simulation() kernel = LBMKernel(KernelType.CompressibleCumulantFourthOrderViscosity) @@ -29,25 +29,23 @@ def run_simulation(physical_params=physical_params, grid_params=grid_params, sim kernel.forcing_in_x1 = 1e-6 g_min_x1, g_min_x2, g_min_x3 = 0, 0, 0 - g_max_x1 = (grid_params.number_of_nodes_per_direction[0]) * grid_params.delta_x - g_max_x2 = (grid_params.number_of_nodes_per_direction[1]) * grid_params.delta_x - g_max_x3 = (grid_params.number_of_nodes_per_direction[2]) * grid_params.delta_x + g_max_x1 = (grid_params.number_of_nodes_per_direction[0]) * grid_params.node_distance + g_max_x2 = (grid_params.number_of_nodes_per_direction[1]) * grid_params.node_distance + g_max_x3 = (grid_params.number_of_nodes_per_direction[2]) * grid_params.node_distance writer = Writer() writer.output_path = "./output" - writer.type = WriterType.BINARY + writer.output_format = OutputFormat.BINARY simulation.set_kernel_config(kernel) simulation.set_physical_parameters(physical_params) simulation.set_grid_parameters(grid_params) - simulation.set_simulation_parameters(sim_params) + simulation.set_simulation_parameters(runtime_params) simulation.set_writer(writer) - no_slip_adapter = NoSlipBCAdapter() - no_slip_adapter.algorithm = NoSlipBCAlgorithm() - simulation.add_bc_adapter(no_slip_adapter) + no_slip_adapter = NoSlipBoundaryCondition() - block_length = 3 * grid_params.delta_x + block_length = 3 * grid_params.node_distance simulation.add_object( GbCuboid3D(g_min_x1 - block_length, g_min_x2 - block_length, diff --git a/Python/poiseuille/test_poiseuille_l2.py b/Python/poiseuille/test_poiseuille_l2.py index 83b8cbc9fc05af8899b68b6994e122542841fa64..e9391f0c3f0b8671389ab18bf72763d9e1d04ed9 100644 --- a/Python/poiseuille/test_poiseuille_l2.py +++ b/Python/poiseuille/test_poiseuille_l2.py @@ -3,29 +3,35 @@ import unittest import pyvista as pv from norms import l2_norm from poiseuille.analytical import poiseuille_at_heights, PoiseuilleSettings -from poiseuille.simulation import run_simulation, grid_params, physical_params, sim_params +from poiseuille.simulation import run_simulation, grid_params, physical_params, runtime_params from vtk_utilities import vertical_column_from_mesh, get_values_from_indices class TestPoiseuilleFlow(unittest.TestCase): def test_poiseuille_flow(self): + """ + WHEN comparing the simulation results to the analytical solution THEN the L2-Norm should be less than 1e-4 + """ + run_simulation() - file_name = _get_output_file_name(sim_params) - mesh = pv.read(file_name) - indices = vertical_column_from_mesh(mesh) - numerical_results = get_values_from_indices(mesh.get_array("Vx"), indices) - heights = _get_heights_from_indices(mesh, indices) + file_name_of_last_timestep = get_output_file_name(runtime_params) + mesh_of_last_timestep = pv.read(file_name_of_last_timestep) + column_indices = vertical_column_from_mesh(mesh_of_last_timestep) + numerical_results_from_single_column = get_values_from_indices(mesh_of_last_timestep.get_array("Vx"), column_indices) - settings = _get_analytical_poiseuille_settings(grid_params, physical_params) + heights = get_heights_from_indices(mesh_of_last_timestep, column_indices) + settings = get_analytical_poiseuille_settings(grid_params, physical_params) analytical_results = poiseuille_at_heights(settings, heights) - norm = l2_norm(analytical_results, numerical_results) - print(f"L2 norm value: {norm}") - self.assertLessEqual(norm, 1e-4) + l2_norm_result = l2_norm(analytical_results, numerical_results_from_single_column) + + max_acceptable_error = 1e-4 + self.assertLessEqual(l2_norm_result, max_acceptable_error) + print(f"The L2-Norm is: {l2_norm_result}") -def _get_analytical_poiseuille_settings(grid_params, physical_params): +def get_analytical_poiseuille_settings(grid_params, physical_params): settings = PoiseuilleSettings() settings.length = grid_params.number_of_nodes_per_direction[0] settings.height = grid_params.number_of_nodes_per_direction[2] @@ -35,11 +41,12 @@ def _get_analytical_poiseuille_settings(grid_params, physical_params): return settings -def _get_output_file_name(sim_params): - file_name = f"output/mq/mq{sim_params.number_of_timesteps}/mq0_{sim_params.number_of_timesteps}.bin.vtu" +def get_output_file_name(rumtime_params): + timesteps = rumtime_params.number_of_timesteps + file_name = f"output/mq/mq{timesteps}/mq0_{timesteps}.bin.vtu" return file_name -def _get_heights_from_indices(mesh, indices): +def get_heights_from_indices(mesh, indices): return [mesh.points[index][2] for index in indices] diff --git a/Python/test_boundaryconditions.py b/Python/test_boundaryconditions.py deleted file mode 100644 index 437a26953ec1063d64e57a8a5bf76773729c7d12..0000000000000000000000000000000000000000 --- a/Python/test_boundaryconditions.py +++ /dev/null @@ -1,5 +0,0 @@ -from pyfluids.boundaryconditions import * - -no_slip_algo = NoSlipBCAlgorithm() -no_slip_bc_adapter = NoSlipBCAdapter() -no_slip_bc_adapter.algorithm = no_slip_algo diff --git a/Python/test_muparser.py b/Python/test_muparser.py deleted file mode 100644 index 177e70e81b18b38e49b28149ee380c8d1f8f1b46..0000000000000000000000000000000000000000 --- a/Python/test_muparser.py +++ /dev/null @@ -1,5 +0,0 @@ -from pymuparser import Parser - -p = Parser() -p.expression = "u" -p.define_constant("u", 5) diff --git a/src/cpu/pythonbindings/src/submodules/boundaryconditions.cpp b/src/cpu/pythonbindings/src/submodules/boundaryconditions.cpp index 37fc1fdb8ec790f6b9136634207e9259cc2435b7..ef8b923fd9aa2feea9c81da686df38cb891a4f84 100644 --- a/src/cpu/pythonbindings/src/submodules/boundaryconditions.cpp +++ b/src/cpu/pythonbindings/src/submodules/boundaryconditions.cpp @@ -9,42 +9,54 @@ #include <BoundaryConditions/VelocityBCAlgorithm.h> namespace py = pybind11; +using namespace py::literals; -void makeBoundaryConditionsModule(py::module_ &parentModule) -{ - py::module bcModule = parentModule.def_submodule("boundaryconditions"); - - py::class_<BCAdapter, std::shared_ptr<BCAdapter>>(bcModule, "BCAdapter") - .def_property("algorithm", &BCAdapter::getAlgorithm, &BCAdapter::setBcAlgorithm); +template<class Adapter> +using py_bc_class = py::class_<Adapter, BCAdapter, std::shared_ptr<Adapter>>; - py::class_<NoSlipBCAdapter, BCAdapter, std::shared_ptr<NoSlipBCAdapter>>(bcModule, "NoSlipBCAdapter") - .def(py::init()); - - py::class_<VelocityBCAdapter, BCAdapter, std::shared_ptr<VelocityBCAdapter>>(bcModule, "VelocityBCAdapter") - .def(py::init()) - .def(py::init<bool &, bool &, bool &, mu::Parser &, double &, double &>()) - .def(py::init<bool &, bool &, bool &, mu::Parser &, mu::Parser &, mu::Parser &, double &, double &>()) - .def(py::init<bool &, bool &, bool &, std::string &, double &, double &>()) - .def(py::init<BCFunction &, bool, bool, bool>()) - .def(py::init<BCFunction &, BCFunction &, BCFunction &>()) - .def(py::init<std::vector<BCFunction> &, std::vector<BCFunction> &, std::vector<BCFunction> &>()) - .def(py::init<double &, double &, double &, double &, double &, double &, double &, double &, double &>()) - .def(py::init<std::string &, double &, double &, std::string &, double &, double &, std::string &, double &, double &>()); +template<class Adapter, class Algorithm, typename ...Args> +std::shared_ptr<Adapter> create(Args... args) +{ + auto adapter = std::make_shared<Adapter>(args...); + adapter->setBcAlgorithm(std::make_shared<Algorithm>()); + return adapter; +} - py::class_<DensityBCAdapter, BCAdapter, std::shared_ptr<DensityBCAdapter>>(bcModule, "DensityBCAdapter") - .def(py::init()); +template<class Algorithm> +void add_constructors_to_velocity_bc(py_bc_class<VelocityBCAdapter> &cls) +{ + auto firstConstructor = &create<VelocityBCAdapter, Algorithm, bool &, bool &, bool &, mu::Parser &, double &, double &>; + auto secondConstructor = &create<VelocityBCAdapter, Algorithm, + bool &, bool &, bool &, mu::Parser &, mu::Parser &, mu::Parser &, double &, double &>; + auto thirdConstructor = &create<VelocityBCAdapter, Algorithm, + double &, double &, double &, double &, double &, double &, double &, double &, double &>; + + cls.def(py::init(&create<VelocityBCAdapter, Algorithm>)) + .def(py::init(firstConstructor), + "vx1"_a, "vx2"_a, "vx3"_a, "function"_a, "start_time"_a, "end_time"_a) + .def(py::init(secondConstructor), + "vx1"_a, "vx2"_a, "vx3"_a, + "function_vx1"_a, "function_vx2"_a, "function_vx2"_a, + "start_time"_a, "end_time"_a) + .def(py::init(thirdConstructor), + "vx1"_a, "vx1_start_time"_a, "vx1_end_time"_a, + "vx2"_a, "vx2_start_time"_a, "vx2_end_time"_a, + "vx3"_a, "vx3_start_time"_a, "vx3_end_time"_a); +} +void makeBoundaryConditionsModule(py::module_ &parentModule) +{ + py::module_ bcModule = parentModule.def_submodule("boundaryconditions"); - py::class_<BCAlgorithm, std::shared_ptr<BCAlgorithm>>(bcModule, "BCAlgorithm"); + py::class_<BCAdapter, std::shared_ptr<BCAdapter>>(bcModule, "BCAdapter"); - py::class_<NoSlipBCAlgorithm, BCAlgorithm, std::shared_ptr<NoSlipBCAlgorithm>>(bcModule, "NoSlipBCAlgorithm") - .def(py::init()); + py_bc_class<NoSlipBCAdapter>(bcModule, "NoSlipBoundaryCondition") + .def(py::init(&create<NoSlipBCAdapter, NoSlipBCAlgorithm>)); - py::class_<VelocityBCAlgorithm, BCAlgorithm, std::shared_ptr<VelocityBCAlgorithm>>(bcModule, "VelocityBCAlgorithm") - .def(py::init()); + auto velocityBoundaryCondition = py_bc_class<VelocityBCAdapter>(bcModule, "VelocityBoundaryCondition"); + add_constructors_to_velocity_bc<VelocityBCAlgorithm>(velocityBoundaryCondition); - py::class_<NonReflectingOutflowBCAlgorithm, BCAlgorithm, std::shared_ptr<NonReflectingOutflowBCAlgorithm>>(bcModule, - "NonReflectingOutflowBCAlgorithm") - .def(py::init()); + py_bc_class<DensityBCAdapter>(bcModule, "DensityBoundaryCondition") + .def(py::init(&create<DensityBCAdapter, NonReflectingOutflowBCAlgorithm>)); } diff --git a/src/cpu/pythonbindings/src/submodules/geometry.cpp b/src/cpu/pythonbindings/src/submodules/geometry.cpp index e4c3a9ca1aa6e19c3037bfd129431d3102cbc989..884ced7b92ddae8a30a8f482e4b22dcbfa37beec 100644 --- a/src/cpu/pythonbindings/src/submodules/geometry.cpp +++ b/src/cpu/pythonbindings/src/submodules/geometry.cpp @@ -5,9 +5,11 @@ #include <geometry3d/GbLine3D.h> #include <Interactors/Interactor3D.h> - namespace py = pybind11; +template<class GeoObject> +using py_geometry = py::class_<GeoObject, GbObject3D, std::shared_ptr<GeoObject>>; + std::string GbPoint3D_repr_(const GbPoint3D &instance) { std::ostringstream stream; @@ -21,12 +23,11 @@ std::string GbPoint3D_repr_(const GbPoint3D &instance) void makeGeometryModule(py::module_ &parentModule) { - py::module geometry = parentModule.def_submodule("geometry"); py::class_<GbObject3D, std::shared_ptr<GbObject3D>>(geometry, "GbObject3D"); - py::class_<GbPoint3D, GbObject3D, std::shared_ptr<GbPoint3D>>(geometry, "GbPoint3D") + py_geometry<GbPoint3D>(geometry, "GbPoint3D") .def(py::init()) .def(py::init<double &, double &, double &>()) .def(py::init<GbPoint3D *>()) @@ -34,16 +35,18 @@ void makeGeometryModule(py::module_ &parentModule) .def_property("x2", &GbPoint3D::getX2Coordinate, &GbPoint3D::setX2) .def_property("x3", &GbPoint3D::getX3Coordinate, &GbPoint3D::setX3) .def("get_distance", &GbPoint3D::getDistance) - .def("__repr__", [&](const GbPoint3D &instance) { return GbPoint3D_repr_(instance); }); + .def("__repr__", [&](const GbPoint3D &instance) + { return GbPoint3D_repr_(instance); }); - py::class_<GbCuboid3D, GbObject3D, std::shared_ptr<GbCuboid3D>>(geometry, "GbCuboid3D") + py_geometry<GbCuboid3D>(geometry, "GbCuboid3D") .def(py::init()) .def(py::init<double &, double &, double &, double &, double &, double &>()) .def(py::init<GbPoint3D *, GbPoint3D *>()) .def(py::init<GbCuboid3D *>()) .def_property("point1", &GbCuboid3D::getPoint1, &GbCuboid3D::setPoint1) .def_property("point2", &GbCuboid3D::getPoint2, &GbCuboid3D::setPoint2) - .def("__repr__", [&](GbCuboid3D instance) { + .def("__repr__", [&](GbCuboid3D instance) + { std::ostringstream stream; stream << "<GbCuboid3D" << std::endl << "point1: " << GbPoint3D_repr_(instance.getPoint1()) << std::endl @@ -51,13 +54,14 @@ void makeGeometryModule(py::module_ &parentModule) return stream.str(); }); - py::class_<GbLine3D, GbObject3D, std::shared_ptr<GbLine3D>>(geometry, "GbLine3D") + py_geometry<GbLine3D>(geometry, "GbLine3D") .def(py::init()) .def(py::init<GbPoint3D *, GbPoint3D *>()) .def(py::init<GbLine3D>()) .def_property("point1", &GbLine3D::getPoint1, &GbLine3D::setPoint1) .def_property("point2", &GbLine3D::getPoint2, &GbLine3D::setPoint2) - .def("__repr__", [&](GbLine3D instance) { + .def("__repr__", [&](GbLine3D instance) + { std::ostringstream stream; stream << "<GbLine3D" << std::endl << "point1: " << GbPoint3D_repr_(instance.getPoint1()) << std::endl diff --git a/src/cpu/pythonbindings/src/submodules/kernel.cpp b/src/cpu/pythonbindings/src/submodules/kernel.cpp index d9ff9d529d622b1ce31fcf2b61905d67892d9c83..0e2e23c8c6a8ff56ea01c277e9825e7eb78c5c02 100644 --- a/src/cpu/pythonbindings/src/submodules/kernel.cpp +++ b/src/cpu/pythonbindings/src/submodules/kernel.cpp @@ -9,8 +9,6 @@ namespace py = pybind11; void makeKernelModule(py::module_ &parentModule) { - using namespace pybind11::literals; - py::module kernelModule = parentModule.def_submodule("kernel"); py::enum_<KernelFactory::KernelType>(kernelModule, "KernelType") @@ -19,18 +17,18 @@ void makeKernelModule(py::module_ &parentModule) KernelFactory::COMPRESSIBLE_CUMULANT_4TH_ORDER_VISCOSITY); - py::class_<LBMKernelConfig, std::shared_ptr<LBMKernelConfig>>(kernelModule, "LBMKernel") + py::class_<LBMKernelConfiguration, std::shared_ptr<LBMKernelConfiguration>>(kernelModule, "LBMKernel") .def(py::init<KernelFactory::KernelType>()) - .def_readwrite("use_forcing", &LBMKernelConfig::useForcing) - .def_readwrite("forcing_in_x1", &LBMKernelConfig::forcingX1) - .def_readwrite("forcing_in_x2", &LBMKernelConfig::forcingX2) - .def_readwrite("forcing_in_x3", &LBMKernelConfig::forcingX3) - .def("set_forcing", [](LBMKernelConfig &kernelConfig, double x1, double x2, double x3) { + .def_readwrite("use_forcing", &LBMKernelConfiguration::useForcing) + .def_readwrite("forcing_in_x1", &LBMKernelConfiguration::forcingX1) + .def_readwrite("forcing_in_x2", &LBMKernelConfiguration::forcingX2) + .def_readwrite("forcing_in_x3", &LBMKernelConfiguration::forcingX3) + .def("set_forcing", [](LBMKernelConfiguration &kernelConfig, double x1, double x2, double x3) { kernelConfig.forcingX1 = x1; kernelConfig.forcingX2 = x2; kernelConfig.forcingX3 = x3; }) - .def("__repr__", [](LBMKernelConfig &kernelConfig) { + .def("__repr__", [](LBMKernelConfiguration &kernelConfig) { std::ostringstream stream; stream << "<" << kernelConfig.kernelType << std::endl << "Use forcing: " << kernelConfig.useForcing << std::endl diff --git a/src/cpu/pythonbindings/src/submodules/simulationparameters.cpp b/src/cpu/pythonbindings/src/submodules/simulationparameters.cpp index 13875126df9ff3403defb8ccc3e17b7b1b1d1402..61b3c9b4460fb2b6a8d628aa4d5a10d05d0854f6 100644 --- a/src/cpu/pythonbindings/src/submodules/simulationparameters.cpp +++ b/src/cpu/pythonbindings/src/submodules/simulationparameters.cpp @@ -12,12 +12,11 @@ void makeParametersModule(py::module_ &parentModule) .def(py::init()) .def_readwrite("bulk_viscosity_factor", &PhysicalParameters::bulkViscosityFactor, "The viscosity of the fluid will be multiplied with this factor to calculate its bulk viscosity. Default is 1.0") - .def_readwrite("lattice_viscosity", &PhysicalParameters::latticeViscosity, "Lattice viscosity") - .def_readwrite("lattice_density", &PhysicalParameters::latticeDensity, "Lattice Density"); + .def_readwrite("lattice_viscosity", &PhysicalParameters::latticeViscosity, "Lattice viscosity"); py::class_<GridParameters, std::shared_ptr<GridParameters>>(parametersModule, "GridParameters") .def(py::init()) - .def_readwrite("delta_x", &GridParameters::deltaX) + .def_readwrite("node_distance", &GridParameters::nodeDistance) .def_readwrite("reference_direction_index", &GridParameters::referenceDirectionIndex) .def_readwrite("number_of_nodes_per_direction", &GridParameters::numberOfNodesPerDirection) .def_readwrite("blocks_per_direction", &GridParameters::blocksPerDirection) @@ -25,10 +24,10 @@ void makeParametersModule(py::module_ &parentModule) .def_readwrite("periodic_boundary_in_x2", &GridParameters::periodicBoundaryInX2) .def_readwrite("periodic_boundary_in_x3", &GridParameters::periodicBoundaryInX3); - py::class_<SimulationParameters, std::shared_ptr<SimulationParameters>>(parametersModule, "SimulationParameters") + py::class_<RuntimeParameters, std::shared_ptr<RuntimeParameters>>(parametersModule, "RuntimeParameters") .def(py::init()) - .def_readwrite("number_of_timesteps", &SimulationParameters::numberOfTimeSteps) - .def_readwrite("timestep_log_interval", &SimulationParameters::timeStepLogInterval) - .def_readwrite("number_of_threads", &SimulationParameters::numberOfThreads); + .def_readwrite("number_of_timesteps", &RuntimeParameters::numberOfTimeSteps) + .def_readwrite("timestep_log_interval", &RuntimeParameters::timeStepLogInterval) + .def_readwrite("number_of_threads", &RuntimeParameters::numberOfThreads); } \ No newline at end of file diff --git a/src/cpu/pythonbindings/src/submodules/writer.cpp b/src/cpu/pythonbindings/src/submodules/writer.cpp index ef9c99ba3fdb3a07ef672f334dc844fcddcb054d..40819e4766eb30a442967067f954fef5508a4707 100644 --- a/src/cpu/pythonbindings/src/submodules/writer.cpp +++ b/src/cpu/pythonbindings/src/submodules/writer.cpp @@ -1,5 +1,5 @@ #include <pybind11/pybind11.h> -#include <simulationconfig/WriterConfig.h> +#include <simulationconfig/WriterConfiguration.h> namespace py = pybind11; @@ -7,12 +7,12 @@ void makeWriterModule(py::module_ &parentModule) { py::module writerModule = parentModule.def_submodule("writer"); - py::enum_<WriterType>(writerModule, "WriterType") - .value("ASCII", WriterType::ASCII) - .value("BINARY", WriterType::BINARY); + py::enum_<OutputFormat>(writerModule, "OutputFormat") + .value("ASCII", OutputFormat::ASCII) + .value("BINARY", OutputFormat::BINARY); - py::class_<WriterConfig>(writerModule, "Writer") + py::class_<WriterConfiguration>(writerModule, "Writer") .def(py::init()) - .def_readwrite("output_path", &WriterConfig::outputPath) - .def_readwrite("type", &WriterConfig::writerType); + .def_readwrite("output_path", &WriterConfiguration::outputPath) + .def_readwrite("output_format", &WriterConfiguration::outputFormat); } \ No newline at end of file diff --git a/src/cpu/simulationconfig/CMakeLists.txt b/src/cpu/simulationconfig/CMakeLists.txt index 4d55e1ae490bfa71ebe775879f3c9fbaba66d89b..4c231302312752cbef3d18fc92bea92be5d25d94 100644 --- a/src/cpu/simulationconfig/CMakeLists.txt +++ b/src/cpu/simulationconfig/CMakeLists.txt @@ -3,7 +3,10 @@ project(simulationconfig) set(VFBUILDER_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include) -file(GLOB HEADERS ${VFBUILDER_INCLUDE_DIR}/simulationconfig/*.h) +file(GLOB HEADERS + ${VFBUILDER_INCLUDE_DIR}/simulationconfig/*.h + ${VFBUILDER_INCLUDE_DIR}/simulationconfig/boundaryconditions/*.h) + file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp) add_library(simulationconfig STATIC ${SRC} ${HEADERS}) diff --git a/src/cpu/simulationconfig/include/simulationconfig/KernelConfigStructs.h b/src/cpu/simulationconfig/include/simulationconfig/KernelConfigStructs.h index b70de7f9bdbddb80bcae4e297a1ac2304e32211d..88e621a3fe00a522b23fda4101e84d39305e80a2 100644 --- a/src/cpu/simulationconfig/include/simulationconfig/KernelConfigStructs.h +++ b/src/cpu/simulationconfig/include/simulationconfig/KernelConfigStructs.h @@ -4,14 +4,14 @@ #include <string> #include <LBM/LBMSystem.h> -struct LBMKernelConfig { +struct LBMKernelConfiguration { KernelFactory::KernelType kernelType; bool useForcing = false; LBMReal forcingX1{}; LBMReal forcingX2{}; LBMReal forcingX3{}; - explicit LBMKernelConfig(KernelFactory::KernelType kernelType) : kernelType(kernelType) + explicit LBMKernelConfiguration(KernelFactory::KernelType kernelType) : kernelType(kernelType) { } }; diff --git a/src/cpu/simulationconfig/include/simulationconfig/Simulation.h b/src/cpu/simulationconfig/include/simulationconfig/Simulation.h index f003999c444d7b8e6423b25e94e2e0cbe5e993c8..df2b436e812fbebd9882517921b47167e35318b5 100644 --- a/src/cpu/simulationconfig/include/simulationconfig/Simulation.h +++ b/src/cpu/simulationconfig/include/simulationconfig/Simulation.h @@ -15,7 +15,7 @@ #include "AbstractLBMSystem.h" #include "KernelConfigStructs.h" #include "SimulationParameters.h" -#include "WriterConfig.h" +#include "WriterConfiguration.h" class Simulation { @@ -26,64 +26,64 @@ private: std::shared_ptr<AbstractLBMSystem> lbmSystem; std::shared_ptr<Communicator> communicator; - SPtr<Grid3D> grid; - std::vector<SPtr<Interactor3D>> interactors; + std::shared_ptr<Grid3D> grid; + std::vector<std::shared_ptr<Interactor3D>> interactors; BoundaryConditionsBlockVisitor bcVisitor; - std::set<SPtr<BCAdapter>> registeredAdapters; + std::set<std::shared_ptr<BCAdapter>> registeredAdapters; - SPtr<LBMKernelConfig> kernelConfig; - SPtr<SimulationParameters> simulationParameters; - SPtr<GridParameters> gridParameters; - SPtr<PhysicalParameters> physicalParameters; + std::shared_ptr<LBMKernelConfiguration> kernelConfig; + std::shared_ptr<RuntimeParameters> simulationParameters; + std::shared_ptr<GridParameters> gridParameters; + std::shared_ptr<PhysicalParameters> physicalParameters; - WriterConfig &writerConfig = *(new WriterConfig()); + WriterConfiguration &writerConfig = *(new WriterConfiguration()); public: explicit Simulation(); ~Simulation(); - WriterConfig &getWriterConfig(); + WriterConfiguration &getWriterConfig(); - void setWriterConfig(const WriterConfig &config); + void setWriterConfig(const WriterConfiguration &config); - void setGridParameters(SPtr<GridParameters> parameters); + void setGridParameters(std::shared_ptr<GridParameters> parameters); - void setPhysicalParameters(SPtr<PhysicalParameters> parameters); + void setPhysicalParameters(std::shared_ptr<PhysicalParameters> parameters); - void setSimulationParameters(SPtr<SimulationParameters> parameters); + void setSimulationParameters(std::shared_ptr<RuntimeParameters> parameters); - void setKernelConfig(const SPtr<LBMKernelConfig> &kernel); + void setKernelConfig(const std::shared_ptr<LBMKernelConfiguration> &kernel); - void addObject(const SPtr<GbObject3D> &object, const SPtr<BCAdapter> &bcAdapter, int state, + void addObject(const std::shared_ptr<GbObject3D> &object, const std::shared_ptr<BCAdapter> &bcAdapter, int state, const std::string &folderPath); - void addBCAdapter(const SPtr<BCAdapter> &bcAdapter); + void addBCAdapter(const std::shared_ptr<BCAdapter> &bcAdapter); void run(); private: - SPtr<GbObject3D> makeSimulationBoundingBox(const int &nodesInX1, const int &nodesInX2, const int &nodesInX3) const; + std::shared_ptr<GbObject3D> makeSimulationBoundingBox(const int &nodesInX1, const int &nodesInX2, const int &nodesInX3) const; void writeBlocks() const; void writeBoundaryConditions() const; - SPtr<CoProcessor> makeMacroscopicQuantitiesCoProcessor(const std::shared_ptr<LBMUnitConverter> &converter, - const SPtr<UbScheduler> &visSch) const; + std::shared_ptr<CoProcessor> makeMacroscopicQuantitiesCoProcessor(const std::shared_ptr<LBMUnitConverter> &converter, + const std::shared_ptr<UbScheduler> &visSch) const; static std::shared_ptr<LBMUnitConverter> makeLBMUnitConverter(); void setBlockSize(const int &nodesInX1, const int &nodesInX2, const int &nodesInX3) const; - static void setBoundaryConditionProcessor(const SPtr<LBMKernel> &kernel); + static void setBoundaryConditionProcessor(const std::shared_ptr<LBMKernel> &kernel); - void generateBlockGrid(const SPtr<GbObject3D> &gridCube) const; + void generateBlockGrid(const std::shared_ptr<GbObject3D> &gridCube) const; void logSimulationData(const int &nodesInX1, const int &nodesInX2, const int &nodesInX3) const; - void setKernelForcing(const SPtr<LBMKernel> &kernel, std::shared_ptr<LBMUnitConverter> &converter) const; + void setKernelForcing(const std::shared_ptr<LBMKernel> &kernel, std::shared_ptr<LBMUnitConverter> &converter) const; }; #endif \ No newline at end of file diff --git a/src/cpu/simulationconfig/include/simulationconfig/SimulationParameters.h b/src/cpu/simulationconfig/include/simulationconfig/SimulationParameters.h index 41cf95fb80037fe1275d4505cc91ffe0531d1465..5b076c30328458c3fc47cfab18551c9c83fa7556 100644 --- a/src/cpu/simulationconfig/include/simulationconfig/SimulationParameters.h +++ b/src/cpu/simulationconfig/include/simulationconfig/SimulationParameters.h @@ -7,20 +7,19 @@ struct PhysicalParameters { double latticeViscosity{}; double bulkViscosityFactor{1}; - double latticeDensity{}; }; struct GridParameters { std::array<int, 3> numberOfNodesPerDirection{1, 1, 1}; std::array<int, 3> blocksPerDirection{1, 1, 1}; int referenceDirectionIndex{}; - double deltaX{1}; + double nodeDistance{1}; bool periodicBoundaryInX1{}; bool periodicBoundaryInX2{}; bool periodicBoundaryInX3{}; }; -struct SimulationParameters { +struct RuntimeParameters { int numberOfTimeSteps{}; int timeStepLogInterval{}; int numberOfThreads{}; diff --git a/src/cpu/simulationconfig/include/simulationconfig/WriterConfig.h b/src/cpu/simulationconfig/include/simulationconfig/WriterConfiguration.h similarity index 66% rename from src/cpu/simulationconfig/include/simulationconfig/WriterConfig.h rename to src/cpu/simulationconfig/include/simulationconfig/WriterConfiguration.h index 0caf25d94f264dd488ac7130274e351c0597fc89..a487917ff3c8a9a7b7f3847e5b04de1801a0fce0 100644 --- a/src/cpu/simulationconfig/include/simulationconfig/WriterConfig.h +++ b/src/cpu/simulationconfig/include/simulationconfig/WriterConfiguration.h @@ -6,18 +6,18 @@ #include <basics/writer/WbWriterVtkXmlASCII.h> #include <basics/writer/WbWriterVtkXmlBinary.h> -enum WriterType { +enum OutputFormat { ASCII, BINARY }; -struct WriterConfig { - WriterType writerType{}; +struct WriterConfiguration { + OutputFormat outputFormat{}; std::string outputPath{"./output"}; WbWriter *getWriter() { - if (writerType == ASCII) return WbWriterVtkXmlASCII::getInstance(); - if (writerType == BINARY) return WbWriterVtkXmlBinary::getInstance(); + if (outputFormat == ASCII) return WbWriterVtkXmlASCII::getInstance(); + if (outputFormat == BINARY) return WbWriterVtkXmlBinary::getInstance(); return nullptr; } }; diff --git a/src/cpu/simulationconfig/src/Simulation.cpp b/src/cpu/simulationconfig/src/Simulation.cpp index 32c63087dc153ca510badd51734141423ebeb91e..a92b0050de0b546a577f16265600fac7d13dfcae 100644 --- a/src/cpu/simulationconfig/src/Simulation.cpp +++ b/src/cpu/simulationconfig/src/Simulation.cpp @@ -1,3 +1,4 @@ +#include <memory> #include <string> #include <set> #include <utility> @@ -35,29 +36,29 @@ Simulation::Simulation() { this->communicator = MPICommunicator::getInstance(); - this->grid = SPtr<Grid3D>(new Grid3D(communicator)); - this->interactors = std::vector<SPtr<Interactor3D>>(); + this->grid = std::shared_ptr<Grid3D>(new Grid3D(communicator)); + this->interactors = std::vector<std::shared_ptr<Interactor3D>>(); this->bcVisitor = BoundaryConditionsBlockVisitor(); - this->registeredAdapters = std::set<SPtr<BCAdapter>>(); + this->registeredAdapters = std::set<std::shared_ptr<BCAdapter>>(); } -void Simulation::setGridParameters(SPtr<GridParameters> parameters) +void Simulation::setGridParameters(std::shared_ptr<GridParameters> parameters) { this->gridParameters = std::move(parameters); } -void Simulation::setPhysicalParameters(SPtr<PhysicalParameters> parameters) +void Simulation::setPhysicalParameters(std::shared_ptr<PhysicalParameters> parameters) { this->physicalParameters = std::move(parameters); } -void Simulation::setSimulationParameters(SPtr<SimulationParameters> parameters) +void Simulation::setSimulationParameters(std::shared_ptr<RuntimeParameters> parameters) { this->simulationParameters = std::move(parameters); } void -Simulation::addObject(const SPtr<GbObject3D> &object, const SPtr<BCAdapter> &bcAdapter, int state, +Simulation::addObject(const std::shared_ptr<GbObject3D> &object, const std::shared_ptr<BCAdapter> &bcAdapter, int state, const std::string &folderPath) { const bool is_in = registeredAdapters.find(bcAdapter) != registeredAdapters.end(); @@ -66,25 +67,25 @@ Simulation::addObject(const SPtr<GbObject3D> &object, const SPtr<BCAdapter> &bcA GbSystem3D::writeGeoObject(object, writerConfig.outputPath + folderPath, writerConfig.getWriter()); } -void Simulation::addBCAdapter(const SPtr<BCAdapter> &bcAdapter) +void Simulation::addBCAdapter(const std::shared_ptr<BCAdapter> &bcAdapter) { registeredAdapters.insert(bcAdapter); this->bcVisitor.addBC(bcAdapter); } -void Simulation::setKernelConfig(const SPtr<LBMKernelConfig> &kernel) +void Simulation::setKernelConfig(const std::shared_ptr<LBMKernelConfiguration> &kernel) { this->kernelConfig = kernel; this->lbmKernel = kernelFactory.makeKernel(kernel->kernelType); this->lbmSystem = kernelFactory.makeLBMSystem(kernel->kernelType); } -void Simulation::setWriterConfig(const WriterConfig &config) +void Simulation::setWriterConfig(const WriterConfiguration &config) { this->writerConfig = config; } -WriterConfig &Simulation::getWriterConfig() +WriterConfiguration &Simulation::getWriterConfig() { return writerConfig; } @@ -92,7 +93,7 @@ WriterConfig &Simulation::getWriterConfig() void Simulation::run() { UBLOG(logINFO, "Beginning simulation setup") - grid->setDeltaX(gridParameters->deltaX); + grid->setDeltaX(gridParameters->nodeDistance); grid->setPeriodicX1(gridParameters->periodicBoundaryInX1); grid->setPeriodicX2(gridParameters->periodicBoundaryInX2); grid->setPeriodicX3(gridParameters->periodicBoundaryInX3); @@ -106,14 +107,14 @@ void Simulation::run() logSimulationData(nodesInX1, nodesInX2, nodesInX3); setBlockSize(nodesInX1, nodesInX2, nodesInX3); - SPtr<GbObject3D> gridCube = makeSimulationBoundingBox(nodesInX1, nodesInX2, nodesInX3); + std::shared_ptr<GbObject3D> gridCube = makeSimulationBoundingBox(nodesInX1, nodesInX2, nodesInX3); generateBlockGrid(gridCube); setKernelForcing(lbmKernel, converter); setBoundaryConditionProcessor(lbmKernel); - SPtr<Grid3DVisitor> metisVisitor( + std::shared_ptr<Grid3DVisitor> metisVisitor( new MetisPartitioningGridVisitor(communicator, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); @@ -130,7 +131,7 @@ void Simulation::run() grid->accept(kernelVisitor); intHelper.setBC(); - SPtr<InterpolationProcessor> iProcessor(new CompressibleOffsetMomentsInterpolationProcessor()); + std::shared_ptr<InterpolationProcessor> iProcessor(new CompressibleOffsetMomentsInterpolationProcessor()); dynamicPointerCast<CompressibleOffsetMomentsInterpolationProcessor>(iProcessor)->setBulkViscosity( physicalParameters->latticeViscosity, physicalParameters->latticeViscosity * physicalParameters->bulkViscosityFactor); @@ -146,11 +147,12 @@ void Simulation::run() writeBoundaryConditions(); - SPtr<UbScheduler> visualizationScheduler(new UbScheduler(simulationParameters->timeStepLogInterval)); - SPtr<CoProcessor> mqCoProcessor = makeMacroscopicQuantitiesCoProcessor(converter, visualizationScheduler); + std::shared_ptr<UbScheduler> visualizationScheduler(new UbScheduler(simulationParameters->timeStepLogInterval)); + std::shared_ptr<CoProcessor> mqCoProcessor = makeMacroscopicQuantitiesCoProcessor(converter, + visualizationScheduler); - SPtr<UbScheduler> nupsScheduler(new UbScheduler(100, 100)); - SPtr<CoProcessor> nupsCoProcessor( + std::shared_ptr<UbScheduler> nupsScheduler(new UbScheduler(100, 100)); + std::shared_ptr<CoProcessor> nupsCoProcessor( new NUPSCounterCoProcessor(grid, nupsScheduler, simulationParameters->numberOfThreads, communicator)); @@ -158,7 +160,7 @@ void Simulation::run() omp_set_num_threads(simulationParameters->numberOfThreads); #endif - SPtr<Calculator> calculator( + std::shared_ptr<Calculator> calculator( new BasicCalculator(grid, visualizationScheduler, simulationParameters->numberOfTimeSteps)); calculator->addCoProcessor(nupsCoProcessor); calculator->addCoProcessor(mqCoProcessor); @@ -169,7 +171,7 @@ void Simulation::run() } void -Simulation::setKernelForcing(const SPtr<LBMKernel> &kernel, +Simulation::setKernelForcing(const std::shared_ptr<LBMKernel> &kernel, std::shared_ptr<LBMUnitConverter> &converter) const { kernel->setWithForcing(kernelConfig->useForcing); @@ -181,11 +183,11 @@ Simulation::setKernelForcing(const SPtr<LBMKernel> &kernel, void Simulation::logSimulationData(const int &nodesInX1, const int &nodesInX2, const int &nodesInX3) const { UBLOG(logINFO, "Domain size = " << nodesInX1 << " x " << nodesInX2 << " x " << nodesInX3) - UBLOG(logINFO, "dx = " << gridParameters->deltaX << " m") + UBLOG(logINFO, "dx = " << gridParameters->nodeDistance << " m") UBLOG(logINFO, "latticeViscosity = " << physicalParameters->latticeViscosity) } -void Simulation::generateBlockGrid(const SPtr<GbObject3D> &gridCube) const +void Simulation::generateBlockGrid(const std::shared_ptr<GbObject3D> &gridCube) const { UBLOG(logINFO, "Generate block grid") GenBlocksGridVisitor genBlocks(gridCube); @@ -193,11 +195,11 @@ void Simulation::generateBlockGrid(const SPtr<GbObject3D> &gridCube) const writeBlocks(); } -void Simulation::setBoundaryConditionProcessor(const SPtr<LBMKernel> &kernel) +void Simulation::setBoundaryConditionProcessor(const std::shared_ptr<LBMKernel> &kernel) { UBLOG(logINFO, "Create boundary conditions processor") - SPtr<BCProcessor> bcProc; - bcProc = SPtr<BCProcessor>(new BCProcessor()); + std::shared_ptr<BCProcessor> bcProc; + bcProc = std::shared_ptr<BCProcessor>(new BCProcessor()); kernel->setBCProcessor(bcProc); } @@ -215,14 +217,14 @@ void Simulation::setBlockSize(const int &nodesInX1, const int &nodesInX2, const std::shared_ptr<LBMUnitConverter> Simulation::makeLBMUnitConverter() { - return SPtr<LBMUnitConverter>(new LBMUnitConverter()); + return std::shared_ptr<LBMUnitConverter>(new LBMUnitConverter()); } -SPtr<CoProcessor> +std::shared_ptr<CoProcessor> Simulation::makeMacroscopicQuantitiesCoProcessor(const std::shared_ptr<LBMUnitConverter> &converter, - const SPtr<UbScheduler> &visSch) const + const std::shared_ptr<UbScheduler> &visSch) const { - SPtr<CoProcessor> mqCoProcessor( + std::shared_ptr<CoProcessor> mqCoProcessor( new WriteMacroscopicQuantitiesCoProcessor(grid, visSch, writerConfig.outputPath, writerConfig.getWriter(), converter, communicator)); @@ -232,7 +234,7 @@ Simulation::makeMacroscopicQuantitiesCoProcessor(const std::shared_ptr<LBMUnitCo void Simulation::writeBoundaryConditions() const { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); + std::shared_ptr<UbScheduler> geoSch(new UbScheduler(1)); WriteBoundaryConditionsCoProcessor ppgeo(grid, geoSch, writerConfig.outputPath, writerConfig.getWriter(), communicator); ppgeo.process(0); @@ -241,9 +243,9 @@ void Simulation::writeBoundaryConditions() const void Simulation::writeBlocks() const { UBLOG(logINFO, "Write block grid to VTK-file") - SPtr<CoProcessor> ppblocks( + std::shared_ptr<CoProcessor> ppblocks( new WriteBlocksCoProcessor(grid, - SPtr<UbScheduler>(new UbScheduler(1)), + std::shared_ptr<UbScheduler>(new UbScheduler(1)), writerConfig.outputPath, writerConfig.getWriter(), communicator)); @@ -252,20 +254,20 @@ void Simulation::writeBlocks() const ppblocks.reset(); } -SPtr<GbObject3D> +std::shared_ptr<GbObject3D> Simulation::makeSimulationBoundingBox(const int &nodesInX1, const int &nodesInX2, const int &nodesInX3) const { double minX1 = 0, minX2 = 0, minX3 = 0; - const double maxX1 = minX1 + gridParameters->deltaX * nodesInX1; - const double maxX2 = minX2 + gridParameters->deltaX * nodesInX2; - const double maxX3 = minX3 + gridParameters->deltaX * nodesInX3; + const double maxX1 = minX1 + gridParameters->nodeDistance * nodesInX1; + const double maxX2 = minX2 + gridParameters->nodeDistance * nodesInX2; + const double maxX3 = minX3 + gridParameters->nodeDistance * nodesInX3; UBLOG(logINFO, "Bounding box dimensions = [(" << minX1 << ", " << minX2 << ", " << minX3 << "); (" << maxX1 << ", " << maxX2 << ", " << maxX3 << ")]") - SPtr<GbObject3D> gridCube(new GbCuboid3D(minX1, minX2, minX3, maxX1, maxX2, maxX3)); + std::shared_ptr<GbObject3D> gridCube(new GbCuboid3D(minX1, minX2, minX3, maxX1, maxX2, maxX3)); GbSystem3D::writeGeoObject(gridCube.get(), writerConfig.outputPath + "/geo/gridCube", writerConfig.getWriter()); return gridCube; }