.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "auto_functional_modeling/field_functions/plot_viscous_fall_field_function_connection.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_auto_functional_modeling_field_functions_plot_viscous_fall_field_function_connection.py: Define a connection function with a field output ================================================ .. GENERATED FROM PYTHON SOURCE LINES 6-9 In this example, we define a function which has a vector input and a field output. The goal of this example is to show how to use the `PointToFieldConnection` to combine two functions. A detailed explanation of the model is presented :ref:`here `. .. GENERATED FROM PYTHON SOURCE LINES 11-13 Define the model ---------------- .. GENERATED FROM PYTHON SOURCE LINES 15-22 .. code-block:: Python import openturns as ot import openturns.viewer as viewer from matplotlib import pylab as plt import numpy as np ot.Log.Show(ot.Log.NONE) .. GENERATED FROM PYTHON SOURCE LINES 23-24 We first define the time grid associated with the model. .. GENERATED FROM PYTHON SOURCE LINES 26-31 .. code-block:: Python tmin = 0.0 # Minimum time tmax = 12.0 # Maximum time gridsize = 100 # Number of time steps mesh = ot.IntervalMesher([gridsize - 1]).build(ot.Interval(tmin, tmax)) .. GENERATED FROM PYTHON SOURCE LINES 32-34 .. code-block:: Python vertices = mesh.getVertices() .. GENERATED FROM PYTHON SOURCE LINES 35-36 Creation of the input distribution. .. GENERATED FROM PYTHON SOURCE LINES 38-44 .. code-block:: Python distZ0 = ot.Uniform(100.0, 150.0) distV0 = ot.Normal(55.0, 10.0) distM = ot.Normal(80.0, 8.0) distC = ot.Uniform(0.0, 30.0) distribution = ot.ComposedDistribution([distZ0, distV0, distM, distC]) .. GENERATED FROM PYTHON SOURCE LINES 45-49 .. code-block:: Python dimension = distribution.getDimension() dimension .. rst-class:: sphx-glr-script-out .. code-block:: none 4 .. GENERATED FROM PYTHON SOURCE LINES 50-51 Then we define the Python function which computes the altitude at each time value. This function has 5 inputs: `z0`, `v0`, `m`, `c` and `zmin`. .. GENERATED FROM PYTHON SOURCE LINES 54-69 .. code-block:: Python def AltiFunc(X): g = 9.81 z0 = X[0] v0 = X[1] m = X[2] c = X[3] zmin = X[4] tau = m / c vinf = -m * g / c t = np.array(vertices) z = z0 + vinf * t + tau * (v0 - vinf) * (1 - np.exp(-t / tau)) z = np.maximum(z, zmin) return [[zeta[0]] for zeta in z] .. GENERATED FROM PYTHON SOURCE LINES 70-75 .. code-block:: Python outputDimension = 1 altitudeWithFiveInputs = ot.PythonPointToFieldFunction( 5, mesh, outputDimension, AltiFunc ) .. GENERATED FROM PYTHON SOURCE LINES 76-78 Restrict the number of inputs ----------------------------- .. GENERATED FROM PYTHON SOURCE LINES 80-81 We define a function which has 4 inputs and 5 outputs: the 5th output `zmin` is set to zero. .. GENERATED FROM PYTHON SOURCE LINES 83-87 .. code-block:: Python projectionFunction = ot.SymbolicFunction( ["z0", "v0", "m", "c"], ["z0", "v0", "m", "c", "0.0"] ) .. GENERATED FROM PYTHON SOURCE LINES 88-89 Then we use the `PointToFieldConnection` to create a function which has 4 inputs and returns the output field. .. GENERATED FROM PYTHON SOURCE LINES 91-95 .. code-block:: Python altitudeWithFourInputs = ot.PointToFieldConnection( altitudeWithFiveInputs, projectionFunction ) .. GENERATED FROM PYTHON SOURCE LINES 96-98 Sample trajectories -------------------- .. GENERATED FROM PYTHON SOURCE LINES 100-101 In order to sample trajectories, we use the `getSample` method of the input distribution and apply the field function. .. GENERATED FROM PYTHON SOURCE LINES 103-107 .. code-block:: Python size = 10 inputSample = distribution.getSample(size) outputSample = altitudeWithFourInputs(inputSample) .. GENERATED FROM PYTHON SOURCE LINES 108-109 Draw some curves. .. GENERATED FROM PYTHON SOURCE LINES 111-117 .. code-block:: Python graph = outputSample.drawMarginal(0) graph.setTitle("Viscous free fall: %d trajectories" % (size)) graph.setXTitle(r"$t$") graph.setYTitle(r"$z$") view = viewer.View(graph) plt.show() .. image-sg:: /auto_functional_modeling/field_functions/images/sphx_glr_plot_viscous_fall_field_function_connection_001.png :alt: Viscous free fall: 10 trajectories :srcset: /auto_functional_modeling/field_functions/images/sphx_glr_plot_viscous_fall_field_function_connection_001.png :class: sphx-glr-single-img .. _sphx_glr_download_auto_functional_modeling_field_functions_plot_viscous_fall_field_function_connection.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_viscous_fall_field_function_connection.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_viscous_fall_field_function_connection.py `