1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
"""
Draw a field
============
"""
# %%
# The objective here is to create and manipulate a field.
# A field is the agregation of a mesh :math:`\mathcal{M}` of a domain :math:`\mathcal{D} \in \mathbb{R}^n`
# and a sample of values in :math:`\mathbb{R}^d` associated to each vertex of the mesh.
#
# We note :math:`(\vect{t}_0, \dots, \vect{t}_{N-1})` the vertices of :math:`\mathcal{M}`
# and :math:`(\vect{x}_0, \dots, \vect{x}_{N-1})` the associated values in :math:`\mathbb{R}^d`.
#
# A field is stored in the :class:`~openturns.Field` object that stores the mesh and the values at each vertex of the mesh.
# It can be built from a mesh and values or as a realization of a stochastic process.
# sphinx_gallery_thumbnail_number = 6
# %%
import openturns as ot
import openturns.viewer as otv
# %%
# First, define a regular 2-d mesh
discretization = [10, 5]
mesher = ot.IntervalMesher(discretization)
lowerBound = [0.0, 0.0]
upperBound = [2.0, 1.0]
interval = ot.Interval(lowerBound, upperBound)
mesh = mesher.build(interval)
graph = mesh.draw()
graph.setTitle("Regular 2-d mesh")
view = otv.View(graph)
# %%
# Create a field as a realization of a process
amplitude = [1.0]
scale = [0.2] * 2
myCovModel = ot.ExponentialModel(scale, amplitude)
myProcess = ot.GaussianProcess(myCovModel, mesh)
field = myProcess.getRealization()
# %%
# Create a field from a mesh and some values
values = ot.Normal([0.0] * 2, [1.0] * 2, ot.CorrelationMatrix(2)).getSample(
len(mesh.getVertices())
)
for i in range(len(values)):
x = values[i]
values[i] = 0.05 * x / x.norm()
field = ot.Field(mesh, values)
graph = field.draw()
graph.setTitle("Field on 2-d mesh and 2-d values")
view = otv.View(graph)
# %%
# Compute the input mean of the field
field.getInputMean()
# %%
# Draw the field without interpolation
graph = field.drawMarginal(0, False)
graph.setTitle("Marginal field (no interpolation)")
view = otv.View(graph)
# %%
# Draw the field with interpolation
# sphinx_gallery_thumbnail_number = 4
graph = field.drawMarginal(0)
graph.setTitle("Marginal field (with interpolation)")
view = otv.View(graph)
# %%
# Deform the mesh from the field according to the values of the field
# The dimension of the mesh (ie of its vertices) must be the same as the dimension of the field (i.e., its values)
graph = field.asDeformedMesh().draw()
graph.setTitle("Deformed 2-d mesh")
view = otv.View(graph)
# %%
# Export to the VTK format
field.exportToVTKFile("field.vtk")
with open("field.vtk") as f:
print(f.read()[:100])
# %%
# Display all figures
otv.View.ShowAll()
|