File: t_FieldFunction_python.py

package info (click to toggle)
openturns 1.24-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 66,204 kB
  • sloc: cpp: 256,662; python: 63,381; ansic: 4,414; javascript: 406; sh: 180; xml: 164; yacc: 123; makefile: 98; lex: 55
file content (107 lines) | stat: -rwxr-xr-x 2,780 bytes parent folder | download | duplicates (3)
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#! /usr/bin/env python

import openturns as ot

mesh = ot.RegularGrid(0.0, 0.1, 11)


class FUNC(ot.OpenTURNSPythonFieldFunction):
    def __init__(self):
        # first argument:
        super(FUNC, self).__init__(mesh, 2, mesh, 2)
        self.setInputDescription(["R", "S"])
        self.setOutputDescription(["T", "U"])

    def _exec(self, X):
        Xs = ot.Sample(X)
        Y = Xs * ([2.0] * Xs.getDimension())
        return Y

    def isActingPointwise(self):
        return True


F = FUNC()
print(
    "in_dim="
    + str(F.getInputDimension())
    + " out_dim="
    + str(F.getOutputDimension())
    + " spatial_dim="
    + str(F.getInputMesh().getDimension())
)


X = ot.Field(mesh, ot.Normal(2).getSample(11))
print(F(X.getValues()))

Xsample = ot.ProcessSample(5, X)
print(F(Xsample))


# Instance creation
myFunc = ot.FieldFunction(F)

# Copy constructor
newFunc = ot.FieldFunction(myFunc)

print(("myFunc input dimension= " + str(myFunc.getInputDimension())))
print(("myFunc output dimension= " + str(myFunc.getOutputDimension())))

print(myFunc(X.getValues()))

print(myFunc(Xsample))

print("point-wise?", myFunc.isActingPointwise())

vertices = []
vertices.append([0.0, 0.0, 0.0])
vertices.append([0.0, 0.0, 1.0])
vertices.append([0.0, 1.0, 0.0])
vertices.append([0.0, 1.0, 1.0])
vertices.append([1.0, 0.0, 0.0])
vertices.append([1.0, 0.0, 1.0])
vertices.append([1.0, 1.0, 0.0])
vertices.append([1.0, 1.0, 1.0])
simplicies = []
simplicies.append([0, 1, 2, 4])
simplicies.append([3, 5, 6, 7])
simplicies.append([1, 2, 3, 6])
simplicies.append([1, 2, 4, 6])
simplicies.append([1, 3, 5, 6])
simplicies.append([1, 4, 5, 6])
mesh3D = ot.Mesh(vertices, simplicies)


def myPyFunc(X):
    Xs = ot.Sample(X)
    Y = Xs * ([2.0] * Xs.getDimension())
    Y.setDescription(ot.Description.BuildDefault(values.getDimension(), "Y"))
    return Y


in_dim = 3
out_dim = 3

myFunc = ot.PythonFieldFunction(mesh3D, in_dim, mesh3D, out_dim, myPyFunc)
print("myFunc=", myFunc)

values = ot.Normal(mesh3D.getDimension()).getSample(mesh3D.getVerticesNumber())
# Evaluation over a single field
X = ot.Field(mesh3D, values)
print("X=", X)
Y = myFunc(X.getValues())
print("Y=", Y)
print("myFunc input dimension=", myFunc.getInputDimension())
print("myFunc output dimension=", myFunc.getOutputDimension())
print("myFunc input dimension=", myFunc.getInputMesh().getDimension())
print("called ", myFunc.getCallsNumber(), " times")
# Evaluation over a process sample
X = ot.ProcessSample(5, X)
print("X=", X)
Y = myFunc(X)
print("Y=", Y)
print("myFunc input dimension=", myFunc.getInputDimension())
print("myFunc output dimension=", myFunc.getOutputDimension())
print("myFunc input dimension=", myFunc.getInputMesh().getDimension())
print("called ", myFunc.getCallsNumber(), " times")