From 73c9412f6e8deacd7e3f315f84a4d0aa3599f652 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Tue, 22 Oct 2024 15:18:27 +0200 Subject: [PATCH 01/39] add new basic tutorial and jupyter_ sphinx extension --- .../user_guide/tutorials/basic_tutorial.rst | 241 ++++++++++++++++++ 1 file changed, 241 insertions(+) create mode 100644 doc/source/user_guide/tutorials/basic_tutorial.rst diff --git a/doc/source/user_guide/tutorials/basic_tutorial.rst b/doc/source/user_guide/tutorials/basic_tutorial.rst new file mode 100644 index 0000000000..11b7097676 --- /dev/null +++ b/doc/source/user_guide/tutorials/basic_tutorial.rst @@ -0,0 +1,241 @@ +.. _ref_tutorials_basic: + +================== +The basic tutorial +================== + +This tutorial guides throughout the basic concepts and features of the PyDPF-Core tool. +It helps to have a Python interpreter for hands-on experience, but all code examples are +executed, so the tutorial can be read off-line as well. + +For a complete description of all the objects and modules, see the :ref:`API reference ` section. + +This page is divided in two sections: + +.. grid:: 1 1 2 2 + :gutter: 2 + :padding: 2 + :margin: 2 + + .. grid-item-card:: Overview + :link: tutorials_overview + :link-type: ref + :text-align: center + + Learn the different ways to interact with data by calling PyDPF-Core commands and operators. + + .. grid-item-card:: Postprocessing main steps + :link: tutorials_main_steps + :link-type: ref + :text-align: center + + How to do a basic prost-processing by transforming simulation data into output + data that can be used to visualize and analyze results + +.. _tutorials_overview: + +Overview +-------- + + + +.. _tutorials_main_steps: + +Postprocessing main steps +------------------------- + +There are five main steps to transform simulation data into output data that can +be used to visualize and analyze simulation results: + +.. grid:: + :gutter: 2 + :padding: 2 + :margin: 2 + + .. grid-item-card:: 1 + :link: tutorials_main_steps_1 + :link-type: ref + :text-align: center + + Importing and opening results files + + .. grid-item-card:: 2 + :link: tutorials_main_steps_2 + :link-type: ref + :text-align: center + + Access and extract results + + .. grid-item-card:: 3 + :link: tutorials_main_steps_3 + :link-type: ref + :text-align: center + + Transform available data + + .. grid-item-card:: 4 + :link: tutorials_main_steps_4 + :link-type: ref + :text-align: center + + Visualize the data + + .. grid-item-card:: 5 + :link: tutorials_main_steps_5 + :link-type: ref + :text-align: center + + Extract data + +.. _tutorials_main_steps_1: + +1- Importing and opening results files +************************************** + +First, import the DPF-Core module as ``dpf`` and import the included examples file + +.. code-block:: python + + from ansys.dpf import core as dpf + from ansys.dpf.core import examples + from ansys.dpf.core import operators as ops + +`DataSources' is a class that manages paths to their files. Use this object to declare +data inputs for DPF and define their locations. + +.. code-block:: python + + # Define the DataSources object + my_data_sources = dpf.DataSources(result_path=examples.find_simple_bar()) + + +The model is a helper designed to give shortcuts to access the analysis results +metadata, by opening a DataSources or a Streams, and to instanciate results provider for it. + +Printing the model displays: + + - Analysis type + - Available results + - Size of the mesh + - Number of results + +.. code-block:: python + + # Define the Model object + my_model = dpf.Model(data_sources=my_data_sources) + print(my_model) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + from ansys.dpf import core as dpf + from ansys.dpf.core import examples + from ansys.dpf.core import operators as ops + my_data_sources = dpf.DataSources(result_path=examples.find_simple_bar()) + my_model = dpf.Model(data_sources=my_data_sources) + print(my_model) + +.. _tutorials_main_steps_2: + +2- Access and extract results +***************************** + +We see in the model that a displacement result is available. You can access this result by: + +.. code-block:: python + + # Define the displacement results through the models property `results` + my_displacements = my_model.results.displacement.eval() + print(my_displacements) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_displacements = my_model.results.displacement.eval() + print(my_displacements) + +The displacement data can be extract by: + +.. code-block:: python + + # Extract the data of the displacement field + my_displacements_0 = my_displacements[0].data + print(my_displacements_0) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_displacements_0 = my_displacements[0].data + print(my_displacements_0) + +.. _tutorials_main_steps_3: + +3- Transform available data +*************************** + +Several transformations can be made with the data. They can be a single operation, +by using only one operator, or they can represent a succession of operations, by defining a +workflow with chained operators. + +Here we star by computing the displacements norm. + +.. code-block:: python + + # Define the norm operator (here for a fields container) for the displacement + my_norm = ops.math.norm_fc(fields_container=my_displacements).eval() + print(my_norm[0].data) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_norm = ops.math.norm_fc(fields_container=my_displacements).eval() + print(my_norm[0].data) + +Then we compute the maximum values of the normalised displacement + +.. code-block:: python + + # Define the maximum operator and chain it to the norm operator + my_max= ops.min_max.min_max_fc(fields_container=my_norm).outputs.field_max() + print(my_max) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_max = ops.min_max.min_max_fc(fields_container=my_norm).outputs.field_max() + print(my_max) + +.. _tutorials_main_steps_4: + +4- Visualize the data +********************* + +Plot the transformed displacement results + +.. code-block:: python + + # Define the support of the plot (here we plot the displacement over the mesh) + my_model.metadata.meshed_region.plot(field_or_fields_container=my_displacements) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_model.metadata.meshed_region.plot(field_or_fields_container=my_displacements) + +.. _tutorials_main_steps_5: + +5- Extract the data +******************* + From 63cad9688aa08f26a1883fca1e91931e5b751d0d Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Wed, 13 Nov 2024 11:56:49 +0100 Subject: [PATCH 02/39] add "plotting meshes" example --- .../tutorials/plot/01-plotting_meshes.rst | 172 ++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 doc/source/user_guide/tutorials/plot/01-plotting_meshes.rst diff --git a/doc/source/user_guide/tutorials/plot/01-plotting_meshes.rst b/doc/source/user_guide/tutorials/plot/01-plotting_meshes.rst new file mode 100644 index 0000000000..d77fcdfee1 --- /dev/null +++ b/doc/source/user_guide/tutorials/plot/01-plotting_meshes.rst @@ -0,0 +1,172 @@ +.. _ref_tutorials_plotting_meshes: + +=============== +Plotting meshes +=============== + +.. |MeshedRegion| replace:: :class:`MeshedRegion ` +.. |Model| replace:: :class:`Model ` +.. |plot| replace:: :func:`plot()` +.. |DpfPlotter| replace:: :class:`DpfPlotter` + +DPF-Core has a variety of plotting methods for generating 3D plots of +Ansys models directly from Python. These methods use VTK and leverage +the `PyVista `_ library to +simplify plotting. + +This tutorial shows different plotting commands to plot the bare mesh +of a model. + +The mesh object in DPF is a |MeshedRegion|. In this tutorial we will download +a pontoon simulation result file available in our `Examples` package: + +.. code-block:: python + + # Import the ``ansys.dpf.core`` module, including examples file + from ansys.dpf import core as dpf + from ansys.dpf.core import examples + # Define the result file + pontoon_file = examples.download_pontoon() + +Here, we use the |MeshedRegion| associated with the DPF |Model| object. +However, you can obtain your |MeshedRegion| by other methods. For more +information see the tutorials section : :ref:`ref_tutorials_mesh`. + +To plot the mesh you have three different methods: + + 1) :ref:`method_plot_mesh_1` + 2) :ref:`method_plot_mesh_2` + 3) :ref:`method_plot_mesh_3` + +.. _method_plot_mesh_1: + +Plot the |Model| with the |plot| method +--------------------------------------- + +This first approach is pretty simple. First, have to define the model +object using the result file. Then you just have to use the |plot| +method, it plots the bare mesh by default. + +.. code-block:: python + + # Create the model + my_model = dpf.Model(data_sources=pontoon_file) + # Use the plot() method to plot the associated mesh + my_model.plot() + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + from ansys.dpf import core as dpf + from ansys.dpf.core import examples + pontoon_file = examples.download_pontoon() + my_model = dpf.Model(data_sources=pontoon_file) + my_model.plot() + + +The default plotter settings display the mesh with edges, lighting +and axis widget enabled. Nevertheless, as we use the +`PyVista `_ library to create +the plot you can use additional PyVista arguments (available at: +:func:`pyvista.plot`), such as: + +.. code-block:: python + + my_model.plot(title= "Pontoon mesh", + text= "Plot mesh method 1", # Adds the given text at the bottom of the plot + notebook=False, + screenshot="mesh_plot_1.png" # Save a screenshot to file with the given name + ) + # Notes: + # - To save a screenshot to file, use "screenshot" ( as well as "notebook=False" if on a Jupyter notebook). + # - The "off_screen" keyword only works when "notebook=False". If "off_screen=True" the plot is not displayed when running the code. + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_model.plot(title= "Pontoon mesh", + text= "Plot mesh method 1", + off_screen=True, + notebook=False, + screenshot="mesh_plot_1.png" + ) + +.. _method_plot_mesh_2: + +Plot the |MeshedRegion| with the |plot| method +---------------------------------------------- + +This second approach demands a |MeshedRegion| object. Thus, we extract +it from our |Model| object . Then, in the same way of the first approach, +you just have to use the |plot| method. + +.. code-block:: python + + # Extract the mesh + my_meshed_region = my_model.metadata.meshed_region + # Use the plot() method to plot the mesh + my_meshed_region.plot() + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_meshed_region = my_model.metadata.meshed_region + my_meshed_region.plot() + +As, the meshed region is generated from the model’s metadata, +the plot generated here is identical to the plot generated by the ":ref:`method_plot_mesh_1`" approach. + +The default plotter settings display the mesh with edges, lighting +and axis widget enabled. Nevertheless, as we use the +`PyVista `_ library to create +the plot you can use additional PyVista arguments (available at: +:func:`pyvista.plot`), just like in ":ref:`method_plot_mesh_1`" + +.. _method_plot_mesh_3: + +Plot the |MeshedRegion| with the |DpfPlotter| class +--------------------------------------------------- + +Here we use the |DpfPlotter| object, that is currently a PyVista based object. +That means that PyVista must be installed, and that it supports kwargs as +parameter (the argument must be supported by the installed PyVista version). +More information about the available arguments are available at :class:`pyvista.Plotter`. + +First you have to define the |DpfPlotter| object and then add the |MeshedRegion| +to it using the :func:`show_figure()` method. + +To display the figure built by the plotter object you need to use the +:func:`add_mesh()` method. + +.. code-block:: python + + # Declare the DpfPlotter object + my_plotter = dpf.plotter.DpfPlotter() + # Add the MeshedRegion to the DpfPlotter object + my_plotter.add_mesh(meshed_region=my_meshed_region) + # Display the plot + my_plotter.show_figure() + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_plotter = dpf.plotter.DpfPlotter() + my_plotter.add_mesh(meshed_region=my_meshed_region) + my_plotter.show_figure() + +The default |DpfPlotter| object settings display the mesh with edges,and lighting +enabled. Nevertheless, as we use the `PyVista `_ +library to create the plot you can use additional PyVista arguments for the |DpfPlotter| +object and :func:`add_mesh()` method +(available at: :func:`pyvista.plot`). + +You can also plot results data on its supporting mesh. For a detailed demonstration +check: :ref:`ref_plotting_data_on_the_mesh` \ No newline at end of file From a1231304dbecbef4cf9176a11e15c595f265e53b Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Wed, 13 Nov 2024 11:57:27 +0100 Subject: [PATCH 03/39] add files for the others examples --- .../tutorials/plot/02-plotting_data_on_the_mesh.rst | 7 +++++++ .../plot/03-plotting_data_on_specific_placements.rst | 5 +++++ .../user_guide/tutorials/plot/04-plotting_a_graph.rst | 5 +++++ 3 files changed, 17 insertions(+) create mode 100644 doc/source/user_guide/tutorials/plot/02-plotting_data_on_the_mesh.rst create mode 100644 doc/source/user_guide/tutorials/plot/03-plotting_data_on_specific_placements.rst create mode 100644 doc/source/user_guide/tutorials/plot/04-plotting_a_graph.rst diff --git a/doc/source/user_guide/tutorials/plot/02-plotting_data_on_the_mesh.rst b/doc/source/user_guide/tutorials/plot/02-plotting_data_on_the_mesh.rst new file mode 100644 index 0000000000..36f86812ce --- /dev/null +++ b/doc/source/user_guide/tutorials/plot/02-plotting_data_on_the_mesh.rst @@ -0,0 +1,7 @@ +.. _ref_plotting_data_on_the_mesh: + +========================= +Plotting data on the mesh +========================= + + diff --git a/doc/source/user_guide/tutorials/plot/03-plotting_data_on_specific_placements.rst b/doc/source/user_guide/tutorials/plot/03-plotting_data_on_specific_placements.rst new file mode 100644 index 0000000000..f49f5bf1ee --- /dev/null +++ b/doc/source/user_guide/tutorials/plot/03-plotting_data_on_specific_placements.rst @@ -0,0 +1,5 @@ +.. _ref_plotting_data_on_specific_placements: + +==================================== +Plotting data on specific placements +==================================== diff --git a/doc/source/user_guide/tutorials/plot/04-plotting_a_graph.rst b/doc/source/user_guide/tutorials/plot/04-plotting_a_graph.rst new file mode 100644 index 0000000000..3b6a1715c1 --- /dev/null +++ b/doc/source/user_guide/tutorials/plot/04-plotting_a_graph.rst @@ -0,0 +1,5 @@ +.. _ref_plotting_a_graph: + +==================================== +Plotting data on specific placements +==================================== \ No newline at end of file From 7329a32dd0a7136470dbac8316c4704a3684a0bd Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Wed, 13 Nov 2024 11:59:58 +0100 Subject: [PATCH 04/39] update index page for plotting tuts --- doc/source/user_guide/tutorials/plot/index.rst | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/index.rst b/doc/source/user_guide/tutorials/plot/index.rst index 32f11495e5..20e599c9e0 100644 --- a/doc/source/user_guide/tutorials/plot/index.rst +++ b/doc/source/user_guide/tutorials/plot/index.rst @@ -12,28 +12,28 @@ These tutorials demonstrate some different approaches to visualise the data in p :margin: 2 .. grid-item-card:: Plotting meshes - :link: ref_tutorials + :link: ref_tutorials_plotting_meshes :link-type: ref :text-align: center - This tutorial + This tutorial shows different plotting commands to plot a bare mesh .. grid-item-card:: Plotting data on the mesh - :link: ref_tutorials + :link: ref_plotting_data_on_the_mesh :link-type: ref :text-align: center This tutorial .. grid-item-card:: Plotting data on specific placements - :link: ref_tutorials + :link: ref_plotting_data_on_specific_placements :link-type: ref :text-align: center This tutorial .. grid-item-card:: Plotting a graph - :link: ref_tutorials + :link: ref_plotting_a_graph :link-type: ref :text-align: center @@ -42,3 +42,8 @@ These tutorials demonstrate some different approaches to visualise the data in p .. toctree:: :maxdepth: 2 :hidden: + + 01-plotting_meshes.rst + 02-plotting_data_on_the_mesh.rst + 03-plotting_data_on_specific_placements.rst + 04-plotting_a_graph.rst \ No newline at end of file From 9dc8eaf6662939fdfbd99d67bbbb92636d2be463 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Wed, 13 Nov 2024 15:14:35 +0100 Subject: [PATCH 05/39] add "plotting data on the meshe" example --- .../tutorials/plot/01-plotting_meshes.rst | 3 + .../plot/02-plotting_data_on_the_mesh.rst | 132 ++++++++++++++++++ 2 files changed, 135 insertions(+) diff --git a/doc/source/user_guide/tutorials/plot/01-plotting_meshes.rst b/doc/source/user_guide/tutorials/plot/01-plotting_meshes.rst index d77fcdfee1..70311e007a 100644 --- a/doc/source/user_guide/tutorials/plot/01-plotting_meshes.rst +++ b/doc/source/user_guide/tutorials/plot/01-plotting_meshes.rst @@ -17,6 +17,9 @@ simplify plotting. This tutorial shows different plotting commands to plot the bare mesh of a model. +Define the mesh +--------------- + The mesh object in DPF is a |MeshedRegion|. In this tutorial we will download a pontoon simulation result file available in our `Examples` package: diff --git a/doc/source/user_guide/tutorials/plot/02-plotting_data_on_the_mesh.rst b/doc/source/user_guide/tutorials/plot/02-plotting_data_on_the_mesh.rst index 36f86812ce..05cf5bf54b 100644 --- a/doc/source/user_guide/tutorials/plot/02-plotting_data_on_the_mesh.rst +++ b/doc/source/user_guide/tutorials/plot/02-plotting_data_on_the_mesh.rst @@ -5,3 +5,135 @@ Plotting data on the mesh ========================= +.. |MeshedRegion| replace:: :class:`MeshedRegion ` +.. |Model| replace:: :class:`Model ` +.. |plot| replace:: :func:`plot()` +.. |DpfPlotter| replace:: :class:`DpfPlotter` + +This tutorial shows how to plot data on its supporting mesh by different approaches. + +Define the data +--------------- + +In this tutorial we will download a pontoon simulation result file available +in our ``Examples`` package: + +.. code-block:: python + + # Import the ``ansys.dpf.core`` module, including examples file + from ansys.dpf import core as dpf + from ansys.dpf.core import examples + # Define the result file + pontoon_file = examples.download_pontoon() + +The |Model| is a helper designed to give shortcuts to access the analysis results +metadata, by opening a DataSources or a Streams, and to instanciate results provider for it. + +Printing the model displays the available results. + +.. code-block:: python + + # Create the model + my_model = dpf.Model(data_sources=pontoon_file) + # Print the model + print(my_model) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + from ansys.dpf import core as dpf + from ansys.dpf.core import examples + pontoon_file = examples.download_pontoon() + my_model = dpf.Model(data_sources=pontoon_file) + print(my_model) + +We need to extract the data we want to plot. Mind that the results location must be of +type ``Elemental`` or ``Nodal``. Fot more information about extracting results from a +result file check the ":ref:`ref_tutorials_import_data`" tutorials section. + +Here we choose to get the elastic strain. + +.. code-block:: python + + # Extract the elastic strain result + my_elastic_strain = my_model.results.elastic_strain.eval() + # Print the result + print(my_elastic_strain) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_elastic_strain = my_model.results.elastic_strain.eval() + print(my_elastic_strain) + +As the elastic strain result is in a ``ElementalNodal`` location we have to change it. +Here we define the new location with a input of the +:class:`elastic_strain() ` operator. +Another option would be using an averaging operator like the +:class:`to_nodal_fc() ` operator + +.. code-block:: python + + # Define the desired location as an input of the results operator + my_elastic_strain.inputs.requested_location(dpf.locations.nodal) + # Get the result field + # As we have only one time step we got a FieldsContainer with one Field (index=0) + fc_elastic_strain = my_elastic_strain.eval() + # Print the result + print(fc_elastic_strain) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_elastic_strain.inputs.requested_location(dpf.locations.nodal) + fc_elastic_strain = my_elastic_strain.eval() + print(fc_elastic_strain) + +Plot the data on the mesh +------------------------- + +To plot the data on the mesh you have two different approaches: + + 1) :ref:`method_plot_data_mesh_1` + 2) :ref:`method_plot_data_mesh_2` + +For both approaches we need a |MeshedRegion| to base on. We can define it from the |Model|: + +.. code-block:: python + + # Define the meshed region + my_meshed_region = my_model.metadata.meshed_region + +.. _method_plot_data_mesh_1: + +Plot the Field on its mesh support +---------------------------------- + +To plot +.. warning:: + + The |plot| method for the Field object is primarily added out of convenience as plotting + directly from the field can be slower than extracting the meshed region and plotting the + field on top of that. + +Once we extract the field with the elastic strain results we can plot it on its +supporting mesh using the |plot| method: + +.. code-block:: python + + # Define the field + field_elastic_strain = fc_elastic_strain[0] + # Use the plot() method + field_elastic_strain.plot(meshed_region=my_meshed_region) + +.. _method_plot_data_mesh_2: + +Plot the mesh and add the field +------------------------------- + From e80136f4bdb8b33f60ebe00aeb8950ccc1957f11 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Thu, 14 Nov 2024 12:55:44 +0100 Subject: [PATCH 06/39] update "plotting data on the meshe" example --- .../plot/02-plotting_data_on_the_mesh.rst | 139 --------- .../plot/plotting_data_on_the_mesh.rst | 295 ++++++++++++++++++ 2 files changed, 295 insertions(+), 139 deletions(-) delete mode 100644 doc/source/user_guide/tutorials/plot/02-plotting_data_on_the_mesh.rst create mode 100644 doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst diff --git a/doc/source/user_guide/tutorials/plot/02-plotting_data_on_the_mesh.rst b/doc/source/user_guide/tutorials/plot/02-plotting_data_on_the_mesh.rst deleted file mode 100644 index 05cf5bf54b..0000000000 --- a/doc/source/user_guide/tutorials/plot/02-plotting_data_on_the_mesh.rst +++ /dev/null @@ -1,139 +0,0 @@ -.. _ref_plotting_data_on_the_mesh: - -========================= -Plotting data on the mesh -========================= - - -.. |MeshedRegion| replace:: :class:`MeshedRegion ` -.. |Model| replace:: :class:`Model ` -.. |plot| replace:: :func:`plot()` -.. |DpfPlotter| replace:: :class:`DpfPlotter` - -This tutorial shows how to plot data on its supporting mesh by different approaches. - -Define the data ---------------- - -In this tutorial we will download a pontoon simulation result file available -in our ``Examples`` package: - -.. code-block:: python - - # Import the ``ansys.dpf.core`` module, including examples file - from ansys.dpf import core as dpf - from ansys.dpf.core import examples - # Define the result file - pontoon_file = examples.download_pontoon() - -The |Model| is a helper designed to give shortcuts to access the analysis results -metadata, by opening a DataSources or a Streams, and to instanciate results provider for it. - -Printing the model displays the available results. - -.. code-block:: python - - # Create the model - my_model = dpf.Model(data_sources=pontoon_file) - # Print the model - print(my_model) - -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - from ansys.dpf import core as dpf - from ansys.dpf.core import examples - pontoon_file = examples.download_pontoon() - my_model = dpf.Model(data_sources=pontoon_file) - print(my_model) - -We need to extract the data we want to plot. Mind that the results location must be of -type ``Elemental`` or ``Nodal``. Fot more information about extracting results from a -result file check the ":ref:`ref_tutorials_import_data`" tutorials section. - -Here we choose to get the elastic strain. - -.. code-block:: python - - # Extract the elastic strain result - my_elastic_strain = my_model.results.elastic_strain.eval() - # Print the result - print(my_elastic_strain) - -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_elastic_strain = my_model.results.elastic_strain.eval() - print(my_elastic_strain) - -As the elastic strain result is in a ``ElementalNodal`` location we have to change it. -Here we define the new location with a input of the -:class:`elastic_strain() ` operator. -Another option would be using an averaging operator like the -:class:`to_nodal_fc() ` operator - -.. code-block:: python - - # Define the desired location as an input of the results operator - my_elastic_strain.inputs.requested_location(dpf.locations.nodal) - # Get the result field - # As we have only one time step we got a FieldsContainer with one Field (index=0) - fc_elastic_strain = my_elastic_strain.eval() - # Print the result - print(fc_elastic_strain) - -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_elastic_strain.inputs.requested_location(dpf.locations.nodal) - fc_elastic_strain = my_elastic_strain.eval() - print(fc_elastic_strain) - -Plot the data on the mesh -------------------------- - -To plot the data on the mesh you have two different approaches: - - 1) :ref:`method_plot_data_mesh_1` - 2) :ref:`method_plot_data_mesh_2` - -For both approaches we need a |MeshedRegion| to base on. We can define it from the |Model|: - -.. code-block:: python - - # Define the meshed region - my_meshed_region = my_model.metadata.meshed_region - -.. _method_plot_data_mesh_1: - -Plot the Field on its mesh support ----------------------------------- - -To plot -.. warning:: - - The |plot| method for the Field object is primarily added out of convenience as plotting - directly from the field can be slower than extracting the meshed region and plotting the - field on top of that. - -Once we extract the field with the elastic strain results we can plot it on its -supporting mesh using the |plot| method: - -.. code-block:: python - - # Define the field - field_elastic_strain = fc_elastic_strain[0] - # Use the plot() method - field_elastic_strain.plot(meshed_region=my_meshed_region) - -.. _method_plot_data_mesh_2: - -Plot the mesh and add the field -------------------------------- - diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst new file mode 100644 index 0000000000..552ad4a938 --- /dev/null +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst @@ -0,0 +1,295 @@ +.. _ref_plotting_data_on_the_mesh: + +========================= +Plotting data on the mesh +========================= + + +.. |MeshedRegion| replace:: :class:`MeshedRegion ` +.. |Model| replace:: :class:`Model ` +.. |plot| replace:: :func:`plot()` +.. |plotMesh| replace:: :func:`plot()` +.. |DpfPlotter| replace:: :class:`DpfPlotter` +.. |Field| replace:: :class:`Field` +.. |FieldsContainer| replace:: :class:`FieldsContainer` + +This tutorial shows how to plot data on its supporting mesh by different approaches. + +Define the data +--------------- + +In this tutorial we will download a simulation result file available +in our ``Examples`` package: + +.. code-block:: python + + # Import the ``ansys.dpf.core`` module, including examples file + from ansys.dpf import core as dpf + from ansys.dpf.core import examples + # Define the result file + result_file = examples.find_multishells_rst() + +The |Model| is a helper designed to give shortcuts to access the analysis results +metadata, by opening a DataSources or a Streams, and to instanciate results provider for it. + +Printing the model displays the available results. + +.. code-block:: python + + # Create the model + my_model = dpf.Model(data_sources=result_file) + # Print the model + print(my_model) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + from ansys.dpf import core as dpf + from ansys.dpf.core import examples + result_file = examples.find_multishells_rst() + my_model = dpf.Model(data_sources=result_file) + print(my_model) + +We need to extract the data we want to plot. Mind that the results location must be of +type ``Elemental`` or ``Nodal``. Fot more information about extracting results from a +result file check the :ref:`ref_tutorials_import_data` tutorials section. + +Here we choose to get the XX stress tensor component result. We start by extracting the stress results: + +.. code-block:: python + + # Extract the stress result + my_stress = my_model.results.stress() + # Print the result + print(my_stress.eval()) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_stress = my_model.results.stress() + print(my_stress.eval()) + +As the stress result is in a ``ElementalNodal`` location we have to change it +(for plotting the location needs to be of type ``Elemental`` or ``Nodal``). + +Here we define the new location with a input of the +:class:`stress() ` operator. +Another option would be using an averaging operator like the +:class:`to_nodal_fc() ` operator + +.. code-block:: python + + # Define the desired location as an input of the results operator + my_stress.inputs.requested_location(dpf.locations.nodal) + # Get the result (the stress result operator gives an FieldsContainer as an output) + fc_stress = my_stress.eval() + # Print the result + print(fc_stress) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_stress.inputs.requested_location(dpf.locations.nodal) + fc_stress = my_stress.eval() + print(fc_stress) + +To get the results only for the XX stress component we have to use +the :func:`select_component() ` +method: + +.. code-block:: python + + # Define the component to get. + # The stress tensor has 6 components per elementary data (symmetrical tensor XX,YY,ZZ,XY,YZ,XZ). + # So we get the component of index=0 + fc_stress_XX = fc_stress.select_component(index=0) + +Plot the data on the mesh +------------------------- + +To plot the data on the mesh you have two different approaches: + + 1) :ref:`method_plot_data_mesh_1` + 2) :ref:`method_plot_data_mesh_2` + +.. hint:: + + :ref:`method_plot_data_mesh_2` is faster than :ref:`method_plot_data_mesh_1` + +For both approaches we need a |MeshedRegion| to base on. We can define it from the |Model|: + +.. code-block:: python + + # Define the meshed region + my_meshed_region = my_model.metadata.meshed_region + +.. _method_plot_data_mesh_1: + +Plot the data on its mesh support +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Plotting the data in DPF means plotting the |Field| or |FieldsContainer| that contains the data. +To plot a |Field| you can use the |plot| method or the |DpfPlotter| class. + +.. hint:: + + The |DpfPlotter| class is faster than using the |plot| method + +Using the plot() method +~~~~~~~~~~~~~~~~~~~~~~~ + +First, extract the Field with the stress results. Then use the |plot| method [1]_. +You have to give the Fields supporting mesh as a attribute: + +.. code-block:: python + + # Define the field + field_stress_XX = fc_stress_XX[0] + # Use the plot() method + field_stress_XX.plot(meshed_region=my_meshed_region) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + fc_stress_XX = fc_stress.select_component(index=0) + my_meshed_region = my_model.metadata.meshed_region + field_stress_XX = fc_stress_XX[0] + field_stress_XX.plot(meshed_region=my_meshed_region) + +Using the DpfPlotter class +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +First you have to define the |DpfPlotter| object [2]_ and then add the Field +to it using the :func:`add_field()` method. +You have to give the Fields supporting mesh as an attribute to this method. + +To display the figure built by the plotter object you need to use the +:func:`show_figure()` method. + +.. code-block:: python + + # Declare the DpfPlotter object + my_plotter = dpf.plotter.DpfPlotter() + # Add the MeshedRegion to the DpfPlotter object + my_plotter.add_field(field=field_stress_XX, meshed_region=my_meshed_region) + # Display the plot + my_plotter.show_figure() + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_plotter = dpf.plotter.DpfPlotter() + my_plotter.add_field(field=field_stress_XX, meshed_region=my_meshed_region) + my_plotter.show_figure() + + + +.. _method_plot_data_mesh_2: + +Plot the mesh and add the data on top of that +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To extract the meshed region and plot the |Field| on top of that you can use the |plotMesh| +method or the |DpfPlotter| class. + +In this approach you can add the data from a |Field| or from a |FieldsContainer|. + +.. hint:: + + The |DpfPlotter| class is faster than using the |plotMesh| method. + +Using the plot() method +~~~~~~~~~~~~~~~~~~~~~~~ + +Use the |plotMesh| method [1]_ with the meshed region we extracted from the model. +You have to give the Field or the FieldsContainer with the stress data as a attribute: + +.. code-block:: python + + # Use the plot() method with a Field as an attribute + my_meshed_region.plot(field_or_fields_container=field_stress_XX) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_meshed_region.plot(field_or_fields_container=field_stress_XX) + +.. code-block:: python + + # Use the plot() method with a FieldsContainer as an attribute + my_meshed_region.plot(field_or_fields_container=fc_stress_XX) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_meshed_region.plot(field_or_fields_container=fc_stress_XX) + +Using the DpfPlotter class +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +First you have to define the |DpfPlotter| object [2]_ and then add |MeshedRegion| +to it using the :func:`add_mesh()` method and add the +field using the :func:`add_field()` method. + +To display the figure built by the plotter object use the +:func:`show_figure()` method. + +.. code-block:: python + + # Declare the DpfPlotter object + my_plotter = dpf.plotter.DpfPlotter() + # Add the MeshedRegion to the DpfPlotter object + my_plotter.add_mesh(meshed_region=my_meshed_region) + # Add the Field to the DpfPlotter object + my_plotter.add_field(field=field_stress_XX) + # Display the plot + my_plotter.show_figure() + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_plotter = dpf.plotter.DpfPlotter() + my_plotter.add_mesh(meshed_region=my_meshed_region) + my_plotter.add_field(field=field_stress_XX) + my_plotter.show_figure() + +.. rubric:: Footnotes + +.. [1] The default plotter settings display the mesh with edges, lighting and axis widget enabled. +Nevertheless, as we use the `PyVista `_ library to create +the plot you can use additional PyVista arguments (available at: :func:`pyvista.plot`), such as: + +.. code-block:: python + + field_stress_XX.plot(title= "Field Stress", + text= "Fields plot() method" # Adds the given text at the bottom of the plot + ) + # Notes: + # - To save a screenshot to file, use "screenshot=figure_name.png" ( as well as "notebook=False" if on a Jupyter notebook). + # - The "off_screen" keyword only works when "notebook=False". If "off_screen=True" the plot is not displayed when running the code. + +.. [2] Here we use the |DpfPlotter| object, that is currently a PyVista based object. +That means that PyVista must be installed, and that it supports kwargs as +parameter (the argument must be supported by the installed PyVista version). + +The default |DpfPlotter| object settings display the mesh with edges and lighting +enabled. Nevertheless, as we use the `PyVista `_ +library to create the plot you can use additional PyVista arguments for the |DpfPlotter| +object and :func:`add_field()` method +(available at: :func:`pyvista.plot`). \ No newline at end of file From 1bc25f2801c6e4fa416cd6beff7d472c1b60f546 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Thu, 14 Nov 2024 12:56:22 +0100 Subject: [PATCH 07/39] updates --- doc/source/user_guide/tutorials/plot/index.rst | 8 ++++---- .../{04-plotting_a_graph.rst => plotting_a_graph.rst} | 0 ...ments.rst => plotting_data_on_specific_placements.rst} | 0 .../plot/{01-plotting_meshes.rst => plotting_meshes.rst} | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) rename doc/source/user_guide/tutorials/plot/{04-plotting_a_graph.rst => plotting_a_graph.rst} (100%) rename doc/source/user_guide/tutorials/plot/{03-plotting_data_on_specific_placements.rst => plotting_data_on_specific_placements.rst} (100%) rename doc/source/user_guide/tutorials/plot/{01-plotting_meshes.rst => plotting_meshes.rst} (97%) diff --git a/doc/source/user_guide/tutorials/plot/index.rst b/doc/source/user_guide/tutorials/plot/index.rst index 20e599c9e0..690e3ebf4e 100644 --- a/doc/source/user_guide/tutorials/plot/index.rst +++ b/doc/source/user_guide/tutorials/plot/index.rst @@ -43,7 +43,7 @@ These tutorials demonstrate some different approaches to visualise the data in p :maxdepth: 2 :hidden: - 01-plotting_meshes.rst - 02-plotting_data_on_the_mesh.rst - 03-plotting_data_on_specific_placements.rst - 04-plotting_a_graph.rst \ No newline at end of file + plotting_meshes.rst + plotting_data_on_the_mesh.rst + plotting_data_on_specific_placements.rst + plotting_a_graph.rst \ No newline at end of file diff --git a/doc/source/user_guide/tutorials/plot/04-plotting_a_graph.rst b/doc/source/user_guide/tutorials/plot/plotting_a_graph.rst similarity index 100% rename from doc/source/user_guide/tutorials/plot/04-plotting_a_graph.rst rename to doc/source/user_guide/tutorials/plot/plotting_a_graph.rst diff --git a/doc/source/user_guide/tutorials/plot/03-plotting_data_on_specific_placements.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst similarity index 100% rename from doc/source/user_guide/tutorials/plot/03-plotting_data_on_specific_placements.rst rename to doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst diff --git a/doc/source/user_guide/tutorials/plot/01-plotting_meshes.rst b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst similarity index 97% rename from doc/source/user_guide/tutorials/plot/01-plotting_meshes.rst rename to doc/source/user_guide/tutorials/plot/plotting_meshes.rst index 70311e007a..0e07c07a8a 100644 --- a/doc/source/user_guide/tutorials/plot/01-plotting_meshes.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst @@ -142,10 +142,10 @@ parameter (the argument must be supported by the installed PyVista version). More information about the available arguments are available at :class:`pyvista.Plotter`. First you have to define the |DpfPlotter| object and then add the |MeshedRegion| -to it using the :func:`show_figure()` method. +to it using the :func::func:`add_mesh()` method. To display the figure built by the plotter object you need to use the -:func:`add_mesh()` method. +:func:`show_figure()` method. .. code-block:: python From 03c96f480c25d611a8553cf11d2e83c64727d787 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Thu, 14 Nov 2024 13:03:26 +0100 Subject: [PATCH 08/39] updates on the index page of the plotting section --- doc/source/user_guide/tutorials/plot/index.rst | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/index.rst b/doc/source/user_guide/tutorials/plot/index.rst index 690e3ebf4e..6f089fca96 100644 --- a/doc/source/user_guide/tutorials/plot/index.rst +++ b/doc/source/user_guide/tutorials/plot/index.rst @@ -23,21 +23,23 @@ These tutorials demonstrate some different approaches to visualise the data in p :link-type: ref :text-align: center - This tutorial + This tutorial explains how to plot data on its supporting mesh by + different approaches. .. grid-item-card:: Plotting data on specific placements :link: ref_plotting_data_on_specific_placements :link-type: ref :text-align: center - This tutorial + This tutorial shows how to plot data on specific placements of a + mesh (a specific path, a geometry elements ...) .. grid-item-card:: Plotting a graph :link: ref_plotting_a_graph :link-type: ref :text-align: center - This tutorial + This tutorial explains how to plot a graph with the data in DPF .. toctree:: :maxdepth: 2 From 8ea01028a9e2c2fe1e8c843753108913b2f66680 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Fri, 15 Nov 2024 09:13:05 +0100 Subject: [PATCH 09/39] updates --- .../user_guide/tutorials/plot/plotting_data_on_the_mesh.rst | 6 +++--- doc/source/user_guide/tutorials/plot/plotting_meshes.rst | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst index 552ad4a938..38dc0ddee5 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst @@ -23,7 +23,7 @@ in our ``Examples`` package: .. code-block:: python - # Import the ``ansys.dpf.core`` module, including examples file + # Import the ``ansys.dpf.core`` module, including examples files from ansys.dpf import core as dpf from ansys.dpf.core import examples # Define the result file @@ -167,7 +167,7 @@ You have to give the Fields supporting mesh as a attribute: Using the DpfPlotter class ~~~~~~~~~~~~~~~~~~~~~~~~~~ -First you have to define the |DpfPlotter| object [2]_ and then add the Field +First define the |DpfPlotter| object [2]_ and then add the Field to it using the :func:`add_field()` method. You have to give the Fields supporting mesh as an attribute to this method. @@ -241,7 +241,7 @@ You have to give the Field or the FieldsContainer with the stress data as a attr Using the DpfPlotter class ~~~~~~~~~~~~~~~~~~~~~~~~~~ -First you have to define the |DpfPlotter| object [2]_ and then add |MeshedRegion| +First, define the |DpfPlotter| object [2]_ and then add |MeshedRegion| to it using the :func:`add_mesh()` method and add the field using the :func:`add_field()` method. diff --git a/doc/source/user_guide/tutorials/plot/plotting_meshes.rst b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst index 0e07c07a8a..7ee84c3c5f 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_meshes.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst @@ -25,7 +25,7 @@ a pontoon simulation result file available in our `Examples` package: .. code-block:: python - # Import the ``ansys.dpf.core`` module, including examples file + # Import the ``ansys.dpf.core`` module, including examples files from ansys.dpf import core as dpf from ansys.dpf.core import examples # Define the result file From d6254f17f71e29b9c650ec6afd230f391cfc5e6e Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Fri, 15 Nov 2024 11:40:28 +0100 Subject: [PATCH 10/39] add plotting_data_on_specific_placements.rst tut --- .../plotting_data_on_specific_placements.rst | 630 ++++++++++++++++++ 1 file changed, 630 insertions(+) diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst index f49f5bf1ee..18af58ad22 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst @@ -3,3 +3,633 @@ ==================================== Plotting data on specific placements ==================================== + +.. |DpfPlotter| replace:: :class:`DpfPlotter` +.. |add_mesh| replace:: :func:`add_mesh()` +.. |add_field| replace:: :func:`add_field()` +.. |show_figure| replace:: :func:`show_figure()` +.. |MeshedRegion| replace:: :class:`MeshedRegion ` +.. |Model| replace:: :class:`Model ` +.. |Line| replace:: :class:`Line ` +.. |Points| replace:: :class:`Points ` +.. |Plane| replace:: :class:`Plane ` +.. |mapping| replace:: :class:`mapping ` +This tutorial shows how to plot data on specific placements of a mesh: + +- :ref:`plot_specific_path` +- :ref:`plot_geometry_elements` + +.. _plot_specific_path: + +Plot data on a specific path +---------------------------- + +This part shows how to get a result mapped over a specific path and how to plot it. + +Define the data +^^^^^^^^^^^^^^^ + +We will download a simple simulation result file available in our `Examples` package: + +.. code-block:: python + + # Import the ``ansys.dpf.core`` module, including examples files and the operators subpackage + from ansys.dpf import core as dpf + from ansys.dpf.core import examples + from ansys.dpf.core import operators as ops + # Define the result file + result_file = examples.find_static_rst() + +The results will be mapped over a defined path of coordinates. So, start by creating +a |Model| with the result file and extract the |MeshedRegion| from it: + +.. code-block:: python + + # Create the model + my_model = dpf.Model(data_sources=result_file) + my_meshed_region = my_model.metadata.meshed_region + +Define the path +^^^^^^^^^^^^^^^ + +The path coordinates have to be in the space domain of the mesh. You can verify the +range of coordinates values by checking the nodes coordinates. + +Get the nodes coordinates with the mesh operator +:class:`nodes_coordinates`: + +.. code-block:: python + + # Get the mesh nodes coordinates + nodes_coords = ops.mesh.node_coordinates(mesh=my_meshed_region).eval() + +Get the maximum values of the coordinates, so you know the space domain limits. + +.. code-block:: python + + # Get the maximum and minimum values of the mesh nodes coordinates + max_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=1) + min_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=0) + # Print the space domain limits + print("Max coordinates:", max_coords.data, '\n') + print("Min coordinates:",min_coords.data) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + from ansys.dpf import core as dpf + from ansys.dpf.core import examples + from ansys.dpf.core import operators as ops + result_file = examples.find_static_rst() + my_model = dpf.Model(data_sources=result_file) + my_meshed_region = my_model.metadata.meshed_region + nodes_coords = ops.mesh.node_coordinates(mesh=my_meshed_region).eval() + max_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=1) + min_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=0) + print("Max coordinates:", max_coords.data, '\n') + print("Min coordinates:",min_coords.data) + + +Create the path based on a set of coordinates. Here we choose the paths origin coordinates, +number of points in the path and the distance between each coordinate. + +.. code-block:: python + + # Initial coordinates + initial_coords = [0.024, 0.03, 0.003] + # Number of points in the path + n_points = 51 + # Distance between each coordinate + delta = 0.001 + + # Create the paths coordinates field + path_coords = dpf.fields_factory.create_3d_vector_field(n_points) + path_coords.scoping.ids = list(range(0, n_points)) + +Make a loop to define the paths coordinates field. Here we make a path that only moves along the y-axis. + +.. code-block:: python + + # For each iteration we add a new set of coordinates based on the predefined distance between each coordinate + for i in range(0, n_points): + initial_coords[1] += delta + path_coords.append(data=initial_coords, scopingid=0) + +Extract the result +^^^^^^^^^^^^^^^^^^ + +Extract the result from the model. Here we get the equivalent stress result + +.. code-block:: python + + # Get the stress result + my_stress = my_model.results.stress().eqv().eval() + +Map the result to the path +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Compute the mapped data using the |mapping| operator. The stress results are defined in a ``ElementalNodal`` location. +So, each entity has a coordinate in the mesh and a correspondent stress data. + +The |mapping| operator retrieves the results of the entities located in the given coordinates. +If the given coordinates don't match with any entity coordinate, the operator interpolates the results inside +elements with shape functions. + +.. code-block:: python + + # Map the path coordinates with the stress results + mapped_stress = ops.mapping.on_coordinates(fields_container=my_stress, + coordinates=path_coords, + create_support=True, + mesh=my_meshed_region + ).eval() + +Plot the result on the path +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Create the plotter and add fields and meshes. For more information about +plotting data on a mesh check the tutorial: :ref:`ref_plotting_data_on_the_mesh` + +First, define the |DpfPlotter| object [2]_ and then add |MeshedRegion| +to it using the |add_mesh| method and add the field using the |add_field| method. + +To display the figure built by the plotter object use the |show_figure| method. + +.. code-block:: python + + # Declare the DpfPlotter object + my_plotter = dpf.plotter.DpfPlotter() + # Add the MeshedRegion to the DpfPlotter object + # We use custom style for the mesh so we can visualise the path (that is inside the mesh) + my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) + # Add the Field to the DpfPlotter object + my_plotter.add_field(field=mapped_stress[0]) + # Display the plot + my_plotter.show_figure() + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + initial_coords = [0.024, 0.03, 0.003] + n_points = 51 + delta = 0.001 + path_coords = dpf.fields_factory.create_3d_vector_field(n_points) + path_coords.scoping.ids = list(range(0, n_points)) + for i in range(0, n_points): + initial_coords[1] += delta + path_coords.append(data=initial_coords, scopingid=0) + my_stress = my_model.results.stress().eqv().eval() + mapped_stress = ops.mapping.on_coordinates(fields_container=my_stress, + coordinates=path_coords, + create_support=True, + mesh=my_meshed_region + ).eval() + my_plotter = dpf.plotter.DpfPlotter() + my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) + my_plotter.add_field(field=mapped_stress[0]) + my_plotter.show_figure() + +.. _plot_geometry_elements: + +Plot data on geometry elements +------------------------------ + +This part shows how to get a result mapped over different geometric objects: + +- Points_ +- Lines_ +- Planes_ +Define the data +^^^^^^^^^^^^^^^ + +We will download a simple simulation result file available in our `Examples` package: + +.. code-block:: python + + # Import the ``ansys.dpf.core`` module, including examples files, the operators subpackage and the geometry module + from ansys.dpf import core as dpf + from ansys.dpf.core import examples + from ansys.dpf.core import operators as ops + from ansys.dpf.core import geometry as geo + # Define the result file + result_file = examples.find_static_rst() + +The results will be mapped over a defined path of coordinates. So, start by creating +a |Model| with the result file and extract the |MeshedRegion| from it: + +.. code-block:: python + + # Create the model + my_model = dpf.Model(data_sources=result_file) + my_meshed_region = my_model.metadata.meshed_region + +We choose to plot the displacement results field. Extract the displacements results from the model: + +.. code-block:: python + + # Get the displacement result field + my_disp = my_model.results.displacement.eval() + +We use the the plot method [1]_ to display the geometry elements with the mesh. To a better +visualisation we will define a camera position. It can be given as an argument when using the +plot method [1]_: + +.. code-block:: python + + # Define the camera position + camera_position = [ + (0.07635352356975698, 0.1200500294271993, 0.041072502929096165), + (0.015, 0.045, 0.015), + (-0.16771051558419411, -0.1983722658245161, 0.9656715938216944), + ] + +Points +^^^^^^ + +Create points +~~~~~~~~~~~~~ + +Create |Points| by defining their coordinates. Once again they have to be in the space domain of the mesh. + +Get the nodes coordinates with the mesh operator +:class:`nodes_coordinates`: + +.. code-block:: python + + # Get the mesh nodes coordinates + nodes_coords = ops.mesh.node_coordinates(mesh=my_meshed_region).eval() + +Get the maximum values of the coordinates, so you know the space domain limits. + +.. code-block:: python + + # Get the maximum and minimum values of the mesh nodes coordinates + max_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=1) + min_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=0) + # Print the space domain limits + print("Max coordinates:", max_coords.data, '\n') + print("Min coordinates:",min_coords.data) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + from ansys.dpf import core as dpf + from ansys.dpf.core import examples + from ansys.dpf.core import operators as ops + from ansys.dpf.core import geometry as geo + result_file = examples.find_static_rst() + my_model = dpf.Model(data_sources=result_file) + my_meshed_region = my_model.metadata.meshed_region + my_disp = my_model.results.displacement + camera_position = [ + (0.07635352356975698, 0.1200500294271993, 0.041072502929096165), + (0.015, 0.045, 0.015), + (-0.16771051558419411, -0.1983722658245161, 0.9656715938216944), + ] + nodes_coords = ops.mesh.node_coordinates(mesh=my_meshed_region).eval() + max_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=1) + min_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=0) + print("Max coordinates:", max_coords.data, '\n') + print("Min coordinates:",min_coords.data) + +Now define the |Points| coordinates that respects those space limits. + +With the maximum and minimum coordinates we can can deduce the nodes at the corners of the mesh. + +The coordinates are define at the global Cartesian coordinates system by default. Thus, combining +the max and min coordinates gives us the points that will be in the corner of the mesh. We can also +place one point in the middle of the mesh by calculating the middle distance between the coordinates. + +You can do it by hand or by calculating this combinations : + +.. code-block:: python + + # Define the coordinates of the middle point + # print(min_coords.data_as_list) + distance_minmax_coords = ops.math.minus(fieldA=max_coords.data_as_list, fieldB=min_coords.data_as_list).eval() + middle = ops.math.scale(field=distance_minmax_coords, ponderation=0.5).eval() + middle_coords = ops.math.add(fieldA=min_coords.data_as_list,fieldB=middle.data_as_list).eval() + # Define the points + my_points = geo.Points(coordinates=[ + [0.0, 0.03, 0.0], + [0.0, 0.06, 0.0], + [0.03, 0.06, 0.0], + [0.03, 0.03, 0.0], + [0.0, 0.03, 0.03], + [0.0, 0.06, 0.03], + [0.03, 0.06, 0.03], + [0.03, 0.03, 0.03], + middle_coords.data_as_list + ] + ) + +Check the points on the mesh with a plot +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can plot the |Points| together with the mesh: + +.. code-block:: python + + # Display the mesh and the points + my_points.plot(mesh=my_meshed_region, cpos=camera_position) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + distance_minmax_coords = ops.math.minus(fieldA=max_coords.data_as_list, fieldB=min_coords.data_as_list).eval() + middle = ops.math.scale(field=distance_minmax_coords, ponderation=0.5).eval() + middle_coords = ops.math.add(fieldA=min_coords.data_as_list,fieldB=middle.data_as_list).eval() + my_points = geo.Points(coordinates=[ + [0.0, 0.03, 0.0], + [0.0, 0.06, 0.0], + [0.03, 0.06, 0.0], + [0.03, 0.03, 0.0], + [0.0, 0.03, 0.03], + [0.0, 0.06, 0.03], + [0.03, 0.06, 0.03], + [0.03, 0.03, 0.03], + middle_coords.data_as_list + ] + ) + my_points.plot(mesh=my_meshed_region, cpos=camera_position) + +Map displacement field to the points +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Compute the mapped data using the |mapping| operator. The displacement results are defined in a ``Nodal`` location. +So, each node has a coordinate in the mesh and a correspondent displacement data. + +The |mapping| operator retrieves the results of the entities located in the given coordinates. +If the given coordinates don't match with any entity coordinate, the operator interpolates the results inside +elements with shape functions. + +.. code-block:: python + + # Map the points coordinates with the displacement results and get the field + mapped_disp_points = ops.mapping.on_coordinates(fields_container=my_disp, + coordinates=dpf.fields_factory.field_from_array(arr=my_points.coordinates.data), + create_support=True, + mesh=my_meshed_region + ).eval()[0] + +Plot displacement field on the points +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Create the plotter and add fields and meshes. For more information about +plotting data on a mesh check the tutorial: :ref:`ref_plotting_data_on_the_mesh` + +First, define the |DpfPlotter| object [2]_ and then add |MeshedRegion| +to it using the |add_mesh| method and add the field using the |add_field| method. + +To display the figure built by the plotter object use the |show_figure| method. + +.. code-block:: python + + # Declare the DpfPlotter object + my_plotter = dpf.plotter.DpfPlotter() + # Add the MeshedRegion to the DpfPlotter object + # We use custom style for the mesh so we can visualise the points + my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) + # Add the Field to the DpfPlotter object + my_plotter.add_field(field=mapped_disp_points, point_size=20.0, render_points_as_spheres=True) + # Display the plot + my_plotter.show_figure(show_axes=True, cpos=camera_position) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + mapped_disp_points = ops.mapping.on_coordinates(fields_container=my_disp, + coordinates=dpf.fields_factory.field_from_array(arr=my_points.coordinates.data), + create_support=True, + mesh=my_meshed_region + ).eval()[0] + my_plotter = dpf.plotter.DpfPlotter() + my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) + my_plotter.add_field(field=mapped_disp_points,point_size=20.0, render_points_as_spheres=True) + my_plotter.show_figure(show_axes=True, cpos=camera_position) + +Line +^^^^ + +Create the line +~~~~~~~~~~~~~~~ + +Create a |Line| passing through the mesh diagonal. To create a |Line| +you need pass as arguments: the coordinates of the starting and ending points +and the number of points where the |Line| object will be discretized. + +Check the `Create points`_ section to understand how we defined the points coordinates. + +.. code-block:: python + + # Create the Line object + my_line = geo.Line(coordinates=[[0.0, 0.06, 0.0], [0.03, 0.03, 0.03]] + n_points=50 + ) + +Check the line on the mesh with a plot +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can plot the |Line| together with the mesh: + +.. code-block:: python + + # Display the mesh and the line + my_line.plot(mesh=my_meshed_region, cpos=camera_position) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_line = geo.Line(coordinates=[[0.0, 0.06, 0.0], [0.03, 0.03, 0.03]] + n_points=50 + ) + my_line.plot(mesh=my_meshed_region, cpos=camera_position) + +Map displacement field to the line +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Compute the mapped data using the |mapping| operator. The displacement results are defined in a ``Nodal`` location. +So, each node has a coordinate in the mesh and a correspondent displacement data. + +The |mapping| operator retrieves the results of the entities located in the given coordinates. +If the given coordinates don't match with any entity coordinate, the operator interpolates the results inside +elements with shape functions. + +.. code-block:: python + + # Map the line coordinates with the displacement results and get the field + mapped_disp_line = ops.mapping.on_coordinates(fields_container=my_disp, + coordinates=my_line.mesh.nodes.coordinates_field, + create_support=True, + mesh=my_meshed_region + ).eval()[0] + +Plot displacement field on the line +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Create the plotter and add fields and meshes. For more information about +plotting data on a mesh check the tutorial: :ref:`ref_plotting_data_on_the_mesh` + +First, define the |DpfPlotter| object [2]_ and then add |MeshedRegion| +to it using the |add_mesh| method and add the field using the |add_field| method. + +To display the figure built by the plotter object use the |show_figure| method. + +.. code-block:: python + + # Declare the DpfPlotter object + my_plotter = dpf.plotter.DpfPlotter() + # Add the MeshedRegion to the DpfPlotter object + # We use custom style for the mesh so we can visualise the points + my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) + # Add the Field to the DpfPlotter object + my_plotter.add_field(field=mapped_disp_line) + # Display the plot + my_plotter.show_figure(show_axes=True, cpos=camera_position) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + mapped_disp_line = ops.mapping.on_coordinates(fields_container=my_disp, + coordinates=my_line.mesh.nodes.coordinates_field), + create_support=True, + mesh=my_meshed_region + ).eval()[0] + my_plotter = dpf.plotter.DpfPlotter() + my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) + my_plotter.add_field(field=mapped_disp_line) + my_plotter.show_figure(show_axes=True, cpos=camera_position) + +Plane +^^^^^ + +Create the plane +~~~~~~~~~~~~~~~~ + +Create a vertical |Plane| passing through the mesh mid point. To create a |Plane| +you need pass as arguments: the coordinates of the center point, the vector of the normal direction to the plane, +and the width (x direction), height (y direction) and the number of cells(x and y direction) where the |Plane| +object will be discretized. + +Check the `Create points`_ section to understand how we defined the mesh space coordinates . + +.. code-block:: python + + # Create the Plane object + my_plane = geo.Plane(center=middle_coords.data_as_list, + normal=[1, 1, 0], + width=0.03, + height=0.03, + n_cells_x=10, + n_cells_y=10, + ) + +Check the plane on the mesh with a plot +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can plot the |Plane| together with the mesh: + +.. code-block:: python + + # Display the mesh and the plane + my_plane.plot(mesh=my_meshed_region, cpos=camera_position) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_plane = geo.Plane(center=middle_coords.data_as_list, + normal=[1, 1, 0], + width=0.03, + height=0.03, + n_cells_x=10, + n_cells_y=10, + ) + my_plane.plot(mesh=my_meshed_region, cpos=camera_position) + +Map displacement field to the plane +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Compute the mapped data using the |mapping| operator. The displacement results are defined in a ``Nodal`` location. +So, each node has a coordinate in the mesh and a correspondent displacement data. + +The |mapping| operator retrieves the results of the entities located in the given coordinates. +If the given coordinates don't match with any entity coordinate, the operator interpolates the results inside +elements with shape functions. + +.. code-block:: python + + # Map the line coordinates with the displacement results and get the field + mapped_disp_plane = ops.mapping.on_coordinates(fields_container=my_disp, + coordinates=my_plane.mesh.nodes.coordinates_field, + create_support=True, + mesh=my_meshed_region + ).eval()[0] + +Plot displacement field on the plane +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Create the plotter and add fields and meshes. For more information about +plotting data on a mesh check the tutorial: :ref:`ref_plotting_data_on_the_mesh` + +First, define the |DpfPlotter| object [2]_ and then add |MeshedRegion| +to it using the |add_mesh| method and add the field using the |add_field| method. + +To display the figure built by the plotter object use the |show_figure| method. + +.. code-block:: python + + # Declare the DpfPlotter object + my_plotter = dpf.plotter.DpfPlotter() + # Add the MeshedRegion to the DpfPlotter object + # We use custom style for the mesh so we can visualise the points + my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) + # Add the Field to the DpfPlotter object + my_plotter.add_field(field=mapped_disp_plane) + # Display the plot + my_plotter.show_figure(show_axes=True, cpos=camera_position) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + mapped_disp_plane = ops.mapping.on_coordinates(fields_container=my_disp, + coordinates=my_plane.mesh.nodes.coordinates_field, + create_support=True, + mesh=my_meshed_region + ).eval()[0] + my_plotter = dpf.plotter.DpfPlotter() + my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) + my_plotter.add_field(field=mapped_disp_plane) + my_plotter.show_figure(show_axes=True, cpos=camera_position) + +.. rubric:: Footnotes + +.. [1] The default plotter settings display the mesh with edges, lighting and axis widget enabled. +Nevertheless, as we use the `PyVista `_ library to create +the plot you can use additional PyVista arguments (available at: :func:`pyvista.plot`). + +.. [2] Here we use the |DpfPlotter| object, that is currently a PyVista based object. +That means that PyVista must be installed, and that it supports kwargs as +parameter (the argument must be supported by the installed PyVista version). + +The default |DpfPlotter| object settings display the mesh with edges and lighting +enabled. Nevertheless, as we use the `PyVista `_ +library to create the plot you can use additional PyVista arguments for the |DpfPlotter| +object and |add_field| method (available at: :func:`pyvista.plot`). \ No newline at end of file From 120b858191852d31ea541dec1e8d7fc1e756dc3a Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Fri, 15 Nov 2024 11:57:32 +0100 Subject: [PATCH 11/39] updates --- .../plotting_data_on_specific_placements.rst | 68 ++++++++++--------- .../plot/plotting_data_on_the_mesh.rst | 18 +++-- .../tutorials/plot/plotting_meshes.rst | 8 ++- 3 files changed, 48 insertions(+), 46 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst index 18af58ad22..2e5c74e043 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst @@ -152,7 +152,7 @@ Plot the result on the path Create the plotter and add fields and meshes. For more information about plotting data on a mesh check the tutorial: :ref:`ref_plotting_data_on_the_mesh` -First, define the |DpfPlotter| object [2]_ and then add |MeshedRegion| +First, define the |DpfPlotter| object [2]_, then add |MeshedRegion| to it using the |add_mesh| method and add the field using the |add_field| method. To display the figure built by the plotter object use the |show_figure| method. @@ -375,10 +375,10 @@ elements with shape functions. # Map the points coordinates with the displacement results and get the field mapped_disp_points = ops.mapping.on_coordinates(fields_container=my_disp, - coordinates=dpf.fields_factory.field_from_array(arr=my_points.coordinates.data), - create_support=True, - mesh=my_meshed_region - ).eval()[0] + coordinates=dpf.fields_factory.field_from_array(arr=my_points.coordinates.data), + create_support=True, + mesh=my_meshed_region + ).eval()[0] Plot displacement field on the points ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -386,7 +386,7 @@ Plot displacement field on the points Create the plotter and add fields and meshes. For more information about plotting data on a mesh check the tutorial: :ref:`ref_plotting_data_on_the_mesh` -First, define the |DpfPlotter| object [2]_ and then add |MeshedRegion| +First, define the |DpfPlotter| object [2]_, then add |MeshedRegion| to it using the |add_mesh| method and add the field using the |add_field| method. To display the figure built by the plotter object use the |show_figure| method. @@ -409,10 +409,10 @@ To display the figure built by the plotter object use the |show_figure| method. :hide-code: mapped_disp_points = ops.mapping.on_coordinates(fields_container=my_disp, - coordinates=dpf.fields_factory.field_from_array(arr=my_points.coordinates.data), - create_support=True, - mesh=my_meshed_region - ).eval()[0] + coordinates=dpf.fields_factory.field_from_array(arr=my_points.coordinates.data), + create_support=True, + mesh=my_meshed_region + ).eval()[0] my_plotter = dpf.plotter.DpfPlotter() my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) my_plotter.add_field(field=mapped_disp_points,point_size=20.0, render_points_as_spheres=True) @@ -433,7 +433,7 @@ Check the `Create points`_ section to understand how we defined the points coord .. code-block:: python # Create the Line object - my_line = geo.Line(coordinates=[[0.0, 0.06, 0.0], [0.03, 0.03, 0.03]] + my_line = geo.Line(coordinates=[[0.0, 0.06, 0.0], [0.03, 0.03, 0.03]], n_points=50 ) @@ -452,7 +452,7 @@ You can plot the |Line| together with the mesh: .. jupyter-execute:: :hide-code: - my_line = geo.Line(coordinates=[[0.0, 0.06, 0.0], [0.03, 0.03, 0.03]] + my_line = geo.Line(coordinates=[[0.0, 0.06, 0.0], [0.03, 0.03, 0.03]], n_points=50 ) my_line.plot(mesh=my_meshed_region, cpos=camera_position) @@ -471,18 +471,19 @@ elements with shape functions. # Map the line coordinates with the displacement results and get the field mapped_disp_line = ops.mapping.on_coordinates(fields_container=my_disp, - coordinates=my_line.mesh.nodes.coordinates_field, - create_support=True, - mesh=my_meshed_region - ).eval()[0] + coordinates=my_line.mesh.nodes.coordinates_field, + create_support=True, + mesh=my_meshed_region + ).eval()[0] Plot displacement field on the line ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Plot displacement field on the |Line| and display mesh in background. Create the plotter and add fields and meshes. For more information about plotting data on a mesh check the tutorial: :ref:`ref_plotting_data_on_the_mesh` -First, define the |DpfPlotter| object [2]_ and then add |MeshedRegion| +First, define the |DpfPlotter| object [2]_, then add |MeshedRegion| to it using the |add_mesh| method and add the field using the |add_field| method. To display the figure built by the plotter object use the |show_figure| method. @@ -505,13 +506,13 @@ To display the figure built by the plotter object use the |show_figure| method. :hide-code: mapped_disp_line = ops.mapping.on_coordinates(fields_container=my_disp, - coordinates=my_line.mesh.nodes.coordinates_field), - create_support=True, - mesh=my_meshed_region - ).eval()[0] + coordinates=my_line.mesh.nodes.coordinates_field, + create_support=True, + mesh=my_meshed_region + ).eval()[0] my_plotter = dpf.plotter.DpfPlotter() my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) - my_plotter.add_field(field=mapped_disp_line) + my_plotter.add_field(field=mapped_disp_line,meshed_region=my_line.mesh) my_plotter.show_figure(show_axes=True, cpos=camera_position) Plane @@ -576,18 +577,19 @@ elements with shape functions. # Map the line coordinates with the displacement results and get the field mapped_disp_plane = ops.mapping.on_coordinates(fields_container=my_disp, - coordinates=my_plane.mesh.nodes.coordinates_field, - create_support=True, - mesh=my_meshed_region - ).eval()[0] + coordinates=my_plane.mesh.nodes.coordinates_field, + create_support=True, + mesh=my_meshed_region + ).eval()[0] Plot displacement field on the plane ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Plot displacement field on the |Plane| and display mesh in background. Create the plotter and add fields and meshes. For more information about plotting data on a mesh check the tutorial: :ref:`ref_plotting_data_on_the_mesh` -First, define the |DpfPlotter| object [2]_ and then add |MeshedRegion| +First, define the |DpfPlotter| object [2]_, then add |MeshedRegion| to it using the |add_mesh| method and add the field using the |add_field| method. To display the figure built by the plotter object use the |show_figure| method. @@ -600,7 +602,7 @@ To display the figure built by the plotter object use the |show_figure| method. # We use custom style for the mesh so we can visualise the points my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) # Add the Field to the DpfPlotter object - my_plotter.add_field(field=mapped_disp_plane) + my_plotter.add_field(field=mapped_disp_plane, meshed_region=my_plane.mesh, show_edges=False) # Display the plot my_plotter.show_figure(show_axes=True, cpos=camera_position) @@ -610,13 +612,13 @@ To display the figure built by the plotter object use the |show_figure| method. :hide-code: mapped_disp_plane = ops.mapping.on_coordinates(fields_container=my_disp, - coordinates=my_plane.mesh.nodes.coordinates_field, - create_support=True, - mesh=my_meshed_region - ).eval()[0] + coordinates=my_plane.mesh.nodes.coordinates_field, + create_support=True, + mesh=my_meshed_region + ).eval()[0] my_plotter = dpf.plotter.DpfPlotter() my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) - my_plotter.add_field(field=mapped_disp_plane) + my_plotter.add_field(field=mapped_disp_plane, meshed_region=my_plane.mesh, show_edges=False) my_plotter.show_figure(show_axes=True, cpos=camera_position) .. rubric:: Footnotes diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst index 38dc0ddee5..c9b67364ba 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst @@ -10,6 +10,9 @@ Plotting data on the mesh .. |plot| replace:: :func:`plot()` .. |plotMesh| replace:: :func:`plot()` .. |DpfPlotter| replace:: :class:`DpfPlotter` +.. |add_mesh| replace:: :func:`add_mesh()` +.. |add_field| replace:: :func:`add_field()` +.. |show_figure| replace:: :func:`show_figure()` .. |Field| replace:: :class:`Field` .. |FieldsContainer| replace:: :class:`FieldsContainer` @@ -167,12 +170,10 @@ You have to give the Fields supporting mesh as a attribute: Using the DpfPlotter class ~~~~~~~~~~~~~~~~~~~~~~~~~~ -First define the |DpfPlotter| object [2]_ and then add the Field -to it using the :func:`add_field()` method. +First define the |DpfPlotter| object [2]_ and then add the Field to it using the |add_field| method. You have to give the Fields supporting mesh as an attribute to this method. -To display the figure built by the plotter object you need to use the -:func:`show_figure()` method. +To display the figure built by the plotter object you need to use the |show_figure| method. .. code-block:: python @@ -242,11 +243,9 @@ Using the DpfPlotter class ~~~~~~~~~~~~~~~~~~~~~~~~~~ First, define the |DpfPlotter| object [2]_ and then add |MeshedRegion| -to it using the :func:`add_mesh()` method and add the -field using the :func:`add_field()` method. +to it using the |add_mesh| method and add the field using the |add_field| method. -To display the figure built by the plotter object use the -:func:`show_figure()` method. +To display the figure built by the plotter object use the |show_figure| method. .. code-block:: python @@ -291,5 +290,4 @@ parameter (the argument must be supported by the installed PyVista version). The default |DpfPlotter| object settings display the mesh with edges and lighting enabled. Nevertheless, as we use the `PyVista `_ library to create the plot you can use additional PyVista arguments for the |DpfPlotter| -object and :func:`add_field()` method -(available at: :func:`pyvista.plot`). \ No newline at end of file +object and |add_field| method (available at: :func:`pyvista.plot`). \ No newline at end of file diff --git a/doc/source/user_guide/tutorials/plot/plotting_meshes.rst b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst index 7ee84c3c5f..59eb23f145 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_meshes.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst @@ -8,6 +8,8 @@ Plotting meshes .. |Model| replace:: :class:`Model ` .. |plot| replace:: :func:`plot()` .. |DpfPlotter| replace:: :class:`DpfPlotter` +.. |add_mesh| replace:: :func:`add_mesh()` +.. |show_figure| replace:: :func:`show_figure()` DPF-Core has a variety of plotting methods for generating 3D plots of Ansys models directly from Python. These methods use VTK and leverage @@ -142,10 +144,10 @@ parameter (the argument must be supported by the installed PyVista version). More information about the available arguments are available at :class:`pyvista.Plotter`. First you have to define the |DpfPlotter| object and then add the |MeshedRegion| -to it using the :func::func:`add_mesh()` method. +to it using the |add_mesh| method. To display the figure built by the plotter object you need to use the -:func:`show_figure()` method. +|show_figure| method. .. code-block:: python @@ -168,7 +170,7 @@ To display the figure built by the plotter object you need to use the The default |DpfPlotter| object settings display the mesh with edges,and lighting enabled. Nevertheless, as we use the `PyVista `_ library to create the plot you can use additional PyVista arguments for the |DpfPlotter| -object and :func:`add_mesh()` method +object and |add_mesh| method (available at: :func:`pyvista.plot`). You can also plot results data on its supporting mesh. For a detailed demonstration From 4cf090a4089b3342f1d9bed9f118b4e209688f66 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Fri, 15 Nov 2024 13:01:24 +0100 Subject: [PATCH 12/39] add plotting_a_graph.rst tut --- .../tutorials/plot/plotting_a_graph.rst | 219 +++++++++++++++++- 1 file changed, 216 insertions(+), 3 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_a_graph.rst b/doc/source/user_guide/tutorials/plot/plotting_a_graph.rst index 3b6a1715c1..c71c38761a 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_a_graph.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_a_graph.rst @@ -1,5 +1,218 @@ .. _ref_plotting_a_graph: -==================================== -Plotting data on specific placements -==================================== \ No newline at end of file +======================== +Plotting data on a graph +======================== + +.. |DpfPlotter| replace:: :class:`DpfPlotter` +.. |Line| replace:: :class:`Line ` +.. |MeshedRegion| replace:: :class:`MeshedRegion ` +.. |Model| replace:: :class:`Model ` +.. |mapping| replace:: :class:`mapping ` + +This part shows how to get a result plotted on a graph. + +The current |DpfPlotter| module don't have method to plotting graphs. Thus, you need to import the +`matplotlib `_ library to plot a graph with PyDPF-Core. + +There is a large range of data types you can represent on the graph coordinates. Here we plot: + +- `Results data vs. space position`_ graph +- `Results data vs. time`_ graph + +Results data vs. space position +------------------------------- + +We will plot the displacement results on a |Line|. To understand how this object can +be defined check the :ref:`ref_plotting_data_on_specific_placements` tutorial. + +Define the data +^^^^^^^^^^^^^^^ + +We will download a simple simulation result file available in our `Examples` package: + +.. code-block:: python + + # Import the ``ansys.dpf.core`` module, including examples files, the operators subpackage, the geometry module and the matplotlib + from ansys.dpf import core as dpf + from ansys.dpf.core import examples + from ansys.dpf.core import operators as ops + from ansys.dpf.core import geometry as geo + import matplotlib.pyplot as plt + # Define the result file + result_file = examples.find_static_rst() + +The results will be mapped over a defined path of coordinates. So, start by creating +a |Model| with the result file and extract the |MeshedRegion| from it: + +.. code-block:: python + + # Create the model + my_model = dpf.Model(data_sources=result_file) + my_meshed_region = my_model.metadata.meshed_region + +We choose to plot the displacement results field. Extract the displacements results from the model: + +.. code-block:: python + + # Get the displacement results + my_disp = my_model.results.displacement.eval() + +Create the line +^^^^^^^^^^^^^^^ + +Create a |Line| passing through the mesh diagonal. + +.. code-block:: python + + # Create the Line object + my_line = geo.Line(coordinates=[[0.0, 0.06, 0.0], [0.03, 0.03, 0.03]], + n_points=50 + ) + +Map displacement field to the line +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Compute the mapped displacement data using the |mapping| operator. + +.. code-block:: python + + # Map the line coordinates with the displacement results and get the field + mapped_disp_line = ops.mapping.on_coordinates(fields_container=my_disp, + coordinates=my_line.mesh.nodes.coordinates_field, + create_support=True, + mesh=my_meshed_region + ).eval()[0] + +Plot a graph of the displacement results along the specified line +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Plot a graph of the displacement field along the specified |Line| length using the matplotlib library. + +To get the |Line| length you can use the |Line| property :func:`path`. +It gives the 1D line coordinates, by the number of points the line was discretized. + +.. code-block:: python + + # Define the norm of the displacement field + norm_disp = ops.math.norm(field=mapped_disp_line).eval() + # Define the line points on the its length + line_length_points = my_line.path + # Plot the graph + plt.plot(line_length_points, norm_disp) + # Graph formating + plt.xlabel("Line length"); plt.ylabel("Displacement norm field"); plt.title("Displacement evolution on the line") + plt.show() + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + from ansys.dpf import core as dpf + from ansys.dpf.core import examples + from ansys.dpf.core import operators as ops + from ansys.dpf.core import geometry as geo + import matplotlib.pyplot as plt + result_file = examples.find_static_rst() + my_model = dpf.Model(data_sources=result_file) + my_meshed_region = my_model.metadata.meshed_region + my_disp = my_model.results.displacement.eval() + my_line = geo.Line(coordinates=[[0.0, 0.06, 0.0], [0.03, 0.03, 0.03]], + n_points=50 + ) + mapped_disp_line = ops.mapping.on_coordinates(fields_container=my_disp, + coordinates=my_line.mesh.nodes.coordinates_field, + create_support=True, + mesh=my_meshed_region + ).eval()[0] + norm_disp = ops.math.norm(field=mapped_disp_line).eval() + line_length_points = my_line.path + plt.plot(line_length_points, norm_disp.data) + plt.xlabel("Line length"); plt.ylabel("Displacement norm field"); plt.title("Displacement evolution on the line") + plt.show() + +Results data vs. time +--------------------- + +We will plot the displacement results over time for a transient analysis. To understand more about using PyDPF-Core +with a transient analysis check the :ref:`static_transient_examples` examples. + +Define the data +^^^^^^^^^^^^^^^ + +Download the transient result example. This example is not included in DPF-Core +by default to speed up the installation. Downloading this example should take only a few seconds. + +.. code-block:: python + + # Import the ``ansys.dpf.core`` module, including examples files, the operators subpackage and the matplotlib + from ansys.dpf import core as dpf + from ansys.dpf.core import examples + from ansys.dpf.core import operators as ops + import matplotlib.pyplot as plt + # Define the result file + result_file = examples.download_transient_result() + +The results will be mapped over a defined path of coordinates. So, start by creating +a |Model| with the result file and extract the |MeshedRegion| from it: + +.. code-block:: python + + # Create the model + my_model = dpf.Model(data_sources=result_file) + my_meshed_region = my_model.metadata.meshed_region + +We choose to plot the maximum and minimum displacement results over time. +Extract the displacements results from the model for all the time frequencies: + +.. code-block:: python + + # Get the displacement results + my_disp = my_model.results.displacement.on_all_time_freqs.eval() + +Define the minimum and maximum displacements for all results: + +.. code-block:: python + + # Define the min_max operator with the normed displacement + min_max_op = ops.min_max.min_max_fc(fields_container=ops.math.norm_fc(my_disp)) + # Get the max and min displacements + max_disp = min_max_op.eval(pin=1) + min_disp = min_max_op.eval(pin=0) + +Plot a graph of the minimum and maximum displacements over time +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Plot a graph of the minimum and maximum displacements over time using the matplotlib library. + +.. code-block:: python + + # Define the time frequencies from the model + time_data = my_model.metadata.time_freq_support.time_frequencies.data + # Plot the graph + plt.plot(time_data, max_disp.data, "r", label="Max") + plt.plot(time_data, min_disp.data, "b", label="Min") + # Graph formating + plt.xlabel("Time (s)"); plt.ylabel("Displacement (m)"); plt.legend(); plt.show() + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + from ansys.dpf import core as dpf + from ansys.dpf.core import examples + from ansys.dpf.core import operators as ops + import matplotlib.pyplot as plt + result_file = examples.download_transient_result() + my_model = dpf.Model(data_sources=result_file) + my_meshed_region = my_model.metadata.meshed_region + my_disp = my_model.results.displacement.on_all_time_freqs.eval() + min_max_op = ops.min_max.min_max_fc(fields_container=ops.math.norm_fc(my_disp)) + max_disp = min_max_op.eval(pin=1) + min_disp = min_max_op.eval(pin=0) + time_data = my_model.metadata.time_freq_support.time_frequencies.data + plt.plot(time_data, max_disp.data, "r", label="Max") + plt.plot(time_data, min_disp.data, "b", label="Min") + plt.xlabel("Time (s)"); plt.ylabel("Displacement (m)"); plt.legend(); plt.show() \ No newline at end of file From 23665c5c329b16124ed68bfd0e1eddfba358adba Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Fri, 15 Nov 2024 13:02:05 +0100 Subject: [PATCH 13/39] updates --- .../plot/plotting_data_on_specific_placements.rst | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst index 2e5c74e043..58586d1db9 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst @@ -201,8 +201,9 @@ Plot data on geometry elements This part shows how to get a result mapped over different geometric objects: - Points_ -- Lines_ -- Planes_ +- Line_ +- Plane_ + Define the data ^^^^^^^^^^^^^^^ @@ -231,7 +232,7 @@ We choose to plot the displacement results field. Extract the displacements resu .. code-block:: python - # Get the displacement result field + # Get the displacement results my_disp = my_model.results.displacement.eval() We use the the plot method [1]_ to display the geometry elements with the mesh. To a better From f89405fd0f3b7482f865c1be5438f20751974699 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Fri, 15 Nov 2024 13:47:03 +0100 Subject: [PATCH 14/39] add plot meshes container in plotting_meshes.rst tutorial --- .../tutorials/plot/plotting_meshes.rst | 60 ++++++++++++++++--- 1 file changed, 52 insertions(+), 8 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_meshes.rst b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst index 59eb23f145..447dfec846 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_meshes.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst @@ -5,8 +5,11 @@ Plotting meshes =============== .. |MeshedRegion| replace:: :class:`MeshedRegion ` +.. |MeshesContainer| replace:: :class:`MeshesContainer `, .. |Model| replace:: :class:`Model ` .. |plot| replace:: :func:`plot()` +.. |plotMesh| replace:: :func:`plot()` +.. |plotMeshes| replace:: :func:`plot()` .. |DpfPlotter| replace:: :class:`DpfPlotter` .. |add_mesh| replace:: :func:`add_mesh()` .. |show_figure| replace:: :func:`show_figure()` @@ -22,8 +25,11 @@ of a model. Define the mesh --------------- -The mesh object in DPF is a |MeshedRegion|. In this tutorial we will download -a pontoon simulation result file available in our `Examples` package: +The mesh object in DPF is a |MeshedRegion|. You can plot a |MeshedRegion| or a +|MeshesContainer|, that is a collection of |MeshedRegion|. + +In this tutorial we will download a pontoon simulation result file available in +our `Examples` package: .. code-block:: python @@ -37,6 +43,7 @@ Here, we use the |MeshedRegion| associated with the DPF |Model| object. However, you can obtain your |MeshedRegion| by other methods. For more information see the tutorials section : :ref:`ref_tutorials_mesh`. + To plot the mesh you have three different methods: 1) :ref:`method_plot_mesh_1` @@ -102,17 +109,24 @@ the plot you can use additional PyVista arguments (available at: .. _method_plot_mesh_2: -Plot the |MeshedRegion| with the |plot| method ----------------------------------------------- +Plot the |MeshedRegion| or the |MeshesContainer| with the |plotMesh| method +--------------------------------------------------------------------------- + +|MeshedRegion| +^^^^^^^^^^^^^^ This second approach demands a |MeshedRegion| object. Thus, we extract -it from our |Model| object . Then, in the same way of the first approach, -you just have to use the |plot| method. +it from our |Model| object. .. code-block:: python # Extract the mesh my_meshed_region = my_model.metadata.meshed_region + +Just like in the first approach, use the |plotMesh| method. + +.. code-block:: python + # Use the plot() method to plot the mesh my_meshed_region.plot() @@ -125,7 +139,8 @@ you just have to use the |plot| method. my_meshed_region.plot() As, the meshed region is generated from the model’s metadata, -the plot generated here is identical to the plot generated by the ":ref:`method_plot_mesh_1`" approach. +the plot generated here is identical to the plot generated by +the ":ref:`method_plot_mesh_1`" approach. The default plotter settings display the mesh with edges, lighting and axis widget enabled. Nevertheless, as we use the @@ -133,6 +148,34 @@ and axis widget enabled. Nevertheless, as we use the the plot you can use additional PyVista arguments (available at: :func:`pyvista.plot`), just like in ":ref:`method_plot_mesh_1`" +|MeshesContainer| +^^^^^^^^^^^^^^^^^ + +There are different ways to obtain a |MeshesContainer|. + +Here we get a |MeshesContainer| by using the :class:`meshes_provider ` +operator. + +.. code-block:: python + + # Get the meshes container + my_meshes = ops.mesh.mesh_provider(data_sources=dpf.DataSources(pontoon_file)).eval() + +Just like in the first approach, use the |plotMeshes| method. + +.. code-block:: python + + # Use the plot() method to plot the mesh + my_meshes.plot() + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_meshes = ops.mesh.mesh_provider(data_sources=dpf.DataSources(pontoon_file)).eval() + my_meshes.plot() + .. _method_plot_mesh_3: Plot the |MeshedRegion| with the |DpfPlotter| class @@ -174,4 +217,5 @@ object and |add_mesh| method (available at: :func:`pyvista.plot`). You can also plot results data on its supporting mesh. For a detailed demonstration -check: :ref:`ref_plotting_data_on_the_mesh` \ No newline at end of file +check: :ref:`ref_plotting_data_on_the_mesh` + From 2a990222afd54c55bba01df9cc2c8a62f33734e7 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Fri, 15 Nov 2024 13:50:15 +0100 Subject: [PATCH 15/39] add plot meshes container in plotting_meshes.rst tutorial update --- doc/source/user_guide/tutorials/plot/plotting_meshes.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_meshes.rst b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst index 447dfec846..2ca44046c9 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_meshes.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst @@ -33,9 +33,10 @@ our `Examples` package: .. code-block:: python - # Import the ``ansys.dpf.core`` module, including examples files + # Import the ``ansys.dpf.core`` module, including examples files and operators subpackage from ansys.dpf import core as dpf from ansys.dpf.core import examples + from ansys.dpf.core import operators as ops # Define the result file pontoon_file = examples.download_pontoon() @@ -73,6 +74,7 @@ method, it plots the bare mesh by default. from ansys.dpf import core as dpf from ansys.dpf.core import examples + from ansys.dpf.core import operators as ops pontoon_file = examples.download_pontoon() my_model = dpf.Model(data_sources=pontoon_file) my_model.plot() From 907c32d76212523169c1c5c212b5742c4bfcc7b0 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Fri, 15 Nov 2024 15:43:26 +0100 Subject: [PATCH 16/39] add plotting_data_on_deformed_mesh.rst tutorial --- .../user_guide/tutorials/plot/index.rst | 8 + .../plot/plotting_data_on_deformed_mesh.rst | 284 ++++++++++++++++++ 2 files changed, 292 insertions(+) create mode 100644 doc/source/user_guide/tutorials/plot/plotting_data_on_deformed_mesh.rst diff --git a/doc/source/user_guide/tutorials/plot/index.rst b/doc/source/user_guide/tutorials/plot/index.rst index 6f089fca96..3a41232392 100644 --- a/doc/source/user_guide/tutorials/plot/index.rst +++ b/doc/source/user_guide/tutorials/plot/index.rst @@ -26,6 +26,13 @@ These tutorials demonstrate some different approaches to visualise the data in p This tutorial explains how to plot data on its supporting mesh by different approaches. + .. grid-item-card:: Plotting data on the deformed mesh + :link: ref_plotting_data_on_deformed_mesh + :link-type: ref + :text-align: center + + This tutorial explains how to plot data on its supporting deformed mesh. + .. grid-item-card:: Plotting data on specific placements :link: ref_plotting_data_on_specific_placements :link-type: ref @@ -47,5 +54,6 @@ These tutorials demonstrate some different approaches to visualise the data in p plotting_meshes.rst plotting_data_on_the_mesh.rst + plotting_data_on_deformed_mesh.rst plotting_data_on_specific_placements.rst plotting_a_graph.rst \ No newline at end of file diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_deformed_mesh.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_deformed_mesh.rst new file mode 100644 index 0000000000..04e343e63b --- /dev/null +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_deformed_mesh.rst @@ -0,0 +1,284 @@ +.. _ref_plotting_data_on_deformed_mesh: + +============================== +Plotting data on deformed mesh +============================== + +.. |Model| replace:: :class:`Model ` +.. |MeshedRegion| replace:: :class:`MeshedRegion ` +.. |Field| replace:: :class:`Field` +.. |FieldsContainer| replace:: :class:`FieldsContainer` +.. |MeshesContainer| replace:: :class:`MeshesContainer `, + +This tutorial shows how to plot data on the deformed mesh. For more detailed information on plotting data +check the :ref:`ref_plotting_data_on_the_mesh` tutorial. + +Define the data +--------------- + +In this tutorial we will download a simulation result file available +in our ``Examples`` package: + +.. code-block:: python + + # Import the ``ansys.dpf.core`` module, including examples files and operators subpackage + from ansys.dpf import core as dpf + from ansys.dpf.core import examples + from ansys.dpf.core import operators as ops + # Define the result file + result_file = examples.find_multishells_rst() + +The |Model| is a helper designed to give shortcuts to access the analysis results +metadata, by opening a DataSources or a Streams, and to instanciate results provider for it. + +Printing the model displays the available results. + +.. code-block:: python + + # Create the model + my_model = dpf.Model(data_sources=result_file) + # Print the model + print(my_model) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + from ansys.dpf import core as dpf + from ansys.dpf.core import examples + from ansys.dpf.core import operators as ops + result_file = examples.find_multishells_rst() + my_model = dpf.Model(data_sources=result_file) + print(my_model) + + +To deform the mesh we need a result with a homogeneous unit dimension, a distance unit. +Thus, to deform the mesh we need the displacement result. + +Extract the displacements results from the model: + +.. code-block:: python + + # Get the displacement results + my_disp_result = my_model.results.displacement + +We need to extract the data we want to plot on the deformed mesh. + +Mind that the results location must be of type ``Elemental`` or ``Nodal``. We choose +to work with the XX stress tensor component result. + +Fot more information about extracting results from a result file check +the :ref:`ref_tutorials_import_data` tutorials section. + +.. code-block:: python + + # Extract the stress result + my_stress = my_model.results.stress() + +As the stress result is in a ``ElementalNodal`` location we have to change it. +Here we define the new location with a input of the +:class:`stress() ` operator. + +.. code-block:: python + + # Define the desired location as an input of the results operator + my_stress.inputs.requested_location(dpf.locations.nodal) + # Get the result (the stress result operator gives an FieldsContainer as an output) + fc_stress = my_stress.eval() + +To get the results only for the XX stress component we have to use +the :func:`select_component() ` +method: + +.. code-block:: python + + # Define the component to get. + # The stress tensor has 6 components per elementary data (symmetrical tensor XX,YY,ZZ,XY,YZ,XZ). + # So we get the component of index=0 + fc_stress_XX = fc_stress.select_component(index=0) + +Plot deformed geometry +---------------------- + +Here we use the plot [1]_ method. For different approaches check the :ref:`ref_plotting_data_on_the_mesh` tutorial. + +The geometry can be defined by a |MeshedRegion| or by a |MeshesContainer|. + +Define the |MeshedRegion| from the |Model|: + +.. code-block:: python + + # Define the meshed region + my_meshed_region = my_model.metadata.meshed_region + +There are different ways to obtain a |MeshesContainer|. + +Here we get a |MeshesContainer| by using the :class:`split_mesh ` +operator. It splits the mesh by material by default: + +.. code-block:: python + + # Define the meshed region + my_meshes = ops.mesh.split_mesh(mesh=my_meshed_region).eval() + +The geometry can be deformed by a :class:`Result ` object, +an :class:`Operator`, a :class:`Field` +or a :class:`FieldsContainer`. + +The procedures are the same for a |MeshedRegion| and a |MeshesContainer|. For this reason we will show only +one plot for the |MeshesContainer| + +.. code-block:: python + + # Define the plot formating + my_scale_factor = 0.001 + my_window_size=[350,350] + # Plot the XX stress tensor component results on a MeshedRegion deformed by: + # a) a Result object + my_meshed_region.plot( deform_by=my_disp_result, + scale_factor=my_scale_factor, + text="a", + window_size=my_window_size,) + # b) an Operator + my_disp_op = my_disp_result() + my_meshed_region.plot( deform_by=my_disp_op, + scale_factor=my_scale_factor, + text="b", + window_size=my_window_size,) + # c) a FieldsContainer + my_disp_fc = my_disp_result.eval() + my_meshed_region.plot( deform_by=my_disp_fc, + scale_factor=my_scale_factor, + text="c", + window_size=my_window_size,) + # d) a Field + my_disp_field = my_disp_fc[0] + my_meshed_region.plot( deform_by=my_disp_field, + scale_factor=my_scale_factor, + text="d", + window_size=my_window_size) + + # Plot the XX stress tensor component results on a MeshesContainer deformed by a Field + my_meshes.plot( deform_by=my_disp_field, + scale_factor=my_scale_factor, + text="e", + window_size=my_window_size) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_meshed_region = my_model.metadata.meshed_region + my_meshes = ops.mesh.split_mesh(mesh=my_meshed_region).eval() + my_disp_result = my_model.results.displacement + my_stress = my_model.results.stress() + my_stress.inputs.requested_location(dpf.locations.nodal) + fc_stress = my_stress.eval() + my_disp_result = my_model.results.displacement + my_stress = my_model.results.stress() + my_scale_factor = 0.001 + my_window_size=[350,350] + my_meshed_region.plot( deform_by=my_disp_result, + scale_factor=my_scale_factor, + text="a", + window_size=my_window_size) + my_disp_op = my_disp_result() + my_meshed_region.plot( deform_by=my_disp_op, + scale_factor=my_scale_factor, + text="b", + window_size=my_window_size) + my_disp_fc = my_disp_result.eval() + my_meshed_region.plot( deform_by=my_disp_fc, + scale_factor=my_scale_factor, + text="c", + font_size=5, + window_size=my_window_size) + my_disp_field = my_disp_fc[0] + my_meshed_region.plot( deform_by=my_disp_field, + scale_factor=my_scale_factor, + text="d", + window_size=my_window_size) + my_meshes.plot( deform_by=my_disp_field, + scale_factor=my_scale_factor, + text="e", + window_size=my_window_size) + +Plot data on the deformed geometry +---------------------------------- + +Plot the data on its mesh support +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Plotting the data in DPF means plotting the |Field| or |FieldsContainer| that contains the data. + +Plot the stress results on the deformed geometry: + +.. code-block:: python + + # Define the stress field + stress_field = fc_stress[0] + # Plot the results on a deformed geometry. The data is in a: + # a) Field + stress_field.plot( deform_by=my_disp_field, + scale_factor=my_scale_factor) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + stress_field = fc_stress[0] + stress_field.plot( deform_by=my_disp_field, + scale_factor=my_scale_factor) + +Plot the mesh and add the stress data on top of that +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The data to be plotted in a |MeshedRegion| can be in a |Field| or in a |FieldsContainer| + +.. code-block:: python + + # Plot the MeshedRegion and the stress in a Field + my_meshed_region.plot( field_or_fields_container=stress_field + deform_by=my_disp_field, + scale_factor=my_scale_factor) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_meshed_region.plot( field_or_fields_container=stress_field, + deform_by=my_disp_field, + scale_factor=my_scale_factor) + +The data to be plotted in a |MeshesContainer| must be in a |FieldsContainer| + +.. code-block:: python + + # Plot the MeshesContainer and the stress in a FieldsContainer + my_meshes.plot( fields_container=fc_stress + deform_by=my_disp_field, + scale_factor=my_scale_factor) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + my_meshed_region.plot( field_or_fields_container=stress_field, + deform_by=my_disp_field, + scale_factor=my_scale_factor) + +.. rubric:: Footnotes + +.. [1] The default plotter settings display the mesh with edges, lighting and axis widget enabled. +Nevertheless, as we use the `PyVista `_ library to create +the plot you can use additional PyVista arguments (available at: :func:`pyvista.plot`. + + + + + From 6a36fbdd568e5d0071bd61925ce694ee0c8f49fc Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Fri, 15 Nov 2024 15:43:40 +0100 Subject: [PATCH 17/39] updates --- .../tutorials/plot/plotting_data_on_specific_placements.rst | 1 + .../user_guide/tutorials/plot/plotting_data_on_the_mesh.rst | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst index 58586d1db9..56d14904ed 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst @@ -14,6 +14,7 @@ Plotting data on specific placements .. |Points| replace:: :class:`Points ` .. |Plane| replace:: :class:`Plane ` .. |mapping| replace:: :class:`mapping ` + This tutorial shows how to plot data on specific placements of a mesh: - :ref:`plot_specific_path` diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst index c9b67364ba..ad849a9a79 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst @@ -56,7 +56,7 @@ Printing the model displays the available results. print(my_model) We need to extract the data we want to plot. Mind that the results location must be of -type ``Elemental`` or ``Nodal``. Fot more information about extracting results from a +type ``Elemental`` or ``Nodal`` for plotting. Fot more information about extracting results from a result file check the :ref:`ref_tutorials_import_data` tutorials section. Here we choose to get the XX stress tensor component result. We start by extracting the stress results: @@ -76,8 +76,7 @@ Here we choose to get the XX stress tensor component result. We start by extract my_stress = my_model.results.stress() print(my_stress.eval()) -As the stress result is in a ``ElementalNodal`` location we have to change it -(for plotting the location needs to be of type ``Elemental`` or ``Nodal``). +As the stress result is in a ``ElementalNodal`` location we have to change it. Here we define the new location with a input of the :class:`stress() ` operator. From a2b474bc9ae2e69e36e198d0f0c6df4ef4a20f45 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Fri, 15 Nov 2024 15:53:23 +0100 Subject: [PATCH 18/39] erase the adapted examples --- doc/source/images/plotting/pontoon.png | Bin 91175 -> 0 bytes doc/source/images/plotting/pontoon_strain.png | Bin 266437 -> 0 bytes doc/source/user_guide/plotting.rst | 92 --------- examples/06-plotting/00-basic_plotting.py | 121 ------------ examples/06-plotting/04-plot_on_path.py | 96 --------- examples/06-plotting/07-plot_on_geometries.py | 184 ------------------ 6 files changed, 493 deletions(-) delete mode 100644 doc/source/images/plotting/pontoon.png delete mode 100644 doc/source/images/plotting/pontoon_strain.png delete mode 100644 doc/source/user_guide/plotting.rst delete mode 100644 examples/06-plotting/00-basic_plotting.py delete mode 100644 examples/06-plotting/04-plot_on_path.py delete mode 100644 examples/06-plotting/07-plot_on_geometries.py diff --git a/doc/source/images/plotting/pontoon.png b/doc/source/images/plotting/pontoon.png deleted file mode 100644 index b55052858368dcd0bc202ad4292fe22510dd52c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91175 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

WMl|3wOcGe`_d__zz0Ai1z{{dm)z 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 z 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 diff --git a/doc/source/user_guide/plotting.rst b/doc/source/user_guide/plotting.rst deleted file mode 100644 index cf489aede3..0000000000 --- a/doc/source/user_guide/plotting.rst +++ /dev/null @@ -1,92 +0,0 @@ -.. _user_guide_plotting: - -==== -Plot -==== -DPF-Core has a variety of plotting methods for generating 3D plots of -Ansys models directly from Python. These methods use VTK and leverage -the `PyVista `_ library to -simplify plotting. For more information, see the `PyVista Documentation -`_. - - -Plot the mesh from the ``Model`` object ---------------------------------------- -The :meth:`Model.plot() ` method -plots the mesh of the model immediately after loading it. - -This example downloads a simple pontoon mesh from the internet and uses the -:class:`ansys.dpf.core.model` class to load it: - -.. code-block:: python - - import ansys.dpf.core as dpf - from ansys.dpf.core import examples - filename = examples.download_pontoon() - model = dpf.Model(filename) - model.plot() - -.. image:: ../images/plotting/pontoon.png - -The default plotter settings display the mesh with edges shown and -lighting enabled. For a list of all keyword arguments, see -`plot `_. - - -Plot the meshed region ------------------------ -The :meth:`MeshedRegion.plot() ` -method plots the meshed region. If the meshed region is generated from the model's -metadata, the plot generated is identical to the plot generated by the -:meth:`Model.plot() ` method. - -Plot the meshed region - -.. code-block:: python - - mesh = model.metadata.meshed_region - mesh.plot() - -.. image:: ../images/plotting/pontoon.png - -When a field is provided as the first argument, the mesh is plotted -using these values. - -This example extracts the nodal strain in the X direction: - -First, extract the X component strain - -.. code-block:: python - - strain = model.results.elastic_strain() - fields = strain.outputs.fields_container() - field = fields.select_component(0)[0] - print(field) - -.. rst-class:: sphx-glr-script-out - - .. code-block:: none - - DPF elastic_strain_1.s0 Field - Location: ElementalNodal - Unit: - 8640 entities - Data:1 components and 69120 elementary data - - -This ElementalNodal strain must be converted to nodal strain for it to be plotted. - -.. code-block:: - - nodal_field = field.to_nodal() - mesh.plot(nodal_field) - -.. image:: ../images/plotting/pontoon_strain.png - -.. note:: - - Only fields with ``Nodal`` and ``Elemental`` locations are - supported. Use the :meth:`to_nodal ` - operator to convert to the ``Nodal`` location or the - :class:`ansys.dpf.core.operators.averaging.nodal_to_elemental` - class to convert to the ``Elemental`` location. diff --git a/examples/06-plotting/00-basic_plotting.py b/examples/06-plotting/00-basic_plotting.py deleted file mode 100644 index af6ed22028..0000000000 --- a/examples/06-plotting/00-basic_plotting.py +++ /dev/null @@ -1,121 +0,0 @@ -# Copyright (C) 2020 - 2024 ANSYS, Inc. and/or its affiliates. -# SPDX-License-Identifier: MIT -# -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -""" -.. _basic_plotting: - -Review of available plotting commands -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This example lists the different plotting commands available, -shown with the arguments available. - -""" - -from ansys.dpf import core as dpf -from ansys.dpf.core import examples - - -# Plot the bare mesh of a model -model = dpf.Model(examples.find_multishells_rst()) -model.plot(color="w", show_edges=True, title="Model", text="Model plot") -# # Additional PyVista kwargs are supported, such as: -model.plot( - off_screen=True, - notebook=False, - screenshot="model_plot.png", - title="Model", - text="Model plot off", - parallel_projection=True, -) - -# Notes: -# - To make screenshots, use "screenshot" as well as "notebook=False" if on a Jupyter notebook. -# - The "off_screen" keyword only works when "notebook=False" to prevent the GUI from appearing. - - -# Plot a field on its supporting mesh (field location must be Elemental or Nodal) -stress = model.results.stress() -stress.inputs.requested_location.connect(dpf.locations.nodal) -fc = stress.outputs.fields_container() -field = fc[0] -field.plot(notebook=False, shell_layers=None, show_axes=True, title="Field", text="Field plot") -# # Additional PyVista kwargs are supported, such as: -field.plot( - off_screen=True, - notebook=False, - screenshot="field_plot.png", - title="Field", - text="Field plot off", -) -# -# # Alternatively one can plot the MeshedRegion associated to the model -mesh = model.metadata.meshed_region -mesh.plot( - field_or_fields_container=None, - shell_layers=None, - show_axes=True, - title="Mesh fc None", - text="Mesh plot", -) -# Additional PyVista kwargs are supported, such as: -mesh.plot( - off_screen=True, - notebook=False, - screenshot="mesh_plot.png", - title="Mesh", - text="Mesh plot off", -) -# A fields_container or a specific field can be given to plot on the mesh. -mesh.plot( - field_or_fields_container=fc, - title="Mesh with fields container", - text="Mesh fc plot", -) -mesh.plot(field_or_fields_container=field, title="Mesh with field", text="Mesh field plot") - - -# ############################################################################################## -# # This next section requires a Premium context to be active du to the ``split_mesh`` operator. -# # Comment this last part to run the example as Entry. - -# One can also plot a MeshesContainer. Here our mesh is split by material. -split_mesh_op = dpf.Operator("split_mesh") -split_mesh_op.connect(7, mesh) -split_mesh_op.connect(13, "mat") -meshes_cont = split_mesh_op.get_output(0, dpf.types.meshes_container) -meshes_cont.plot(title="Meshes Container", text="Meshes Container plot") -# A fields_container can be given as input, with results on each part of our split mesh. -disp_op = dpf.Operator("U") -disp_op.connect(7, meshes_cont) -ds = dpf.DataSources(examples.find_multishells_rst()) -disp_op.connect(4, ds) -disp_fc = disp_op.outputs.fields_container() -meshes_cont.plot(disp_fc, title="Meshes Container disp_fc", text="Meshes Container disp_fc plot") -# Additional PyVista kwargs are supported, such as: -meshes_cont.plot( - off_screen=True, - notebook=False, - screenshot="meshes_cont_plot.png", - title="Meshes Container", - text="Meshes Container plot", -) diff --git a/examples/06-plotting/04-plot_on_path.py b/examples/06-plotting/04-plot_on_path.py deleted file mode 100644 index f749fabf52..0000000000 --- a/examples/06-plotting/04-plot_on_path.py +++ /dev/null @@ -1,96 +0,0 @@ -# Copyright (C) 2020 - 2024 ANSYS, Inc. and/or its affiliates. -# SPDX-License-Identifier: MIT -# -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -# noqa: D400 -""" -.. _plot_on_path: - -Plot results on a specific path -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -This example shows how to get a result mapped over a specific path -and how to plot it. - -""" - -import matplotlib.pyplot as plt - -from ansys.dpf import core as dpf -from ansys.dpf.core import examples -from ansys.dpf.core import operators as ops -from ansys.dpf.core.plotter import DpfPlotter - - -############################################################################### -# Plot path -# ~~~~~~~~~ -# Use the :class:`ansys.dpf.core.plotter.DpfPlotter` class to plot a mapped -# result over a defined path of coordinates. - -# Create the model and request its mesh and displacement data. -model = dpf.Model(examples.find_static_rst()) -mesh = model.metadata.meshed_region -stress_fc = model.results.stress().eqv().eval() - -############################################################################### -# Create a coordinates field to map on. -coordinates = [[0.024, 0.03, 0.003]] -delta = 0.001 -n_points = 51 -for i in range(1, n_points): - coord_copy = coordinates[0].copy() - coord_copy[1] = coord_copy[0] + i * delta - coordinates.append(coord_copy) -field_coord = dpf.fields_factory.create_3d_vector_field(len(coordinates)) -field_coord.data = coordinates -field_coord.scoping.ids = list(range(1, len(coordinates) + 1)) - -############################################################################### -# Compute the mapped data using the mapping operator. -mapping_operator = ops.mapping.on_coordinates( - fields_container=stress_fc, coordinates=field_coord, create_support=True, mesh=mesh -) -fields_mapped = mapping_operator.outputs.fields_container() - -############################################################################### -# Request the mapped field data and its mesh. -field_m = fields_mapped[0] -mesh_m = field_m.meshed_region - -############################################################################### -# Create the plotter and add fields and meshes. -pl = DpfPlotter() - -pl.add_field(field_m, mesh_m) -pl.add_mesh(mesh, style="surface", show_edges=True, color="w", opacity=0.3) - -# Plot the result. -pl.show_figure(show_axes=True) - -############################################################################### -# Plot the solution along the specified line. Note that since the line is only -# moving along the y-axis, the stresses are plotted with respect to the y coordinate. -y_coords = [mesh_m.nodes.coordinates_field.data[i][1] for i in range(mesh_m.nodes.n_nodes)] -plt.plot(y_coords, field_m.data, "r") -plt.xlabel(f"y-coordinate [{mesh.unit}]") -plt.ylabel(f"Stress [{field_m.unit}]") -plt.show() diff --git a/examples/06-plotting/07-plot_on_geometries.py b/examples/06-plotting/07-plot_on_geometries.py deleted file mode 100644 index e9908ef2aa..0000000000 --- a/examples/06-plotting/07-plot_on_geometries.py +++ /dev/null @@ -1,184 +0,0 @@ -# Copyright (C) 2020 - 2024 ANSYS, Inc. and/or its affiliates. -# SPDX-License-Identifier: MIT -# -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -""" -.. _plot_on_geometries: - -Plot on geometry elements -~~~~~~~~~~~~~~~~~~~~~~~~~ -This example shows how to plot a certain field in different geometric -objects such as points, lines and planes. - -""" - - -############################################################################### -# Imports and load model -# ~~~~~~~~~~~~~~~~~~~~~~ -# Import modules and set context as Premium. - -import numpy as np -import matplotlib.pyplot as plt - -from ansys.dpf import core as dpf -from ansys.dpf.core import examples -from ansys.dpf.core import operators as ops -from ansys.dpf.core.geometry import Line, Plane, Points -from ansys.dpf.core.plotter import DpfPlotter -from ansys.dpf.core.fields_factory import field_from_array - - -############################################################################### -# Load model from examples and print information: -model = dpf.Model(examples.find_static_rst()) -print(model) - -############################################################################### -# Load model's mesh and define camera position -# (obtained with ``cpos=pl.show_figure(return_cpos=True)``). This will be used -# later for plotting. -mesh = model.metadata.meshed_region -cpos = [ - (0.07635352356975698, 0.1200500294271993, 0.041072502929096165), - (0.015, 0.045, 0.015), - (-0.16771051558419411, -0.1983722658245161, 0.9656715938216944), -] - -############################################################################### -# Create points, line and plane objects -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# Create 8 points in the corners and one in the middle: -points = Points( - [ - [0.0, 0.03, 0.0], - [0.0, 0.03, 0.03], - [0.0, 0.06, 0.00], - [0.0, 0.06, 0.03], - [0.03, 0.03, 0.0], - [0.03, 0.03, 0.03], - [0.03, 0.06, 0.00], - [0.03, 0.06, 0.03], - [0.015, 0.045, 0.015], - ] -) - -############################################################################### -# Show points together with the mesh -points.plot(mesh, cpos=cpos) - -############################################################################### -# Create line passing through the geometry's diagonal: -line = Line([[0.03, 0.03, 0.05], [0.0, 0.06, 0.0]], n_points=50) - -############################################################################### -# Show line with the 3D mesh -line.plot(mesh, cpos=cpos) - -############################################################################### -# Create vertical plane passing through the mid point: -plane = Plane( - [0.015, 0.045, 0.015], - [1, 1, 0], - width=0.03, - height=0.03, - n_cells_x=10, - n_cells_y=10, -) - -############################################################################### -# Show plane with the 3D mesh -plane.plot(mesh, cpos=cpos) - -############################################################################### -# Map displacement field to geometry objects -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# Get displacement field from model: -disp = model.results.displacement - -############################################################################### -# Map displacement to points in Points object: -mapping_operator = ops.mapping.on_coordinates( - fields_container=disp, - coordinates=field_from_array(points.coordinates.data), - create_support=True, - mesh=mesh, -) -fields_mapped = mapping_operator.outputs.fields_container() -field_points = fields_mapped[0] - -############################################################################### -# Map displacement to points in Line object: -mapping_operator = ops.mapping.on_coordinates( - fields_container=disp, - coordinates=line.mesh.nodes.coordinates_field, - create_support=True, - mesh=mesh, -) -fields_mapped = mapping_operator.outputs.fields_container() -field_line = fields_mapped[0] - -############################################################################### -# Map displacement to points in Plane object: -mapping_operator = ops.mapping.on_coordinates( - fields_container=disp, - coordinates=plane.mesh.nodes.coordinates_field, - create_support=True, - mesh=mesh, -) -fields_mapped = mapping_operator.outputs.fields_container() -field_plane = fields_mapped[0] - -############################################################################### -# Plotting displacement field on the geometry objects -# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -# 3D plot of Points and display mesh: -pl = DpfPlotter() -pl.add_field(field_points, render_points_as_spheres=True, point_size=10) -pl.add_mesh(mesh, style="surface", show_edges=True, color="w", opacity=0.3) -pl.show_figure(show_axes=True, cpos=cpos) - -############################################################################### -# 3D plot of Line and mesh. -# Note that the line is only displayed if some points are found inside the mesh: -pl = DpfPlotter() -if not len(field_line) == 0: - pl.add_field(field_line, line.mesh, line_width=5) -pl.add_mesh(mesh, style="surface", show_edges=True, color="w", opacity=0.3) -pl.show_figure(show_axes=True, cpos=cpos) - -############################################################################### -# Plot Plane and display mesh in background. -# Note that the plane is only displayed if some points are found inside the mesh: -pl = DpfPlotter() -if not len(field_plane) == 0: - pl.add_field(field_plane, plane.mesh, show_edges=False) -pl.add_mesh(mesh, style="surface", show_edges=True, color="w", opacity=0.3) -pl.show_figure(show_axes=True, cpos=cpos) - -############################################################################### -# 2D plot (graph) of Line (line length vs displacement field): -norm_disp = [np.linalg.norm(field_line.data[i]) for i in range(len(field_line.data))] -path = line.path[field_line.scoping.ids - 1] -plt.plot(path, norm_disp) -plt.xlabel("Line length") -plt.ylabel("Displacement norm field") -plt.show() From e98dc3d746b8a8bbf7436e3fe80b85250d42c5dc Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Mon, 18 Nov 2024 15:07:20 +0100 Subject: [PATCH 19/39] add separate plotting_data_on_geometry_elements.rst and plotting_data_on_specific_path.rst tutorials --- .../user_guide/tutorials/plot/index.rst | 18 +- ...=> plotting_data_on_geometry_elements.rst} | 232 ++---------------- .../plot/plotting_data_on_specific_path.rst | 200 +++++++++++++++ 3 files changed, 238 insertions(+), 212 deletions(-) rename doc/source/user_guide/tutorials/plot/{plotting_data_on_specific_placements.rst => plotting_data_on_geometry_elements.rst} (71%) create mode 100644 doc/source/user_guide/tutorials/plot/plotting_data_on_specific_path.rst diff --git a/doc/source/user_guide/tutorials/plot/index.rst b/doc/source/user_guide/tutorials/plot/index.rst index 3a41232392..ff8e7afe63 100644 --- a/doc/source/user_guide/tutorials/plot/index.rst +++ b/doc/source/user_guide/tutorials/plot/index.rst @@ -33,13 +33,20 @@ These tutorials demonstrate some different approaches to visualise the data in p This tutorial explains how to plot data on its supporting deformed mesh. - .. grid-item-card:: Plotting data on specific placements - :link: ref_plotting_data_on_specific_placements + .. grid-item-card:: Plotting data on a path + :link: ref_plotting_data_on_specific_path :link-type: ref :text-align: center - This tutorial shows how to plot data on specific placements of a - mesh (a specific path, a geometry elements ...) + This tutorial shows how to plot data on a specific path of a + mesh + + .. grid-item-card:: Plotting data on geometry elements + :link: ref_plotting_data_on_geometry_elements + :link-type: ref + :text-align: center + + This tutorial shows how to plot data on geometry elements .. grid-item-card:: Plotting a graph :link: ref_plotting_a_graph @@ -55,5 +62,6 @@ These tutorials demonstrate some different approaches to visualise the data in p plotting_meshes.rst plotting_data_on_the_mesh.rst plotting_data_on_deformed_mesh.rst - plotting_data_on_specific_placements.rst + plotting_data_on_specific_path.rst + plotting_data_on_geometry_elements.rst plotting_a_graph.rst \ No newline at end of file diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_geometry_elements.rst similarity index 71% rename from doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst rename to doc/source/user_guide/tutorials/plot/plotting_data_on_geometry_elements.rst index 56d14904ed..1b62919785 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_placements.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_geometry_elements.rst @@ -1,8 +1,8 @@ -.. _ref_plotting_data_on_specific_placements: +.. _ref_plotting_data_on_geometry_elements: -==================================== -Plotting data on specific placements -==================================== +============================== +Plot data on geometry elements +============================== .. |DpfPlotter| replace:: :class:`DpfPlotter` .. |add_mesh| replace:: :func:`add_mesh()` @@ -15,198 +15,14 @@ Plotting data on specific placements .. |Plane| replace:: :class:`Plane ` .. |mapping| replace:: :class:`mapping ` -This tutorial shows how to plot data on specific placements of a mesh: - -- :ref:`plot_specific_path` -- :ref:`plot_geometry_elements` - -.. _plot_specific_path: - -Plot data on a specific path ----------------------------- - -This part shows how to get a result mapped over a specific path and how to plot it. - -Define the data -^^^^^^^^^^^^^^^ - -We will download a simple simulation result file available in our `Examples` package: - -.. code-block:: python - - # Import the ``ansys.dpf.core`` module, including examples files and the operators subpackage - from ansys.dpf import core as dpf - from ansys.dpf.core import examples - from ansys.dpf.core import operators as ops - # Define the result file - result_file = examples.find_static_rst() - -The results will be mapped over a defined path of coordinates. So, start by creating -a |Model| with the result file and extract the |MeshedRegion| from it: - -.. code-block:: python - - # Create the model - my_model = dpf.Model(data_sources=result_file) - my_meshed_region = my_model.metadata.meshed_region - -Define the path -^^^^^^^^^^^^^^^ - -The path coordinates have to be in the space domain of the mesh. You can verify the -range of coordinates values by checking the nodes coordinates. - -Get the nodes coordinates with the mesh operator -:class:`nodes_coordinates`: - -.. code-block:: python - - # Get the mesh nodes coordinates - nodes_coords = ops.mesh.node_coordinates(mesh=my_meshed_region).eval() - -Get the maximum values of the coordinates, so you know the space domain limits. - -.. code-block:: python - - # Get the maximum and minimum values of the mesh nodes coordinates - max_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=1) - min_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=0) - # Print the space domain limits - print("Max coordinates:", max_coords.data, '\n') - print("Min coordinates:",min_coords.data) - -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - from ansys.dpf import core as dpf - from ansys.dpf.core import examples - from ansys.dpf.core import operators as ops - result_file = examples.find_static_rst() - my_model = dpf.Model(data_sources=result_file) - my_meshed_region = my_model.metadata.meshed_region - nodes_coords = ops.mesh.node_coordinates(mesh=my_meshed_region).eval() - max_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=1) - min_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=0) - print("Max coordinates:", max_coords.data, '\n') - print("Min coordinates:",min_coords.data) - - -Create the path based on a set of coordinates. Here we choose the paths origin coordinates, -number of points in the path and the distance between each coordinate. - -.. code-block:: python - - # Initial coordinates - initial_coords = [0.024, 0.03, 0.003] - # Number of points in the path - n_points = 51 - # Distance between each coordinate - delta = 0.001 - - # Create the paths coordinates field - path_coords = dpf.fields_factory.create_3d_vector_field(n_points) - path_coords.scoping.ids = list(range(0, n_points)) - -Make a loop to define the paths coordinates field. Here we make a path that only moves along the y-axis. - -.. code-block:: python - - # For each iteration we add a new set of coordinates based on the predefined distance between each coordinate - for i in range(0, n_points): - initial_coords[1] += delta - path_coords.append(data=initial_coords, scopingid=0) - -Extract the result -^^^^^^^^^^^^^^^^^^ - -Extract the result from the model. Here we get the equivalent stress result - -.. code-block:: python - - # Get the stress result - my_stress = my_model.results.stress().eqv().eval() - -Map the result to the path -^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Compute the mapped data using the |mapping| operator. The stress results are defined in a ``ElementalNodal`` location. -So, each entity has a coordinate in the mesh and a correspondent stress data. - -The |mapping| operator retrieves the results of the entities located in the given coordinates. -If the given coordinates don't match with any entity coordinate, the operator interpolates the results inside -elements with shape functions. - -.. code-block:: python - - # Map the path coordinates with the stress results - mapped_stress = ops.mapping.on_coordinates(fields_container=my_stress, - coordinates=path_coords, - create_support=True, - mesh=my_meshed_region - ).eval() - -Plot the result on the path -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Create the plotter and add fields and meshes. For more information about -plotting data on a mesh check the tutorial: :ref:`ref_plotting_data_on_the_mesh` - -First, define the |DpfPlotter| object [2]_, then add |MeshedRegion| -to it using the |add_mesh| method and add the field using the |add_field| method. - -To display the figure built by the plotter object use the |show_figure| method. - -.. code-block:: python - - # Declare the DpfPlotter object - my_plotter = dpf.plotter.DpfPlotter() - # Add the MeshedRegion to the DpfPlotter object - # We use custom style for the mesh so we can visualise the path (that is inside the mesh) - my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) - # Add the Field to the DpfPlotter object - my_plotter.add_field(field=mapped_stress[0]) - # Display the plot - my_plotter.show_figure() - -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - initial_coords = [0.024, 0.03, 0.003] - n_points = 51 - delta = 0.001 - path_coords = dpf.fields_factory.create_3d_vector_field(n_points) - path_coords.scoping.ids = list(range(0, n_points)) - for i in range(0, n_points): - initial_coords[1] += delta - path_coords.append(data=initial_coords, scopingid=0) - my_stress = my_model.results.stress().eqv().eval() - mapped_stress = ops.mapping.on_coordinates(fields_container=my_stress, - coordinates=path_coords, - create_support=True, - mesh=my_meshed_region - ).eval() - my_plotter = dpf.plotter.DpfPlotter() - my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) - my_plotter.add_field(field=mapped_stress[0]) - my_plotter.show_figure() - -.. _plot_geometry_elements: - -Plot data on geometry elements ------------------------------- - -This part shows how to get a result mapped over different geometric objects: +This tutorials shows how to get a result mapped over different geometric objects: - Points_ - Line_ - Plane_ Define the data -^^^^^^^^^^^^^^^ +--------------- We will download a simple simulation result file available in our `Examples` package: @@ -250,12 +66,14 @@ plot method [1]_: ] Points -^^^^^^ +------ Create points -~~~~~~~~~~~~~ +^^^^^^^^^^^^^ -Create |Points| by defining their coordinates. Once again they have to be in the space domain of the mesh. +Create |Points| by defining their coordinates. They have to be in the space +domain of the mesh. You can verify the range of coordinates values by checking +the nodes coordinates. Get the nodes coordinates with the mesh operator :class:`nodes_coordinates`: @@ -332,7 +150,7 @@ You can do it by hand or by calculating this combinations : ) Check the points on the mesh with a plot -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ You can plot the |Points| together with the mesh: @@ -364,7 +182,7 @@ You can plot the |Points| together with the mesh: my_points.plot(mesh=my_meshed_region, cpos=camera_position) Map displacement field to the points -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Compute the mapped data using the |mapping| operator. The displacement results are defined in a ``Nodal`` location. So, each node has a coordinate in the mesh and a correspondent displacement data. @@ -383,7 +201,7 @@ elements with shape functions. ).eval()[0] Plot displacement field on the points -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Create the plotter and add fields and meshes. For more information about plotting data on a mesh check the tutorial: :ref:`ref_plotting_data_on_the_mesh` @@ -421,10 +239,10 @@ To display the figure built by the plotter object use the |show_figure| method. my_plotter.show_figure(show_axes=True, cpos=camera_position) Line -^^^^ +---- Create the line -~~~~~~~~~~~~~~~ +^^^^^^^^^^^^^^^ Create a |Line| passing through the mesh diagonal. To create a |Line| you need pass as arguments: the coordinates of the starting and ending points @@ -440,7 +258,7 @@ Check the `Create points`_ section to understand how we defined the points coord ) Check the line on the mesh with a plot -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ You can plot the |Line| together with the mesh: @@ -460,7 +278,7 @@ You can plot the |Line| together with the mesh: my_line.plot(mesh=my_meshed_region, cpos=camera_position) Map displacement field to the line -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Compute the mapped data using the |mapping| operator. The displacement results are defined in a ``Nodal`` location. So, each node has a coordinate in the mesh and a correspondent displacement data. @@ -479,7 +297,7 @@ elements with shape functions. ).eval()[0] Plot displacement field on the line -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Plot displacement field on the |Line| and display mesh in background. Create the plotter and add fields and meshes. For more information about @@ -518,10 +336,10 @@ To display the figure built by the plotter object use the |show_figure| method. my_plotter.show_figure(show_axes=True, cpos=camera_position) Plane -^^^^^ +----- Create the plane -~~~~~~~~~~~~~~~~ +^^^^^^^^^^^^^^^^ Create a vertical |Plane| passing through the mesh mid point. To create a |Plane| you need pass as arguments: the coordinates of the center point, the vector of the normal direction to the plane, @@ -542,7 +360,7 @@ Check the `Create points`_ section to understand how we defined the mesh space c ) Check the plane on the mesh with a plot -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ You can plot the |Plane| together with the mesh: @@ -566,7 +384,7 @@ You can plot the |Plane| together with the mesh: my_plane.plot(mesh=my_meshed_region, cpos=camera_position) Map displacement field to the plane -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Compute the mapped data using the |mapping| operator. The displacement results are defined in a ``Nodal`` location. So, each node has a coordinate in the mesh and a correspondent displacement data. @@ -585,7 +403,7 @@ elements with shape functions. ).eval()[0] Plot displacement field on the plane -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Plot displacement field on the |Plane| and display mesh in background. Create the plotter and add fields and meshes. For more information about @@ -636,4 +454,4 @@ parameter (the argument must be supported by the installed PyVista version). The default |DpfPlotter| object settings display the mesh with edges and lighting enabled. Nevertheless, as we use the `PyVista `_ library to create the plot you can use additional PyVista arguments for the |DpfPlotter| -object and |add_field| method (available at: :func:`pyvista.plot`). \ No newline at end of file +object and |add_field| method (available at: :func:`pyvista.plot`). diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_path.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_path.rst new file mode 100644 index 0000000000..99e5da6924 --- /dev/null +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_path.rst @@ -0,0 +1,200 @@ +.. _ref_plotting_data_on_specific_path: + +================================ +Plotting data on a specific path +================================ + +.. |DpfPlotter| replace:: :class:`DpfPlotter` +.. |add_mesh| replace:: :func:`add_mesh()` +.. |add_field| replace:: :func:`add_field()` +.. |show_figure| replace:: :func:`show_figure()` +.. |MeshedRegion| replace:: :class:`MeshedRegion ` +.. |Model| replace:: :class:`Model ` +.. |Line| replace:: :class:`Line ` +.. |Points| replace:: :class:`Points ` +.. |Plane| replace:: :class:`Plane ` +.. |mapping| replace:: :class:`mapping ` + +This tutorial shows how to get a result mapped over a specific path and how to plot it. + +Define the data +--------------- + +We will download a simple simulation result file available in our `Examples` package: + +.. code-block:: python + + # Import the ``ansys.dpf.core`` module, including examples files and the operators subpackage + from ansys.dpf import core as dpf + from ansys.dpf.core import examples + from ansys.dpf.core import operators as ops + # Define the result file + result_file = examples.find_static_rst() + +The results will be mapped over a defined path of coordinates. So, start by creating +a |Model| with the result file and extract the |MeshedRegion| from it: + +.. code-block:: python + + # Create the model + my_model = dpf.Model(data_sources=result_file) + my_meshed_region = my_model.metadata.meshed_region + +Define the path +--------------- + +The path coordinates have to be in the space domain of the mesh. You can verify the +range of coordinates values by checking the nodes coordinates. + +Get the nodes coordinates with the mesh operator +:class:`nodes_coordinates`: + +.. code-block:: python + + # Get the mesh nodes coordinates + nodes_coords = ops.mesh.node_coordinates(mesh=my_meshed_region).eval() + +Get the maximum values of the coordinates, so you know the space domain limits. + +.. code-block:: python + + # Get the maximum and minimum values of the mesh nodes coordinates + max_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=1) + min_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=0) + # Print the space domain limits + print("Max coordinates:", max_coords.data, '\n') + print("Min coordinates:",min_coords.data) + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + from ansys.dpf import core as dpf + from ansys.dpf.core import examples + from ansys.dpf.core import operators as ops + result_file = examples.find_static_rst() + my_model = dpf.Model(data_sources=result_file) + my_meshed_region = my_model.metadata.meshed_region + nodes_coords = ops.mesh.node_coordinates(mesh=my_meshed_region).eval() + max_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=1) + min_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=0) + print("Max coordinates:", max_coords.data, '\n') + print("Min coordinates:",min_coords.data) + + +Create the path based on a set of coordinates. Here we choose the paths origin coordinates, +number of points in the path and the distance between each coordinate. + +.. code-block:: python + + # Initial coordinates + initial_coords = [0.024, 0.03, 0.003] + # Number of points in the path + n_points = 51 + # Distance between each coordinate + delta = 0.001 + + # Create the paths coordinates field + path_coords = dpf.fields_factory.create_3d_vector_field(n_points) + path_coords.scoping.ids = list(range(0, n_points)) + +Make a loop to define the paths coordinates field. Here we make a path that only moves along the y-axis. + +.. code-block:: python + + # For each iteration we add a new set of coordinates based on the predefined distance between each coordinate + for i in range(0, n_points): + initial_coords[1] += delta + path_coords.append(data=initial_coords, scopingid=0) + +Extract the result +------------------ + +Extract the result from the model. Here we get the equivalent stress result + +.. code-block:: python + + # Get the stress result + my_stress = my_model.results.stress().eqv().eval() + +Map the result to the path +-------------------------- + +Compute the mapped data using the |mapping| operator. The stress results are defined in a ``ElementalNodal`` location. +So, each entity has a coordinate in the mesh and a correspondent stress data. + +The |mapping| operator retrieves the results of the entities located in the given coordinates. +If the given coordinates don't match with any entity coordinate, the operator interpolates the results inside +elements with shape functions. + +.. code-block:: python + + # Map the path coordinates with the stress results + mapped_stress = ops.mapping.on_coordinates(fields_container=my_stress, + coordinates=path_coords, + create_support=True, + mesh=my_meshed_region + ).eval() + +Plot the result on the path +--------------------------- + +Create the plotter and add fields and meshes. For more information about +plotting data on a mesh check the tutorial: :ref:`ref_plotting_data_on_the_mesh` + +First, define the |DpfPlotter| object [2]_, then add |MeshedRegion| +to it using the |add_mesh| method and add the field using the |add_field| method. + +To display the figure built by the plotter object use the |show_figure| method. + +.. code-block:: python + + # Declare the DpfPlotter object + my_plotter = dpf.plotter.DpfPlotter() + # Add the MeshedRegion to the DpfPlotter object + # We use custom style for the mesh so we can visualise the path (that is inside the mesh) + my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) + # Add the Field to the DpfPlotter object + my_plotter.add_field(field=mapped_stress[0]) + # Display the plot + my_plotter.show_figure() + +.. rst-class:: sphx-glr-script-out + + .. jupyter-execute:: + :hide-code: + + initial_coords = [0.024, 0.03, 0.003] + n_points = 51 + delta = 0.001 + path_coords = dpf.fields_factory.create_3d_vector_field(n_points) + path_coords.scoping.ids = list(range(0, n_points)) + for i in range(0, n_points): + initial_coords[1] += delta + path_coords.append(data=initial_coords, scopingid=0) + my_stress = my_model.results.stress().eqv().eval() + mapped_stress = ops.mapping.on_coordinates(fields_container=my_stress, + coordinates=path_coords, + create_support=True, + mesh=my_meshed_region + ).eval() + my_plotter = dpf.plotter.DpfPlotter() + my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) + my_plotter.add_field(field=mapped_stress[0]) + my_plotter.show_figure() + +.. rubric:: Footnotes + +.. [1] The default plotter settings display the mesh with edges, lighting and axis widget enabled. +Nevertheless, as we use the `PyVista `_ library to create +the plot you can use additional PyVista arguments (available at: :func:`pyvista.plot`). + +.. [2] Here we use the |DpfPlotter| object, that is currently a PyVista based object. +That means that PyVista must be installed, and that it supports kwargs as +parameter (the argument must be supported by the installed PyVista version). + +The default |DpfPlotter| object settings display the mesh with edges and lighting +enabled. Nevertheless, as we use the `PyVista `_ +library to create the plot you can use additional PyVista arguments for the |DpfPlotter| +object and |add_field| method (available at: :func:`pyvista.plot`). \ No newline at end of file From 0d0a6ab5a14742d037945186de2c09a1247bedbc Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Wed, 20 Nov 2024 13:59:33 +0100 Subject: [PATCH 20/39] update substitution text --- .../tutorials/plot/plotting_data_on_deformed_mesh.rst | 2 +- .../user_guide/tutorials/plot/plotting_data_on_the_mesh.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_deformed_mesh.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_deformed_mesh.rst index 04e343e63b..fcbb2caa19 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_deformed_mesh.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_deformed_mesh.rst @@ -7,7 +7,7 @@ Plotting data on deformed mesh .. |Model| replace:: :class:`Model ` .. |MeshedRegion| replace:: :class:`MeshedRegion ` .. |Field| replace:: :class:`Field` -.. |FieldsContainer| replace:: :class:`FieldsContainer` +.. |FieldsContainer| replace:: :class:`FieldsContainer` .. |MeshesContainer| replace:: :class:`MeshesContainer `, This tutorial shows how to plot data on the deformed mesh. For more detailed information on plotting data diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst index ad849a9a79..671e61cd8a 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst @@ -14,7 +14,7 @@ Plotting data on the mesh .. |add_field| replace:: :func:`add_field()` .. |show_figure| replace:: :func:`show_figure()` .. |Field| replace:: :class:`Field` -.. |FieldsContainer| replace:: :class:`FieldsContainer` +.. |FieldsContainer| replace:: :class:`FieldsContainer` This tutorial shows how to plot data on its supporting mesh by different approaches. From 5c6b9c518b949cedb1c84926984df0f7a19587fd Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Fri, 22 Nov 2024 13:38:22 +0100 Subject: [PATCH 21/39] use only the jupyter sphinx extension --- .../tutorials/plot/plotting_a_graph.rst | 73 ++------- .../plot/plotting_data_on_deformed_mesh.rst | 116 ++------------ .../plotting_data_on_geometry_elements.rst | 151 +++--------------- .../plot/plotting_data_on_specific_path.rst | 60 ++----- .../plot/plotting_data_on_the_mesh.rst | 97 ++--------- .../tutorials/plot/plotting_meshes.rst | 68 ++------ 6 files changed, 74 insertions(+), 491 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_a_graph.rst b/doc/source/user_guide/tutorials/plot/plotting_a_graph.rst index c71c38761a..cc1358001e 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_a_graph.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_a_graph.rst @@ -31,7 +31,7 @@ Define the data We will download a simple simulation result file available in our `Examples` package: -.. code-block:: python +.. jupyter-execute:: # Import the ``ansys.dpf.core`` module, including examples files, the operators subpackage, the geometry module and the matplotlib from ansys.dpf import core as dpf @@ -45,7 +45,7 @@ We will download a simple simulation result file available in our `Examples` pac The results will be mapped over a defined path of coordinates. So, start by creating a |Model| with the result file and extract the |MeshedRegion| from it: -.. code-block:: python +.. jupyter-execute:: # Create the model my_model = dpf.Model(data_sources=result_file) @@ -53,7 +53,7 @@ a |Model| with the result file and extract the |MeshedRegion| from it: We choose to plot the displacement results field. Extract the displacements results from the model: -.. code-block:: python +.. jupyter-execute:: # Get the displacement results my_disp = my_model.results.displacement.eval() @@ -63,7 +63,7 @@ Create the line Create a |Line| passing through the mesh diagonal. -.. code-block:: python +.. jupyter-execute:: # Create the Line object my_line = geo.Line(coordinates=[[0.0, 0.06, 0.0], [0.03, 0.03, 0.03]], @@ -75,7 +75,7 @@ Map displacement field to the line Compute the mapped displacement data using the |mapping| operator. -.. code-block:: python +.. jupyter-execute:: # Map the line coordinates with the displacement results and get the field mapped_disp_line = ops.mapping.on_coordinates(fields_container=my_disp, @@ -92,43 +92,15 @@ Plot a graph of the displacement field along the specified |Line| length using t To get the |Line| length you can use the |Line| property :func:`path`. It gives the 1D line coordinates, by the number of points the line was discretized. -.. code-block:: python +.. jupyter-execute:: # Define the norm of the displacement field norm_disp = ops.math.norm(field=mapped_disp_line).eval() # Define the line points on the its length line_length_points = my_line.path # Plot the graph - plt.plot(line_length_points, norm_disp) - # Graph formating - plt.xlabel("Line length"); plt.ylabel("Displacement norm field"); plt.title("Displacement evolution on the line") - plt.show() - -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - from ansys.dpf import core as dpf - from ansys.dpf.core import examples - from ansys.dpf.core import operators as ops - from ansys.dpf.core import geometry as geo - import matplotlib.pyplot as plt - result_file = examples.find_static_rst() - my_model = dpf.Model(data_sources=result_file) - my_meshed_region = my_model.metadata.meshed_region - my_disp = my_model.results.displacement.eval() - my_line = geo.Line(coordinates=[[0.0, 0.06, 0.0], [0.03, 0.03, 0.03]], - n_points=50 - ) - mapped_disp_line = ops.mapping.on_coordinates(fields_container=my_disp, - coordinates=my_line.mesh.nodes.coordinates_field, - create_support=True, - mesh=my_meshed_region - ).eval()[0] - norm_disp = ops.math.norm(field=mapped_disp_line).eval() - line_length_points = my_line.path plt.plot(line_length_points, norm_disp.data) + # Graph formating plt.xlabel("Line length"); plt.ylabel("Displacement norm field"); plt.title("Displacement evolution on the line") plt.show() @@ -144,7 +116,7 @@ Define the data Download the transient result example. This example is not included in DPF-Core by default to speed up the installation. Downloading this example should take only a few seconds. -.. code-block:: python +.. jupyter-execute:: # Import the ``ansys.dpf.core`` module, including examples files, the operators subpackage and the matplotlib from ansys.dpf import core as dpf @@ -157,7 +129,7 @@ by default to speed up the installation. Downloading this example should take on The results will be mapped over a defined path of coordinates. So, start by creating a |Model| with the result file and extract the |MeshedRegion| from it: -.. code-block:: python +.. jupyter-execute:: # Create the model my_model = dpf.Model(data_sources=result_file) @@ -166,14 +138,14 @@ a |Model| with the result file and extract the |MeshedRegion| from it: We choose to plot the maximum and minimum displacement results over time. Extract the displacements results from the model for all the time frequencies: -.. code-block:: python +.. jupyter-execute:: # Get the displacement results my_disp = my_model.results.displacement.on_all_time_freqs.eval() Define the minimum and maximum displacements for all results: -.. code-block:: python +.. jupyter-execute:: # Define the min_max operator with the normed displacement min_max_op = ops.min_max.min_max_fc(fields_container=ops.math.norm_fc(my_disp)) @@ -186,7 +158,7 @@ Plot a graph of the minimum and maximum displacements over time Plot a graph of the minimum and maximum displacements over time using the matplotlib library. -.. code-block:: python +.. jupyter-execute:: # Define the time frequencies from the model time_data = my_model.metadata.time_freq_support.time_frequencies.data @@ -194,25 +166,4 @@ Plot a graph of the minimum and maximum displacements over time using the matplo plt.plot(time_data, max_disp.data, "r", label="Max") plt.plot(time_data, min_disp.data, "b", label="Min") # Graph formating - plt.xlabel("Time (s)"); plt.ylabel("Displacement (m)"); plt.legend(); plt.show() - -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - from ansys.dpf import core as dpf - from ansys.dpf.core import examples - from ansys.dpf.core import operators as ops - import matplotlib.pyplot as plt - result_file = examples.download_transient_result() - my_model = dpf.Model(data_sources=result_file) - my_meshed_region = my_model.metadata.meshed_region - my_disp = my_model.results.displacement.on_all_time_freqs.eval() - min_max_op = ops.min_max.min_max_fc(fields_container=ops.math.norm_fc(my_disp)) - max_disp = min_max_op.eval(pin=1) - min_disp = min_max_op.eval(pin=0) - time_data = my_model.metadata.time_freq_support.time_frequencies.data - plt.plot(time_data, max_disp.data, "r", label="Max") - plt.plot(time_data, min_disp.data, "b", label="Min") plt.xlabel("Time (s)"); plt.ylabel("Displacement (m)"); plt.legend(); plt.show() \ No newline at end of file diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_deformed_mesh.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_deformed_mesh.rst index fcbb2caa19..0eb06a571a 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_deformed_mesh.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_deformed_mesh.rst @@ -19,7 +19,7 @@ Define the data In this tutorial we will download a simulation result file available in our ``Examples`` package: -.. code-block:: python +.. jupyter-execute:: # Import the ``ansys.dpf.core`` module, including examples files and operators subpackage from ansys.dpf import core as dpf @@ -33,32 +33,20 @@ metadata, by opening a DataSources or a Streams, and to instanciate results prov Printing the model displays the available results. -.. code-block:: python +.. jupyter-execute:: # Create the model my_model = dpf.Model(data_sources=result_file) # Print the model print(my_model) -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - from ansys.dpf import core as dpf - from ansys.dpf.core import examples - from ansys.dpf.core import operators as ops - result_file = examples.find_multishells_rst() - my_model = dpf.Model(data_sources=result_file) - print(my_model) - To deform the mesh we need a result with a homogeneous unit dimension, a distance unit. Thus, to deform the mesh we need the displacement result. Extract the displacements results from the model: -.. code-block:: python +.. jupyter-execute:: # Get the displacement results my_disp_result = my_model.results.displacement @@ -71,7 +59,7 @@ to work with the XX stress tensor component result. Fot more information about extracting results from a result file check the :ref:`ref_tutorials_import_data` tutorials section. -.. code-block:: python +.. jupyter-execute:: # Extract the stress result my_stress = my_model.results.stress() @@ -80,7 +68,7 @@ As the stress result is in a ``ElementalNodal`` location we have to change it. Here we define the new location with a input of the :class:`stress() ` operator. -.. code-block:: python +.. jupyter-execute:: # Define the desired location as an input of the results operator my_stress.inputs.requested_location(dpf.locations.nodal) @@ -91,7 +79,7 @@ To get the results only for the XX stress component we have to use the :func:`select_component() ` method: -.. code-block:: python +.. jupyter-execute:: # Define the component to get. # The stress tensor has 6 components per elementary data (symmetrical tensor XX,YY,ZZ,XY,YZ,XZ). @@ -107,7 +95,7 @@ The geometry can be defined by a |MeshedRegion| or by a |MeshesContainer|. Define the |MeshedRegion| from the |Model|: -.. code-block:: python +.. jupyter-execute:: # Define the meshed region my_meshed_region = my_model.metadata.meshed_region @@ -117,7 +105,7 @@ There are different ways to obtain a |MeshesContainer|. Here we get a |MeshesContainer| by using the :class:`split_mesh ` operator. It splits the mesh by material by default: -.. code-block:: python +.. jupyter-execute:: # Define the meshed region my_meshes = ops.mesh.split_mesh(mesh=my_meshed_region).eval() @@ -129,7 +117,7 @@ or a :class:`FieldsContainer`. The procedures are the same for a |MeshedRegion| and a |MeshesContainer|. For this reason we will show only one plot for the |MeshesContainer| -.. code-block:: python +.. jupyter-execute:: # Define the plot formating my_scale_factor = 0.001 @@ -165,112 +153,36 @@ one plot for the |MeshesContainer| text="e", window_size=my_window_size) -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_meshed_region = my_model.metadata.meshed_region - my_meshes = ops.mesh.split_mesh(mesh=my_meshed_region).eval() - my_disp_result = my_model.results.displacement - my_stress = my_model.results.stress() - my_stress.inputs.requested_location(dpf.locations.nodal) - fc_stress = my_stress.eval() - my_disp_result = my_model.results.displacement - my_stress = my_model.results.stress() - my_scale_factor = 0.001 - my_window_size=[350,350] - my_meshed_region.plot( deform_by=my_disp_result, - scale_factor=my_scale_factor, - text="a", - window_size=my_window_size) - my_disp_op = my_disp_result() - my_meshed_region.plot( deform_by=my_disp_op, - scale_factor=my_scale_factor, - text="b", - window_size=my_window_size) - my_disp_fc = my_disp_result.eval() - my_meshed_region.plot( deform_by=my_disp_fc, - scale_factor=my_scale_factor, - text="c", - font_size=5, - window_size=my_window_size) - my_disp_field = my_disp_fc[0] - my_meshed_region.plot( deform_by=my_disp_field, - scale_factor=my_scale_factor, - text="d", - window_size=my_window_size) - my_meshes.plot( deform_by=my_disp_field, - scale_factor=my_scale_factor, - text="e", - window_size=my_window_size) - Plot data on the deformed geometry ---------------------------------- Plot the data on its mesh support ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Plotting the data in DPF means plotting the |Field| or |FieldsContainer| that contains the data. +Plotting the data in DPF means plotting the |Field| that contains the data. Plot the stress results on the deformed geometry: -.. code-block:: python +.. jupyter-execute:: # Define the stress field stress_field = fc_stress[0] - # Plot the results on a deformed geometry. The data is in a: - # a) Field - stress_field.plot( deform_by=my_disp_field, - scale_factor=my_scale_factor) - -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - stress_field = fc_stress[0] + # Plot the results on a deformed geometry. The data is in a Field stress_field.plot( deform_by=my_disp_field, scale_factor=my_scale_factor) Plot the mesh and add the stress data on top of that ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The data to be plotted in a |MeshedRegion| can be in a |Field| or in a |FieldsContainer| +The data to be plotted in a |MeshedRegion| can be in a |Field|. -.. code-block:: python +.. jupyter-execute:: # Plot the MeshedRegion and the stress in a Field - my_meshed_region.plot( field_or_fields_container=stress_field - deform_by=my_disp_field, - scale_factor=my_scale_factor) - -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - my_meshed_region.plot( field_or_fields_container=stress_field, deform_by=my_disp_field, scale_factor=my_scale_factor) -The data to be plotted in a |MeshesContainer| must be in a |FieldsContainer| - -.. code-block:: python - - # Plot the MeshesContainer and the stress in a FieldsContainer - my_meshes.plot( fields_container=fc_stress - deform_by=my_disp_field, - scale_factor=my_scale_factor) - -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_meshed_region.plot( field_or_fields_container=stress_field, - deform_by=my_disp_field, - scale_factor=my_scale_factor) .. rubric:: Footnotes diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_geometry_elements.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_geometry_elements.rst index 1b62919785..bdc467978c 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_geometry_elements.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_geometry_elements.rst @@ -26,7 +26,7 @@ Define the data We will download a simple simulation result file available in our `Examples` package: -.. code-block:: python +.. jupyter-execute:: # Import the ``ansys.dpf.core`` module, including examples files, the operators subpackage and the geometry module from ansys.dpf import core as dpf @@ -39,7 +39,7 @@ We will download a simple simulation result file available in our `Examples` pac The results will be mapped over a defined path of coordinates. So, start by creating a |Model| with the result file and extract the |MeshedRegion| from it: -.. code-block:: python +.. jupyter-execute:: # Create the model my_model = dpf.Model(data_sources=result_file) @@ -47,7 +47,7 @@ a |Model| with the result file and extract the |MeshedRegion| from it: We choose to plot the displacement results field. Extract the displacements results from the model: -.. code-block:: python +.. jupyter-execute:: # Get the displacement results my_disp = my_model.results.displacement.eval() @@ -56,7 +56,7 @@ We use the the plot method [1]_ to display the geometry elements with the mesh. visualisation we will define a camera position. It can be given as an argument when using the plot method [1]_: -.. code-block:: python +.. jupyter-execute:: # Define the camera position camera_position = [ @@ -78,14 +78,14 @@ the nodes coordinates. Get the nodes coordinates with the mesh operator :class:`nodes_coordinates`: -.. code-block:: python +.. jupyter-execute:: # Get the mesh nodes coordinates nodes_coords = ops.mesh.node_coordinates(mesh=my_meshed_region).eval() Get the maximum values of the coordinates, so you know the space domain limits. -.. code-block:: python +.. jupyter-execute:: # Get the maximum and minimum values of the mesh nodes coordinates max_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=1) @@ -94,30 +94,6 @@ Get the maximum values of the coordinates, so you know the space domain limits. print("Max coordinates:", max_coords.data, '\n') print("Min coordinates:",min_coords.data) -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - from ansys.dpf import core as dpf - from ansys.dpf.core import examples - from ansys.dpf.core import operators as ops - from ansys.dpf.core import geometry as geo - result_file = examples.find_static_rst() - my_model = dpf.Model(data_sources=result_file) - my_meshed_region = my_model.metadata.meshed_region - my_disp = my_model.results.displacement - camera_position = [ - (0.07635352356975698, 0.1200500294271993, 0.041072502929096165), - (0.015, 0.045, 0.015), - (-0.16771051558419411, -0.1983722658245161, 0.9656715938216944), - ] - nodes_coords = ops.mesh.node_coordinates(mesh=my_meshed_region).eval() - max_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=1) - min_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=0) - print("Max coordinates:", max_coords.data, '\n') - print("Min coordinates:",min_coords.data) - Now define the |Points| coordinates that respects those space limits. With the maximum and minimum coordinates we can can deduce the nodes at the corners of the mesh. @@ -128,7 +104,7 @@ place one point in the middle of the mesh by calculating the middle distance bet You can do it by hand or by calculating this combinations : -.. code-block:: python +.. jupyter-execute:: # Define the coordinates of the middle point # print(min_coords.data_as_list) @@ -154,33 +130,11 @@ Check the points on the mesh with a plot You can plot the |Points| together with the mesh: -.. code-block:: python +.. jupyter-execute:: # Display the mesh and the points my_points.plot(mesh=my_meshed_region, cpos=camera_position) -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - distance_minmax_coords = ops.math.minus(fieldA=max_coords.data_as_list, fieldB=min_coords.data_as_list).eval() - middle = ops.math.scale(field=distance_minmax_coords, ponderation=0.5).eval() - middle_coords = ops.math.add(fieldA=min_coords.data_as_list,fieldB=middle.data_as_list).eval() - my_points = geo.Points(coordinates=[ - [0.0, 0.03, 0.0], - [0.0, 0.06, 0.0], - [0.03, 0.06, 0.0], - [0.03, 0.03, 0.0], - [0.0, 0.03, 0.03], - [0.0, 0.06, 0.03], - [0.03, 0.06, 0.03], - [0.03, 0.03, 0.03], - middle_coords.data_as_list - ] - ) - my_points.plot(mesh=my_meshed_region, cpos=camera_position) - Map displacement field to the points ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -191,7 +145,7 @@ The |mapping| operator retrieves the results of the entities located in the give If the given coordinates don't match with any entity coordinate, the operator interpolates the results inside elements with shape functions. -.. code-block:: python +.. jupyter-execute:: # Map the points coordinates with the displacement results and get the field mapped_disp_points = ops.mapping.on_coordinates(fields_container=my_disp, @@ -211,7 +165,7 @@ to it using the |add_mesh| method and add the field using the |add_field| method To display the figure built by the plotter object use the |show_figure| method. -.. code-block:: python +.. jupyter-execute:: # Declare the DpfPlotter object my_plotter = dpf.plotter.DpfPlotter() @@ -223,21 +177,6 @@ To display the figure built by the plotter object use the |show_figure| method. # Display the plot my_plotter.show_figure(show_axes=True, cpos=camera_position) -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - mapped_disp_points = ops.mapping.on_coordinates(fields_container=my_disp, - coordinates=dpf.fields_factory.field_from_array(arr=my_points.coordinates.data), - create_support=True, - mesh=my_meshed_region - ).eval()[0] - my_plotter = dpf.plotter.DpfPlotter() - my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) - my_plotter.add_field(field=mapped_disp_points,point_size=20.0, render_points_as_spheres=True) - my_plotter.show_figure(show_axes=True, cpos=camera_position) - Line ---- @@ -250,7 +189,7 @@ and the number of points where the |Line| object will be discretized. Check the `Create points`_ section to understand how we defined the points coordinates. -.. code-block:: python +.. jupyter-execute:: # Create the Line object my_line = geo.Line(coordinates=[[0.0, 0.06, 0.0], [0.03, 0.03, 0.03]], @@ -262,21 +201,11 @@ Check the line on the mesh with a plot You can plot the |Line| together with the mesh: -.. code-block:: python +.. jupyter-execute:: # Display the mesh and the line my_line.plot(mesh=my_meshed_region, cpos=camera_position) -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_line = geo.Line(coordinates=[[0.0, 0.06, 0.0], [0.03, 0.03, 0.03]], - n_points=50 - ) - my_line.plot(mesh=my_meshed_region, cpos=camera_position) - Map displacement field to the line ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -287,7 +216,7 @@ The |mapping| operator retrieves the results of the entities located in the give If the given coordinates don't match with any entity coordinate, the operator interpolates the results inside elements with shape functions. -.. code-block:: python +.. jupyter-execute:: # Map the line coordinates with the displacement results and get the field mapped_disp_line = ops.mapping.on_coordinates(fields_container=my_disp, @@ -308,7 +237,7 @@ to it using the |add_mesh| method and add the field using the |add_field| method To display the figure built by the plotter object use the |show_figure| method. -.. code-block:: python +.. jupyter-execute:: # Declare the DpfPlotter object my_plotter = dpf.plotter.DpfPlotter() @@ -320,21 +249,6 @@ To display the figure built by the plotter object use the |show_figure| method. # Display the plot my_plotter.show_figure(show_axes=True, cpos=camera_position) -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - mapped_disp_line = ops.mapping.on_coordinates(fields_container=my_disp, - coordinates=my_line.mesh.nodes.coordinates_field, - create_support=True, - mesh=my_meshed_region - ).eval()[0] - my_plotter = dpf.plotter.DpfPlotter() - my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) - my_plotter.add_field(field=mapped_disp_line,meshed_region=my_line.mesh) - my_plotter.show_figure(show_axes=True, cpos=camera_position) - Plane ----- @@ -348,7 +262,7 @@ object will be discretized. Check the `Create points`_ section to understand how we defined the mesh space coordinates . -.. code-block:: python +.. jupyter-execute:: # Create the Plane object my_plane = geo.Plane(center=middle_coords.data_as_list, @@ -364,25 +278,11 @@ Check the plane on the mesh with a plot You can plot the |Plane| together with the mesh: -.. code-block:: python +.. jupyter-execute:: # Display the mesh and the plane my_plane.plot(mesh=my_meshed_region, cpos=camera_position) -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_plane = geo.Plane(center=middle_coords.data_as_list, - normal=[1, 1, 0], - width=0.03, - height=0.03, - n_cells_x=10, - n_cells_y=10, - ) - my_plane.plot(mesh=my_meshed_region, cpos=camera_position) - Map displacement field to the plane ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -393,7 +293,7 @@ The |mapping| operator retrieves the results of the entities located in the give If the given coordinates don't match with any entity coordinate, the operator interpolates the results inside elements with shape functions. -.. code-block:: python +.. jupyter-execute:: # Map the line coordinates with the displacement results and get the field mapped_disp_plane = ops.mapping.on_coordinates(fields_container=my_disp, @@ -414,7 +314,7 @@ to it using the |add_mesh| method and add the field using the |add_field| method To display the figure built by the plotter object use the |show_figure| method. -.. code-block:: python +.. jupyter-execute:: # Declare the DpfPlotter object my_plotter = dpf.plotter.DpfPlotter() @@ -426,21 +326,6 @@ To display the figure built by the plotter object use the |show_figure| method. # Display the plot my_plotter.show_figure(show_axes=True, cpos=camera_position) -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - mapped_disp_plane = ops.mapping.on_coordinates(fields_container=my_disp, - coordinates=my_plane.mesh.nodes.coordinates_field, - create_support=True, - mesh=my_meshed_region - ).eval()[0] - my_plotter = dpf.plotter.DpfPlotter() - my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) - my_plotter.add_field(field=mapped_disp_plane, meshed_region=my_plane.mesh, show_edges=False) - my_plotter.show_figure(show_axes=True, cpos=camera_position) - .. rubric:: Footnotes .. [1] The default plotter settings display the mesh with edges, lighting and axis widget enabled. diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_path.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_path.rst index 99e5da6924..30040eeee3 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_path.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_path.rst @@ -22,7 +22,7 @@ Define the data We will download a simple simulation result file available in our `Examples` package: -.. code-block:: python +.. jupyter-execute:: # Import the ``ansys.dpf.core`` module, including examples files and the operators subpackage from ansys.dpf import core as dpf @@ -34,7 +34,7 @@ We will download a simple simulation result file available in our `Examples` pac The results will be mapped over a defined path of coordinates. So, start by creating a |Model| with the result file and extract the |MeshedRegion| from it: -.. code-block:: python +.. jupyter-execute:: # Create the model my_model = dpf.Model(data_sources=result_file) @@ -49,14 +49,14 @@ range of coordinates values by checking the nodes coordinates. Get the nodes coordinates with the mesh operator :class:`nodes_coordinates`: -.. code-block:: python +.. jupyter-execute:: # Get the mesh nodes coordinates nodes_coords = ops.mesh.node_coordinates(mesh=my_meshed_region).eval() Get the maximum values of the coordinates, so you know the space domain limits. -.. code-block:: python +.. jupyter-execute:: # Get the maximum and minimum values of the mesh nodes coordinates max_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=1) @@ -65,28 +65,10 @@ Get the maximum values of the coordinates, so you know the space domain limits. print("Max coordinates:", max_coords.data, '\n') print("Min coordinates:",min_coords.data) -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - from ansys.dpf import core as dpf - from ansys.dpf.core import examples - from ansys.dpf.core import operators as ops - result_file = examples.find_static_rst() - my_model = dpf.Model(data_sources=result_file) - my_meshed_region = my_model.metadata.meshed_region - nodes_coords = ops.mesh.node_coordinates(mesh=my_meshed_region).eval() - max_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=1) - min_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=0) - print("Max coordinates:", max_coords.data, '\n') - print("Min coordinates:",min_coords.data) - - Create the path based on a set of coordinates. Here we choose the paths origin coordinates, number of points in the path and the distance between each coordinate. -.. code-block:: python +.. jupyter-execute:: # Initial coordinates initial_coords = [0.024, 0.03, 0.003] @@ -101,7 +83,7 @@ number of points in the path and the distance between each coordinate. Make a loop to define the paths coordinates field. Here we make a path that only moves along the y-axis. -.. code-block:: python +.. jupyter-execute:: # For each iteration we add a new set of coordinates based on the predefined distance between each coordinate for i in range(0, n_points): @@ -113,7 +95,7 @@ Extract the result Extract the result from the model. Here we get the equivalent stress result -.. code-block:: python +.. jupyter-execute:: # Get the stress result my_stress = my_model.results.stress().eqv().eval() @@ -128,7 +110,7 @@ The |mapping| operator retrieves the results of the entities located in the give If the given coordinates don't match with any entity coordinate, the operator interpolates the results inside elements with shape functions. -.. code-block:: python +.. jupyter-execute:: # Map the path coordinates with the stress results mapped_stress = ops.mapping.on_coordinates(fields_container=my_stress, @@ -148,7 +130,7 @@ to it using the |add_mesh| method and add the field using the |add_field| method To display the figure built by the plotter object use the |show_figure| method. -.. code-block:: python +.. jupyter-execute:: # Declare the DpfPlotter object my_plotter = dpf.plotter.DpfPlotter() @@ -160,30 +142,6 @@ To display the figure built by the plotter object use the |show_figure| method. # Display the plot my_plotter.show_figure() -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - initial_coords = [0.024, 0.03, 0.003] - n_points = 51 - delta = 0.001 - path_coords = dpf.fields_factory.create_3d_vector_field(n_points) - path_coords.scoping.ids = list(range(0, n_points)) - for i in range(0, n_points): - initial_coords[1] += delta - path_coords.append(data=initial_coords, scopingid=0) - my_stress = my_model.results.stress().eqv().eval() - mapped_stress = ops.mapping.on_coordinates(fields_container=my_stress, - coordinates=path_coords, - create_support=True, - mesh=my_meshed_region - ).eval() - my_plotter = dpf.plotter.DpfPlotter() - my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) - my_plotter.add_field(field=mapped_stress[0]) - my_plotter.show_figure() - .. rubric:: Footnotes .. [1] The default plotter settings display the mesh with edges, lighting and axis widget enabled. diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst index 671e61cd8a..7af4c70298 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst @@ -24,7 +24,7 @@ Define the data In this tutorial we will download a simulation result file available in our ``Examples`` package: -.. code-block:: python +.. jupyter-execute:: # Import the ``ansys.dpf.core`` module, including examples files from ansys.dpf import core as dpf @@ -37,45 +37,26 @@ metadata, by opening a DataSources or a Streams, and to instanciate results prov Printing the model displays the available results. -.. code-block:: python +.. jupyter-execute:: # Create the model my_model = dpf.Model(data_sources=result_file) # Print the model print(my_model) -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - from ansys.dpf import core as dpf - from ansys.dpf.core import examples - result_file = examples.find_multishells_rst() - my_model = dpf.Model(data_sources=result_file) - print(my_model) - We need to extract the data we want to plot. Mind that the results location must be of type ``Elemental`` or ``Nodal`` for plotting. Fot more information about extracting results from a result file check the :ref:`ref_tutorials_import_data` tutorials section. Here we choose to get the XX stress tensor component result. We start by extracting the stress results: -.. code-block:: python +.. jupyter-execute:: # Extract the stress result my_stress = my_model.results.stress() # Print the result print(my_stress.eval()) -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_stress = my_model.results.stress() - print(my_stress.eval()) - As the stress result is in a ``ElementalNodal`` location we have to change it. Here we define the new location with a input of the @@ -83,7 +64,7 @@ Here we define the new location with a input of the Another option would be using an averaging operator like the :class:`to_nodal_fc() ` operator -.. code-block:: python +.. jupyter-execute:: # Define the desired location as an input of the results operator my_stress.inputs.requested_location(dpf.locations.nodal) @@ -92,20 +73,11 @@ Another option would be using an averaging operator like the # Print the result print(fc_stress) -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_stress.inputs.requested_location(dpf.locations.nodal) - fc_stress = my_stress.eval() - print(fc_stress) - To get the results only for the XX stress component we have to use the :func:`select_component() ` method: -.. code-block:: python +.. jupyter-execute:: # Define the component to get. # The stress tensor has 6 components per elementary data (symmetrical tensor XX,YY,ZZ,XY,YZ,XZ). @@ -126,7 +98,7 @@ To plot the data on the mesh you have two different approaches: For both approaches we need a |MeshedRegion| to base on. We can define it from the |Model|: -.. code-block:: python +.. jupyter-execute:: # Define the meshed region my_meshed_region = my_model.metadata.meshed_region @@ -149,23 +121,13 @@ Using the plot() method First, extract the Field with the stress results. Then use the |plot| method [1]_. You have to give the Fields supporting mesh as a attribute: -.. code-block:: python +.. jupyter-execute:: # Define the field field_stress_XX = fc_stress_XX[0] # Use the plot() method field_stress_XX.plot(meshed_region=my_meshed_region) -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - fc_stress_XX = fc_stress.select_component(index=0) - my_meshed_region = my_model.metadata.meshed_region - field_stress_XX = fc_stress_XX[0] - field_stress_XX.plot(meshed_region=my_meshed_region) - Using the DpfPlotter class ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -174,7 +136,7 @@ You have to give the Fields supporting mesh as an attribute to this method. To display the figure built by the plotter object you need to use the |show_figure| method. -.. code-block:: python +.. jupyter-execute:: # Declare the DpfPlotter object my_plotter = dpf.plotter.DpfPlotter() @@ -183,17 +145,6 @@ To display the figure built by the plotter object you need to use the |show_figu # Display the plot my_plotter.show_figure() -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_plotter = dpf.plotter.DpfPlotter() - my_plotter.add_field(field=field_stress_XX, meshed_region=my_meshed_region) - my_plotter.show_figure() - - - .. _method_plot_data_mesh_2: Plot the mesh and add the data on top of that @@ -214,30 +165,16 @@ Using the plot() method Use the |plotMesh| method [1]_ with the meshed region we extracted from the model. You have to give the Field or the FieldsContainer with the stress data as a attribute: -.. code-block:: python +.. jupyter-execute:: # Use the plot() method with a Field as an attribute my_meshed_region.plot(field_or_fields_container=field_stress_XX) -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_meshed_region.plot(field_or_fields_container=field_stress_XX) - -.. code-block:: python +.. jupyter-execute:: # Use the plot() method with a FieldsContainer as an attribute my_meshed_region.plot(field_or_fields_container=fc_stress_XX) -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_meshed_region.plot(field_or_fields_container=fc_stress_XX) - Using the DpfPlotter class ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -246,7 +183,7 @@ to it using the |add_mesh| method and add the field using the |add_field| method To display the figure built by the plotter object use the |show_figure| method. -.. code-block:: python +.. jupyter-execute:: # Declare the DpfPlotter object my_plotter = dpf.plotter.DpfPlotter() @@ -257,23 +194,13 @@ To display the figure built by the plotter object use the |show_figure| method. # Display the plot my_plotter.show_figure() -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_plotter = dpf.plotter.DpfPlotter() - my_plotter.add_mesh(meshed_region=my_meshed_region) - my_plotter.add_field(field=field_stress_XX) - my_plotter.show_figure() - .. rubric:: Footnotes .. [1] The default plotter settings display the mesh with edges, lighting and axis widget enabled. Nevertheless, as we use the `PyVista `_ library to create the plot you can use additional PyVista arguments (available at: :func:`pyvista.plot`), such as: -.. code-block:: python +.. jupyter-execute:: field_stress_XX.plot(title= "Field Stress", text= "Fields plot() method" # Adds the given text at the bottom of the plot diff --git a/doc/source/user_guide/tutorials/plot/plotting_meshes.rst b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst index 2ca44046c9..4cf0588ac8 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_meshes.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst @@ -31,7 +31,7 @@ The mesh object in DPF is a |MeshedRegion|. You can plot a |MeshedRegion| or a In this tutorial we will download a pontoon simulation result file available in our `Examples` package: -.. code-block:: python +.. jupyter-execute:: # Import the ``ansys.dpf.core`` module, including examples files and operators subpackage from ansys.dpf import core as dpf @@ -60,55 +60,30 @@ This first approach is pretty simple. First, have to define the model object using the result file. Then you just have to use the |plot| method, it plots the bare mesh by default. -.. code-block:: python +.. jupyter-execute:: # Create the model my_model = dpf.Model(data_sources=pontoon_file) # Use the plot() method to plot the associated mesh my_model.plot() -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - from ansys.dpf import core as dpf - from ansys.dpf.core import examples - from ansys.dpf.core import operators as ops - pontoon_file = examples.download_pontoon() - my_model = dpf.Model(data_sources=pontoon_file) - my_model.plot() - - The default plotter settings display the mesh with edges, lighting and axis widget enabled. Nevertheless, as we use the `PyVista `_ library to create the plot you can use additional PyVista arguments (available at: :func:`pyvista.plot`), such as: -.. code-block:: python +.. jupyter-execute:: my_model.plot(title= "Pontoon mesh", text= "Plot mesh method 1", # Adds the given text at the bottom of the plot - notebook=False, + off_screen=True, screenshot="mesh_plot_1.png" # Save a screenshot to file with the given name ) # Notes: # - To save a screenshot to file, use "screenshot" ( as well as "notebook=False" if on a Jupyter notebook). # - The "off_screen" keyword only works when "notebook=False". If "off_screen=True" the plot is not displayed when running the code. -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_model.plot(title= "Pontoon mesh", - text= "Plot mesh method 1", - off_screen=True, - notebook=False, - screenshot="mesh_plot_1.png" - ) - .. _method_plot_mesh_2: Plot the |MeshedRegion| or the |MeshesContainer| with the |plotMesh| method @@ -120,26 +95,18 @@ Plot the |MeshedRegion| or the |MeshesContainer| with the |plotMesh| method This second approach demands a |MeshedRegion| object. Thus, we extract it from our |Model| object. -.. code-block:: python +.. jupyter-execute:: # Extract the mesh my_meshed_region = my_model.metadata.meshed_region Just like in the first approach, use the |plotMesh| method. -.. code-block:: python +.. jupyter-execute:: # Use the plot() method to plot the mesh my_meshed_region.plot() -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_meshed_region = my_model.metadata.meshed_region - my_meshed_region.plot() - As, the meshed region is generated from the model’s metadata, the plot generated here is identical to the plot generated by the ":ref:`method_plot_mesh_1`" approach. @@ -158,26 +125,18 @@ There are different ways to obtain a |MeshesContainer|. Here we get a |MeshesContainer| by using the :class:`meshes_provider ` operator. -.. code-block:: python +.. jupyter-execute:: # Get the meshes container my_meshes = ops.mesh.mesh_provider(data_sources=dpf.DataSources(pontoon_file)).eval() Just like in the first approach, use the |plotMeshes| method. -.. code-block:: python +.. jupyter-execute:: # Use the plot() method to plot the mesh my_meshes.plot() -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_meshes = ops.mesh.mesh_provider(data_sources=dpf.DataSources(pontoon_file)).eval() - my_meshes.plot() - .. _method_plot_mesh_3: Plot the |MeshedRegion| with the |DpfPlotter| class @@ -194,7 +153,7 @@ to it using the |add_mesh| method. To display the figure built by the plotter object you need to use the |show_figure| method. -.. code-block:: python +.. jupyter-execute:: # Declare the DpfPlotter object my_plotter = dpf.plotter.DpfPlotter() @@ -203,15 +162,6 @@ To display the figure built by the plotter object you need to use the # Display the plot my_plotter.show_figure() -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_plotter = dpf.plotter.DpfPlotter() - my_plotter.add_mesh(meshed_region=my_meshed_region) - my_plotter.show_figure() - The default |DpfPlotter| object settings display the mesh with edges,and lighting enabled. Nevertheless, as we use the `PyVista `_ library to create the plot you can use additional PyVista arguments for the |DpfPlotter| From 2295ee2698da0301828321d18b42e64d194daf42 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Fri, 22 Nov 2024 13:40:45 +0100 Subject: [PATCH 22/39] updates the examples package references --- doc/source/user_guide/tutorials/plot/plotting_a_graph.rst | 3 ++- .../tutorials/plot/plotting_data_on_deformed_mesh.rst | 5 +++-- .../tutorials/plot/plotting_data_on_geometry_elements.rst | 3 ++- .../tutorials/plot/plotting_data_on_specific_path.rst | 3 ++- .../user_guide/tutorials/plot/plotting_data_on_the_mesh.rst | 3 ++- doc/source/user_guide/tutorials/plot/plotting_meshes.rst | 3 ++- 6 files changed, 13 insertions(+), 7 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_a_graph.rst b/doc/source/user_guide/tutorials/plot/plotting_a_graph.rst index cc1358001e..b916e28ce9 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_a_graph.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_a_graph.rst @@ -9,6 +9,7 @@ Plotting data on a graph .. |MeshedRegion| replace:: :class:`MeshedRegion ` .. |Model| replace:: :class:`Model ` .. |mapping| replace:: :class:`mapping ` +.. |Examples| replace:: :mod:`Examples` This part shows how to get a result plotted on a graph. @@ -29,7 +30,7 @@ be defined check the :ref:`ref_plotting_data_on_specific_placements` tutorial. Define the data ^^^^^^^^^^^^^^^ -We will download a simple simulation result file available in our `Examples` package: +We will download a simple simulation result file available in our |Examples| package: .. jupyter-execute:: diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_deformed_mesh.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_deformed_mesh.rst index 0eb06a571a..b78976be3e 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_deformed_mesh.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_deformed_mesh.rst @@ -8,7 +8,8 @@ Plotting data on deformed mesh .. |MeshedRegion| replace:: :class:`MeshedRegion ` .. |Field| replace:: :class:`Field` .. |FieldsContainer| replace:: :class:`FieldsContainer` -.. |MeshesContainer| replace:: :class:`MeshesContainer `, +.. |MeshesContainer| replace:: :class:`MeshesContainer ` +.. |Examples| replace:: :mod:`Examples` This tutorial shows how to plot data on the deformed mesh. For more detailed information on plotting data check the :ref:`ref_plotting_data_on_the_mesh` tutorial. @@ -17,7 +18,7 @@ Define the data --------------- In this tutorial we will download a simulation result file available -in our ``Examples`` package: +in our |Examples| package: .. jupyter-execute:: diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_geometry_elements.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_geometry_elements.rst index bdc467978c..2abaec5226 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_geometry_elements.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_geometry_elements.rst @@ -14,6 +14,7 @@ Plot data on geometry elements .. |Points| replace:: :class:`Points ` .. |Plane| replace:: :class:`Plane ` .. |mapping| replace:: :class:`mapping ` +.. |Examples| replace:: :mod:`Examples` This tutorials shows how to get a result mapped over different geometric objects: @@ -24,7 +25,7 @@ This tutorials shows how to get a result mapped over different geometric objects Define the data --------------- -We will download a simple simulation result file available in our `Examples` package: +We will download a simple simulation result file available in our |Examples| package: .. jupyter-execute:: diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_path.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_path.rst index 30040eeee3..61e437eedd 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_path.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_path.rst @@ -14,13 +14,14 @@ Plotting data on a specific path .. |Points| replace:: :class:`Points ` .. |Plane| replace:: :class:`Plane ` .. |mapping| replace:: :class:`mapping ` +.. |Examples| replace:: :mod:`Examples` This tutorial shows how to get a result mapped over a specific path and how to plot it. Define the data --------------- -We will download a simple simulation result file available in our `Examples` package: +We will download a simple simulation result file available in our |Examples| package: .. jupyter-execute:: diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst index 7af4c70298..0ef26b3c7c 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst @@ -15,6 +15,7 @@ Plotting data on the mesh .. |show_figure| replace:: :func:`show_figure()` .. |Field| replace:: :class:`Field` .. |FieldsContainer| replace:: :class:`FieldsContainer` +.. |Examples| replace:: :mod:`Examples` This tutorial shows how to plot data on its supporting mesh by different approaches. @@ -22,7 +23,7 @@ Define the data --------------- In this tutorial we will download a simulation result file available -in our ``Examples`` package: +in our |Examples| package: .. jupyter-execute:: diff --git a/doc/source/user_guide/tutorials/plot/plotting_meshes.rst b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst index 4cf0588ac8..aac7e0c726 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_meshes.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst @@ -13,6 +13,7 @@ Plotting meshes .. |DpfPlotter| replace:: :class:`DpfPlotter` .. |add_mesh| replace:: :func:`add_mesh()` .. |show_figure| replace:: :func:`show_figure()` +.. |Examples| replace:: :mod:`Examples` DPF-Core has a variety of plotting methods for generating 3D plots of Ansys models directly from Python. These methods use VTK and leverage @@ -29,7 +30,7 @@ The mesh object in DPF is a |MeshedRegion|. You can plot a |MeshedRegion| or a |MeshesContainer|, that is a collection of |MeshedRegion|. In this tutorial we will download a pontoon simulation result file available in -our `Examples` package: +our |Examples| package: .. jupyter-execute:: From bec041eb896d162f20ae7066445110463a243011 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Thu, 19 Dec 2024 14:32:03 +0100 Subject: [PATCH 23/39] update the plotting_meshes.rst to the tutorials guidelines --- .../tutorials/plot/plotting_meshes.rst | 215 +++++++++--------- 1 file changed, 108 insertions(+), 107 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_meshes.rst b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst index aac7e0c726..cb4ca4596e 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_meshes.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst @@ -4,171 +4,172 @@ Plotting meshes =============== -.. |MeshedRegion| replace:: :class:`MeshedRegion ` -.. |MeshesContainer| replace:: :class:`MeshesContainer `, -.. |Model| replace:: :class:`Model ` -.. |plot| replace:: :func:`plot()` -.. |plotMesh| replace:: :func:`plot()` -.. |plotMeshes| replace:: :func:`plot()` +.. include:: ../../../links_and_refs.rst +.. |MeshesContainer| replace:: :class:`MeshesContainer`, +.. |Model.plot| replace:: :func:`Model.plot()` +.. |MeshedRegion.plot| replace:: :func:`MeshedRegion.plot()` +.. |MeshesContainer.plot| replace:: :func:`MeshesContainer.plot()` .. |DpfPlotter| replace:: :class:`DpfPlotter` .. |add_mesh| replace:: :func:`add_mesh()` .. |show_figure| replace:: :func:`show_figure()` -.. |Examples| replace:: :mod:`Examples` +.. |meshes_provider| replace:: :class:`meshes_provider` + +This tutorial shows different plotting commands to plot the bare mesh +of a model. DPF-Core has a variety of plotting methods for generating 3D plots of Ansys models directly from Python. These methods use VTK and leverage -the `PyVista `_ library to -simplify plotting. +the `PyVista `_ library to simplify plotting. -This tutorial shows different plotting commands to plot the bare mesh -of a model. +:jupyter-download-script:`Download tutorial as Python script` +:jupyter-download-notebook:`Download tutorial as Jupyter notebook` Define the mesh --------------- -The mesh object in DPF is a |MeshedRegion|. You can plot a |MeshedRegion| or a -|MeshesContainer|, that is a collection of |MeshedRegion|. +The mesh object in DPF is a |MeshedRegion|. You can store multiple |MeshedRegion| in a DPF collection +called |MeshesContainer|. + +To display a mesh you can plot a |MeshedRegion| or a |MeshesContainer|. + +You can obtain a |MeshedRegion| by creating your own from scratch or by getting it from a result file. +For more information check the :ref:`ref_tutorials_create_a_mesh_from_scratch` and +:ref:`ref_tutorials_get_mesh_from_result_file` tutorials. -In this tutorial we will download a pontoon simulation result file available in -our |Examples| package: +For this tutorial, we get a |MeshedRegion| from a result file. You can use one available in the |Examples| module. +For more information see the :ref:`ref_tutorials_get_mesh_from_result_file` tutorial. .. jupyter-execute:: - # Import the ``ansys.dpf.core`` module, including examples files and operators subpackage + # Import the ``ansys.dpf.core`` module from ansys.dpf import core as dpf + # Import the examples module from ansys.dpf.core import examples + # Import the operators module from ansys.dpf.core import operators as ops - # Define the result file - pontoon_file = examples.download_pontoon() -Here, we use the |MeshedRegion| associated with the DPF |Model| object. -However, you can obtain your |MeshedRegion| by other methods. For more -information see the tutorials section : :ref:`ref_tutorials_mesh`. + # Define the result file path + result_file_path_1 = examples.download_pontoon() + # Define the DataSources + ds_1 = dpf.DataSources(result_path=result_file_path_1) -To plot the mesh you have three different methods: + # Create a model + model_1 = dpf.Model(data_sources=ds_1) - 1) :ref:`method_plot_mesh_1` - 2) :ref:`method_plot_mesh_2` - 3) :ref:`method_plot_mesh_3` - -.. _method_plot_mesh_1: + # Extract the mesh + meshed_region_1 = model_1.metadata.meshed_region -Plot the |Model| with the |plot| method ---------------------------------------- +There are different ways to obtain a |MeshesContainer|. You can, for example, extract a |MeshedRegion| in split parts +from the result file. -This first approach is pretty simple. First, have to define the model -object using the result file. Then you just have to use the |plot| -method, it plots the bare mesh by default. +Here, we get a |MeshesContainer| by extracting the |MeshedRegion| split by material +using the |meshes_provider| operator. This operator gives a |MeshesContainer| with the |MeshedRegion| split parts +with a *'mat'* label. .. jupyter-execute:: - # Create the model - my_model = dpf.Model(data_sources=pontoon_file) - # Use the plot() method to plot the associated mesh - my_model.plot() - -The default plotter settings display the mesh with edges, lighting -and axis widget enabled. Nevertheless, as we use the -`PyVista `_ library to create -the plot you can use additional PyVista arguments (available at: -:func:`pyvista.plot`), such as: - -.. jupyter-execute:: + # Extract the mesh in split parts + meshes = ops.mesh.mesh_provider(data_sources=ds_1).eval() - my_model.plot(title= "Pontoon mesh", - text= "Plot mesh method 1", # Adds the given text at the bottom of the plot - off_screen=True, - screenshot="mesh_plot_1.png" # Save a screenshot to file with the given name - ) - # Notes: - # - To save a screenshot to file, use "screenshot" ( as well as "notebook=False" if on a Jupyter notebook). - # - The "off_screen" keyword only works when "notebook=False". If "off_screen=True" the plot is not displayed when running the code. +To plot the mesh you have four different methods: -.. _method_plot_mesh_2: +- :ref:`Plot the Model using the Model.plot() method` +- :ref:`Plot the MeshedRegion using the MeshedRegion.plot() method` +- :ref:`Plot the MeshesContainer using the MeshesContainer.plot() method` +- :ref:`Plot the MeshedRegion using the DpfPlotter object` -Plot the |MeshedRegion| or the |MeshesContainer| with the |plotMesh| method ---------------------------------------------------------------------------- +.. _method_plot_mesh_1: -|MeshedRegion| -^^^^^^^^^^^^^^ +Plot the |Model| using the |Model.plot| method +---------------------------------------------- -This second approach demands a |MeshedRegion| object. Thus, we extract -it from our |Model| object. +To plot the mesh with this approach, you just have to use the |Model.plot| +method [1]_. This method plots the bare mesh associated to the result file by default. .. jupyter-execute:: - # Extract the mesh - my_meshed_region = my_model.metadata.meshed_region - -Just like in the first approach, use the |plotMesh| method. - -.. jupyter-execute:: + # Plot the mesh + model_1.plot() - # Use the plot() method to plot the mesh - my_meshed_region.plot() +.. _method_plot_mesh_2: -As, the meshed region is generated from the model’s metadata, -the plot generated here is identical to the plot generated by -the ":ref:`method_plot_mesh_1`" approach. +Plot the |MeshedRegion| using the |MeshedRegion.plot| method +------------------------------------------------------------ -The default plotter settings display the mesh with edges, lighting -and axis widget enabled. Nevertheless, as we use the -`PyVista `_ library to create -the plot you can use additional PyVista arguments (available at: -:func:`pyvista.plot`), just like in ":ref:`method_plot_mesh_1`" +To plot the mesh with this approach, you just have to use the |MeshedRegion.plot| +method [1]_ with the |MeshedRegion| object we defined. -|MeshesContainer| -^^^^^^^^^^^^^^^^^ +.. jupyter-execute:: -There are different ways to obtain a |MeshesContainer|. + # Plot the mesh + meshed_region_1.plot() -Here we get a |MeshesContainer| by using the :class:`meshes_provider ` -operator. +As the meshed region is generated from the |Model|, the plot displayed here is identical to the plot generated by +the :ref:`method_plot_mesh_1` approach. -.. jupyter-execute:: +.. _method_plot_mesh_3: - # Get the meshes container - my_meshes = ops.mesh.mesh_provider(data_sources=dpf.DataSources(pontoon_file)).eval() +Plot the |MeshesContainer| using the |MeshesContainer.plot| method +------------------------------------------------------------------ -Just like in the first approach, use the |plotMeshes| method. +To plot the mesh with this approach you just have to use the |MeshesContainer.plot| +method [1]_ with the |MeshesContainer| object we defined. .. jupyter-execute:: - # Use the plot() method to plot the mesh - my_meshes.plot() - -.. _method_plot_mesh_3: + # Plot the meshes + meshes.plot() -Plot the |MeshedRegion| with the |DpfPlotter| class ---------------------------------------------------- +.. _method_plot_mesh_4: -Here we use the |DpfPlotter| object, that is currently a PyVista based object. -That means that PyVista must be installed, and that it supports kwargs as -parameter (the argument must be supported by the installed PyVista version). -More information about the available arguments are available at :class:`pyvista.Plotter`. +Plot the |MeshedRegion| with the |DpfPlotter| object +---------------------------------------------------- -First you have to define the |DpfPlotter| object and then add the |MeshedRegion| +To plot the mesh, start by defining the |DpfPlotter| object [2]_. Then, add the |MeshedRegion| to it using the |add_mesh| method. -To display the figure built by the plotter object you need to use the -|show_figure| method. +To display the figure built by the plotter object, you must use the +|show_figure| method. .. jupyter-execute:: - # Declare the DpfPlotter object - my_plotter = dpf.plotter.DpfPlotter() + # Define the DpfPlotter object + mesh_plotter = dpf.plotter.DpfPlotter() + # Add the MeshedRegion to the DpfPlotter object - my_plotter.add_mesh(meshed_region=my_meshed_region) - # Display the plot - my_plotter.show_figure() + mesh_plotter.add_mesh(meshed_region=meshed_region_1) -The default |DpfPlotter| object settings display the mesh with edges,and lighting -enabled. Nevertheless, as we use the `PyVista `_ -library to create the plot you can use additional PyVista arguments for the |DpfPlotter| -object and |add_mesh| method -(available at: :func:`pyvista.plot`). + # Display the plot + mesh_plotter.show_figure() You can also plot results data on its supporting mesh. For a detailed demonstration check: :ref:`ref_plotting_data_on_the_mesh` +.. rubric:: Footnotes + +.. [1] The default plotter settings display the mesh with edges, lighting and axis widget enabled. +Nevertheless, as we use the `PyVista `_ library to create the plot you can use additional +PyVista arguments (available at :func:`pyvista.plot`), such as: + +.. jupyter-execute:: + + model_1.plot(title= "Pontoon mesh", + text= "Plot mesh method 1", # Adds the given text at the bottom of the plot + off_screen=True, + screenshot="mesh_plot_1.png", # Save a screenshot to file with the given name + window_size=[1050,350] + ) + # Notes: + # - To save a screenshot to file, use the "screenshot" argument (as well as "notebook=False" if on a Jupyter notebook). + # - The "off_screen" keyword only works when "notebook=False". If "off_screen=True" the plot is not displayed when running the code. + +.. [2] The |DpfPlotter| object, that is currently a PyVista based object. +That means that PyVista must be installed, and that it supports kwargs as +parameter (the argument must be supported by the installed PyVista version). +More information about the available arguments are available at :class:`pyvista.Plotter`. + +The default |DpfPlotter| object settings display the mesh with edges and lighting +enabled. Nevertheless, as we use the `PyVista `_ +library to create the plot, you can use additional PyVista arguments for the |DpfPlotter| +object and |add_mesh| method (available at :func:`pyvista.plot`). \ No newline at end of file From 0aff9a86c81673129e5c4631eba1015175cceef8 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Fri, 20 Dec 2024 10:08:23 +0100 Subject: [PATCH 24/39] update the text of the plotting_meshes.rst to the tutorial --- .../user_guide/tutorials/plot/plotting_meshes.rst | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_meshes.rst b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst index cb4ca4596e..4e29ebc2d0 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_meshes.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst @@ -5,11 +5,9 @@ Plotting meshes =============== .. include:: ../../../links_and_refs.rst -.. |MeshesContainer| replace:: :class:`MeshesContainer`, .. |Model.plot| replace:: :func:`Model.plot()` -.. |MeshedRegion.plot| replace:: :func:`MeshedRegion.plot()` +.. |MeshedRegion.plot| replace:: :func:`MeshedRegion.plot() ` .. |MeshesContainer.plot| replace:: :func:`MeshesContainer.plot()` -.. |DpfPlotter| replace:: :class:`DpfPlotter` .. |add_mesh| replace:: :func:`add_mesh()` .. |show_figure| replace:: :func:`show_figure()` .. |meshes_provider| replace:: :class:`meshes_provider` @@ -19,7 +17,7 @@ of a model. DPF-Core has a variety of plotting methods for generating 3D plots of Ansys models directly from Python. These methods use VTK and leverage -the `PyVista `_ library to simplify plotting. +the `PyVista `_ library to simplify plotting. :jupyter-download-script:`Download tutorial as Python script` :jupyter-download-notebook:`Download tutorial as Jupyter notebook` @@ -143,13 +141,12 @@ To display the figure built by the plotter object, you must use the # Display the plot mesh_plotter.show_figure() -You can also plot results data on its supporting mesh. For a detailed demonstration -check: :ref:`ref_plotting_data_on_the_mesh` +You can also plot results data on its supporting mesh. For more information, see :ref:`ref_plotting_data_on_the_mesh` .. rubric:: Footnotes .. [1] The default plotter settings display the mesh with edges, lighting and axis widget enabled. -Nevertheless, as we use the `PyVista `_ library to create the plot you can use additional +Nevertheless, as we use the `PyVista `_ library to create the plot you can use additional PyVista arguments (available at :func:`pyvista.plot`), such as: .. jupyter-execute:: @@ -170,6 +167,6 @@ parameter (the argument must be supported by the installed PyVista version). More information about the available arguments are available at :class:`pyvista.Plotter`. The default |DpfPlotter| object settings display the mesh with edges and lighting -enabled. Nevertheless, as we use the `PyVista `_ +enabled. Nevertheless, as we use the `PyVista `_ library to create the plot, you can use additional PyVista arguments for the |DpfPlotter| object and |add_mesh| method (available at :func:`pyvista.plot`). \ No newline at end of file From 56fa451b66d4f1b07044ac1cf48705510a03d793 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Fri, 20 Dec 2024 13:41:19 +0100 Subject: [PATCH 25/39] update the plotting_data_on_the_mesh.rst to the tutorials guidelines --- .../plot/plotting_data_on_the_mesh.rst | 197 ++++++++++-------- 1 file changed, 113 insertions(+), 84 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst index 0ef26b3c7c..6316975689 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst @@ -4,105 +4,110 @@ Plotting data on the mesh ========================= - -.. |MeshedRegion| replace:: :class:`MeshedRegion ` -.. |Model| replace:: :class:`Model ` -.. |plot| replace:: :func:`plot()` -.. |plotMesh| replace:: :func:`plot()` -.. |DpfPlotter| replace:: :class:`DpfPlotter` +.. |Field.plot| replace:: :func:`Field.plot()` +.. |MeshedRegion.plot| replace:: :func:`MeshedRegion.plot()` .. |add_mesh| replace:: :func:`add_mesh()` .. |add_field| replace:: :func:`add_field()` .. |show_figure| replace:: :func:`show_figure()` -.. |Field| replace:: :class:`Field` -.. |FieldsContainer| replace:: :class:`FieldsContainer` -.. |Examples| replace:: :mod:`Examples` +.. |to_nodal_fc| replace:: :class:`to_nodal_fc() ` +.. |select_component| replace:: :func:`select_component() ` This tutorial shows how to plot data on its supporting mesh by different approaches. Define the data --------------- -In this tutorial we will download a simulation result file available -in our |Examples| package: +First, import a results file. For this tutorial, you can use the one available in the |Examples| module. +For more information about how to import your own result file in DPF, see +the :ref:`ref_tutorials_import_data` tutorials section. .. jupyter-execute:: - # Import the ``ansys.dpf.core`` module, including examples files + # Import the ``ansys.dpf.core`` module from ansys.dpf import core as dpf + # Import the examples module from ansys.dpf.core import examples - # Define the result file - result_file = examples.find_multishells_rst() + + # Define the result file path + result_file_path_1 = examples.find_multishells_rst() The |Model| is a helper designed to give shortcuts to access the analysis results -metadata, by opening a DataSources or a Streams, and to instanciate results provider for it. +metadata and to instanciate results providers by opening a |DataSources| or a Streams. Printing the model displays the available results. .. jupyter-execute:: # Create the model - my_model = dpf.Model(data_sources=result_file) + model_1 = dpf.Model(data_sources=result_file_path_1) # Print the model - print(my_model) + print(model_1) + +Extract the data to be plotted. For more information about extracting results from a result file, +see the :ref:`ref_tutorials_import_data` tutorials section. -We need to extract the data we want to plot. Mind that the results location must be of -type ``Elemental`` or ``Nodal`` for plotting. Fot more information about extracting results from a -result file check the :ref:`ref_tutorials_import_data` tutorials section. +.. note:: -Here we choose to get the XX stress tensor component result. We start by extracting the stress results: + Only the *'elemental'* or *'nodal'* locations are supported for plotting. + +Here, we chose to plot the XX stress tensor component data. + +First, get the stress |Result| object. .. jupyter-execute:: - # Extract the stress result - my_stress = my_model.results.stress() - # Print the result - print(my_stress.eval()) + # Extract the stress Result + stress_result = model_1.results.stress() + + # Print the results + print(stress_result.eval()) -As the stress result is in a ``ElementalNodal`` location we have to change it. +We must request the stress in a *'nodal'* location as the default *'ElementalNodal'* location for the stress results +is not supported for plotting. -Here we define the new location with a input of the -:class:`stress() ` operator. -Another option would be using an averaging operator like the -:class:`to_nodal_fc() ` operator +There are different ways to change the location. Here, we define the new location using the input of the stress +|Result|. Another option would be using an averaging operator, like the |to_nodal_fc| operator .. jupyter-execute:: - # Define the desired location as an input of the results operator - my_stress.inputs.requested_location(dpf.locations.nodal) - # Get the result (the stress result operator gives an FieldsContainer as an output) - fc_stress = my_stress.eval() - # Print the result + # Define the desired location as an input of the result operator + stress_result.inputs.requested_location(dpf.locations.nodal) + + # Get the output (here a FieldsContainer) + fc_stress = stress_result.eval() + + # Print the output print(fc_stress) -To get the results only for the XX stress component we have to use -the :func:`select_component() ` -method: +To get the results for the XX stress component, we use the |select_component| method. This methods takes +the index the component as an input. The stress tensor has 6 components per elementary data +(symmetrical tensor XX,YY,ZZ,XY,YZ,XZ). Thus, we get the component of index=0 .. jupyter-execute:: - # Define the component to get. - # The stress tensor has 6 components per elementary data (symmetrical tensor XX,YY,ZZ,XY,YZ,XZ). - # So we get the component of index=0 + # Get the stress results for the XX component fc_stress_XX = fc_stress.select_component(index=0) Plot the data on the mesh ------------------------- -To plot the data on the mesh you have two different approaches: +There are two different approaches to plot the data on the mesh: - 1) :ref:`method_plot_data_mesh_1` - 2) :ref:`method_plot_data_mesh_2` +- :ref:`method_plot_data_mesh_1` +- :ref:`method_plot_data_mesh_2` .. hint:: :ref:`method_plot_data_mesh_2` is faster than :ref:`method_plot_data_mesh_1` -For both approaches we need a |MeshedRegion| to base on. We can define it from the |Model|: +For both approaches, you need a |MeshedRegion| to be based on. Here, we get a |MeshedRegion| from +a result file. For more information about how to extract a |MeshedRegion| from a result file, see the +:ref:`ref_tutorials_get_mesh_from_result_file` tutorial. .. jupyter-execute:: # Define the meshed region - my_meshed_region = my_model.metadata.meshed_region + meshed_region_1 = model_1.metadata.meshed_region .. _method_plot_data_mesh_1: @@ -110,96 +115,119 @@ Plot the data on its mesh support ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Plotting the data in DPF means plotting the |Field| or |FieldsContainer| that contains the data. -To plot a |Field| you can use the |plot| method or the |DpfPlotter| class. +To plot a |Field|, you can use: + +- :ref:`The Field.plot() method `; +- :ref:`The DpfPlotter object `. .. hint:: - The |DpfPlotter| class is faster than using the |plot| method + Using the |DpfPlotter| class is faster than using the |Field.plot| method + +.. _ref_plot_field_on_mesh_plot_method_1: Using the plot() method ~~~~~~~~~~~~~~~~~~~~~~~ -First, extract the Field with the stress results. Then use the |plot| method [1]_. -You have to give the Fields supporting mesh as a attribute: +First, get a |Field| from the stress results |FieldsContainer|. Then, use the |Field.plot| method [1]_. +You have to use the *'meshed_region'* argument and give the Field supporting mesh. .. jupyter-execute:: # Define the field field_stress_XX = fc_stress_XX[0] - # Use the plot() method - field_stress_XX.plot(meshed_region=my_meshed_region) + + # Plot the data on the mesh + field_stress_XX.plot(meshed_region=meshed_region_1) + +.. _ref_plot_field_on_mesh_DpfPlotter_1: Using the DpfPlotter class ~~~~~~~~~~~~~~~~~~~~~~~~~~ -First define the |DpfPlotter| object [2]_ and then add the Field to it using the |add_field| method. -You have to give the Fields supporting mesh as an attribute to this method. +First define the |DpfPlotter| object [2]_. Then, add the |Field| to it using the |add_field| method. +You must use the *'meshed_region'* argument and give the Field supporting mesh. -To display the figure built by the plotter object you need to use the |show_figure| method. +To display the figure built by the plotter object, use the |show_figure| method. .. jupyter-execute:: - # Declare the DpfPlotter object - my_plotter = dpf.plotter.DpfPlotter() - # Add the MeshedRegion to the DpfPlotter object - my_plotter.add_field(field=field_stress_XX, meshed_region=my_meshed_region) + # Define the DpfPlotter object + plotter_1 = dpf.plotter.DpfPlotter() + + # Add the Field and MeshedRegion to the DpfPlotter object + plotter_1.add_field(field=field_stress_XX, meshed_region=meshed_region_1) + # Display the plot - my_plotter.show_figure() + plotter_1.show_figure() .. _method_plot_data_mesh_2: Plot the mesh and add the data on top of that ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -To extract the meshed region and plot the |Field| on top of that you can use the |plotMesh| -method or the |DpfPlotter| class. +To extract the meshed region and plot the |Field| on top of that you can use: + +- :ref:`The MeshedRegion.plot() method `; +- :ref:`The DpfPlotter object `. -In this approach you can add the data from a |Field| or from a |FieldsContainer|. +For this approach, you can use the data from a |Field| or from a |FieldsContainer|. .. hint:: - The |DpfPlotter| class is faster than using the |plotMesh| method. + The |DpfPlotter| class is faster than using the |MeshedRegion.plot| method. + +.. _ref_plot_field_on_mesh_plot_method_2: Using the plot() method ~~~~~~~~~~~~~~~~~~~~~~~ -Use the |plotMesh| method [1]_ with the meshed region we extracted from the model. -You have to give the Field or the FieldsContainer with the stress data as a attribute: +Use the |MeshedRegion.plot| method [1]_. You must use the *'field_or_fields_container'* argument and +give the |Field| or the |FieldsContainer| containing the stress results data. + +Use a |Field| containing the data. .. jupyter-execute:: - # Use the plot() method with a Field as an attribute - my_meshed_region.plot(field_or_fields_container=field_stress_XX) + # Plot the stress results + meshed_region_1.plot(field_or_fields_container=field_stress_XX) + +Use a |FieldsContainer| containing the data. .. jupyter-execute:: - # Use the plot() method with a FieldsContainer as an attribute - my_meshed_region.plot(field_or_fields_container=fc_stress_XX) + # Plot the stress results + meshed_region_1.plot(field_or_fields_container=fc_stress_XX) + +.. _ref_plot_field_on_mesh_DpfPlotter_2: Using the DpfPlotter class ~~~~~~~~~~~~~~~~~~~~~~~~~~ -First, define the |DpfPlotter| object [2]_ and then add |MeshedRegion| -to it using the |add_mesh| method and add the field using the |add_field| method. +First, define the |DpfPlotter| object [2]_. Then, add the |MeshedRegion| +to it, using the |add_mesh| method, and the |Field|, using the |add_field| method. -To display the figure built by the plotter object use the |show_figure| method. +To display the figure built by the plotter object use the |show_figure| method. .. jupyter-execute:: # Declare the DpfPlotter object - my_plotter = dpf.plotter.DpfPlotter() + plotter_2 = dpf.plotter.DpfPlotter() + # Add the MeshedRegion to the DpfPlotter object - my_plotter.add_mesh(meshed_region=my_meshed_region) + plotter_2.add_mesh(meshed_region=meshed_region_1) + # Add the Field to the DpfPlotter object - my_plotter.add_field(field=field_stress_XX) + plotter_2.add_field(field=field_stress_XX) + # Display the plot - my_plotter.show_figure() + plotter_2.show_figure() .. rubric:: Footnotes .. [1] The default plotter settings display the mesh with edges, lighting and axis widget enabled. -Nevertheless, as we use the `PyVista `_ library to create -the plot you can use additional PyVista arguments (available at: :func:`pyvista.plot`), such as: +Nevertheless, as we use the `PyVista `_ library to create the plot, you can use additional +PyVista arguments (available at :func:`pyvista.plot`), such as: .. jupyter-execute:: @@ -210,11 +238,12 @@ the plot you can use additional PyVista arguments (available at: :func:`pyvista. # - To save a screenshot to file, use "screenshot=figure_name.png" ( as well as "notebook=False" if on a Jupyter notebook). # - The "off_screen" keyword only works when "notebook=False". If "off_screen=True" the plot is not displayed when running the code. -.. [2] Here we use the |DpfPlotter| object, that is currently a PyVista based object. +.. [2] The |DpfPlotter| object is currently a PyVista based object. That means that PyVista must be installed, and that it supports kwargs as parameter (the argument must be supported by the installed PyVista version). +More information about the available arguments are available at `pyvista.plot() `_`. -The default |DpfPlotter| object settings display the mesh with edges and lighting -enabled. Nevertheless, as we use the `PyVista `_ -library to create the plot you can use additional PyVista arguments for the |DpfPlotter| -object and |add_field| method (available at: :func:`pyvista.plot`). \ No newline at end of file +The default |DpfPlotter| object settings displays the mesh with edges and lighting +enabled. Nevertheless, as we use the `PyVista `_ +library to create the plot, you can use additional PyVista arguments for the |DpfPlotter| +object and |add_field| method (available at `pyvista.plot() `_`). \ No newline at end of file From 80888bbd01332c14e9cfad304a3146cd715e9cfb Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Fri, 20 Dec 2024 13:41:34 +0100 Subject: [PATCH 26/39] update the text of the plotting_meshes.rst tutorial --- doc/source/user_guide/tutorials/plot/plotting_meshes.rst | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_meshes.rst b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst index 4e29ebc2d0..3bd90b5d77 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_meshes.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst @@ -4,7 +4,6 @@ Plotting meshes =============== -.. include:: ../../../links_and_refs.rst .. |Model.plot| replace:: :func:`Model.plot()` .. |MeshedRegion.plot| replace:: :func:`MeshedRegion.plot() ` .. |MeshesContainer.plot| replace:: :func:`MeshesContainer.plot()` @@ -31,7 +30,7 @@ called |MeshesContainer|. To display a mesh you can plot a |MeshedRegion| or a |MeshesContainer|. You can obtain a |MeshedRegion| by creating your own from scratch or by getting it from a result file. -For more information check the :ref:`ref_tutorials_create_a_mesh_from_scratch` and +For more information, see the :ref:`ref_tutorials_create_a_mesh_from_scratch` and :ref:`ref_tutorials_get_mesh_from_result_file` tutorials. For this tutorial, we get a |MeshedRegion| from a result file. You can use one available in the |Examples| module. @@ -146,7 +145,7 @@ You can also plot results data on its supporting mesh. For more information, see .. rubric:: Footnotes .. [1] The default plotter settings display the mesh with edges, lighting and axis widget enabled. -Nevertheless, as we use the `PyVista `_ library to create the plot you can use additional +Nevertheless, as we use the `PyVista `_ library to create the plot, you can use additional PyVista arguments (available at :func:`pyvista.plot`), such as: .. jupyter-execute:: @@ -161,12 +160,12 @@ PyVista arguments (available at :func:`pyvista.plot`), such as: # - To save a screenshot to file, use the "screenshot" argument (as well as "notebook=False" if on a Jupyter notebook). # - The "off_screen" keyword only works when "notebook=False". If "off_screen=True" the plot is not displayed when running the code. -.. [2] The |DpfPlotter| object, that is currently a PyVista based object. +.. [2] The |DpfPlotter| object is currently a PyVista based object. That means that PyVista must be installed, and that it supports kwargs as parameter (the argument must be supported by the installed PyVista version). More information about the available arguments are available at :class:`pyvista.Plotter`. -The default |DpfPlotter| object settings display the mesh with edges and lighting +The default |DpfPlotter| object settings displays the mesh with edges and lighting enabled. Nevertheless, as we use the `PyVista `_ library to create the plot, you can use additional PyVista arguments for the |DpfPlotter| object and |add_mesh| method (available at :func:`pyvista.plot`). \ No newline at end of file From 75c94d12083dbc4cdfd2d833a4ad5e7fb53c5a0e Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Fri, 20 Dec 2024 15:03:13 +0100 Subject: [PATCH 27/39] updates the text of the plotting_data_on_the_mesh.rst tutorial --- .../user_guide/tutorials/plot/plotting_data_on_the_mesh.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst index 6316975689..756a015310 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst @@ -14,6 +14,9 @@ Plotting data on the mesh This tutorial shows how to plot data on its supporting mesh by different approaches. +:jupyter-download-script:`Download tutorial as Python script` +:jupyter-download-notebook:`Download tutorial as Jupyter notebook` + Define the data --------------- @@ -40,6 +43,7 @@ Printing the model displays the available results. # Create the model model_1 = dpf.Model(data_sources=result_file_path_1) + # Print the model print(model_1) From 46d0970e62128a8beb779e99d015f8e5e09cb8bb Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Fri, 20 Dec 2024 15:05:46 +0100 Subject: [PATCH 28/39] updates the text of the plotting_data_on_the_mesh.rst tutorial --- .../user_guide/tutorials/plot/plotting_data_on_the_mesh.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst index 756a015310..b079e109bf 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst @@ -231,7 +231,7 @@ To display the figure built by the plotter object use the |show_figure| method. .. [1] The default plotter settings display the mesh with edges, lighting and axis widget enabled. Nevertheless, as we use the `PyVista `_ library to create the plot, you can use additional -PyVista arguments (available at :func:`pyvista.plot`), such as: +PyVista arguments (available at `pyvista.plot() `_), such as: .. jupyter-execute:: From 5dd91d98e08f368f9ce0f9ac127be249087f3573 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Mon, 23 Dec 2024 13:50:00 +0100 Subject: [PATCH 29/39] add the plotting_deformed_meshes.rst tutorial --- .../user_guide/tutorials/plot/index.rst | 8 + .../plot/plotting_deformed_meshes.rst | 239 ++++++++++++++++++ 2 files changed, 247 insertions(+) create mode 100644 doc/source/user_guide/tutorials/plot/plotting_deformed_meshes.rst diff --git a/doc/source/user_guide/tutorials/plot/index.rst b/doc/source/user_guide/tutorials/plot/index.rst index ff8e7afe63..0c26fde423 100644 --- a/doc/source/user_guide/tutorials/plot/index.rst +++ b/doc/source/user_guide/tutorials/plot/index.rst @@ -18,6 +18,13 @@ These tutorials demonstrate some different approaches to visualise the data in p This tutorial shows different plotting commands to plot a bare mesh + .. grid-item-card:: Plotting deformed meshes + :link: ref_tutorials_plotting_deformed_meshes + :link-type: ref + :text-align: center + + This tutorial shows different plotting commands to plot a bare deformed mesh + .. grid-item-card:: Plotting data on the mesh :link: ref_plotting_data_on_the_mesh :link-type: ref @@ -60,6 +67,7 @@ These tutorials demonstrate some different approaches to visualise the data in p :hidden: plotting_meshes.rst + plotting_deformed_meshes.rst plotting_data_on_the_mesh.rst plotting_data_on_deformed_mesh.rst plotting_data_on_specific_path.rst diff --git a/doc/source/user_guide/tutorials/plot/plotting_deformed_meshes.rst b/doc/source/user_guide/tutorials/plot/plotting_deformed_meshes.rst new file mode 100644 index 0000000000..177de09eba --- /dev/null +++ b/doc/source/user_guide/tutorials/plot/plotting_deformed_meshes.rst @@ -0,0 +1,239 @@ +.. _ref_tutorials_plotting_deformed_meshes: + +======================== +Plotting deformed meshes +======================== + +.. |Model.plot| replace:: :func:`Model.plot()` +.. |MeshedRegion.plot| replace:: :func:`MeshedRegion.plot() ` +.. |MeshesContainer.plot| replace:: :func:`MeshesContainer.plot()` +.. |add_mesh| replace:: :func:`add_mesh()` +.. |show_figure| replace:: :func:`show_figure()` +.. |meshes_provider| replace:: :class:`meshes_provider` + +This tutorial shows different plotting commands to plot the bare deformed mesh +of a model. + +DPF-Core has a variety of plotting methods for generating 3D plots of +Ansys models directly from Python. These methods use VTK and leverage +the `PyVista `_ library to simplify plotting. + +:jupyter-download-script:`Download tutorial as Python script` +:jupyter-download-notebook:`Download tutorial as Jupyter notebook` + +Define the mesh +--------------- + +The mesh object in DPF is a |MeshedRegion|. You can store multiple |MeshedRegion| in a DPF collection +called |MeshesContainer|. + +You can obtain a |MeshedRegion| by creating your own from scratch or by getting it from a result file. +For more information, see the :ref:`ref_tutorials_create_a_mesh_from_scratch` and +:ref:`ref_tutorials_get_mesh_from_result_file` tutorials. + +For this tutorial, we get a |MeshedRegion| from a result file. You can use one available in the |Examples| module. +For more information see the :ref:`ref_tutorials_get_mesh_from_result_file` tutorial. + +.. jupyter-execute:: + + # Import the ``ansys.dpf.core`` module + from ansys.dpf import core as dpf + # Import the examples module + from ansys.dpf.core import examples + # Import the operators module + from ansys.dpf.core import operators as ops + + # Define the result file path + result_file_path_1 = examples.find_multishells_rst() + + # Define the DataSources + ds_1 = dpf.DataSources(result_path=result_file_path_1) + + # Create a model + model_1 = dpf.Model(data_sources=ds_1) + + # Extract the mesh + meshed_region_1 = model_1.metadata.meshed_region + +There are different ways to obtain a |MeshesContainer|. You can, for example, extract a |MeshedRegion| in split parts +from the result file. + +Here, we get a |MeshesContainer| by extracting the |MeshedRegion| split by material +using the |meshes_provider| operator. This operator gives a |MeshesContainer| with the |MeshedRegion| split parts +with a *'mat'* label. + +.. jupyter-execute:: + + # Extract the mesh in split parts + meshes = ops.mesh.mesh_provider(data_sources=ds_1).eval() + +Define the deforming actor +-------------------------- + +The geometry can be deformed by: + +- A |Result| object; +- An |Operator|; +- A |Field|; +- A |FieldsContainer|. + +Here, we deform the mesh using an |Operator|. + +To deform the mesh we need values with a homogeneous unit dimension, a distance unit. +Thus, to deform the mesh we need the displacement results. + +First, extract the displacements results |Operator| from the |Model|. For more information about extracting results +from a result file, see the :ref:`ref_tutorials_import_data` tutorials section. + +.. jupyter-execute:: + + # Get the displacement results Operator + disp_results = model_1.results.displacement() + +Plot the deformed mesh +---------------------- + +To display a deformed mesh, you can: + +- :ref:`Plot the Model `; +- :ref:`Plot the MeshedRegion `; +- :ref:`Plot the MeshesContainer `. + +For all approaches, we use a scale factor so the deformed mesh fits properly on the plot. + +.. jupyter-execute:: + + # Define the scale factor + scl_fct = 0.001 + +.. _ref_plot_deformed_mesh_with_model: + +Plot the |Model| +^^^^^^^^^^^^^^^^ + +To plot the |Model|, you have to use the |Model.plot| method [1]_. This method plots the +bare mesh associated to the result file by default. Thus,you must also use the *'deform_by'* +argument and give the displacement results. + +.. jupyter-execute:: + + # Plot the deformed mesh + model_1.plot(deform_by=disp_results, + scale_factor=scl_fct, ) + +.. _ref_plot_deformed_mesh_with_meshed_region: + +Plot the |MeshedRegion| +^^^^^^^^^^^^^^^^^^^^^^^ + +To plot the deformed |MeshedRegion| you can use: + +- The |MeshedRegion.plot| method; +- The |DpfPlotter| object. + +.. tab-set:: + + .. tab-item:: MeshedRegion.plot() method + + To plot the mesh with this approach, use the |MeshedRegion.plot| method [1]_ with + the |MeshedRegion| object we defined. Additionally, you must use the *'deform_by'* + argument and give the displacement results. + + .. jupyter-execute:: + + # Plot the deformed mesh + meshed_region_1.plot(deform_by=disp_results, + scale_factor=scl_fct, ) + + .. tab-item:: DpfPlotter object + + To plot the mesh with this approach, start by defining the |DpfPlotter| object [2]_. + Then, add the |MeshedRegion| to it, using the |add_mesh| method. Additionally, you must + use the *'deform_by'* argument and give the displacement results. + + To display the figure built by the plotter object use the |show_figure| method. + + .. jupyter-execute:: + + # Declare the DpfPlotter object + plotter_1 = dpf.plotter.DpfPlotter() + + # Add the MeshedRegion to the DpfPlotter object + plotter_1.add_mesh(meshed_region=meshed_region_1, + deform_by=disp_results, + scale_factor=scl_fct, ) + + # Display the plot + plotter_1.show_figure() + +.. _ref_plot_deformed_mesh_with_meshes_container: + +Plot the |MeshesContainer| +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To plot the deformed |MeshesContainer| you can use: + +- The |MeshesContainer.plot| method; +- The |DpfPlotter| object. + +.. tab-set:: + + .. tab-item:: MeshesContainer.plot() method + + To plot the mesh with this approach, use the |MeshesContainer.plot| method [1]_ with + the |MeshesContainer| object we defined. Additionally, you must use the *'deform_by'* + argument and give the displacement results. + + .. jupyter-execute:: + + # Plot the deformed mesh + meshes.plot(deform_by=disp_results, + scale_factor=scl_fct, ) + + .. tab-item:: DpfPlotter object + + To plot the mesh with this approach, start by defining the |DpfPlotter| object [2]_. + Then, add the |MeshesContainer| to it, using the |add_mesh| method. Additionally, you must + use the *'deform_by'* argument and give the displacement results. + + To display the figure built by the plotter object use the |show_figure| method. + + .. jupyter-execute:: + + # Declare the DpfPlotter object + plotter_2 = dpf.plotter.DpfPlotter() + + # Add the MeshedRegion to the DpfPlotter object + plotter_2.add_mesh(meshed_region=meshes, + deform_by=disp_results, + scale_factor=scl_fct, ) + + # Display the plot + plotter_2.show_figure() + +.. rubric:: Footnotes + +.. [1] The default plotter settings display the mesh with edges, lighting and axis widget enabled. +Nevertheless, as we use the `PyVista `_ library to create the plot, you can use additional +PyVista arguments (available at `pyvista.plot() `_), such as: + +.. jupyter-execute:: + + model_1.plot(deform_by=disp_results, + scale_factor=scl_fct, + title= "Model plot", + text= "Model.plot()", # Adds the given text at the bottom of the plot + window_size=[450, 450]) + # Notes: + # - To save a screenshot to file, use "screenshot=figure_name.png" ( as well as "notebook=False" if on a Jupyter notebook). + # - The "off_screen" keyword only works when "notebook=False". If "off_screen=True" the plot is not displayed when running the code. + +.. [2] The |DpfPlotter| object is currently a PyVista based object. +That means that PyVista must be installed, and that it supports kwargs as +parameter (the argument must be supported by the installed PyVista version). +More information about the available arguments are available at `pyvista.plot() `_`. + +The default |DpfPlotter| object settings displays the mesh with edges and lighting +enabled. Nevertheless, as we use the `PyVista `_ +library to create the plot, you can use additional PyVista arguments for the |DpfPlotter| +object and |add_field| method (available at `pyvista.plot() `_`). \ No newline at end of file From 6a1b4cacc104c56a6c0b4833a7172a0c5997c68a Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Mon, 23 Dec 2024 17:45:34 +0100 Subject: [PATCH 30/39] update the plotting_data_on_the_mesh.rst to the tutorials guidelines --- .../plot/plotting_data_on_the_mesh.rst | 175 ++++++++---------- 1 file changed, 76 insertions(+), 99 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst index b079e109bf..90484725fe 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_the_mesh.rst @@ -1,16 +1,17 @@ .. _ref_plotting_data_on_the_mesh: -========================= -Plotting data on the mesh -========================= +======================= +Plotting data on a mesh +======================= .. |Field.plot| replace:: :func:`Field.plot()` .. |MeshedRegion.plot| replace:: :func:`MeshedRegion.plot()` .. |add_mesh| replace:: :func:`add_mesh()` .. |add_field| replace:: :func:`add_field()` .. |show_figure| replace:: :func:`show_figure()` -.. |to_nodal_fc| replace:: :class:`to_nodal_fc() ` +.. |to_nodal_fc| replace:: :class:`to_nodal_fc ` .. |select_component| replace:: :func:`select_component() ` +.. |stress_op| replace:: :class:`stress ` This tutorial shows how to plot data on its supporting mesh by different approaches. @@ -56,11 +57,11 @@ see the :ref:`ref_tutorials_import_data` tutorials section. Here, we chose to plot the XX stress tensor component data. -First, get the stress |Result| object. +First, get the stress results using the |stress_op| operator. .. jupyter-execute:: - # Extract the stress Result + # Extract the stress results stress_result = model_1.results.stress() # Print the results @@ -69,20 +70,17 @@ First, get the stress |Result| object. We must request the stress in a *'nodal'* location as the default *'ElementalNodal'* location for the stress results is not supported for plotting. -There are different ways to change the location. Here, we define the new location using the input of the stress -|Result|. Another option would be using an averaging operator, like the |to_nodal_fc| operator +There are different ways to change the location. Here, we define the new location using the input of the |stress_op| +operator. Another option would be using an averaging operator, like the |to_nodal_fc| operator .. jupyter-execute:: - # Define the desired location as an input of the result operator + # Define the desired location as an input of the stress operator stress_result.inputs.requested_location(dpf.locations.nodal) # Get the output (here a FieldsContainer) fc_stress = stress_result.eval() - # Print the output - print(fc_stress) - To get the results for the XX stress component, we use the |select_component| method. This methods takes the index the component as an input. The stress tensor has 6 components per elementary data (symmetrical tensor XX,YY,ZZ,XY,YZ,XZ). Thus, we get the component of index=0 @@ -92,155 +90,134 @@ the index the component as an input. The stress tensor has 6 components per elem # Get the stress results for the XX component fc_stress_XX = fc_stress.select_component(index=0) +Define the mesh +--------------- + +The mesh object in DPF is a |MeshedRegion|. Thus, to plot the data on a mesh you need a |MeshedRegion| to be based on. +Here, we get a |MeshedRegion| from a result file. For more information about how to extract a |MeshedRegion| +from a result file, see the :ref:`ref_tutorials_get_mesh_from_result_file` tutorial. + +.. jupyter-execute:: + + # Define the meshed region + meshed_region_1 = model_1.metadata.meshed_region + Plot the data on the mesh ------------------------- There are two different approaches to plot the data on the mesh: -- :ref:`method_plot_data_mesh_1` -- :ref:`method_plot_data_mesh_2` +- :ref:`Plot the data on its mesh support ` +- :ref:`Plot the mesh and add the data on top of that ` .. hint:: - :ref:`method_plot_data_mesh_2` is faster than :ref:`method_plot_data_mesh_1` + :ref:`ref_method_plot_data_mesh_2` is faster than :ref:`ref_method_plot_data_mesh_1` -For both approaches, you need a |MeshedRegion| to be based on. Here, we get a |MeshedRegion| from -a result file. For more information about how to extract a |MeshedRegion| from a result file, see the -:ref:`ref_tutorials_get_mesh_from_result_file` tutorial. - -.. jupyter-execute:: - - # Define the meshed region - meshed_region_1 = model_1.metadata.meshed_region -.. _method_plot_data_mesh_1: +.. _ref_method_plot_data_mesh_1: Plot the data on its mesh support ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Plotting the data in DPF means plotting the |Field| or |FieldsContainer| that contains the data. +Plotting the data in DPF means plotting the |Field| that contains the data. To plot a |Field|, you can use: -- :ref:`The Field.plot() method `; -- :ref:`The DpfPlotter object `. +- The |Field.plot| method; +- The |DpfPlotter| object. .. hint:: Using the |DpfPlotter| class is faster than using the |Field.plot| method -.. _ref_plot_field_on_mesh_plot_method_1: +.. tab-set:: -Using the plot() method -~~~~~~~~~~~~~~~~~~~~~~~ + .. tab-item:: Field.plot() method -First, get a |Field| from the stress results |FieldsContainer|. Then, use the |Field.plot| method [1]_. -You have to use the *'meshed_region'* argument and give the Field supporting mesh. + First, get a |Field| from the stress results |FieldsContainer|. Then, use the |Field.plot| method [1]_. + You have to use the *'meshed_region'* argument and give the Field supporting mesh. -.. jupyter-execute:: - - # Define the field - field_stress_XX = fc_stress_XX[0] + .. jupyter-execute:: - # Plot the data on the mesh - field_stress_XX.plot(meshed_region=meshed_region_1) + # Define the field + field_stress_XX = fc_stress_XX[0] -.. _ref_plot_field_on_mesh_DpfPlotter_1: + # Plot the data on the mesh + field_stress_XX.plot(meshed_region=meshed_region_1) -Using the DpfPlotter class -~~~~~~~~~~~~~~~~~~~~~~~~~~ + .. tab-item:: DpfPlotter object -First define the |DpfPlotter| object [2]_. Then, add the |Field| to it using the |add_field| method. -You must use the *'meshed_region'* argument and give the Field supporting mesh. + First define the |DpfPlotter| object [2]_. Then, add the |Field| to it using the |add_field| method. + You must use the *'meshed_region'* argument and give the Field supporting mesh. -To display the figure built by the plotter object, use the |show_figure| method. + To display the figure built by the plotter object, use the |show_figure| method. -.. jupyter-execute:: + .. jupyter-execute:: - # Define the DpfPlotter object - plotter_1 = dpf.plotter.DpfPlotter() + # Define the DpfPlotter object + plotter_1 = dpf.plotter.DpfPlotter() - # Add the Field and MeshedRegion to the DpfPlotter object - plotter_1.add_field(field=field_stress_XX, meshed_region=meshed_region_1) + # Add the Field and MeshedRegion to the DpfPlotter object + plotter_1.add_field(field=field_stress_XX, meshed_region=meshed_region_1) - # Display the plot - plotter_1.show_figure() + # Display the plot + plotter_1.show_figure() -.. _method_plot_data_mesh_2: +.. _ref_method_plot_data_mesh_2: Plot the mesh and add the data on top of that ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -To extract the meshed region and plot the |Field| on top of that you can use: - -- :ref:`The MeshedRegion.plot() method `; -- :ref:`The DpfPlotter object `. +To plot the |MeshedRegion| and add the data on top of that you can use: -For this approach, you can use the data from a |Field| or from a |FieldsContainer|. +- The |MeshedRegion.plot| method; +- The |DpfPlotter| object. .. hint:: The |DpfPlotter| class is faster than using the |MeshedRegion.plot| method. -.. _ref_plot_field_on_mesh_plot_method_2: - -Using the plot() method -~~~~~~~~~~~~~~~~~~~~~~~ - -Use the |MeshedRegion.plot| method [1]_. You must use the *'field_or_fields_container'* argument and -give the |Field| or the |FieldsContainer| containing the stress results data. - -Use a |Field| containing the data. +.. tab-set:: -.. jupyter-execute:: - - # Plot the stress results - meshed_region_1.plot(field_or_fields_container=field_stress_XX) + .. tab-item:: MeshedRegion.plot() method -Use a |FieldsContainer| containing the data. + For this approach, you can use data stored in a |Field| or in a |FieldsContainer|. + In this tutorial, we use data stored in a |Field|. -.. jupyter-execute:: + Use the |MeshedRegion.plot| method [1]_. You must use the *'field_or_fields_container'* argument and + give the |Field| or the |FieldsContainer| containing the stress results data. - # Plot the stress results - meshed_region_1.plot(field_or_fields_container=fc_stress_XX) + .. jupyter-execute:: -.. _ref_plot_field_on_mesh_DpfPlotter_2: + # Plot the mesh and add the stress results + meshed_region_1.plot(field_or_fields_container=field_stress_XX) -Using the DpfPlotter class -~~~~~~~~~~~~~~~~~~~~~~~~~~ + .. tab-item:: DpfPlotter object -First, define the |DpfPlotter| object [2]_. Then, add the |MeshedRegion| -to it, using the |add_mesh| method, and the |Field|, using the |add_field| method. + First, define the |DpfPlotter| object [2]_. Then, add the |MeshedRegion| + and the |Field| using the |add_mesh| and |add_field| methods respectively. -To display the figure built by the plotter object use the |show_figure| method. + To display the figure built by the plotter object use the |show_figure| method. -.. jupyter-execute:: + .. jupyter-execute:: - # Declare the DpfPlotter object - plotter_2 = dpf.plotter.DpfPlotter() + # Define the DpfPlotter object + plotter_2 = dpf.plotter.DpfPlotter() - # Add the MeshedRegion to the DpfPlotter object - plotter_2.add_mesh(meshed_region=meshed_region_1) + # Add the MeshedRegion to the DpfPlotter object + plotter_2.add_mesh(meshed_region=meshed_region_1) - # Add the Field to the DpfPlotter object - plotter_2.add_field(field=field_stress_XX) + # Add the Field to the DpfPlotter object + plotter_2.add_field(field=field_stress_XX) - # Display the plot - plotter_2.show_figure() + # Display the plot + plotter_2.show_figure() .. rubric:: Footnotes .. [1] The default plotter settings display the mesh with edges, lighting and axis widget enabled. Nevertheless, as we use the `PyVista `_ library to create the plot, you can use additional -PyVista arguments (available at `pyvista.plot() `_), such as: - -.. jupyter-execute:: - - field_stress_XX.plot(title= "Field Stress", - text= "Fields plot() method" # Adds the given text at the bottom of the plot - ) - # Notes: - # - To save a screenshot to file, use "screenshot=figure_name.png" ( as well as "notebook=False" if on a Jupyter notebook). - # - The "off_screen" keyword only works when "notebook=False". If "off_screen=True" the plot is not displayed when running the code. +PyVista arguments (available at `pyvista.plot() `_). .. [2] The |DpfPlotter| object is currently a PyVista based object. That means that PyVista must be installed, and that it supports kwargs as From 0329518694445608493916d8f5d75ce5c215fe82 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Mon, 23 Dec 2024 17:45:47 +0100 Subject: [PATCH 31/39] update the plotting_meshes.rst to the tutorials guidelines --- .../tutorials/plot/plotting_meshes.rst | 107 +++++++++++------- 1 file changed, 68 insertions(+), 39 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_meshes.rst b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst index 3bd90b5d77..0932e70cc4 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_meshes.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_meshes.rst @@ -27,8 +27,6 @@ Define the mesh The mesh object in DPF is a |MeshedRegion|. You can store multiple |MeshedRegion| in a DPF collection called |MeshesContainer|. -To display a mesh you can plot a |MeshedRegion| or a |MeshesContainer|. - You can obtain a |MeshedRegion| by creating your own from scratch or by getting it from a result file. For more information, see the :ref:`ref_tutorials_create_a_mesh_from_scratch` and :ref:`ref_tutorials_get_mesh_from_result_file` tutorials. @@ -69,20 +67,19 @@ with a *'mat'* label. # Extract the mesh in split parts meshes = ops.mesh.mesh_provider(data_sources=ds_1).eval() -To plot the mesh you have four different methods: +To plot the mesh you can: -- :ref:`Plot the Model using the Model.plot() method` -- :ref:`Plot the MeshedRegion using the MeshedRegion.plot() method` -- :ref:`Plot the MeshesContainer using the MeshesContainer.plot() method` -- :ref:`Plot the MeshedRegion using the DpfPlotter object` +- :ref:`Plot the Model `; +- :ref:`Plot the MeshedRegion `; +- :ref:`Plot the MeshesContainer `. .. _method_plot_mesh_1: -Plot the |Model| using the |Model.plot| method ----------------------------------------------- +Plot the |Model| +---------------- -To plot the mesh with this approach, you just have to use the |Model.plot| -method [1]_. This method plots the bare mesh associated to the result file by default. +To plot the mesh with this approach, you have to use the |Model.plot| method [1]_. +This method plots the bare mesh associated to the result file by default. .. jupyter-execute:: @@ -91,54 +88,86 @@ method [1]_. This method plots the bare mesh associated to the result file by de .. _method_plot_mesh_2: -Plot the |MeshedRegion| using the |MeshedRegion.plot| method ------------------------------------------------------------- +Plot the |MeshedRegion| +----------------------- -To plot the mesh with this approach, you just have to use the |MeshedRegion.plot| -method [1]_ with the |MeshedRegion| object we defined. +To plot the |MeshedRegion| you can use: -.. jupyter-execute:: +- The |MeshedRegion.plot| method; +- The |DpfPlotter| object. - # Plot the mesh - meshed_region_1.plot() +.. tab-set:: + + .. tab-item:: MeshedRegion.plot() method + + To plot the mesh with this approach, use the |MeshedRegion.plot| method [1]_ with + the |MeshedRegion| object we defined. + + .. jupyter-execute:: + + # Plot the deformed mesh + meshed_region_1.plot() + + .. tab-item:: DpfPlotter object + + To plot the mesh with this approach, start by defining the |DpfPlotter| object [2]_. + Then, add the |MeshedRegion| to it, using the |add_mesh| method. + + To display the figure built by the plotter object, use the |show_figure| method. + + .. jupyter-execute:: + + # Declare the DpfPlotter object + plotter_1 = dpf.plotter.DpfPlotter() + + # Add the MeshedRegion to the DpfPlotter object + plotter_1.add_mesh(meshed_region=meshed_region_1, ) + + # Display the plot + plotter_1.show_figure() As the meshed region is generated from the |Model|, the plot displayed here is identical to the plot generated by the :ref:`method_plot_mesh_1` approach. .. _method_plot_mesh_3: -Plot the |MeshesContainer| using the |MeshesContainer.plot| method ------------------------------------------------------------------- +Plot the |MeshesContainer| +-------------------------- -To plot the mesh with this approach you just have to use the |MeshesContainer.plot| -method [1]_ with the |MeshesContainer| object we defined. +To plot the deformed |MeshesContainer| you can use: -.. jupyter-execute:: +- The |MeshesContainer.plot| method; +- The |DpfPlotter| object. - # Plot the meshes - meshes.plot() +.. tab-set:: -.. _method_plot_mesh_4: + .. tab-item:: MeshesContainer.plot() method -Plot the |MeshedRegion| with the |DpfPlotter| object ----------------------------------------------------- + To plot the mesh with this approach, use the |MeshesContainer.plot| method [1]_ with + the |MeshesContainer| object we defined. -To plot the mesh, start by defining the |DpfPlotter| object [2]_. Then, add the |MeshedRegion| -to it using the |add_mesh| method. + .. jupyter-execute:: -To display the figure built by the plotter object, you must use the -|show_figure| method. + # Plot the deformed mesh + meshes.plot() -.. jupyter-execute:: + .. tab-item:: DpfPlotter object + + To plot the mesh with this approach, start by defining the |DpfPlotter| object [2]_. + Then, add the |MeshesContainer| to it, using the |add_mesh| method. + + To display the figure built by the plotter object use the |show_figure| method. + + .. jupyter-execute:: - # Define the DpfPlotter object - mesh_plotter = dpf.plotter.DpfPlotter() + # Declare the DpfPlotter object + plotter_2 = dpf.plotter.DpfPlotter() - # Add the MeshedRegion to the DpfPlotter object - mesh_plotter.add_mesh(meshed_region=meshed_region_1) + # Add the MeshedRegion to the DpfPlotter object + plotter_2.add_mesh(meshed_region=meshes, ) - # Display the plot - mesh_plotter.show_figure() + # Display the plot + plotter_2.show_figure() You can also plot results data on its supporting mesh. For more information, see :ref:`ref_plotting_data_on_the_mesh` From 2dee2e4e180790505795eb108403ebea9bfdeaad Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Mon, 23 Dec 2024 17:46:00 +0100 Subject: [PATCH 32/39] update the plotting_data_on_specific_path.rst to the tutorials guidelines --- .../plot/plotting_data_on_specific_path.rst | 157 ++++++++++-------- 1 file changed, 91 insertions(+), 66 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_path.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_path.rst index 61e437eedd..95412c7ffe 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_path.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_specific_path.rst @@ -4,156 +4,181 @@ Plotting data on a specific path ================================ -.. |DpfPlotter| replace:: :class:`DpfPlotter` .. |add_mesh| replace:: :func:`add_mesh()` .. |add_field| replace:: :func:`add_field()` .. |show_figure| replace:: :func:`show_figure()` -.. |MeshedRegion| replace:: :class:`MeshedRegion ` -.. |Model| replace:: :class:`Model ` .. |Line| replace:: :class:`Line ` .. |Points| replace:: :class:`Points ` .. |Plane| replace:: :class:`Plane ` .. |mapping| replace:: :class:`mapping ` -.. |Examples| replace:: :mod:`Examples` +.. |nodes_coordinates| replace:: :class:`nodes_coordinates` This tutorial shows how to get a result mapped over a specific path and how to plot it. +:jupyter-download-script:`Download tutorial as Python script` +:jupyter-download-notebook:`Download tutorial as Jupyter notebook` + Define the data --------------- -We will download a simple simulation result file available in our |Examples| package: +First, import a results file. For this tutorial, you can use the one available in the |Examples| module. +For more information about how to import your own result file in DPF, see +the :ref:`ref_tutorials_import_data` tutorials section. .. jupyter-execute:: - # Import the ``ansys.dpf.core`` module, including examples files and the operators subpackage + # Import the ``ansys.dpf.core`` module from ansys.dpf import core as dpf + # Import the examples module from ansys.dpf.core import examples + # Import the operators module from ansys.dpf.core import operators as ops - # Define the result file - result_file = examples.find_static_rst() -The results will be mapped over a defined path of coordinates. So, start by creating -a |Model| with the result file and extract the |MeshedRegion| from it: + # Define the result file path + result_file_path_1 = examples.find_static_rst() + +The results will be mapped over a defined path of coordinates. Thus, we need the spatial support to +those coordinates: the mesh. The mesh object in DPF is a |MeshedRegion|. + +You can obtain a |MeshedRegion| by creating your own from scratch or by getting it from a result file. +For more information, see the :ref:`ref_tutorials_create_a_mesh_from_scratch` and +:ref:`ref_tutorials_get_mesh_from_result_file` tutorials. + +Here, we extract it from the result file. .. jupyter-execute:: # Create the model - my_model = dpf.Model(data_sources=result_file) - my_meshed_region = my_model.metadata.meshed_region + model_1 = dpf.Model(data_sources=result_file_path_1) + + # Extract the mesh + meshed_region_1 = model_1.metadata.meshed_region + +Extract the results to be plotted on the path. Here, we get the equivalent stress results. + +.. jupyter-execute:: + + # Get the equivalent stress results + eq_stress = model_1.results.stress().eqv().eval() Define the path --------------- The path coordinates have to be in the space domain of the mesh. You can verify the -range of coordinates values by checking the nodes coordinates. +range of coordinates existing on the |MeshedRegion| by checking the nodes coordinates. -Get the nodes coordinates with the mesh operator -:class:`nodes_coordinates`: +You can get the nodes coordinates with the |nodes_coordinates| operator. .. jupyter-execute:: - # Get the mesh nodes coordinates - nodes_coords = ops.mesh.node_coordinates(mesh=my_meshed_region).eval() + # Get the nodes coordinates + nodes_coords = ops.mesh.node_coordinates(mesh=meshed_region_1).eval() -Get the maximum values of the coordinates, so you know the space domain limits. +To obtain the domain limits, get the maximal and minimal values of the nodes coordinates. .. jupyter-execute:: - # Get the maximum and minimum values of the mesh nodes coordinates + # Get the maximal nodes coordinates max_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=1) + + # Get the minimal nodes coordinates min_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=0) + # Print the space domain limits print("Max coordinates:", max_coords.data, '\n') - print("Min coordinates:",min_coords.data) + print("Min coordinates:", min_coords.data) -Create the path based on a set of coordinates. Here we choose the paths origin coordinates, -number of points in the path and the distance between each coordinate. +Create the path based on a set of coordinates. Here, define the path by choosing: + +- The origin coordinates of the path; +- Number of points in the path; +- The distance between each point coordinate. .. jupyter-execute:: # Initial coordinates initial_coords = [0.024, 0.03, 0.003] + # Number of points in the path n_points = 51 - # Distance between each coordinate + + # Distance between each opint coordinate delta = 0.001 - # Create the paths coordinates field +The coordinates must be stored in a |Field|. + +.. jupyter-execute:: + + # Create the paths coordinates Field path_coords = dpf.fields_factory.create_3d_vector_field(n_points) path_coords.scoping.ids = list(range(0, n_points)) -Make a loop to define the paths coordinates field. Here we make a path that only moves along the y-axis. +Here, we make a loop to define the paths coordinates. For each iteration, we add to the |Field| a new set of +coordinates based on the predefined distance between each coordinate. The path only moves along the y-axis. .. jupyter-execute:: - # For each iteration we add a new set of coordinates based on the predefined distance between each coordinate + # Define the path coordinates for i in range(0, n_points): initial_coords[1] += delta path_coords.append(data=initial_coords, scopingid=0) -Extract the result ------------------- - -Extract the result from the model. Here we get the equivalent stress result - -.. jupyter-execute:: - - # Get the stress result - my_stress = my_model.results.stress().eqv().eval() - -Map the result to the path --------------------------- +Map the results to the path +--------------------------- -Compute the mapped data using the |mapping| operator. The stress results are defined in a ``ElementalNodal`` location. -So, each entity has a coordinate in the mesh and a correspondent stress data. +Map the stress data to the path using the |mapping| operator. The |mapping| operator retrieves the results +of the entities located in the given coordinates. If the given coordinates don't match with any entity coordinate, +operator interpolates the results inside elements with shape functions. -The |mapping| operator retrieves the results of the entities located in the given coordinates. -If the given coordinates don't match with any entity coordinate, the operator interpolates the results inside -elements with shape functions. .. jupyter-execute:: - # Map the path coordinates with the stress results - mapped_stress = ops.mapping.on_coordinates(fields_container=my_stress, + # Map the stress results to the path coordinates + mapped_stress = ops.mapping.on_coordinates(fields_container=eq_stress, coordinates=path_coords, create_support=True, - mesh=my_meshed_region + mesh=meshed_region_1 ).eval() -Plot the result on the path ---------------------------- +Plot the results on the path +---------------------------- -Create the plotter and add fields and meshes. For more information about -plotting data on a mesh check the tutorial: :ref:`ref_plotting_data_on_the_mesh` +To plot the results on the path, we use the |DpfPlotter| object. For more information about +plotting data on a mesh, see the :ref:`ref_plotting_data_on_the_mesh` tutorial. -First, define the |DpfPlotter| object [2]_, then add |MeshedRegion| -to it using the |add_mesh| method and add the field using the |add_field| method. +First, define the |DpfPlotter| object [2]_. Next, add the |MeshedRegion| +and the |Field| using the |add_mesh| and |add_field| methods respectively. -To display the figure built by the plotter object use the |show_figure| method. +To display the figure built by the plotter object use the |show_figure| method. .. jupyter-execute:: - # Declare the DpfPlotter object - my_plotter = dpf.plotter.DpfPlotter() + # Define the DpfPlotter object + plotter_1 = dpf.plotter.DpfPlotter() + # Add the MeshedRegion to the DpfPlotter object - # We use custom style for the mesh so we can visualise the path (that is inside the mesh) - my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) + # We use custom style for the mesh so we can visualize the path (that is inside the mesh) + plotter_1.add_mesh(meshed_region=meshed_region_1, + style="surface",show_edges=True, color="w", opacity=0.3) + # Add the Field to the DpfPlotter object - my_plotter.add_field(field=mapped_stress[0]) + plotter_1.add_field(field=mapped_stress[0]) + # Display the plot - my_plotter.show_figure() + plotter_1.show_figure() .. rubric:: Footnotes .. [1] The default plotter settings display the mesh with edges, lighting and axis widget enabled. -Nevertheless, as we use the `PyVista `_ library to create -the plot you can use additional PyVista arguments (available at: :func:`pyvista.plot`). +Nevertheless, as we use the `PyVista `_ library to create the plot, you can use additional +PyVista arguments (available at `pyvista.plot() `_). -.. [2] Here we use the |DpfPlotter| object, that is currently a PyVista based object. +.. [2] The |DpfPlotter| object is currently a PyVista based object. That means that PyVista must be installed, and that it supports kwargs as parameter (the argument must be supported by the installed PyVista version). +More information about the available arguments are available at `pyvista.plot() `_`. -The default |DpfPlotter| object settings display the mesh with edges and lighting -enabled. Nevertheless, as we use the `PyVista `_ -library to create the plot you can use additional PyVista arguments for the |DpfPlotter| -object and |add_field| method (available at: :func:`pyvista.plot`). \ No newline at end of file +The default |DpfPlotter| object settings displays the mesh with edges and lighting +enabled. Nevertheless, as we use the `PyVista `_ +library to create the plot, you can use additional PyVista arguments for the |DpfPlotter| +object and |add_field| method (available at `pyvista.plot() `_`). \ No newline at end of file From becbaa582a8ffe2844a74ac8b1302f11f980c501 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Mon, 23 Dec 2024 17:46:17 +0100 Subject: [PATCH 33/39] update the plotting_data_on_deformed_mesh.rst to the tutorials guidelines --- .../plot/plotting_data_on_deformed_mesh.rst | 306 +++++++++++------- 1 file changed, 195 insertions(+), 111 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_deformed_mesh.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_deformed_mesh.rst index b78976be3e..d35f20d052 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_deformed_mesh.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_deformed_mesh.rst @@ -4,194 +4,278 @@ Plotting data on deformed mesh ============================== -.. |Model| replace:: :class:`Model ` -.. |MeshedRegion| replace:: :class:`MeshedRegion ` -.. |Field| replace:: :class:`Field` -.. |FieldsContainer| replace:: :class:`FieldsContainer` -.. |MeshesContainer| replace:: :class:`MeshesContainer ` -.. |Examples| replace:: :mod:`Examples` +.. |to_nodal_fc| replace:: :class:`to_nodal_fc() ` +.. |select_component| replace:: :func:`select_component() ` +.. |split_mesh| replace:: :class:`split_mesh ` +.. |stress_op| replace:: :class:`stress ` +.. |Field.plot| replace:: :func:`Field.plot()` +.. |MeshedRegion.plot| replace:: :func:`MeshedRegion.plot()` -This tutorial shows how to plot data on the deformed mesh. For more detailed information on plotting data -check the :ref:`ref_plotting_data_on_the_mesh` tutorial. +This tutorial shows how to plot data on the deformed mesh. + +:jupyter-download-script:`Download tutorial as Python script` +:jupyter-download-notebook:`Download tutorial as Jupyter notebook` Define the data --------------- -In this tutorial we will download a simulation result file available -in our |Examples| package: +First, import a results file. For this tutorial, you can use the one available in the |Examples| module. +For more information about how to import your own result file in DPF, see +the :ref:`ref_tutorials_import_data` tutorials section. .. jupyter-execute:: - # Import the ``ansys.dpf.core`` module, including examples files and operators subpackage + # Import the ``ansys.dpf.core`` module from ansys.dpf import core as dpf + # Import the examples module from ansys.dpf.core import examples + # Import the operators module from ansys.dpf.core import operators as ops - # Define the result file - result_file = examples.find_multishells_rst() + + # Define the result file path + result_file_path_1 = examples.find_multishells_rst() The |Model| is a helper designed to give shortcuts to access the analysis results -metadata, by opening a DataSources or a Streams, and to instanciate results provider for it. +metadata and to instanciate results providers by opening a |DataSources| or a Streams. Printing the model displays the available results. .. jupyter-execute:: # Create the model - my_model = dpf.Model(data_sources=result_file) + model_1 = dpf.Model(data_sources=result_file_path_1) + # Print the model - print(my_model) + print(model_1) +Extract the data to be plotted on the deformed mesh. -To deform the mesh we need a result with a homogeneous unit dimension, a distance unit. -Thus, to deform the mesh we need the displacement result. +.. note:: -Extract the displacements results from the model: + Only the *'elemental'* or *'nodal'* locations are supported for plotting. + +Here, we chose to plot the XX stress tensor component data. Thud, get the stress results using the |stress_op| operator. .. jupyter-execute:: - # Get the displacement results - my_disp_result = my_model.results.displacement + # Extract the stress results + stress_result = model_1.results.stress() -We need to extract the data we want to plot on the deformed mesh. + # Print the results + print(stress_result.eval()) -Mind that the results location must be of type ``Elemental`` or ``Nodal``. We choose -to work with the XX stress tensor component result. +We must request the stress in a *'nodal'* location as the default *'ElementalNodal'* location for the stress results +is not supported for plotting. -Fot more information about extracting results from a result file check -the :ref:`ref_tutorials_import_data` tutorials section. +There are different ways to change the location. Here, we define the new location using the input of the |stress_op| +operator. Another option would be using an averaging operator, like the |to_nodal_fc| operator .. jupyter-execute:: - # Extract the stress result - my_stress = my_model.results.stress() + # Define the desired location as an input of the stress operator + stress_result.inputs.requested_location(dpf.locations.nodal) + + # Get the output (here a FieldsContainer) + fc_stress = stress_result.eval() -As the stress result is in a ``ElementalNodal`` location we have to change it. -Here we define the new location with a input of the -:class:`stress() ` operator. +To get the results for the XX stress component, we use the |select_component| method. This methods takes +the index the component as an input. The stress tensor has 6 components per elementary data +(symmetrical tensor XX,YY,ZZ,XY,YZ,XZ). Thus, we get the component of index=0 .. jupyter-execute:: - # Define the desired location as an input of the results operator - my_stress.inputs.requested_location(dpf.locations.nodal) - # Get the result (the stress result operator gives an FieldsContainer as an output) - fc_stress = my_stress.eval() + # Get the stress results for the XX component + fc_stress_XX = fc_stress.select_component(index=0) -To get the results only for the XX stress component we have to use -the :func:`select_component() ` -method: +Define the mesh +--------------- -.. jupyter-execute:: +The mesh object in DPF is a |MeshedRegion|. You can store multiple |MeshedRegion| in a DPF collection +called |MeshesContainer|. Thus, the geometry can be defined by a |MeshedRegion| or by a |MeshesContainer|. - # Define the component to get. - # The stress tensor has 6 components per elementary data (symmetrical tensor XX,YY,ZZ,XY,YZ,XZ). - # So we get the component of index=0 - fc_stress_XX = fc_stress.select_component(index=0) +First, extract the |MeshedRegion| from the |Model|. -Plot deformed geometry ----------------------- +.. jupyter-execute:: -Here we use the plot [1]_ method. For different approaches check the :ref:`ref_plotting_data_on_the_mesh` tutorial. + # Define the MeshedRegion + meshed_region_1 = model_1.metadata.meshed_region -The geometry can be defined by a |MeshedRegion| or by a |MeshesContainer|. +There are different ways to obtain a |MeshesContainer|. You can, for example, split a given |MeshedRegion| in different +parts. -Define the |MeshedRegion| from the |Model|: +Here, we get a |MeshesContainer| by splitting the |MeshedRegion| by material using the |split_mesh| operator. +This operator gives a |MeshesContainer| with the |MeshedRegion| split parts with a *'mat'* label. .. jupyter-execute:: - # Define the meshed region - my_meshed_region = my_model.metadata.meshed_region + # Define the MeshesContainer + meshes_1 = ops.mesh.split_mesh(mesh=meshed_region_1).eval() -There are different ways to obtain a |MeshesContainer|. +Define the deforming actor +-------------------------- -Here we get a |MeshesContainer| by using the :class:`split_mesh ` -operator. It splits the mesh by material by default: +The geometry can be deformed by: -.. jupyter-execute:: +- A |Result| object; +- An |Operator|; +- A |Field|; +- A |FieldsContainer|. - # Define the meshed region - my_meshes = ops.mesh.split_mesh(mesh=my_meshed_region).eval() +Here, we deform the mesh using an |Operator|. -The geometry can be deformed by a :class:`Result ` object, -an :class:`Operator`, a :class:`Field` -or a :class:`FieldsContainer`. +To deform the mesh we need values with a homogeneous unit dimension, a distance unit. +Thus, to deform the mesh we need the displacement results. -The procedures are the same for a |MeshedRegion| and a |MeshesContainer|. For this reason we will show only -one plot for the |MeshesContainer| +First, extract the displacements results |Operator| from the |Model|. For more information about extracting results +from a result file, see the :ref:`ref_tutorials_import_data` tutorials section. .. jupyter-execute:: - # Define the plot formating - my_scale_factor = 0.001 - my_window_size=[350,350] - # Plot the XX stress tensor component results on a MeshedRegion deformed by: - # a) a Result object - my_meshed_region.plot( deform_by=my_disp_result, - scale_factor=my_scale_factor, - text="a", - window_size=my_window_size,) - # b) an Operator - my_disp_op = my_disp_result() - my_meshed_region.plot( deform_by=my_disp_op, - scale_factor=my_scale_factor, - text="b", - window_size=my_window_size,) - # c) a FieldsContainer - my_disp_fc = my_disp_result.eval() - my_meshed_region.plot( deform_by=my_disp_fc, - scale_factor=my_scale_factor, - text="c", - window_size=my_window_size,) - # d) a Field - my_disp_field = my_disp_fc[0] - my_meshed_region.plot( deform_by=my_disp_field, - scale_factor=my_scale_factor, - text="d", - window_size=my_window_size) - - # Plot the XX stress tensor component results on a MeshesContainer deformed by a Field - my_meshes.plot( deform_by=my_disp_field, - scale_factor=my_scale_factor, - text="e", - window_size=my_window_size) + # Get the displacement results Operator + disp_op = model_1.results.displacement() Plot data on the deformed geometry ---------------------------------- +Plotting the data in DPF means plotting the |Field| that contains the data. +Get a |Field| from the |FieldsContainer| containing the stress results . + +.. jupyter-execute:: + + # Define the field + field_stress_XX = fc_stress_XX[0] + +There are two different approaches to plot the data on the deformed mesh: + +- :ref:`Plot the data on its mesh support `; +- :ref:`Plot the mesh and add the stress data on top of that `. + +For all approaches, we use a scale factor so the deformed mesh fits properly on the plot. + +.. jupyter-execute:: + + # Define the scale factor + scl_fct = 0.001 + +.. _ref_method_plot_data_deformed_mesh_1: + Plot the data on its mesh support ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Plotting the data in DPF means plotting the |Field| that contains the data. +To plot a |Field| on the deformed mesh, you can use: -Plot the stress results on the deformed geometry: +- The |Field.plot| method; +- The |DpfPlotter| object. -.. jupyter-execute:: +Plot the stress results |Field| on the deformed geometry using the |Field.plot| method. Use the +*'deform_by'* argument and give the displacement results. + +.. tab-set:: + + .. tab-item:: Field.plot() method - # Define the stress field - stress_field = fc_stress[0] - # Plot the results on a deformed geometry. The data is in a Field - stress_field.plot( deform_by=my_disp_field, - scale_factor=my_scale_factor) + To plot the stress results in the deformed mesh, use the |Field.plot| method [1]_. + Additionally, you must use the *'meshed_region'* and *'deform_by'* arguments and + give the mesh and displacement results. + + .. jupyter-execute:: + + # Plot the stress results on the deformed mesh + field_stress_XX.plot(meshed_region=meshed_region_1, + deform_by=disp_op, + scale_factor=scl_fct) + + .. tab-item:: DpfPlotter object + + First define the |DpfPlotter| object [2]_. Then, add the |Field| to it using the |add_field| method. + You must use the *'meshed_region'* and *'deform_by'* arguments and give the mesh and displacement results. + + To display the figure built by the plotter object, use the |show_figure| method. + + .. jupyter-execute:: + + # Define the DpfPlotter object + plotter_1 = dpf.plotter.DpfPlotter() + + # Add the Field and MeshedRegion to the DpfPlotter object + plotter_1.add_field(field=field_stress_XX, + meshed_region=meshed_region_1, + deform_by=disp_op, + scale_factor=scl_fct) + + # Display the plot + plotter_1.show_figure() + +.. _ref_method_plot_data_deformed_mesh_2: Plot the mesh and add the stress data on top of that ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The data to be plotted in a |MeshedRegion| can be in a |Field|. +To plot the deformed |MeshedRegion| and add the data on top of that you can use: -.. jupyter-execute:: +- The |MeshedRegion.plot| method; +- The |DpfPlotter| object. - # Plot the MeshedRegion and the stress in a Field - my_meshed_region.plot( field_or_fields_container=stress_field, - deform_by=my_disp_field, - scale_factor=my_scale_factor) +.. hint:: + The |DpfPlotter| class is faster than using the |MeshedRegion.plot| method. -.. rubric:: Footnotes +.. tab-set:: -.. [1] The default plotter settings display the mesh with edges, lighting and axis widget enabled. -Nevertheless, as we use the `PyVista `_ library to create -the plot you can use additional PyVista arguments (available at: :func:`pyvista.plot`. + .. tab-item:: MeshedRegion.plot() method + + For this approach, you can use data stored in a |Field| or in a |FieldsContainer|. + In this tutorial, we use data stored in a |Field|. + To plot the stress results in the deformed mesh, use the |MeshedRegion.plot| method [1]_. + You must use the *'field_or_fields_container'* and *'deform_by'* arguments and give the + stress and the displacement results. + .. jupyter-execute:: + + # Plot the deformed mesh and add the stress results + meshed_region_1.plot(field_or_fields_container=field_stress_XX, + deform_by=disp_op, + scale_factor=scl_fct) + + .. tab-item:: DpfPlotter object + + First, define the |DpfPlotter| object [2]_. Then, add the |MeshedRegion| + and the |Field| using the |add_mesh| and |add_field| methods respectively. + + To display the figure built by the plotter object use the |show_figure| method. + + .. jupyter-execute:: + + # Define the DpfPlotter object + plotter_2 = dpf.plotter.DpfPlotter() + + # Add the MeshedRegion to the DpfPlotter object + plotter_2.add_mesh(meshed_region=meshed_region_1) + + # Add the Field to the DpfPlotter object + plotter_2.add_field(field=field_stress_XX) + + # Display the plot + plotter_2.show_figure() + + +.. rubric:: Footnotes + +.. [1] The default plotter settings display the mesh with edges, lighting and axis widget enabled. +Nevertheless, as we use the `PyVista `_ library to create the plot, you can use additional +PyVista arguments (available at `pyvista.plot() `_). + +.. [2] The |DpfPlotter| object is currently a PyVista based object. +That means that PyVista must be installed, and that it supports kwargs as +parameter (the argument must be supported by the installed PyVista version). +More information about the available arguments are available at `pyvista.plot() `_`. + +The default |DpfPlotter| object settings displays the mesh with edges and lighting +enabled. Nevertheless, as we use the `PyVista `_ +library to create the plot, you can use additional PyVista arguments for the |DpfPlotter| +object and |add_field| method (available at `pyvista.plot() `_`). From 7189c8f95f93bccc3e4740cd936665d017e96431 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Tue, 24 Dec 2024 15:37:59 +0100 Subject: [PATCH 34/39] update the plotting_data_on_geometry_elements.rst to the tutorials guidelines --- .../plotting_data_on_geometry_elements.rst | 469 ++++++++++-------- 1 file changed, 257 insertions(+), 212 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_data_on_geometry_elements.rst b/doc/source/user_guide/tutorials/plot/plotting_data_on_geometry_elements.rst index 2abaec5226..b5ff87f8fd 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_data_on_geometry_elements.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_data_on_geometry_elements.rst @@ -4,58 +4,84 @@ Plot data on geometry elements ============================== -.. |DpfPlotter| replace:: :class:`DpfPlotter` .. |add_mesh| replace:: :func:`add_mesh()` .. |add_field| replace:: :func:`add_field()` .. |show_figure| replace:: :func:`show_figure()` -.. |MeshedRegion| replace:: :class:`MeshedRegion ` .. |Model| replace:: :class:`Model ` .. |Line| replace:: :class:`Line ` .. |Points| replace:: :class:`Points ` .. |Plane| replace:: :class:`Plane ` .. |mapping| replace:: :class:`mapping ` -.. |Examples| replace:: :mod:`Examples` +.. |nodes_coordinates| replace:: :class:`nodes_coordinates` +.. |Points.plot| replace:: :func:`Points.plot()` +.. |Line.plot| replace:: :func:`Line.plot()` +.. |Plane.plot| replace:: :func:`Plane.plot()` This tutorials shows how to get a result mapped over different geometric objects: -- Points_ -- Line_ -- Plane_ +- Points +- Line +- Plane Define the data --------------- -We will download a simple simulation result file available in our |Examples| package: +First, import a results file. For this tutorial, you can use the one available in the |Examples| module. +For more information about how to import your own result file in DPF, see +the :ref:`ref_tutorials_import_data` tutorials section. .. jupyter-execute:: - # Import the ``ansys.dpf.core`` module, including examples files, the operators subpackage and the geometry module + # Import the ``ansys.dpf.core`` module from ansys.dpf import core as dpf + # Import the examples module from ansys.dpf.core import examples + # Import the operators module from ansys.dpf.core import operators as ops + # Import the geometry module from ansys.dpf.core import geometry as geo - # Define the result file - result_file = examples.find_static_rst() -The results will be mapped over a defined path of coordinates. So, start by creating -a |Model| with the result file and extract the |MeshedRegion| from it: + # Define the result file path + result_file_path_1 = examples.find_static_rst() + +The results will be mapped over a defined set of coordinates. Thus, we need the spatial support to +those coordinates: the mesh. The mesh object in DPF is a |MeshedRegion|. + +You can obtain a |MeshedRegion| by creating your own from scratch or by getting it from a result file. +For more information, see the :ref:`ref_tutorials_create_a_mesh_from_scratch` and +:ref:`ref_tutorials_get_mesh_from_result_file` tutorials. + +Here, we extract it from the result file. .. jupyter-execute:: # Create the model - my_model = dpf.Model(data_sources=result_file) - my_meshed_region = my_model.metadata.meshed_region + model_1 = dpf.Model(data_sources=result_file_path_1) -We choose to plot the displacement results field. Extract the displacements results from the model: + # Extract the mesh + meshed_region_1 = model_1.metadata.meshed_region + +Extract the results to be plotted on the geometry elements. Here, we get the displacement results. .. jupyter-execute:: # Get the displacement results - my_disp = my_model.results.displacement.eval() + disp_results = model_1.results.displacement.eval() + +To a better visualization of the mesh and the geometry elements, we define a camera position. +A camera position is a combination of: + +- A position; +- A focal point (the target); +- A upwards vector. -We use the the plot method [1]_ to display the geometry elements with the mesh. To a better -visualisation we will define a camera position. It can be given as an argument when using the -plot method [1]_: +It results in a list of format: + +.. code-block:: python + + camera_position= [[pos_x, pos_y, pos_z], # position + [fp_x, fp_y, fp_z], # focal point + [up_x, up_y, up_z]] # upwards vector .. jupyter-execute:: @@ -66,278 +92,297 @@ plot method [1]_: (-0.16771051558419411, -0.1983722658245161, 0.9656715938216944), ] -Points ------- - -Create points -^^^^^^^^^^^^^ +Create the geometry elements +---------------------------- -Create |Points| by defining their coordinates. They have to be in the space -domain of the mesh. You can verify the range of coordinates values by checking -the nodes coordinates. +The geometry elements must be in the space domain of the mesh. You can verify the range of coordinates +values by checking the nodes coordinates. -Get the nodes coordinates with the mesh operator -:class:`nodes_coordinates`: +You can get the nodes coordinates with the |nodes_coordinates| operator. .. jupyter-execute:: - # Get the mesh nodes coordinates - nodes_coords = ops.mesh.node_coordinates(mesh=my_meshed_region).eval() + # Get the nodes coordinates + nodes_coords = ops.mesh.node_coordinates(mesh=meshed_region_1).eval() -Get the maximum values of the coordinates, so you know the space domain limits. +To obtain the domain limits, get the maximal and minimal values of the nodes coordinates. .. jupyter-execute:: - # Get the maximum and minimum values of the mesh nodes coordinates + # Get the maximal nodes coordinates max_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=1) + + # Get the minimal nodes coordinates min_coords = ops.min_max.min_max(field=nodes_coords).eval(pin=0) + # Print the space domain limits print("Max coordinates:", max_coords.data, '\n') - print("Min coordinates:",min_coords.data) + print("Min coordinates:", min_coords.data) -Now define the |Points| coordinates that respects those space limits. -With the maximum and minimum coordinates we can can deduce the nodes at the corners of the mesh. +.. tab-set:: -The coordinates are define at the global Cartesian coordinates system by default. Thus, combining -the max and min coordinates gives us the points that will be in the corner of the mesh. We can also -place one point in the middle of the mesh by calculating the middle distance between the coordinates. + .. tab-item:: Points -You can do it by hand or by calculating this combinations : + Create |Points| by defining their coordinates. -.. jupyter-execute:: + The coordinates are define at the global Cartesian coordinates system by default. Thus, combining + the max and min coordinates gives us the points that are in the corner of the mesh. We can also + place one point in the middle of the mesh by calculating the middle distance between the coordinates. - # Define the coordinates of the middle point - # print(min_coords.data_as_list) - distance_minmax_coords = ops.math.minus(fieldA=max_coords.data_as_list, fieldB=min_coords.data_as_list).eval() - middle = ops.math.scale(field=distance_minmax_coords, ponderation=0.5).eval() - middle_coords = ops.math.add(fieldA=min_coords.data_as_list,fieldB=middle.data_as_list).eval() - # Define the points - my_points = geo.Points(coordinates=[ - [0.0, 0.03, 0.0], - [0.0, 0.06, 0.0], - [0.03, 0.06, 0.0], - [0.03, 0.03, 0.0], - [0.0, 0.03, 0.03], - [0.0, 0.06, 0.03], - [0.03, 0.06, 0.03], - [0.03, 0.03, 0.03], - middle_coords.data_as_list - ] - ) - -Check the points on the mesh with a plot -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -You can plot the |Points| together with the mesh: + You can do it by hand or by calculating this combinations. -.. jupyter-execute:: + .. jupyter-execute:: - # Display the mesh and the points - my_points.plot(mesh=my_meshed_region, cpos=camera_position) + # Define the coordinates of the point on the middle of the mesh + # 1) Get the distance between the max and min coordinates + distance_minmax_coords = ops.math.minus(fieldA=max_coords.data_as_list, fieldB=min_coords.data_as_list).eval() + # 2) Get the middle of that distance + middle = ops.math.scale(field=distance_minmax_coords, ponderation=0.5).eval() + # 3) Find the coordinate to the point on the middle of the mesh + middle_coords = ops.math.add(fieldA=min_coords.data_as_list,fieldB=middle.data_as_list).eval() -Map displacement field to the points -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + # Define the points coordinates + pts = geo.Points(coordinates=[ + [0.0, 0.03, 0.0], + [0.0, 0.06, 0.0], + [0.03, 0.06, 0.0], + [0.03, 0.03, 0.0], + [0.0, 0.03, 0.03], + [0.0, 0.06, 0.03], + [0.03, 0.06, 0.03], + [0.03, 0.03, 0.03], + middle_coords.data_as_list + ] + ) -Compute the mapped data using the |mapping| operator. The displacement results are defined in a ``Nodal`` location. -So, each node has a coordinate in the mesh and a correspondent displacement data. + .. tab-item:: Line -The |mapping| operator retrieves the results of the entities located in the given coordinates. -If the given coordinates don't match with any entity coordinate, the operator interpolates the results inside -elements with shape functions. + Create a |Line| passing through the mesh diagonal. To create a |Line| + you must define: -.. jupyter-execute:: + - The coordinates of the starting point + - The coordinates of the ending point + - The number of points where the |Line| object will be discretized. - # Map the points coordinates with the displacement results and get the field - mapped_disp_points = ops.mapping.on_coordinates(fields_container=my_disp, - coordinates=dpf.fields_factory.field_from_array(arr=my_points.coordinates.data), - create_support=True, - mesh=my_meshed_region - ).eval()[0] + .. jupyter-execute:: -Plot displacement field on the points -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + # Create the Line object + line_1 = geo.Line(coordinates=[[0.0, 0.06, 0.0], [0.03, 0.03, 0.03]], + n_points=50 + ) -Create the plotter and add fields and meshes. For more information about -plotting data on a mesh check the tutorial: :ref:`ref_plotting_data_on_the_mesh` + .. tab-item:: Plane -First, define the |DpfPlotter| object [2]_, then add |MeshedRegion| -to it using the |add_mesh| method and add the field using the |add_field| method. + Create a vertical |Plane| passing through the mesh mid point. To create a |Plane| + you must define: -To display the figure built by the plotter object use the |show_figure| method. + - The coordinates of the point in the center of the plane + - The vector of the normal direction to the plane + - The plane width (x direction) + - The plane height (y direction) + - The number of cells (x and y direction) where the |Plane| object will be discretized. -.. jupyter-execute:: + .. jupyter-execute:: - # Declare the DpfPlotter object - my_plotter = dpf.plotter.DpfPlotter() - # Add the MeshedRegion to the DpfPlotter object - # We use custom style for the mesh so we can visualise the points - my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) - # Add the Field to the DpfPlotter object - my_plotter.add_field(field=mapped_disp_points, point_size=20.0, render_points_as_spheres=True) - # Display the plot - my_plotter.show_figure(show_axes=True, cpos=camera_position) + # Define the coordinates of the point on the middle of the mesh + # 1) Get the distance between the max and min coordinates + distance_minmax_coords = ops.math.minus(fieldA=max_coords.data_as_list, fieldB=min_coords.data_as_list).eval() + # 2) Get the middle of that distance + middle = ops.math.scale(field=distance_minmax_coords, ponderation=0.5).eval() + # 3) Find the coordinate to the point on the middle of the mesh + middle_coords = ops.math.add(fieldA=min_coords.data_as_list,fieldB=middle.data_as_list).eval() -Line ----- + # Create the Plane object + plane_1 = geo.Plane(center=middle_coords.data_as_list, + normal=[1, 1, 0], + width=0.03, + height=0.03, + n_cells_x=10, + n_cells_y=10, + ) -Create the line -^^^^^^^^^^^^^^^ +Plot the geometry elements on the mesh +-------------------------------------- -Create a |Line| passing through the mesh diagonal. To create a |Line| -you need pass as arguments: the coordinates of the starting and ending points -and the number of points where the |Line| object will be discretized. +.. tab-set:: -Check the `Create points`_ section to understand how we defined the points coordinates. + .. tab-item:: Points -.. jupyter-execute:: + You can plot the |Points| objects on the mesh using the |Points.plot| method [1]_. - # Create the Line object - my_line = geo.Line(coordinates=[[0.0, 0.06, 0.0], [0.03, 0.03, 0.03]], - n_points=50 - ) + .. jupyter-execute:: -Check the line on the mesh with a plot -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + # Display the mesh and the points + pts.plot(mesh=meshed_region_1, cpos=camera_position) -You can plot the |Line| together with the mesh: + .. tab-item:: Line -.. jupyter-execute:: + You can plot the |Line| object on the mesh using the |Line.plot| method [1]_. - # Display the mesh and the line - my_line.plot(mesh=my_meshed_region, cpos=camera_position) + .. jupyter-execute:: -Map displacement field to the line -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + # Display the mesh and the line + line_1.plot(mesh=meshed_region_1, cpos=camera_position) -Compute the mapped data using the |mapping| operator. The displacement results are defined in a ``Nodal`` location. -So, each node has a coordinate in the mesh and a correspondent displacement data. + .. tab-item:: Plane -The |mapping| operator retrieves the results of the entities located in the given coordinates. -If the given coordinates don't match with any entity coordinate, the operator interpolates the results inside -elements with shape functions. + You can plot the |Plane| object on the mesh using the |Plane.plot| method [1]_. -.. jupyter-execute:: + .. jupyter-execute:: - # Map the line coordinates with the displacement results and get the field - mapped_disp_line = ops.mapping.on_coordinates(fields_container=my_disp, - coordinates=my_line.mesh.nodes.coordinates_field, - create_support=True, - mesh=my_meshed_region - ).eval()[0] + # Display the mesh and the plane + plane_1.plot(mesh=meshed_region_1, cpos=camera_position) -Plot displacement field on the line -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Map the results to the geometry elements +---------------------------------------- -Plot displacement field on the |Line| and display mesh in background. -Create the plotter and add fields and meshes. For more information about -plotting data on a mesh check the tutorial: :ref:`ref_plotting_data_on_the_mesh` +Map the displacement results to the geometry elements using the |mapping| operator. This operator +retrieves the results of the entities located in the given coordinates. If the given coordinates don't +match with any entity coordinate, the operator interpolates the results inside elements with shape functions. -First, define the |DpfPlotter| object [2]_, then add |MeshedRegion| -to it using the |add_mesh| method and add the field using the |add_field| method. +The displacement results are defined in a *`nodal`* location. Thus, each node has a coordinate in the +mesh and a corresponding displacement data. -To display the figure built by the plotter object use the |show_figure| method. +.. tab-set:: -.. jupyter-execute:: + .. tab-item:: Points - # Declare the DpfPlotter object - my_plotter = dpf.plotter.DpfPlotter() - # Add the MeshedRegion to the DpfPlotter object - # We use custom style for the mesh so we can visualise the points - my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) - # Add the Field to the DpfPlotter object - my_plotter.add_field(field=mapped_disp_line) - # Display the plot - my_plotter.show_figure(show_axes=True, cpos=camera_position) + The |mapping| operator takes the coordinates stored in a |Field|. Thus, we must create a |Field| with the + |Points| coordinates. -Plane ------ + .. jupyter-execute:: -Create the plane -^^^^^^^^^^^^^^^^ + # Create the coordinates field + points_coords_field = dpf.fields_factory.field_from_array(arr=pts.coordinates.data) -Create a vertical |Plane| passing through the mesh mid point. To create a |Plane| -you need pass as arguments: the coordinates of the center point, the vector of the normal direction to the plane, -and the width (x direction), height (y direction) and the number of cells(x and y direction) where the |Plane| -object will be discretized. + # Map the points coordinates with the displacement results + mapped_disp_points = ops.mapping.on_coordinates(fields_container=disp_results, + coordinates=points_coords_field, + create_support=True, + mesh=meshed_region_1 + ).eval()[0] -Check the `Create points`_ section to understand how we defined the mesh space coordinates . + .. tab-item:: Line -.. jupyter-execute:: + The |mapping| operator takes the coordinates stored in a |Field|. Thus, we must create a |Field| with the + |Line| coordinates. - # Create the Plane object - my_plane = geo.Plane(center=middle_coords.data_as_list, - normal=[1, 1, 0], - width=0.03, - height=0.03, - n_cells_x=10, - n_cells_y=10, - ) + .. jupyter-execute:: -Check the plane on the mesh with a plot -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + # Get the coordinates field + line_coords_field = line_1.mesh.nodes.coordinates_field -You can plot the |Plane| together with the mesh: + # Map the line coordinates with the displacement results + mapped_disp_line = ops.mapping.on_coordinates(fields_container=disp_results, + coordinates=line_coords_field, + create_support=True, + mesh=meshed_region_1 + ).eval()[0] -.. jupyter-execute:: + .. tab-item:: Plane - # Display the mesh and the plane - my_plane.plot(mesh=my_meshed_region, cpos=camera_position) + The |mapping| operator takes the coordinates stored in a |Field|. Thus, we must create a |Field| with the + |Plane| coordinates. -Map displacement field to the plane -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + .. jupyter-execute:: -Compute the mapped data using the |mapping| operator. The displacement results are defined in a ``Nodal`` location. -So, each node has a coordinate in the mesh and a correspondent displacement data. + # Get the coordinates field + plane_coords_field = plane_1.mesh.nodes.coordinates_field -The |mapping| operator retrieves the results of the entities located in the given coordinates. -If the given coordinates don't match with any entity coordinate, the operator interpolates the results inside -elements with shape functions. + # Map the plane coordinates with the displacement results + mapped_disp_plane = ops.mapping.on_coordinates(fields_container=disp_results, + coordinates=plane_coords_field, + create_support=True, + mesh=meshed_region_1 + ).eval()[0] -.. jupyter-execute:: +Plot the results on the geometry elements +----------------------------------------- - # Map the line coordinates with the displacement results and get the field - mapped_disp_plane = ops.mapping.on_coordinates(fields_container=my_disp, - coordinates=my_plane.mesh.nodes.coordinates_field, - create_support=True, - mesh=my_meshed_region - ).eval()[0] +To plot the results on the path, we use the |DpfPlotter| object. For more information about +plotting data on a mesh, see the :ref:`ref_plotting_data_on_the_mesh` tutorial. -Plot displacement field on the plane -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +First, define the |DpfPlotter| object [2]_. Next, add the |MeshedRegion| +and the |Field| containing the results using the |add_mesh| and |add_field| methods respectively. -Plot displacement field on the |Plane| and display mesh in background. -Create the plotter and add fields and meshes. For more information about -plotting data on a mesh check the tutorial: :ref:`ref_plotting_data_on_the_mesh` +To display the figure built by the plotter object use the |show_figure| method. -First, define the |DpfPlotter| object [2]_, then add |MeshedRegion| -to it using the |add_mesh| method and add the field using the |add_field| method. +.. tab-set:: -To display the figure built by the plotter object use the |show_figure| method. + .. tab-item:: Points -.. jupyter-execute:: + .. jupyter-execute:: + + # Define the DpfPlotter object + plotter_1 = dpf.plotter.DpfPlotter() + + # Add the MeshedRegion to the DpfPlotter object + # We use custom style for the mesh so we can visualize the path (that is inside the mesh) + plotter_1.add_mesh(meshed_region=meshed_region_1, + style="surface",show_edges=True, color="w", opacity=0.3) + + # Add the Field to the DpfPlotter object + plotter_1.add_field(field=mapped_disp_points, + point_size=20.0, + render_points_as_spheres=True) + + # Display the plot + plotter_1.show_figure(show_axes=True, + cpos=camera_position) + + .. tab-item:: Line + + .. jupyter-execute:: + + # Define the DpfPlotter object + plotter_2 = dpf.plotter.DpfPlotter() + + # Add the MeshedRegion to the DpfPlotter object + # We use custom style for the mesh so we can visualize the path (that is inside the mesh) + plotter_2.add_mesh(meshed_region=meshed_region_1, + style="surface",show_edges=True, color="w", opacity=0.3) + + # Add the Field to the DpfPlotter object + plotter_2.add_field(field=mapped_disp_line) + + # Display the plot + plotter_2.show_figure(show_axes=True, + cpos=camera_position) + + .. tab-item:: Plane + + .. jupyter-execute:: + + # Define the DpfPlotter object + plotter_3 = dpf.plotter.DpfPlotter() + + # Add the MeshedRegion to the DpfPlotter object + # We use custom style for the mesh so we can visualize the path (that is inside the mesh) + plotter_3.add_mesh(meshed_region=meshed_region_1, + style="surface",show_edges=True, color="w", opacity=0.3) + + # Add the Field to the DpfPlotter object + plotter_3.add_field(field=mapped_disp_plane, + meshed_region=plane_1.mesh, + show_edges=False) - # Declare the DpfPlotter object - my_plotter = dpf.plotter.DpfPlotter() - # Add the MeshedRegion to the DpfPlotter object - # We use custom style for the mesh so we can visualise the points - my_plotter.add_mesh(meshed_region=my_meshed_region,style="surface", show_edges=True, color="w", opacity=0.3) - # Add the Field to the DpfPlotter object - my_plotter.add_field(field=mapped_disp_plane, meshed_region=my_plane.mesh, show_edges=False) - # Display the plot - my_plotter.show_figure(show_axes=True, cpos=camera_position) + # Display the plot + plotter_3.show_figure(show_axes=True, + cpos=camera_position) .. rubric:: Footnotes .. [1] The default plotter settings display the mesh with edges, lighting and axis widget enabled. -Nevertheless, as we use the `PyVista `_ library to create -the plot you can use additional PyVista arguments (available at: :func:`pyvista.plot`). +Nevertheless, as we use the `PyVista `_ library to create the plot, you can use additional +PyVista arguments (available at `pyvista.plot() `_). -.. [2] Here we use the |DpfPlotter| object, that is currently a PyVista based object. +.. [2] The |DpfPlotter| object is currently a PyVista based object. That means that PyVista must be installed, and that it supports kwargs as parameter (the argument must be supported by the installed PyVista version). +More information about the available arguments are available at `pyvista.plot() `_`. -The default |DpfPlotter| object settings display the mesh with edges and lighting -enabled. Nevertheless, as we use the `PyVista `_ -library to create the plot you can use additional PyVista arguments for the |DpfPlotter| -object and |add_field| method (available at: :func:`pyvista.plot`). +The default |DpfPlotter| object settings displays the mesh with edges and lighting +enabled. Nevertheless, as we use the `PyVista `_ +library to create the plot, you can use additional PyVista arguments for the |DpfPlotter| +object and |add_field| method (available at `pyvista.plot() `_`). From b0ba1d63845054c608aaef013e4d6bac421b47fb Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Tue, 24 Dec 2024 15:38:18 +0100 Subject: [PATCH 35/39] update the plotting_a_graph.rst to the tutorials guidelines --- .../tutorials/plot/plotting_a_graph.rst | 218 ++++++++++++------ 1 file changed, 150 insertions(+), 68 deletions(-) diff --git a/doc/source/user_guide/tutorials/plot/plotting_a_graph.rst b/doc/source/user_guide/tutorials/plot/plotting_a_graph.rst index b916e28ce9..cb1824eab1 100644 --- a/doc/source/user_guide/tutorials/plot/plotting_a_graph.rst +++ b/doc/source/user_guide/tutorials/plot/plotting_a_graph.rst @@ -4,62 +4,79 @@ Plotting data on a graph ======================== -.. |DpfPlotter| replace:: :class:`DpfPlotter` .. |Line| replace:: :class:`Line ` -.. |MeshedRegion| replace:: :class:`MeshedRegion ` -.. |Model| replace:: :class:`Model ` .. |mapping| replace:: :class:`mapping ` -.. |Examples| replace:: :mod:`Examples` +.. |Line.path| replace:: :func:`Line.path` +.. |min_max_fc| replace:: :class:`min_max_fc ` -This part shows how to get a result plotted on a graph. +This tutorial explains how to plot a graph with data in DPF. The current |DpfPlotter| module don't have method to plotting graphs. Thus, you need to import the -`matplotlib `_ library to plot a graph with PyDPF-Core. +`matplotlib `_ library to plot a graph with PyDPF-Core. -There is a large range of data types you can represent on the graph coordinates. Here we plot: +There is a large range of graphs you can plot. Here, we plot: -- `Results data vs. space position`_ graph -- `Results data vs. time`_ graph +- :ref:`Results data vs. space position graph ` +- :ref:`Results data vs. time graph ` + +.. _ref_graph_result_space: Results data vs. space position ------------------------------- -We will plot the displacement results on a |Line|. To understand how this object can -be defined check the :ref:`ref_plotting_data_on_specific_placements` tutorial. +In this tutorial, we plot the norm of the displacement results on a |Line|. For more information about how +this object can be defined, see the :ref:`ref_plotting_data_on_specific_placements` tutorial. -Define the data -^^^^^^^^^^^^^^^ +Define the results data +^^^^^^^^^^^^^^^^^^^^^^^ -We will download a simple simulation result file available in our |Examples| package: +First, import a results file. For this tutorial, you can use the one available in the |Examples| module. +For more information about how to import your own result file in DPF, see +the :ref:`ref_tutorials_import_data` tutorials section. .. jupyter-execute:: - # Import the ``ansys.dpf.core`` module, including examples files, the operators subpackage, the geometry module and the matplotlib + # Import the ``ansys.dpf.core`` module from ansys.dpf import core as dpf + # Import the examples module from ansys.dpf.core import examples + # Import the operators module from ansys.dpf.core import operators as ops + # Import the geometry module from ansys.dpf.core import geometry as geo + + # Import the ``matplotlib.pyplot`` module import matplotlib.pyplot as plt - # Define the result file - result_file = examples.find_static_rst() -The results will be mapped over a defined path of coordinates. So, start by creating -a |Model| with the result file and extract the |MeshedRegion| from it: + # Define the result file path + result_file_path_1 = examples.find_static_rst() + +The results will be mapped over a defined set of coordinates. Thus, we need the spatial support to +those coordinates: the mesh. The mesh object in DPF is a |MeshedRegion|. + +You can obtain a |MeshedRegion| by creating your own from scratch or by getting it from a result file. +For more information, see the :ref:`ref_tutorials_create_a_mesh_from_scratch` and +:ref:`ref_tutorials_get_mesh_from_result_file` tutorials. + +Here, we extract it from the result file. .. jupyter-execute:: # Create the model - my_model = dpf.Model(data_sources=result_file) - my_meshed_region = my_model.metadata.meshed_region + model_1 = dpf.Model(data_sources=result_file_path_1) + + # Extract the mesh + meshed_region_1 = model_1.metadata.meshed_region -We choose to plot the displacement results field. Extract the displacements results from the model: +Extract the results to be plotted on the graph. In this tutorial, we plot the norm of the +displacement results over time. .. jupyter-execute:: # Get the displacement results - my_disp = my_model.results.displacement.eval() + disp_results_1 = model_1.results.displacement.eval() -Create the line +Define the line ^^^^^^^^^^^^^^^ Create a |Line| passing through the mesh diagonal. @@ -67,104 +84,169 @@ Create a |Line| passing through the mesh diagonal. .. jupyter-execute:: # Create the Line object - my_line = geo.Line(coordinates=[[0.0, 0.06, 0.0], [0.03, 0.03, 0.03]], + line_1 = geo.Line(coordinates=[[0.0, 0.06, 0.0], [0.03, 0.03, 0.03]], n_points=50 ) -Map displacement field to the line -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Map the results to the line +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Map the displacement results to the |Line| using the |mapping| operator. This operator +retrieves the results of the entities located in the given coordinates. If the given coordinates don't +match with any entity coordinate, the operator interpolates the results inside elements with shape functions. -Compute the mapped displacement data using the |mapping| operator. +The displacement results are defined in a *`nodal`* location. Thus, each node has a coordinate in the +mesh and a corresponding displacement data. + +The |mapping| operator takes the coordinates stored in a |Field|. Thus, we must create a |Field| with the +|Line| coordinates. .. jupyter-execute:: - # Map the line coordinates with the displacement results and get the field - mapped_disp_line = ops.mapping.on_coordinates(fields_container=my_disp, - coordinates=my_line.mesh.nodes.coordinates_field, + # Get the coordinates field + line_coords_field = line_1.mesh.nodes.coordinates_field + + # Map the line coordinates with the displacement results + mapped_disp_line = ops.mapping.on_coordinates(fields_container=disp_results_1, + coordinates=line_coords_field, create_support=True, - mesh=my_meshed_region + mesh=meshed_region_1 ).eval()[0] -Plot a graph of the displacement results along the specified line -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Plot the graph +^^^^^^^^^^^^^^ -Plot a graph of the displacement field along the specified |Line| length using the matplotlib library. +Plot a graph of the norm of the displacement results along the |Line| length using the +`matplotlib `_ library. -To get the |Line| length you can use the |Line| property :func:`path`. -It gives the 1D line coordinates, by the number of points the line was discretized. +To get the |Line| length you can use the |Line.path| method. It gives the 1D line coordinates, based on +the points where the line was discretized. .. jupyter-execute:: - # Define the norm of the displacement field + # Define the norm of the displacement results norm_disp = ops.math.norm(field=mapped_disp_line).eval() - # Define the line points on the its length - line_length_points = my_line.path - # Plot the graph + + # Define the point coordinates on the line length + line_length_points = line_1.path + + # Define the plot figure plt.plot(line_length_points, norm_disp.data) + # Graph formating plt.xlabel("Line length"); plt.ylabel("Displacement norm field"); plt.title("Displacement evolution on the line") + + # Display the graph plt.show() +.. _ref_graph_result_time: + Results data vs. time --------------------- -We will plot the displacement results over time for a transient analysis. To understand more about using PyDPF-Core -with a transient analysis check the :ref:`static_transient_examples` examples. +In this tutorial, we plot the displacement results over time for a transient analysis. +For more information about using PyDPF-Core with a transient analysis, see the :ref:`static_transient_examples` examples. -Define the data -^^^^^^^^^^^^^^^ +Define the results data +^^^^^^^^^^^^^^^^^^^^^^^ -Download the transient result example. This example is not included in DPF-Core -by default to speed up the installation. Downloading this example should take only a few seconds. +First, import a transient results file. For this tutorial, you can use the one available in the |Examples| module. +For more information about how to import your own result file in DPF, see +the :ref:`ref_tutorials_import_data` tutorials section. .. jupyter-execute:: - # Import the ``ansys.dpf.core`` module, including examples files, the operators subpackage and the matplotlib + # Import the ``ansys.dpf.core`` module from ansys.dpf import core as dpf + # Import the examples module from ansys.dpf.core import examples + # Import the operators module from ansys.dpf.core import operators as ops + + # Import the ``matplotlib.pyplot`` module import matplotlib.pyplot as plt - # Define the result file - result_file = examples.download_transient_result() -The results will be mapped over a defined path of coordinates. So, start by creating -a |Model| with the result file and extract the |MeshedRegion| from it: + # Define the result file path + result_file_path_2 = examples.download_transient_result() + +The results will be mapped over a defined path of coordinates. Thus, we need the spatial support to +those coordinates: the mesh. The mesh object in DPF is a |MeshedRegion|. + +You can obtain a |MeshedRegion| by creating your own from scratch or by getting it from a result file. +For more information, see the :ref:`ref_tutorials_create_a_mesh_from_scratch` and +:ref:`ref_tutorials_get_mesh_from_result_file` tutorials. + +Here, we extract it from the result file. .. jupyter-execute:: # Create the model - my_model = dpf.Model(data_sources=result_file) - my_meshed_region = my_model.metadata.meshed_region + model_2 = dpf.Model(data_sources=result_file_path_2) + + # Extract the mesh + meshed_region_2 = model_2.metadata.meshed_region + +Extract the results to be plotted on the graph. Here, we plot the maximum and minimum +displacement results over time. -We choose to plot the maximum and minimum displacement results over time. -Extract the displacements results from the model for all the time frequencies: +First extract the displacement results for all the time frequencies. .. jupyter-execute:: # Get the displacement results - my_disp = my_model.results.displacement.on_all_time_freqs.eval() + disp_results_2 = model_2.results.displacement.on_all_time_freqs.eval() -Define the minimum and maximum displacements for all results: +Next, define the minimal and maximal displacements for each time step by using the |min_max_fc| +operator. .. jupyter-execute:: - # Define the min_max operator with the normed displacement - min_max_op = ops.min_max.min_max_fc(fields_container=ops.math.norm_fc(my_disp)) - # Get the max and min displacements + # Define the min_max operator and give the normed displacement results + min_max_op = ops.min_max.min_max_fc(fields_container=ops.math.norm_fc(disp_results_2)) + + # Get the max displacement results max_disp = min_max_op.eval(pin=1) + + # Get the min displacement results min_disp = min_max_op.eval(pin=0) -Plot a graph of the minimum and maximum displacements over time -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Define the time data +^^^^^^^^^^^^^^^^^^^^ + +The results time steps in DPF are given by the |TimeFreqSupport| object. You can extract it +from the displacement results |Field|. + +.. jupyter-execute:: + + # Define the time steps + time_steps_1 = disp_results_2.time_freq_support.time_frequencies -Plot a graph of the minimum and maximum displacements over time using the matplotlib library. + # Print the time frequencies + print(time_steps_1) + +The time steps are given in a |Field|. To plot the graph you need to extract the +|Field| data. .. jupyter-execute:: - # Define the time frequencies from the model - time_data = my_model.metadata.time_freq_support.time_frequencies.data - # Plot the graph + # Get the time steps data + time_data = time_steps_1.data + + +Plot the graph +^^^^^^^^^^^^^^ + +Plot a graph of the minimal and maximal displacements over time using the +`matplotlib `_ library. + +.. jupyter-execute:: + + # Define the plot figure plt.plot(time_data, max_disp.data, "r", label="Max") plt.plot(time_data, min_disp.data, "b", label="Min") + # Graph formating - plt.xlabel("Time (s)"); plt.ylabel("Displacement (m)"); plt.legend(); plt.show() \ No newline at end of file + plt.xlabel("Time (s)"); plt.ylabel("Displacement (m)"); plt.legend(); + + # Display the graph + plt.show() \ No newline at end of file From 9dcec80e08470fd0eb0d8f4b5fb5d13fa59f5687 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Tue, 24 Dec 2024 15:38:32 +0100 Subject: [PATCH 36/39] add new links and substitution text to the links_and_refs.rst file --- doc/source/links_and_refs.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/source/links_and_refs.rst b/doc/source/links_and_refs.rst index 1bb88ec64a..3e37c60fa2 100644 --- a/doc/source/links_and_refs.rst +++ b/doc/source/links_and_refs.rst @@ -22,6 +22,7 @@ .. Other libraries repos .. _pyvista_github : https://github.com/pyvista/pyvista +.. _matplotlib_github : https://github.com/matplotlib/matplotlib .. External links .. _sphinx: https://www.sphinx-doc.org/en/master/ From ac5a0e8b271dd153c07b0098467f2c5aae9e23a4 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Tue, 24 Dec 2024 15:39:14 +0100 Subject: [PATCH 37/39] update the card of the plotting a graph tutorial in the index.rst page --- doc/source/user_guide/tutorials/plot/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/source/user_guide/tutorials/plot/index.rst b/doc/source/user_guide/tutorials/plot/index.rst index 0c26fde423..48b897c77c 100644 --- a/doc/source/user_guide/tutorials/plot/index.rst +++ b/doc/source/user_guide/tutorials/plot/index.rst @@ -60,7 +60,7 @@ These tutorials demonstrate some different approaches to visualise the data in p :link-type: ref :text-align: center - This tutorial explains how to plot a graph with the data in DPF + This tutorial explains how to plot a graph with data in DPF .. toctree:: :maxdepth: 2 From 185bd3f1afd7958f480bfe6a3141621e1d16ae71 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Tue, 24 Dec 2024 15:49:46 +0100 Subject: [PATCH 38/39] delete file basic_tutorial.rst --- .../user_guide/tutorials/basic_tutorial.rst | 241 ------------------ 1 file changed, 241 deletions(-) delete mode 100644 doc/source/user_guide/tutorials/basic_tutorial.rst diff --git a/doc/source/user_guide/tutorials/basic_tutorial.rst b/doc/source/user_guide/tutorials/basic_tutorial.rst deleted file mode 100644 index 11b7097676..0000000000 --- a/doc/source/user_guide/tutorials/basic_tutorial.rst +++ /dev/null @@ -1,241 +0,0 @@ -.. _ref_tutorials_basic: - -================== -The basic tutorial -================== - -This tutorial guides throughout the basic concepts and features of the PyDPF-Core tool. -It helps to have a Python interpreter for hands-on experience, but all code examples are -executed, so the tutorial can be read off-line as well. - -For a complete description of all the objects and modules, see the :ref:`API reference ` section. - -This page is divided in two sections: - -.. grid:: 1 1 2 2 - :gutter: 2 - :padding: 2 - :margin: 2 - - .. grid-item-card:: Overview - :link: tutorials_overview - :link-type: ref - :text-align: center - - Learn the different ways to interact with data by calling PyDPF-Core commands and operators. - - .. grid-item-card:: Postprocessing main steps - :link: tutorials_main_steps - :link-type: ref - :text-align: center - - How to do a basic prost-processing by transforming simulation data into output - data that can be used to visualize and analyze results - -.. _tutorials_overview: - -Overview --------- - - - -.. _tutorials_main_steps: - -Postprocessing main steps -------------------------- - -There are five main steps to transform simulation data into output data that can -be used to visualize and analyze simulation results: - -.. grid:: - :gutter: 2 - :padding: 2 - :margin: 2 - - .. grid-item-card:: 1 - :link: tutorials_main_steps_1 - :link-type: ref - :text-align: center - - Importing and opening results files - - .. grid-item-card:: 2 - :link: tutorials_main_steps_2 - :link-type: ref - :text-align: center - - Access and extract results - - .. grid-item-card:: 3 - :link: tutorials_main_steps_3 - :link-type: ref - :text-align: center - - Transform available data - - .. grid-item-card:: 4 - :link: tutorials_main_steps_4 - :link-type: ref - :text-align: center - - Visualize the data - - .. grid-item-card:: 5 - :link: tutorials_main_steps_5 - :link-type: ref - :text-align: center - - Extract data - -.. _tutorials_main_steps_1: - -1- Importing and opening results files -************************************** - -First, import the DPF-Core module as ``dpf`` and import the included examples file - -.. code-block:: python - - from ansys.dpf import core as dpf - from ansys.dpf.core import examples - from ansys.dpf.core import operators as ops - -`DataSources' is a class that manages paths to their files. Use this object to declare -data inputs for DPF and define their locations. - -.. code-block:: python - - # Define the DataSources object - my_data_sources = dpf.DataSources(result_path=examples.find_simple_bar()) - - -The model is a helper designed to give shortcuts to access the analysis results -metadata, by opening a DataSources or a Streams, and to instanciate results provider for it. - -Printing the model displays: - - - Analysis type - - Available results - - Size of the mesh - - Number of results - -.. code-block:: python - - # Define the Model object - my_model = dpf.Model(data_sources=my_data_sources) - print(my_model) - -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - from ansys.dpf import core as dpf - from ansys.dpf.core import examples - from ansys.dpf.core import operators as ops - my_data_sources = dpf.DataSources(result_path=examples.find_simple_bar()) - my_model = dpf.Model(data_sources=my_data_sources) - print(my_model) - -.. _tutorials_main_steps_2: - -2- Access and extract results -***************************** - -We see in the model that a displacement result is available. You can access this result by: - -.. code-block:: python - - # Define the displacement results through the models property `results` - my_displacements = my_model.results.displacement.eval() - print(my_displacements) - -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_displacements = my_model.results.displacement.eval() - print(my_displacements) - -The displacement data can be extract by: - -.. code-block:: python - - # Extract the data of the displacement field - my_displacements_0 = my_displacements[0].data - print(my_displacements_0) - -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_displacements_0 = my_displacements[0].data - print(my_displacements_0) - -.. _tutorials_main_steps_3: - -3- Transform available data -*************************** - -Several transformations can be made with the data. They can be a single operation, -by using only one operator, or they can represent a succession of operations, by defining a -workflow with chained operators. - -Here we star by computing the displacements norm. - -.. code-block:: python - - # Define the norm operator (here for a fields container) for the displacement - my_norm = ops.math.norm_fc(fields_container=my_displacements).eval() - print(my_norm[0].data) - -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_norm = ops.math.norm_fc(fields_container=my_displacements).eval() - print(my_norm[0].data) - -Then we compute the maximum values of the normalised displacement - -.. code-block:: python - - # Define the maximum operator and chain it to the norm operator - my_max= ops.min_max.min_max_fc(fields_container=my_norm).outputs.field_max() - print(my_max) - -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_max = ops.min_max.min_max_fc(fields_container=my_norm).outputs.field_max() - print(my_max) - -.. _tutorials_main_steps_4: - -4- Visualize the data -********************* - -Plot the transformed displacement results - -.. code-block:: python - - # Define the support of the plot (here we plot the displacement over the mesh) - my_model.metadata.meshed_region.plot(field_or_fields_container=my_displacements) - -.. rst-class:: sphx-glr-script-out - - .. jupyter-execute:: - :hide-code: - - my_model.metadata.meshed_region.plot(field_or_fields_container=my_displacements) - -.. _tutorials_main_steps_5: - -5- Extract the data -******************* - From e690c1511068bdfe238c53fac3b2a34791bca464 Mon Sep 17 00:00:00 2001 From: luisaFelixSalles Date: Tue, 24 Dec 2024 15:50:33 +0100 Subject: [PATCH 39/39] Revert "erase the adapted examples" This reverts commit a2b474bc9ae2e69e36e198d0f0c6df4ef4a20f45. --- doc/source/images/plotting/pontoon.png | Bin 0 -> 91175 bytes doc/source/images/plotting/pontoon_strain.png | Bin 0 -> 266437 bytes doc/source/user_guide/plotting.rst | 92 +++++++++ examples/06-plotting/00-basic_plotting.py | 121 ++++++++++++ examples/06-plotting/04-plot_on_path.py | 96 +++++++++ examples/06-plotting/07-plot_on_geometries.py | 184 ++++++++++++++++++ 6 files changed, 493 insertions(+) create mode 100644 doc/source/images/plotting/pontoon.png create mode 100644 doc/source/images/plotting/pontoon_strain.png create mode 100644 doc/source/user_guide/plotting.rst create mode 100644 examples/06-plotting/00-basic_plotting.py create mode 100644 examples/06-plotting/04-plot_on_path.py create mode 100644 examples/06-plotting/07-plot_on_geometries.py diff --git a/doc/source/images/plotting/pontoon.png b/doc/source/images/plotting/pontoon.png new file mode 100644 index 0000000000000000000000000000000000000000..b55052858368dcd0bc202ad4292fe22510dd52c2 GIT binary patch literal 91175 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

WMl|3wOcGe`_d__zz0Ai1z{{dm)z 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 z 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 literal 0 HcmV?d00001 diff --git a/doc/source/user_guide/plotting.rst b/doc/source/user_guide/plotting.rst new file mode 100644 index 0000000000..cf489aede3 --- /dev/null +++ b/doc/source/user_guide/plotting.rst @@ -0,0 +1,92 @@ +.. _user_guide_plotting: + +==== +Plot +==== +DPF-Core has a variety of plotting methods for generating 3D plots of +Ansys models directly from Python. These methods use VTK and leverage +the `PyVista `_ library to +simplify plotting. For more information, see the `PyVista Documentation +`_. + + +Plot the mesh from the ``Model`` object +--------------------------------------- +The :meth:`Model.plot() ` method +plots the mesh of the model immediately after loading it. + +This example downloads a simple pontoon mesh from the internet and uses the +:class:`ansys.dpf.core.model` class to load it: + +.. code-block:: python + + import ansys.dpf.core as dpf + from ansys.dpf.core import examples + filename = examples.download_pontoon() + model = dpf.Model(filename) + model.plot() + +.. image:: ../images/plotting/pontoon.png + +The default plotter settings display the mesh with edges shown and +lighting enabled. For a list of all keyword arguments, see +`plot `_. + + +Plot the meshed region +----------------------- +The :meth:`MeshedRegion.plot() ` +method plots the meshed region. If the meshed region is generated from the model's +metadata, the plot generated is identical to the plot generated by the +:meth:`Model.plot() ` method. + +Plot the meshed region + +.. code-block:: python + + mesh = model.metadata.meshed_region + mesh.plot() + +.. image:: ../images/plotting/pontoon.png + +When a field is provided as the first argument, the mesh is plotted +using these values. + +This example extracts the nodal strain in the X direction: + +First, extract the X component strain + +.. code-block:: python + + strain = model.results.elastic_strain() + fields = strain.outputs.fields_container() + field = fields.select_component(0)[0] + print(field) + +.. rst-class:: sphx-glr-script-out + + .. code-block:: none + + DPF elastic_strain_1.s0 Field + Location: ElementalNodal + Unit: + 8640 entities + Data:1 components and 69120 elementary data + + +This ElementalNodal strain must be converted to nodal strain for it to be plotted. + +.. code-block:: + + nodal_field = field.to_nodal() + mesh.plot(nodal_field) + +.. image:: ../images/plotting/pontoon_strain.png + +.. note:: + + Only fields with ``Nodal`` and ``Elemental`` locations are + supported. Use the :meth:`to_nodal ` + operator to convert to the ``Nodal`` location or the + :class:`ansys.dpf.core.operators.averaging.nodal_to_elemental` + class to convert to the ``Elemental`` location. diff --git a/examples/06-plotting/00-basic_plotting.py b/examples/06-plotting/00-basic_plotting.py new file mode 100644 index 0000000000..af6ed22028 --- /dev/null +++ b/examples/06-plotting/00-basic_plotting.py @@ -0,0 +1,121 @@ +# Copyright (C) 2020 - 2024 ANSYS, Inc. and/or its affiliates. +# SPDX-License-Identifier: MIT +# +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +""" +.. _basic_plotting: + +Review of available plotting commands +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This example lists the different plotting commands available, +shown with the arguments available. + +""" + +from ansys.dpf import core as dpf +from ansys.dpf.core import examples + + +# Plot the bare mesh of a model +model = dpf.Model(examples.find_multishells_rst()) +model.plot(color="w", show_edges=True, title="Model", text="Model plot") +# # Additional PyVista kwargs are supported, such as: +model.plot( + off_screen=True, + notebook=False, + screenshot="model_plot.png", + title="Model", + text="Model plot off", + parallel_projection=True, +) + +# Notes: +# - To make screenshots, use "screenshot" as well as "notebook=False" if on a Jupyter notebook. +# - The "off_screen" keyword only works when "notebook=False" to prevent the GUI from appearing. + + +# Plot a field on its supporting mesh (field location must be Elemental or Nodal) +stress = model.results.stress() +stress.inputs.requested_location.connect(dpf.locations.nodal) +fc = stress.outputs.fields_container() +field = fc[0] +field.plot(notebook=False, shell_layers=None, show_axes=True, title="Field", text="Field plot") +# # Additional PyVista kwargs are supported, such as: +field.plot( + off_screen=True, + notebook=False, + screenshot="field_plot.png", + title="Field", + text="Field plot off", +) +# +# # Alternatively one can plot the MeshedRegion associated to the model +mesh = model.metadata.meshed_region +mesh.plot( + field_or_fields_container=None, + shell_layers=None, + show_axes=True, + title="Mesh fc None", + text="Mesh plot", +) +# Additional PyVista kwargs are supported, such as: +mesh.plot( + off_screen=True, + notebook=False, + screenshot="mesh_plot.png", + title="Mesh", + text="Mesh plot off", +) +# A fields_container or a specific field can be given to plot on the mesh. +mesh.plot( + field_or_fields_container=fc, + title="Mesh with fields container", + text="Mesh fc plot", +) +mesh.plot(field_or_fields_container=field, title="Mesh with field", text="Mesh field plot") + + +# ############################################################################################## +# # This next section requires a Premium context to be active du to the ``split_mesh`` operator. +# # Comment this last part to run the example as Entry. + +# One can also plot a MeshesContainer. Here our mesh is split by material. +split_mesh_op = dpf.Operator("split_mesh") +split_mesh_op.connect(7, mesh) +split_mesh_op.connect(13, "mat") +meshes_cont = split_mesh_op.get_output(0, dpf.types.meshes_container) +meshes_cont.plot(title="Meshes Container", text="Meshes Container plot") +# A fields_container can be given as input, with results on each part of our split mesh. +disp_op = dpf.Operator("U") +disp_op.connect(7, meshes_cont) +ds = dpf.DataSources(examples.find_multishells_rst()) +disp_op.connect(4, ds) +disp_fc = disp_op.outputs.fields_container() +meshes_cont.plot(disp_fc, title="Meshes Container disp_fc", text="Meshes Container disp_fc plot") +# Additional PyVista kwargs are supported, such as: +meshes_cont.plot( + off_screen=True, + notebook=False, + screenshot="meshes_cont_plot.png", + title="Meshes Container", + text="Meshes Container plot", +) diff --git a/examples/06-plotting/04-plot_on_path.py b/examples/06-plotting/04-plot_on_path.py new file mode 100644 index 0000000000..f749fabf52 --- /dev/null +++ b/examples/06-plotting/04-plot_on_path.py @@ -0,0 +1,96 @@ +# Copyright (C) 2020 - 2024 ANSYS, Inc. and/or its affiliates. +# SPDX-License-Identifier: MIT +# +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +# noqa: D400 +""" +.. _plot_on_path: + +Plot results on a specific path +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This example shows how to get a result mapped over a specific path +and how to plot it. + +""" + +import matplotlib.pyplot as plt + +from ansys.dpf import core as dpf +from ansys.dpf.core import examples +from ansys.dpf.core import operators as ops +from ansys.dpf.core.plotter import DpfPlotter + + +############################################################################### +# Plot path +# ~~~~~~~~~ +# Use the :class:`ansys.dpf.core.plotter.DpfPlotter` class to plot a mapped +# result over a defined path of coordinates. + +# Create the model and request its mesh and displacement data. +model = dpf.Model(examples.find_static_rst()) +mesh = model.metadata.meshed_region +stress_fc = model.results.stress().eqv().eval() + +############################################################################### +# Create a coordinates field to map on. +coordinates = [[0.024, 0.03, 0.003]] +delta = 0.001 +n_points = 51 +for i in range(1, n_points): + coord_copy = coordinates[0].copy() + coord_copy[1] = coord_copy[0] + i * delta + coordinates.append(coord_copy) +field_coord = dpf.fields_factory.create_3d_vector_field(len(coordinates)) +field_coord.data = coordinates +field_coord.scoping.ids = list(range(1, len(coordinates) + 1)) + +############################################################################### +# Compute the mapped data using the mapping operator. +mapping_operator = ops.mapping.on_coordinates( + fields_container=stress_fc, coordinates=field_coord, create_support=True, mesh=mesh +) +fields_mapped = mapping_operator.outputs.fields_container() + +############################################################################### +# Request the mapped field data and its mesh. +field_m = fields_mapped[0] +mesh_m = field_m.meshed_region + +############################################################################### +# Create the plotter and add fields and meshes. +pl = DpfPlotter() + +pl.add_field(field_m, mesh_m) +pl.add_mesh(mesh, style="surface", show_edges=True, color="w", opacity=0.3) + +# Plot the result. +pl.show_figure(show_axes=True) + +############################################################################### +# Plot the solution along the specified line. Note that since the line is only +# moving along the y-axis, the stresses are plotted with respect to the y coordinate. +y_coords = [mesh_m.nodes.coordinates_field.data[i][1] for i in range(mesh_m.nodes.n_nodes)] +plt.plot(y_coords, field_m.data, "r") +plt.xlabel(f"y-coordinate [{mesh.unit}]") +plt.ylabel(f"Stress [{field_m.unit}]") +plt.show() diff --git a/examples/06-plotting/07-plot_on_geometries.py b/examples/06-plotting/07-plot_on_geometries.py new file mode 100644 index 0000000000..e9908ef2aa --- /dev/null +++ b/examples/06-plotting/07-plot_on_geometries.py @@ -0,0 +1,184 @@ +# Copyright (C) 2020 - 2024 ANSYS, Inc. and/or its affiliates. +# SPDX-License-Identifier: MIT +# +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +""" +.. _plot_on_geometries: + +Plot on geometry elements +~~~~~~~~~~~~~~~~~~~~~~~~~ +This example shows how to plot a certain field in different geometric +objects such as points, lines and planes. + +""" + + +############################################################################### +# Imports and load model +# ~~~~~~~~~~~~~~~~~~~~~~ +# Import modules and set context as Premium. + +import numpy as np +import matplotlib.pyplot as plt + +from ansys.dpf import core as dpf +from ansys.dpf.core import examples +from ansys.dpf.core import operators as ops +from ansys.dpf.core.geometry import Line, Plane, Points +from ansys.dpf.core.plotter import DpfPlotter +from ansys.dpf.core.fields_factory import field_from_array + + +############################################################################### +# Load model from examples and print information: +model = dpf.Model(examples.find_static_rst()) +print(model) + +############################################################################### +# Load model's mesh and define camera position +# (obtained with ``cpos=pl.show_figure(return_cpos=True)``). This will be used +# later for plotting. +mesh = model.metadata.meshed_region +cpos = [ + (0.07635352356975698, 0.1200500294271993, 0.041072502929096165), + (0.015, 0.045, 0.015), + (-0.16771051558419411, -0.1983722658245161, 0.9656715938216944), +] + +############################################################################### +# Create points, line and plane objects +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Create 8 points in the corners and one in the middle: +points = Points( + [ + [0.0, 0.03, 0.0], + [0.0, 0.03, 0.03], + [0.0, 0.06, 0.00], + [0.0, 0.06, 0.03], + [0.03, 0.03, 0.0], + [0.03, 0.03, 0.03], + [0.03, 0.06, 0.00], + [0.03, 0.06, 0.03], + [0.015, 0.045, 0.015], + ] +) + +############################################################################### +# Show points together with the mesh +points.plot(mesh, cpos=cpos) + +############################################################################### +# Create line passing through the geometry's diagonal: +line = Line([[0.03, 0.03, 0.05], [0.0, 0.06, 0.0]], n_points=50) + +############################################################################### +# Show line with the 3D mesh +line.plot(mesh, cpos=cpos) + +############################################################################### +# Create vertical plane passing through the mid point: +plane = Plane( + [0.015, 0.045, 0.015], + [1, 1, 0], + width=0.03, + height=0.03, + n_cells_x=10, + n_cells_y=10, +) + +############################################################################### +# Show plane with the 3D mesh +plane.plot(mesh, cpos=cpos) + +############################################################################### +# Map displacement field to geometry objects +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# Get displacement field from model: +disp = model.results.displacement + +############################################################################### +# Map displacement to points in Points object: +mapping_operator = ops.mapping.on_coordinates( + fields_container=disp, + coordinates=field_from_array(points.coordinates.data), + create_support=True, + mesh=mesh, +) +fields_mapped = mapping_operator.outputs.fields_container() +field_points = fields_mapped[0] + +############################################################################### +# Map displacement to points in Line object: +mapping_operator = ops.mapping.on_coordinates( + fields_container=disp, + coordinates=line.mesh.nodes.coordinates_field, + create_support=True, + mesh=mesh, +) +fields_mapped = mapping_operator.outputs.fields_container() +field_line = fields_mapped[0] + +############################################################################### +# Map displacement to points in Plane object: +mapping_operator = ops.mapping.on_coordinates( + fields_container=disp, + coordinates=plane.mesh.nodes.coordinates_field, + create_support=True, + mesh=mesh, +) +fields_mapped = mapping_operator.outputs.fields_container() +field_plane = fields_mapped[0] + +############################################################################### +# Plotting displacement field on the geometry objects +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# 3D plot of Points and display mesh: +pl = DpfPlotter() +pl.add_field(field_points, render_points_as_spheres=True, point_size=10) +pl.add_mesh(mesh, style="surface", show_edges=True, color="w", opacity=0.3) +pl.show_figure(show_axes=True, cpos=cpos) + +############################################################################### +# 3D plot of Line and mesh. +# Note that the line is only displayed if some points are found inside the mesh: +pl = DpfPlotter() +if not len(field_line) == 0: + pl.add_field(field_line, line.mesh, line_width=5) +pl.add_mesh(mesh, style="surface", show_edges=True, color="w", opacity=0.3) +pl.show_figure(show_axes=True, cpos=cpos) + +############################################################################### +# Plot Plane and display mesh in background. +# Note that the plane is only displayed if some points are found inside the mesh: +pl = DpfPlotter() +if not len(field_plane) == 0: + pl.add_field(field_plane, plane.mesh, show_edges=False) +pl.add_mesh(mesh, style="surface", show_edges=True, color="w", opacity=0.3) +pl.show_figure(show_axes=True, cpos=cpos) + +############################################################################### +# 2D plot (graph) of Line (line length vs displacement field): +norm_disp = [np.linalg.norm(field_line.data[i]) for i in range(len(field_line.data))] +path = line.path[field_line.scoping.ids - 1] +plt.plot(path, norm_disp) +plt.xlabel("Line length") +plt.ylabel("Displacement norm field") +plt.show()