From 88bb45ba33b4c3b9c720f62d5d698e7f8803b4a5 Mon Sep 17 00:00:00 2001 From: rcanton Date: Mon, 10 Jul 2023 11:47:59 +0200 Subject: [PATCH 01/11] Add better support for plotting on faces --- src/ansys/dpf/core/common.py | 4 ++++ src/ansys/dpf/core/meshed_region.py | 35 +++++++++++++++++++++++------ src/ansys/dpf/core/plotter.py | 8 ++++++- 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/src/ansys/dpf/core/common.py b/src/ansys/dpf/core/common.py index 7b06e7cab27..d8c8296461a 100644 --- a/src/ansys/dpf/core/common.py +++ b/src/ansys/dpf/core/common.py @@ -202,6 +202,9 @@ class elemental_properties: apdl_element_type = "apdl_element_type" apdl element type property data is provided + + elements_faces_connectivity = "elements_faces_connectivity" + element faces connectivity property data is provided """ element_shape = "elshape" @@ -210,6 +213,7 @@ class elemental_properties: material = "mat" element_properties = "elprops" apdl_element_type = "apdl_element_type" + elements_faces_connectivity = "elements_faces_connectivity" class nodal_properties: diff --git a/src/ansys/dpf/core/meshed_region.py b/src/ansys/dpf/core/meshed_region.py index b3276aca091..d9e51b9f24f 100644 --- a/src/ansys/dpf/core/meshed_region.py +++ b/src/ansys/dpf/core/meshed_region.py @@ -9,7 +9,13 @@ from ansys.dpf.core import scoping, field, property_field from ansys.dpf.core.check_version import server_meet_version, version_requires -from ansys.dpf.core.common import locations, types, nodal_properties +from ansys.dpf.core.common import ( + locations, + types, + nodal_properties, + face_properties, + elemental_properties, +) from ansys.dpf.core.elements import Elements, element_types from ansys.dpf.core.nodes import Nodes from ansys.dpf.core.faces import Faces @@ -622,12 +628,27 @@ def deep_copy(self, server=None): for i, node in enumerate(mesh.nodes.add_nodes(len(node_ids))): node.id = node_ids[i] node.coordinates = coord.get_entity_data(i) - with self.elements.connectivities_field.as_local_field() as connect: - with self.elements.element_types_field.as_local_field() as types: - for i, elem in enumerate(mesh.elements.add_elements(len(element_ids))): - elem.id = element_ids[i] - elem.connectivity = connect.get_entity_data(i) - elem.shape = element_types.shape(types.get_entity_data(i)[0]) + if len(element_ids) > 0: + with self.elements.connectivities_field.as_local_field() as connect: + with self.elements.element_types_field.as_local_field() as types: + for i, elem in enumerate(mesh.elements.add_elements(len(element_ids))): + elem.id = element_ids[i] + elem.connectivity = connect.get_entity_data(i) + elem.shape = element_types.shape(types.get_entity_data(i)[0]) + if len(self.faces.scoping.ids) > 0: + with self.property_field( + face_properties.faces_nodes_connectivity + ).as_local_field() as f_n_conn: + mesh.set_property_field(face_properties.faces_nodes_connectivity, f_n_conn) + with self.property_field(face_properties.faces_type).as_local_field() as f_types: + mesh.set_property_field(face_properties.faces_type, f_types) + if elemental_properties.elements_faces_connectivity in self.available_property_fields: + with self.property_field( + elemental_properties.elements_faces_connectivity + ).as_local_field() as c_f_conn: + mesh.set_property_field( + elemental_properties.elements_faces_connectivity, c_f_conn + ) mesh.unit = self.unit return mesh diff --git a/src/ansys/dpf/core/plotter.py b/src/ansys/dpf/core/plotter.py index fd125fe35bb..08db6c0cfdb 100644 --- a/src/ansys/dpf/core/plotter.py +++ b/src/ansys/dpf/core/plotter.py @@ -267,8 +267,14 @@ def add_field( warnings.warn("`show_max` and `show_min` is only supported for Nodal results.") show_max = False show_min = False + elif location == locations.faces: + mesh_location = meshed_region.faces + if show_max or show_min: + warnings.warn("`show_max` and `show_min` is only supported for Nodal results.") + show_max = False + show_min = False else: - raise ValueError("Only elemental or nodal location are supported for plotting.") + raise ValueError("Only elemental, nodal or faces location are supported for plotting.") component_count = field.component_count if component_count > 1: overall_data = np.full((len(mesh_location), component_count), np.nan) From 7867f000705f54dacd6f9f9484cf3910b5ce7e5c Mon Sep 17 00:00:00 2001 From: rcanton Date: Wed, 12 Jul 2023 12:23:04 +0200 Subject: [PATCH 02/11] deep_copy mesh with an operator --- src/ansys/dpf/core/common.py | 53 +++++++++++++++++++++++++++++ src/ansys/dpf/core/core.py | 30 ++++++++++++++++ src/ansys/dpf/core/meshed_region.py | 44 +++--------------------- 3 files changed, 87 insertions(+), 40 deletions(-) diff --git a/src/ansys/dpf/core/common.py b/src/ansys/dpf/core/common.py index d8c8296461a..68d9b5b1548 100644 --- a/src/ansys/dpf/core/common.py +++ b/src/ansys/dpf/core/common.py @@ -153,6 +153,59 @@ def types_enum_to_types(): } +def types_to_types_enum(): + from ansys.dpf.core import ( + cyclic_support, + data_sources, + field, + fields_container, + collection, + meshed_region, + meshes_container, + property_field, + string_field, + custom_type_field, + result_info, + scoping, + scopings_container, + time_freq_support, + dpf_operator, + data_tree, + workflow, + streams_container, + generic_data_container, + ) + from ansys.dpf.gate import dpf_vector + + return { + str: types.string, + int: types.int, + float: types.double, + bool: types.bool, + collection.Collection: types.collection, + fields_container.FieldsContainer: types.fields_container, + scopings_container.ScopingsContainer: types.scopings_container, + meshes_container.MeshesContainer: types.meshes_container, + field.Field: types.field, + data_sources.DataSources: types.data_sources, + cyclic_support.CyclicSupport: types.cyclic_support, + workflow.Workflow: types.workflow, + time_freq_support.TimeFreqSupport: types.time_freq_support, + meshed_region.MeshedRegion: types.meshed_region, + result_info.ResultInfo: types.result_info, + property_field.PropertyField: types.property_field, + data_tree.DataTree: types.data_tree, + dpf_operator.Operator: types.operator, + scoping.Scoping: types.scoping, + dpf_vector.DPFVectorInt: types.vec_int, + dpf_vector.DPFVectorDouble: types.vec_double, + string_field.StringField: types.string_field, + custom_type_field.CustomTypeField: types.custom_type_field, + streams_container.StreamsContainer: types.streams_container, + generic_data_container.GenericDataContainer: types.generic_data_container, + } + + class natures(Enum): """The ``'natures'`` enum contains the dimensionality types. It can be used to create a field of a given dimensionality. diff --git a/src/ansys/dpf/core/core.py b/src/ansys/dpf/core/core.py index aeadac49b4a..352bd2ccf91 100644 --- a/src/ansys/dpf/core/core.py +++ b/src/ansys/dpf/core/core.py @@ -263,6 +263,36 @@ def _description(dpf_entity_message, server=None): return "" +def _deep_copy(dpf_entity_message, server=None): + """Returns a copy of the entity in the requested server + + Parameters + ---------- + dpf_entity_message: core.Operator._message, core.Workflow._message, + core.Scoping._message, core.Field._message, + core.FieldContainer._message, core.MeshedRegion._message... + Dpf entity to deep_copy + + server : server.DPFServer, optional + Server with channel connected to the remote or local instance. When + ``None``, attempts to use the global server. + + Returns + ------- + deep_copy of dpf_entity_message: core.Operator._message, core.Workflow._message, + core.Scoping._message, core.Field._message, + core.FieldContainer._message, core.MeshedRegion._message... + """ + from ansys.dpf.core.operators.serialization import serializer_to_string, string_deserializer + from ansys.dpf.core.common import types_to_types_enum + + serializer = serializer_to_string(server=server) + serializer.connect(1, dpf_entity_message) + deserializer = string_deserializer(server=server) + deserializer.connect(0, serializer, 0) + return deserializer.get_output(1, types_to_types_enum()[dpf_entity_message.__class__]) + + class BaseService: """The Base Service class allows to make generic requests to dpf's server. For example, information about the server can be requested, diff --git a/src/ansys/dpf/core/meshed_region.py b/src/ansys/dpf/core/meshed_region.py index d9e51b9f24f..8cfa78fc285 100644 --- a/src/ansys/dpf/core/meshed_region.py +++ b/src/ansys/dpf/core/meshed_region.py @@ -13,10 +13,8 @@ locations, types, nodal_properties, - face_properties, - elemental_properties, ) -from ansys.dpf.core.elements import Elements, element_types +from ansys.dpf.core.elements import Elements from ansys.dpf.core.nodes import Nodes from ansys.dpf.core.faces import Faces from ansys.dpf.core.plotter import DpfPlotter, Plotter @@ -593,11 +591,6 @@ def deep_copy(self, server=None): This method is useful for passing data from one server instance to another. - .. warning:: - Only nodes scoping and coordinates and elements scoping, connectivity, - and types are copied. The eventual property field for elemental properties - and named selection will not be copied. - Parameters ---------- server : ansys.dpf.core.server, optional @@ -619,38 +612,9 @@ def deep_copy(self, server=None): >>> deep_copy = meshed_region.deep_copy(server=other_server) """ - if self.nodes.scoping is None: # empty Mesh - return MeshedRegion() - node_ids = self.nodes.scoping.ids - element_ids = self.elements.scoping.ids - mesh = MeshedRegion(num_nodes=len(node_ids), num_elements=len(element_ids), server=server) - with self.nodes.coordinates_field.as_local_field() as coord: - for i, node in enumerate(mesh.nodes.add_nodes(len(node_ids))): - node.id = node_ids[i] - node.coordinates = coord.get_entity_data(i) - if len(element_ids) > 0: - with self.elements.connectivities_field.as_local_field() as connect: - with self.elements.element_types_field.as_local_field() as types: - for i, elem in enumerate(mesh.elements.add_elements(len(element_ids))): - elem.id = element_ids[i] - elem.connectivity = connect.get_entity_data(i) - elem.shape = element_types.shape(types.get_entity_data(i)[0]) - if len(self.faces.scoping.ids) > 0: - with self.property_field( - face_properties.faces_nodes_connectivity - ).as_local_field() as f_n_conn: - mesh.set_property_field(face_properties.faces_nodes_connectivity, f_n_conn) - with self.property_field(face_properties.faces_type).as_local_field() as f_types: - mesh.set_property_field(face_properties.faces_type, f_types) - if elemental_properties.elements_faces_connectivity in self.available_property_fields: - with self.property_field( - elemental_properties.elements_faces_connectivity - ).as_local_field() as c_f_conn: - mesh.set_property_field( - elemental_properties.elements_faces_connectivity, c_f_conn - ) - mesh.unit = self.unit - return mesh + from ansys.dpf.core.core import _deep_copy + + return _deep_copy(self, server=self._server) def field_of_properties(self, property_name): """ From de248437cc432ee2d784cd2fcecd35e2a2ce99c9 Mon Sep 17 00:00:00 2001 From: rcanton Date: Wed, 12 Jul 2023 12:53:35 +0200 Subject: [PATCH 03/11] use passed server --- src/ansys/dpf/core/core.py | 16 +++++++--------- src/ansys/dpf/core/meshed_region.py | 2 +- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/ansys/dpf/core/core.py b/src/ansys/dpf/core/core.py index 352bd2ccf91..06623cffe6c 100644 --- a/src/ansys/dpf/core/core.py +++ b/src/ansys/dpf/core/core.py @@ -263,14 +263,13 @@ def _description(dpf_entity_message, server=None): return "" -def _deep_copy(dpf_entity_message, server=None): +def _deep_copy(dpf_entity, server=None): """Returns a copy of the entity in the requested server Parameters ---------- - dpf_entity_message: core.Operator._message, core.Workflow._message, - core.Scoping._message, core.Field._message, - core.FieldContainer._message, core.MeshedRegion._message... + dpf_entity: core.Operator, core.Workflow, core.Scoping, + core.Field, core.FieldsContainer, core.MeshedRegion... Dpf entity to deep_copy server : server.DPFServer, optional @@ -279,18 +278,17 @@ def _deep_copy(dpf_entity_message, server=None): Returns ------- - deep_copy of dpf_entity_message: core.Operator._message, core.Workflow._message, - core.Scoping._message, core.Field._message, - core.FieldContainer._message, core.MeshedRegion._message... + deep_copy of dpf_entity: core.Operator, core.Workflow, core.Scoping, + core.Field, core.FieldsContainer, core.MeshedRegion... """ from ansys.dpf.core.operators.serialization import serializer_to_string, string_deserializer from ansys.dpf.core.common import types_to_types_enum serializer = serializer_to_string(server=server) - serializer.connect(1, dpf_entity_message) + serializer.connect(1, dpf_entity) deserializer = string_deserializer(server=server) deserializer.connect(0, serializer, 0) - return deserializer.get_output(1, types_to_types_enum()[dpf_entity_message.__class__]) + return deserializer.get_output(1, types_to_types_enum()[dpf_entity.__class__]) class BaseService: diff --git a/src/ansys/dpf/core/meshed_region.py b/src/ansys/dpf/core/meshed_region.py index 8cfa78fc285..55cf9598728 100644 --- a/src/ansys/dpf/core/meshed_region.py +++ b/src/ansys/dpf/core/meshed_region.py @@ -614,7 +614,7 @@ def deep_copy(self, server=None): """ from ansys.dpf.core.core import _deep_copy - return _deep_copy(self, server=self._server) + return _deep_copy(self, server=server) def field_of_properties(self, property_name): """ From 084e884af7d093c3e1ade37f6c80f66bcbe6ba03 Mon Sep 17 00:00:00 2001 From: rcanton Date: Wed, 12 Jul 2023 15:21:45 +0200 Subject: [PATCH 04/11] legacy behavior for legacy server --- src/ansys/dpf/core/meshed_region.py | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/ansys/dpf/core/meshed_region.py b/src/ansys/dpf/core/meshed_region.py index 55cf9598728..7dfefe091c7 100644 --- a/src/ansys/dpf/core/meshed_region.py +++ b/src/ansys/dpf/core/meshed_region.py @@ -14,7 +14,7 @@ types, nodal_properties, ) -from ansys.dpf.core.elements import Elements +from ansys.dpf.core.elements import Elements, element_types from ansys.dpf.core.nodes import Nodes from ansys.dpf.core.faces import Faces from ansys.dpf.core.plotter import DpfPlotter, Plotter @@ -612,9 +612,30 @@ def deep_copy(self, server=None): >>> deep_copy = meshed_region.deep_copy(server=other_server) """ - from ansys.dpf.core.core import _deep_copy + if self._server.config.legacy: + if self.nodes.scoping is None: # empty Mesh + return MeshedRegion() + node_ids = self.nodes.scoping.ids + element_ids = self.elements.scoping.ids + mesh = MeshedRegion( + num_nodes=len(node_ids), num_elements=len(element_ids), server=server + ) + with self.nodes.coordinates_field.as_local_field() as coord: + for i, node in enumerate(mesh.nodes.add_nodes(len(node_ids))): + node.id = node_ids[i] + node.coordinates = coord.get_entity_data(i) + with self.elements.connectivities_field.as_local_field() as connect: + with self.elements.element_types_field.as_local_field() as types: + for i, elem in enumerate(mesh.elements.add_elements(len(element_ids))): + elem.id = element_ids[i] + elem.connectivity = connect.get_entity_data(i) + elem.shape = element_types.shape(types.get_entity_data(i)[0]) + mesh.unit = self.unit + return mesh + else: + from ansys.dpf.core.core import _deep_copy - return _deep_copy(self, server=server) + return _deep_copy(self, server=server) def field_of_properties(self, property_name): """ From 66122eb50006c67c14cc34676afd95e567e01a43 Mon Sep 17 00:00:00 2001 From: rcanton Date: Wed, 12 Jul 2023 19:12:21 +0200 Subject: [PATCH 05/11] Improve MeshInfo api. Begin example --- examples/04-advanced/14-fluids-averaging.py | 70 ++++++++++++++++++++ src/ansys/dpf/core/generic_data_container.py | 27 +++++++- src/ansys/dpf/core/mesh_info.py | 5 +- 3 files changed, 97 insertions(+), 5 deletions(-) create mode 100644 examples/04-advanced/14-fluids-averaging.py diff --git a/examples/04-advanced/14-fluids-averaging.py b/examples/04-advanced/14-fluids-averaging.py new file mode 100644 index 00000000000..ab33e20c05d --- /dev/null +++ b/examples/04-advanced/14-fluids-averaging.py @@ -0,0 +1,70 @@ +""" +.. _ref_fluids_averaging: + +Nodal reconstruction for Elemental and Face results +------------------------------------------------------ + +This example demonstrates how you can postprocess Fluent results. In particular, +it demonstrates the specific averaging capabilities to reconstruct to the nodes +results defined on centroids of Elements and Faces. +""" + +############################################################################### +# Import the result file and create a model + +import ansys.dpf.core as dpf +from ansys.dpf.core import examples + +path = examples.download_fluent_axial_comp()["flprj"] +ds = dpf.DataSources(path) +model = dpf.Model(data_sources=ds) + +############################################################################### +# Explore the available results through the ResultInfo. This is a Fluent model +# whose native results are exported to either the centroid of the elements (like +# Enthalpy or RMS Temperature), the centroid of the faces (like the Mass Flow Rate) +# or the centroid of both elements and faces (like Static Pressure). + +print(model.metadata.result_info) + +############################################################################### +# Explore the mesh through the MeshInfo. The MeshInfo provides metadata information +# about the mesh. For fluid models, it is useful to know the cell and face zones, +# as well as the topological relationships between them. First get all the available +# information in the MeshInfo + +minfo = model.metadata.mesh_info +print( + "\n".join( + "{}\t{}".format(k, v) + for k, v in minfo.generic_data_container.get_property_description().items() + ) +) + +############################################################################### +# Then, get the bodies and their names in the model. In this model there are two +# bodies + +print(minfo.get_property("body_name")) + +############################################################################### +# Each body is comprised of a set of cell zones. You can investigate the hierarchical +# relationship between bodies and cell zones. In this case, each body is only comprised +# of one cell zone + +print(minfo.get_property("body_cell_topology")) + +############################################################################### +# Similarly, each body is limited by a set of face zones (generally representing +# boundary conditions of the model). You can investigate the hierarchical +# relationship between bodies and face zones. In this case, each body is limited +# by several face zones + +print(minfo.get_property("body_face_topology")) + +############################################################################### +# The body and face zone ids shown in the previous PropertyFields can be mapped +# to their names + +print(minfo.get_property("cell_zone_names")) +# print(minfo.get_property("face_zone_names")) # hangs forever. infinite loop¿ diff --git a/src/ansys/dpf/core/generic_data_container.py b/src/ansys/dpf/core/generic_data_container.py index bac09723dd4..485f3f7936e 100644 --- a/src/ansys/dpf/core/generic_data_container.py +++ b/src/ansys/dpf/core/generic_data_container.py @@ -95,14 +95,13 @@ def set_property(self, property_name, prop): any_dpf = Any.new_from(prop, self._server) self._api.generic_data_container_set_property_any(self, property_name, any_dpf) - def get_property(self, property_name, output_type): + def get_property(self, property_name): """Get property with given name. Parameters ---------- property_name : str Property name. - output_type : :class:`ansys.dpf.core.common.types` Returns ------- @@ -111,8 +110,32 @@ def get_property(self, property_name, output_type): """ any_ptr = self._api.generic_data_container_get_property_any(self, property_name) any_dpf = Any(any_ptr, self._server) + output_type = self._type_to_output_method[self.get_property_description()[property_name]] return any_dpf.cast(output_type) + @property + def _type_to_output_method(self): + # Only the types in any.py need to be casted + from ansys.dpf.core import ( + field, + property_field, + string_field, + scoping, + ) + + out = { + "bool": bool, + "int": int, + "str": str, + "float": float, + "Field": field.Field, + "PropertyField": property_field.PropertyField, + "StringField": string_field.StringField, + "Scoping": scoping.Scoping, + "GenericDataContainer": GenericDataContainer, + } + return out + def get_property_description(self): """Get a dictionary description of properties by name and data type diff --git a/src/ansys/dpf/core/mesh_info.py b/src/ansys/dpf/core/mesh_info.py index 335b7d147ab..7354f42c1d2 100644 --- a/src/ansys/dpf/core/mesh_info.py +++ b/src/ansys/dpf/core/mesh_info.py @@ -104,21 +104,20 @@ def deep_copy(self, server=None): mesh_info.generic_data_container = self._generic_data_container.deep_copy(server) return mesh_info - def get_property(self, property_name, output_type): + def get_property(self, property_name): """Get property with given name. Parameters ---------- property_name : str Property name. - output_type : :class:`ansys.dpf.core.common.types` Returns ------- type Property object instance. """ - return self.generic_data_container.get_property(property_name, output_type) + return self.generic_data_container.get_property(property_name) def set_property(self, property_name, prop): """Register given property with the given name. From 33fd1bb1becc23e639af8c54724dd2956471f36f Mon Sep 17 00:00:00 2001 From: rcanton Date: Wed, 12 Jul 2023 19:30:00 +0200 Subject: [PATCH 06/11] Update all get_property calls --- src/ansys/dpf/core/mesh_info.py | 10 ++-- tests/test_generic_data_container.py | 8 ++-- tests/test_mesh_info.py | 68 ++++++++++++++-------------- 3 files changed, 42 insertions(+), 44 deletions(-) diff --git a/src/ansys/dpf/core/mesh_info.py b/src/ansys/dpf/core/mesh_info.py index 7354f42c1d2..be060294be1 100644 --- a/src/ansys/dpf/core/mesh_info.py +++ b/src/ansys/dpf/core/mesh_info.py @@ -4,8 +4,6 @@ """ from ansys.dpf.core import server as server_module from ansys.dpf.core.generic_data_container import GenericDataContainer -from ansys.dpf.core.scoping import Scoping -from ansys.dpf.core.string_field import StringField class MeshInfo: @@ -141,7 +139,7 @@ def get_number_nodes(self): Number of nodes of the mesh. """ - return self.generic_data_container.get_property("num_nodes", int) + return self.generic_data_container.get_property("num_nodes") @property def get_number_elements(self): @@ -152,7 +150,7 @@ def get_number_elements(self): Number of elements of the mesh. """ - return self.generic_data_container.get_property("num_elements", int) + return self.generic_data_container.get_property("num_elements") @property def get_splittable_by(self): @@ -163,7 +161,7 @@ def get_splittable_by(self): Name of the properties according to which the mesh can be split by. """ - return self.generic_data_container.get_property("splittable_by", StringField) + return self.generic_data_container.get_property("splittable_by") @property def get_available_elem_types(self): @@ -174,7 +172,7 @@ def get_available_elem_types(self): element type available for the mesh. """ - return self.generic_data_container.get_property("avalaible_elem_type", Scoping) + return self.generic_data_container.get_property("avalaible_elem_type") def set_number_nodes(self, number_of_nodes): """Set the number of nodes in the mesh""" diff --git a/tests/test_generic_data_container.py b/tests/test_generic_data_container.py index 5e9189140e1..d239808b4a5 100644 --- a/tests/test_generic_data_container.py +++ b/tests/test_generic_data_container.py @@ -20,7 +20,7 @@ def test_set_get_property_generic_data_container(server_type): gdc = dpf.GenericDataContainer(server=server_type) entity = dpf.Field(location="phase", nature=dpf.natures.scalar, server=server_type) gdc.set_property("viscosity", entity) - new_entity = gdc.get_property("viscosity", dpf.Field) + new_entity = gdc.get_property("viscosity") assert entity.location == new_entity.location @@ -31,17 +31,17 @@ def test_get_property_description_generic_data_container(server_type): gdc = dpf.GenericDataContainer(server=server_type) entity = 42 gdc.set_property("my-int", entity) - new_entity = gdc.get_property("my-int", int) + new_entity = gdc.get_property("my-int") assert 42 == new_entity entity = 4.2 gdc.set_property("my-float", entity) - new_entity = gdc.get_property("my-float", float) + new_entity = gdc.get_property("my-float") assert 4.2 == new_entity entity = "hello world" gdc.set_property("my-string", entity) - new_entity = gdc.get_property("my-string", str) + new_entity = gdc.get_property("my-string") assert "hello world" == new_entity entity = dpf.Field(location="phase", nature=dpf.natures.scalar, server=server_type) diff --git a/tests/test_mesh_info.py b/tests/test_mesh_info.py index a12df5bed28..2371f5ac19f 100644 --- a/tests/test_mesh_info.py +++ b/tests/test_mesh_info.py @@ -103,14 +103,14 @@ def test_set_get_property_mesh_info(server_type): expected_ids = [1, 2, 3] scoping._set_ids(expected_ids) mesh_info.set_property("my-property00", scoping) - result_scoping = mesh_info.get_property("my-property00", dpf.Scoping) + result_scoping = mesh_info.get_property("my-property00") for x in range(len(expected_ids)): assert result_scoping.id(x) == scoping.id(x) # """ Field """ field = dpf.Field(server=server_type) mesh_info.set_property("my-property01", field) - result_field = mesh_info.get_property("my-property01", dpf.Field) + result_field = mesh_info.get_property("my-property01") assert result_field.component_count == field.component_count @@ -159,9 +159,9 @@ def test_output_mesh_info_provider_fluent(server_clayer): assert isinstance(mesh_info_out, dpf.mesh_info.MeshInfo) # """************************ NUMBER OF CELLS/FACES/ZONES ************************""" - num_cells = mesh_info_out.get_property("num_cells", int) - num_faces = mesh_info_out.get_property("num_faces", int) - num_nodes = mesh_info_out.get_property("num_nodes", int) + num_cells = mesh_info_out.get_property("num_cells") + num_faces = mesh_info_out.get_property("num_faces") + num_nodes = mesh_info_out.get_property("num_nodes") assert num_cells == 1344 assert num_faces == 2773 @@ -170,7 +170,7 @@ def test_output_mesh_info_provider_fluent(server_clayer): # """************************ BODIES ************************""" # """************ Name ************""" - body_names = mesh_info_out.get_property("body_name", dpf.StringField) + body_names = mesh_info_out.get_property("body_name") body_names_value = body_names._get_data() @@ -178,14 +178,14 @@ def test_output_mesh_info_provider_fluent(server_clayer): assert body_names_value[0] == "fluid-1" # """************ Scoping ************""" - body_scoping = mesh_info_out.get_property("body_scoping", dpf.Scoping) + body_scoping = mesh_info_out.get_property("body_scoping") assert body_scoping.size == 1 assert body_scoping[0] == 1 # """************ Topology ************""" - body_cell_topology = mesh_info_out.get_property("body_cell_topology", dpf.PropertyField) - body_face_topology = mesh_info_out.get_property("body_face_topology", dpf.PropertyField) + body_cell_topology = mesh_info_out.get_property("body_cell_topology") + body_face_topology = mesh_info_out.get_property("body_face_topology") body_cell_topology_scoping = body_cell_topology._get_scoping() body_face_topology_scoping = body_face_topology._get_scoping() @@ -202,7 +202,7 @@ def test_output_mesh_info_provider_fluent(server_clayer): # """************************ ZONES ************************""" # """************ Name ************""" - zone_names = mesh_info_out.get_property("zone_name", dpf.StringField) + zone_names = mesh_info_out.get_property("zone_name") zone_names_value = zone_names._get_data() @@ -214,7 +214,7 @@ def test_output_mesh_info_provider_fluent(server_clayer): assert zone_names_value[5] == "velocity-inlet-7" # """************ Scoping ************""" - zone_scoping = mesh_info_out.get_property("zone_scoping", dpf.Scoping) + zone_scoping = mesh_info_out.get_property("zone_scoping") assert zone_scoping.size == 6 assert zone_scoping[0] == 1 @@ -224,7 +224,7 @@ def test_output_mesh_info_provider_fluent(server_clayer): assert zone_scoping[5] == 7 # """************ Element ************""" - zone_elements = mesh_info_out.get_property("num_elem_zone", dpf.PropertyField) + zone_elements = mesh_info_out.get_property("num_elem_zone") number_of_element_in_zone_value = zone_elements._get_data() @@ -238,7 +238,7 @@ def test_output_mesh_info_provider_fluent(server_clayer): # """************ CELL ZONES ************""" # """************ Name ************""" - cell_zone_name = mesh_info_out.get_property("cell_zone_names", dpf.StringField) + cell_zone_name = mesh_info_out.get_property("cell_zone_names") cell_zone_name_value = cell_zone_name._get_data() @@ -246,13 +246,13 @@ def test_output_mesh_info_provider_fluent(server_clayer): assert cell_zone_name_value[0] == "fluid-1" # """************ Scoping ************""" - cell_zone_scoping = mesh_info_out.get_property("cell_zone_scoping", dpf.Scoping) + cell_zone_scoping = mesh_info_out.get_property("cell_zone_scoping") assert cell_zone_scoping.size == 1 assert cell_zone_scoping[0] == 1 # """************ Element ************""" - cell_zone_elements = mesh_info_out.get_property("cell_zone_elements", dpf.PropertyField) + cell_zone_elements = mesh_info_out.get_property("cell_zone_elements") cell_zone_elements_value = cell_zone_elements._get_data() @@ -262,7 +262,7 @@ def test_output_mesh_info_provider_fluent(server_clayer): # """************ FACE ZONES ************""" # """************ Name ************""" - face_zone_names = mesh_info_out.get_property("face_zone_names", dpf.StringField) + face_zone_names = mesh_info_out.get_property("face_zone_names") face_zone_names_value = face_zone_names._get_data() @@ -274,7 +274,7 @@ def test_output_mesh_info_provider_fluent(server_clayer): assert face_zone_names_value[4] == "velocity-inlet-7" # """************ Scoping ************""" - face_zone_scoping = mesh_info_out.get_property("face_zone_scoping", dpf.Scoping) + face_zone_scoping = mesh_info_out.get_property("face_zone_scoping") assert face_zone_scoping.size == 5 assert face_zone_scoping[0] == 3 @@ -284,7 +284,7 @@ def test_output_mesh_info_provider_fluent(server_clayer): assert face_zone_scoping[4] == 7 # """************ Element ************""" - face_zone_elements = mesh_info_out.get_property("face_zone_elements", dpf.PropertyField) + face_zone_elements = mesh_info_out.get_property("face_zone_elements") face_zone_elements_value = face_zone_elements._get_data() @@ -305,9 +305,9 @@ def test_output_mesh_info_provider_flprj(fluent_axial_comp, server_clayer): # """************************ NUMBER OF CELLS/FACES/ZONES ************************""" - num_cells = res.get_property("num_cells", int) - num_faces = res.get_property("num_faces", int) - num_nodes = res.get_property("num_nodes", int) + num_cells = res.get_property("num_cells") + num_faces = res.get_property("num_faces") + num_nodes = res.get_property("num_nodes") assert num_cells == 13856 assert num_faces == 45391 @@ -316,7 +316,7 @@ def test_output_mesh_info_provider_flprj(fluent_axial_comp, server_clayer): # """************************ BODIES ************************""" # """************ Name ************""" - body_names = res.get_property("body_name", dpf.StringField) + body_names = res.get_property("body_name") body_names_value = body_names._get_data() @@ -325,15 +325,15 @@ def test_output_mesh_info_provider_flprj(fluent_axial_comp, server_clayer): assert body_names_value[1] == "fluid-stator" # """************ Scoping ************""" - body_scoping = res.get_property("body_scoping", dpf.Scoping) + body_scoping = res.get_property("body_scoping") assert body_scoping.size == 2 assert body_scoping[0] == 13 assert body_scoping[1] == 28 # """************ Topology ************""" - body_cell_topology = res.get_property("body_cell_topology", dpf.PropertyField) - body_face_topology = res.get_property("body_face_topology", dpf.PropertyField) + body_cell_topology = res.get_property("body_cell_topology") + body_face_topology = res.get_property("body_face_topology") body_cell_topology_scoping = body_cell_topology._get_scoping() body_face_topology_scoping = body_face_topology._get_scoping() @@ -350,7 +350,7 @@ def test_output_mesh_info_provider_flprj(fluent_axial_comp, server_clayer): # """************************ ZONES ************************""" # """************ Name ************""" - zone_names = res.get_property("zone_name", dpf.StringField) + zone_names = res.get_property("zone_name") zone_names_value = zone_names._get_data() @@ -365,7 +365,7 @@ def test_output_mesh_info_provider_flprj(fluent_axial_comp, server_clayer): assert zone_names_value[25] == "stator-per-1-shadow" # """************ Scoping ************""" - zone_scoping = res.get_property("zone_scoping", dpf.Scoping) + zone_scoping = res.get_property("zone_scoping") assert zone_scoping.size == 26 assert zone_scoping[0] == 13 @@ -378,7 +378,7 @@ def test_output_mesh_info_provider_flprj(fluent_axial_comp, server_clayer): assert zone_scoping[25] == 27 # """************ Element ************""" - zone_elements = res.get_property("num_elem_zone", dpf.PropertyField) + zone_elements = res.get_property("num_elem_zone") number_of_element_in_zone_value = zone_elements._get_data() @@ -395,7 +395,7 @@ def test_output_mesh_info_provider_flprj(fluent_axial_comp, server_clayer): # """************ CELL ZONES ************""" # """************ Name ************""" - cell_zone_name = res.get_property("cell_zone_names", dpf.StringField) + cell_zone_name = res.get_property("cell_zone_names") cell_zone_name_value = cell_zone_name._get_data() @@ -404,14 +404,14 @@ def test_output_mesh_info_provider_flprj(fluent_axial_comp, server_clayer): assert cell_zone_name_value[1] == "fluid-stator" # """************ Scoping ************""" - cell_zone_scoping = res.get_property("cell_zone_scoping", dpf.Scoping) + cell_zone_scoping = res.get_property("cell_zone_scoping") assert cell_zone_scoping.size == 2 assert cell_zone_scoping[0] == 13 assert cell_zone_scoping[1] == 28 # """************ Element ************""" - cell_zone_elements = res.get_property("cell_zone_elements", dpf.PropertyField) + cell_zone_elements = res.get_property("cell_zone_elements") cell_zone_elements_value = cell_zone_elements._get_data() @@ -422,7 +422,7 @@ def test_output_mesh_info_provider_flprj(fluent_axial_comp, server_clayer): # """************ FACE ZONES ************""" # """************ Name ************""" - face_zone_names = res.get_property("face_zone_names", dpf.StringField) + face_zone_names = res.get_property("face_zone_names") face_zone_names_value = face_zone_names._get_data() @@ -436,7 +436,7 @@ def test_output_mesh_info_provider_flprj(fluent_axial_comp, server_clayer): assert face_zone_names_value[23] == "stator-per-1-shadow" # """************ Scoping ************""" - face_zone_scoping = res.get_property("face_zone_scoping", dpf.Scoping) + face_zone_scoping = res.get_property("face_zone_scoping") assert face_zone_scoping.size == 24 assert face_zone_scoping[0] == 2 @@ -448,7 +448,7 @@ def test_output_mesh_info_provider_flprj(fluent_axial_comp, server_clayer): assert face_zone_scoping[23] == 27 # """************ Element ************""" - face_zone_elements = res.get_property("face_zone_elements", dpf.PropertyField) + face_zone_elements = res.get_property("face_zone_elements") face_zone_elements_value = face_zone_elements._get_data() From 9e499f8e29f7db483d8289b0ec3d30c0ccc6965b Mon Sep 17 00:00:00 2001 From: rcanton Date: Wed, 12 Jul 2023 19:47:11 +0200 Subject: [PATCH 07/11] fix missing test --- tests/test_any.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_any.py b/tests/test_any.py index 24a194119ca..49e42573202 100644 --- a/tests/test_any.py +++ b/tests/test_any.py @@ -90,7 +90,7 @@ def test_cast_generic_data_container_any(server_type): any_dpf = dpf.Any.new_from(entity) new_entity = any_dpf.cast() - new_field = new_entity.get_property("field", dpf.Field) + new_field = new_entity.get_property("field") assert field.location == new_field.location From fa3932624916df91034faddee1d7186c6cab01fd Mon Sep 17 00:00:00 2001 From: rcanton Date: Thu, 13 Jul 2023 08:17:52 +0200 Subject: [PATCH 08/11] New API for mesh_info --- examples/04-advanced/14-fluids-averaging.py | 70 --------------------- src/ansys/dpf/core/common.py | 57 ----------------- src/ansys/dpf/core/core.py | 28 --------- src/ansys/dpf/core/plotter.py | 8 +-- 4 files changed, 1 insertion(+), 162 deletions(-) delete mode 100644 examples/04-advanced/14-fluids-averaging.py diff --git a/examples/04-advanced/14-fluids-averaging.py b/examples/04-advanced/14-fluids-averaging.py deleted file mode 100644 index ab33e20c05d..00000000000 --- a/examples/04-advanced/14-fluids-averaging.py +++ /dev/null @@ -1,70 +0,0 @@ -""" -.. _ref_fluids_averaging: - -Nodal reconstruction for Elemental and Face results ------------------------------------------------------- - -This example demonstrates how you can postprocess Fluent results. In particular, -it demonstrates the specific averaging capabilities to reconstruct to the nodes -results defined on centroids of Elements and Faces. -""" - -############################################################################### -# Import the result file and create a model - -import ansys.dpf.core as dpf -from ansys.dpf.core import examples - -path = examples.download_fluent_axial_comp()["flprj"] -ds = dpf.DataSources(path) -model = dpf.Model(data_sources=ds) - -############################################################################### -# Explore the available results through the ResultInfo. This is a Fluent model -# whose native results are exported to either the centroid of the elements (like -# Enthalpy or RMS Temperature), the centroid of the faces (like the Mass Flow Rate) -# or the centroid of both elements and faces (like Static Pressure). - -print(model.metadata.result_info) - -############################################################################### -# Explore the mesh through the MeshInfo. The MeshInfo provides metadata information -# about the mesh. For fluid models, it is useful to know the cell and face zones, -# as well as the topological relationships between them. First get all the available -# information in the MeshInfo - -minfo = model.metadata.mesh_info -print( - "\n".join( - "{}\t{}".format(k, v) - for k, v in minfo.generic_data_container.get_property_description().items() - ) -) - -############################################################################### -# Then, get the bodies and their names in the model. In this model there are two -# bodies - -print(minfo.get_property("body_name")) - -############################################################################### -# Each body is comprised of a set of cell zones. You can investigate the hierarchical -# relationship between bodies and cell zones. In this case, each body is only comprised -# of one cell zone - -print(minfo.get_property("body_cell_topology")) - -############################################################################### -# Similarly, each body is limited by a set of face zones (generally representing -# boundary conditions of the model). You can investigate the hierarchical -# relationship between bodies and face zones. In this case, each body is limited -# by several face zones - -print(minfo.get_property("body_face_topology")) - -############################################################################### -# The body and face zone ids shown in the previous PropertyFields can be mapped -# to their names - -print(minfo.get_property("cell_zone_names")) -# print(minfo.get_property("face_zone_names")) # hangs forever. infinite loop¿ diff --git a/src/ansys/dpf/core/common.py b/src/ansys/dpf/core/common.py index c115c419b34..36a6d1448e1 100644 --- a/src/ansys/dpf/core/common.py +++ b/src/ansys/dpf/core/common.py @@ -156,59 +156,6 @@ def types_enum_to_types(): } -def types_to_types_enum(): - from ansys.dpf.core import ( - cyclic_support, - data_sources, - field, - fields_container, - collection, - meshed_region, - meshes_container, - property_field, - string_field, - custom_type_field, - result_info, - scoping, - scopings_container, - time_freq_support, - dpf_operator, - data_tree, - workflow, - streams_container, - generic_data_container, - ) - from ansys.dpf.gate import dpf_vector - - return { - str: types.string, - int: types.int, - float: types.double, - bool: types.bool, - collection.Collection: types.collection, - fields_container.FieldsContainer: types.fields_container, - scopings_container.ScopingsContainer: types.scopings_container, - meshes_container.MeshesContainer: types.meshes_container, - field.Field: types.field, - data_sources.DataSources: types.data_sources, - cyclic_support.CyclicSupport: types.cyclic_support, - workflow.Workflow: types.workflow, - time_freq_support.TimeFreqSupport: types.time_freq_support, - meshed_region.MeshedRegion: types.meshed_region, - result_info.ResultInfo: types.result_info, - property_field.PropertyField: types.property_field, - data_tree.DataTree: types.data_tree, - dpf_operator.Operator: types.operator, - scoping.Scoping: types.scoping, - dpf_vector.DPFVectorInt: types.vec_int, - dpf_vector.DPFVectorDouble: types.vec_double, - string_field.StringField: types.string_field, - custom_type_field.CustomTypeField: types.custom_type_field, - streams_container.StreamsContainer: types.streams_container, - generic_data_container.GenericDataContainer: types.generic_data_container, - } - - class natures(Enum): """The ``'natures'`` enum contains the dimensionality types. It can be used to create a field of a given dimensionality. @@ -258,9 +205,6 @@ class elemental_properties: apdl_element_type = "apdl_element_type" apdl element type property data is provided - - elements_faces_connectivity = "elements_faces_connectivity" - element faces connectivity property data is provided """ element_shape = "elshape" @@ -269,7 +213,6 @@ class elemental_properties: material = "mat" element_properties = "elprops" apdl_element_type = "apdl_element_type" - elements_faces_connectivity = "elements_faces_connectivity" class nodal_properties: diff --git a/src/ansys/dpf/core/core.py b/src/ansys/dpf/core/core.py index 06623cffe6c..aeadac49b4a 100644 --- a/src/ansys/dpf/core/core.py +++ b/src/ansys/dpf/core/core.py @@ -263,34 +263,6 @@ def _description(dpf_entity_message, server=None): return "" -def _deep_copy(dpf_entity, server=None): - """Returns a copy of the entity in the requested server - - Parameters - ---------- - dpf_entity: core.Operator, core.Workflow, core.Scoping, - core.Field, core.FieldsContainer, core.MeshedRegion... - Dpf entity to deep_copy - - server : server.DPFServer, optional - Server with channel connected to the remote or local instance. When - ``None``, attempts to use the global server. - - Returns - ------- - deep_copy of dpf_entity: core.Operator, core.Workflow, core.Scoping, - core.Field, core.FieldsContainer, core.MeshedRegion... - """ - from ansys.dpf.core.operators.serialization import serializer_to_string, string_deserializer - from ansys.dpf.core.common import types_to_types_enum - - serializer = serializer_to_string(server=server) - serializer.connect(1, dpf_entity) - deserializer = string_deserializer(server=server) - deserializer.connect(0, serializer, 0) - return deserializer.get_output(1, types_to_types_enum()[dpf_entity.__class__]) - - class BaseService: """The Base Service class allows to make generic requests to dpf's server. For example, information about the server can be requested, diff --git a/src/ansys/dpf/core/plotter.py b/src/ansys/dpf/core/plotter.py index 08db6c0cfdb..fd125fe35bb 100644 --- a/src/ansys/dpf/core/plotter.py +++ b/src/ansys/dpf/core/plotter.py @@ -267,14 +267,8 @@ def add_field( warnings.warn("`show_max` and `show_min` is only supported for Nodal results.") show_max = False show_min = False - elif location == locations.faces: - mesh_location = meshed_region.faces - if show_max or show_min: - warnings.warn("`show_max` and `show_min` is only supported for Nodal results.") - show_max = False - show_min = False else: - raise ValueError("Only elemental, nodal or faces location are supported for plotting.") + raise ValueError("Only elemental or nodal location are supported for plotting.") component_count = field.component_count if component_count > 1: overall_data = np.full((len(mesh_location), component_count), np.nan) From a4af7a4b80e044f33e312dd5ee03ff5a107c25a7 Mon Sep 17 00:00:00 2001 From: rcanton Date: Thu, 13 Jul 2023 08:44:50 +0200 Subject: [PATCH 09/11] Remove unwanted scenarios --- src/ansys/dpf/core/meshed_region.py | 52 +++++++++++++---------------- tests/test_mesh_info.py | 36 ++++++++++---------- 2 files changed, 41 insertions(+), 47 deletions(-) diff --git a/src/ansys/dpf/core/meshed_region.py b/src/ansys/dpf/core/meshed_region.py index 7dfefe091c7..b3276aca091 100644 --- a/src/ansys/dpf/core/meshed_region.py +++ b/src/ansys/dpf/core/meshed_region.py @@ -9,11 +9,7 @@ from ansys.dpf.core import scoping, field, property_field from ansys.dpf.core.check_version import server_meet_version, version_requires -from ansys.dpf.core.common import ( - locations, - types, - nodal_properties, -) +from ansys.dpf.core.common import locations, types, nodal_properties from ansys.dpf.core.elements import Elements, element_types from ansys.dpf.core.nodes import Nodes from ansys.dpf.core.faces import Faces @@ -591,6 +587,11 @@ def deep_copy(self, server=None): This method is useful for passing data from one server instance to another. + .. warning:: + Only nodes scoping and coordinates and elements scoping, connectivity, + and types are copied. The eventual property field for elemental properties + and named selection will not be copied. + Parameters ---------- server : ansys.dpf.core.server, optional @@ -612,30 +613,23 @@ def deep_copy(self, server=None): >>> deep_copy = meshed_region.deep_copy(server=other_server) """ - if self._server.config.legacy: - if self.nodes.scoping is None: # empty Mesh - return MeshedRegion() - node_ids = self.nodes.scoping.ids - element_ids = self.elements.scoping.ids - mesh = MeshedRegion( - num_nodes=len(node_ids), num_elements=len(element_ids), server=server - ) - with self.nodes.coordinates_field.as_local_field() as coord: - for i, node in enumerate(mesh.nodes.add_nodes(len(node_ids))): - node.id = node_ids[i] - node.coordinates = coord.get_entity_data(i) - with self.elements.connectivities_field.as_local_field() as connect: - with self.elements.element_types_field.as_local_field() as types: - for i, elem in enumerate(mesh.elements.add_elements(len(element_ids))): - elem.id = element_ids[i] - elem.connectivity = connect.get_entity_data(i) - elem.shape = element_types.shape(types.get_entity_data(i)[0]) - mesh.unit = self.unit - return mesh - else: - from ansys.dpf.core.core import _deep_copy - - return _deep_copy(self, server=server) + if self.nodes.scoping is None: # empty Mesh + return MeshedRegion() + node_ids = self.nodes.scoping.ids + element_ids = self.elements.scoping.ids + mesh = MeshedRegion(num_nodes=len(node_ids), num_elements=len(element_ids), server=server) + with self.nodes.coordinates_field.as_local_field() as coord: + for i, node in enumerate(mesh.nodes.add_nodes(len(node_ids))): + node.id = node_ids[i] + node.coordinates = coord.get_entity_data(i) + with self.elements.connectivities_field.as_local_field() as connect: + with self.elements.element_types_field.as_local_field() as types: + for i, elem in enumerate(mesh.elements.add_elements(len(element_ids))): + elem.id = element_ids[i] + elem.connectivity = connect.get_entity_data(i) + elem.shape = element_types.shape(types.get_entity_data(i)[0]) + mesh.unit = self.unit + return mesh def field_of_properties(self, property_name): """ diff --git a/tests/test_mesh_info.py b/tests/test_mesh_info.py index 2371f5ac19f..c49301accbd 100644 --- a/tests/test_mesh_info.py +++ b/tests/test_mesh_info.py @@ -168,22 +168,22 @@ def test_output_mesh_info_provider_fluent(server_clayer): assert num_nodes == 1430 # """************************ BODIES ************************""" - - # """************ Name ************""" + """ + # ************ Name ************ body_names = mesh_info_out.get_property("body_name") body_names_value = body_names._get_data() assert len(body_names_value) == 1 assert body_names_value[0] == "fluid-1" - + """ # """************ Scoping ************""" body_scoping = mesh_info_out.get_property("body_scoping") assert body_scoping.size == 1 assert body_scoping[0] == 1 - - # """************ Topology ************""" + """ + # ************ Topology ************ body_cell_topology = mesh_info_out.get_property("body_cell_topology") body_face_topology = mesh_info_out.get_property("body_face_topology") @@ -198,10 +198,10 @@ def test_output_mesh_info_provider_fluent(server_clayer): assert body_face_topology_scoping[0] == 1 assert body_cell_topology_value[0] == 1 assert body_face_topology_value[0] == 3 - + """ # """************************ ZONES ************************""" - - # """************ Name ************""" + """ + # ************ Name ************ zone_names = mesh_info_out.get_property("zone_name") zone_names_value = zone_names._get_data() @@ -212,7 +212,7 @@ def test_output_mesh_info_provider_fluent(server_clayer): assert zone_names_value[2] == "symmetry-4" assert zone_names_value[3] == "pressure-outlet-5" assert zone_names_value[5] == "velocity-inlet-7" - + """ # """************ Scoping ************""" zone_scoping = mesh_info_out.get_property("zone_scoping") @@ -314,8 +314,8 @@ def test_output_mesh_info_provider_flprj(fluent_axial_comp, server_clayer): assert num_nodes == 16660 # """************************ BODIES ************************""" - - # """************ Name ************""" + """ + # ************ Name ************ body_names = res.get_property("body_name") body_names_value = body_names._get_data() @@ -323,15 +323,15 @@ def test_output_mesh_info_provider_flprj(fluent_axial_comp, server_clayer): assert len(body_names_value) == 2 assert body_names_value[0] == "fluid-rotor" assert body_names_value[1] == "fluid-stator" - + """ # """************ Scoping ************""" body_scoping = res.get_property("body_scoping") assert body_scoping.size == 2 assert body_scoping[0] == 13 assert body_scoping[1] == 28 - - # """************ Topology ************""" + """ + # ************ Topology ************ body_cell_topology = res.get_property("body_cell_topology") body_face_topology = res.get_property("body_face_topology") @@ -346,10 +346,10 @@ def test_output_mesh_info_provider_flprj(fluent_axial_comp, server_clayer): assert body_face_topology_scoping[0] == 13 assert body_cell_topology_value[0] == 13 assert body_face_topology_value[0] == 2 - + """ # """************************ ZONES ************************""" - - # """************ Name ************""" + """ + # ************ Name ************ zone_names = res.get_property("zone_name") zone_names_value = zone_names._get_data() @@ -363,7 +363,7 @@ def test_output_mesh_info_provider_flprj(fluent_axial_comp, server_clayer): assert zone_names_value[18] == "stator-blade-1" assert zone_names_value[22] == "stator-per-2" assert zone_names_value[25] == "stator-per-1-shadow" - + """ # """************ Scoping ************""" zone_scoping = res.get_property("zone_scoping") From 60622b289ba4b3df15818ad6eff0ab84edc4e986 Mon Sep 17 00:00:00 2001 From: Paul Profizi <100710998+PProfizi@users.noreply.github.com> Date: Thu, 13 Jul 2023 09:40:14 +0200 Subject: [PATCH 10/11] Update tests/test_mesh_info.py --- tests/test_mesh_info.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_mesh_info.py b/tests/test_mesh_info.py index c49301accbd..42a75acf2f8 100644 --- a/tests/test_mesh_info.py +++ b/tests/test_mesh_info.py @@ -168,7 +168,6 @@ def test_output_mesh_info_provider_fluent(server_clayer): assert num_nodes == 1430 # """************************ BODIES ************************""" - """ # ************ Name ************ body_names = mesh_info_out.get_property("body_name") From 372b37fa0748af1fe6335a4a9f5dbe06cbece02d Mon Sep 17 00:00:00 2001 From: rcanton Date: Thu, 13 Jul 2023 10:00:13 +0200 Subject: [PATCH 11/11] Revert test change --- tests/test_mesh_info.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/test_mesh_info.py b/tests/test_mesh_info.py index 42a75acf2f8..c49301accbd 100644 --- a/tests/test_mesh_info.py +++ b/tests/test_mesh_info.py @@ -168,6 +168,7 @@ def test_output_mesh_info_provider_fluent(server_clayer): assert num_nodes == 1430 # """************************ BODIES ************************""" + """ # ************ Name ************ body_names = mesh_info_out.get_property("body_name")