From e7977ed435588c0fe1e5dee652ae4a72603c6f06 Mon Sep 17 00:00:00 2001 From: brookeslawski Date: Mon, 30 Sep 2024 12:46:33 -0600 Subject: [PATCH] creating heliostats3d module similar to panels3d --- input/single_heliostat.yaml | 2 +- pvade/fluid/boundary_conditions.py | 3 ++- pvade/geometry/MeshManager.py | 8 ++++++-- pvade/geometry/template/TemplateDomainCreation.py | 2 +- pvade/structure/boundary_conditions.py | 2 +- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/input/single_heliostat.yaml b/input/single_heliostat.yaml index 6fc011d6..b683127d 100644 --- a/input/single_heliostat.yaml +++ b/input/single_heliostat.yaml @@ -1,5 +1,5 @@ general: - geometry_module: panels3d + geometry_module: heliostats3d output_dir: output/heliostat mesh_only: false structural_analysis: true diff --git a/pvade/fluid/boundary_conditions.py b/pvade/fluid/boundary_conditions.py index 91e6abeb..714d3639 100644 --- a/pvade/fluid/boundary_conditions.py +++ b/pvade/fluid/boundary_conditions.py @@ -171,7 +171,7 @@ def __call__(self, x): * x[1] * (self.params.domain.y_max - x[1]) ) - elif self.params.general.geometry_module == "panels3d": + elif (self.params.general.geometry_module == "panels3d" or self.params.general.geometry_module == "heliostats3d"): if self.current_time < 2.0 and self.params.fluid.time_varying_inflow_bc: time_vary_u_ref = ( @@ -295,6 +295,7 @@ def build_velocity_boundary_conditions(domain, params, functionspace, current_ti if ( params.general.geometry_module == "panels2d" or params.general.geometry_module == "panels3d" + or params.general.geometry_module == "heliostats3d" or params.general.geometry_module == "flag2d" ): for location in ( diff --git a/pvade/geometry/MeshManager.py b/pvade/geometry/MeshManager.py index f4f38656..d2891fce 100644 --- a/pvade/geometry/MeshManager.py +++ b/pvade/geometry/MeshManager.py @@ -67,6 +67,7 @@ def _get_domain_markers(self, params): if ( params.general.geometry_module == "panels2d" or params.general.geometry_module == "panels3d" + or params.general.geometry_module == "heliostats3d" ): for panel_id in range( params.pv_array.stream_rows * params.pv_array.span_rows @@ -141,13 +142,15 @@ def build(self, params): # Only rank 0 builds the geometry and meshes the domain if self.rank == 0: if ( - params.general.geometry_module == "panels3d" + (params.general.geometry_module == "panels3d" + or params.general.geometry_module == "heliostats3d") and params.general.fluid_analysis == True and params.general.structural_analysis == True ): self.geometry.build_FSI(params) elif ( - params.general.geometry_module == "panels3d" + (params.general.geometry_module == "panels3d" + or params.general.geometry_module == "heliostats3d") and params.general.fluid_analysis == False and params.general.structural_analysis == True ): @@ -205,6 +208,7 @@ def build(self, params): if ( params.general.geometry_module == "panels3d" + or params.general.geometry_module == "heliostats3d" or params.general.geometry_module == "flag2d" ): self._create_submeshes_from_parent(params) diff --git a/pvade/geometry/template/TemplateDomainCreation.py b/pvade/geometry/template/TemplateDomainCreation.py index 0318e633..d1b9edb5 100644 --- a/pvade/geometry/template/TemplateDomainCreation.py +++ b/pvade/geometry/template/TemplateDomainCreation.py @@ -102,7 +102,7 @@ def mark_surfaces(self, params, domain_markers): else: if params.general.geometry_module == "cylinder3d": domain_markers[f"cylinder_side"]["gmsh_tags"].append(surf_id) - elif params.general.geometry_module == "panels3d": + elif (params.general.geometry_module == "panels3d" or params.general.geometry_module == "heliostats3d"): # tgging in 3d starts with all panels then moves to domain boundaries # false panels start after boundary if surf_id < surf_tag_list[0][1] + num_of_panel_facets * ( diff --git a/pvade/structure/boundary_conditions.py b/pvade/structure/boundary_conditions.py index 2d25e37d..54ff7b60 100644 --- a/pvade/structure/boundary_conditions.py +++ b/pvade/structure/boundary_conditions.py @@ -142,7 +142,7 @@ def __call__(self, x): * (0.41 - x[1]) / (0.41**2) ) - elif self.params.general.example == "panels3d": + elif (self.params.general.example == "panels3d" or self.params.general.example == "heliostats3d"): inflow_values[0] = ( (self.params.fluid.u_ref) * np.log(((x[2]) - d0) / z0)