Skip to content

Commit 2ef6655

Browse files
committed
Make gasflow vectorized compatible
1 parent 02ad3f8 commit 2ef6655

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

src/prog_models/models/pneumatic_valve.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from .. import prognostics_model
55
from math import inf
66
from copy import deepcopy
7-
from numpy import sqrt, sign, maximum
7+
from numpy import sqrt, sign, maximum, minimum, isscalar, array, any, shape
88

99

1010
class PneumaticValveBase(prognostics_model.PrognosticsModel):
@@ -183,6 +183,20 @@ def initialize(self, u, z = None):
183183
return x0
184184

185185
def gas_flow(self, pIn, pOut, C, A):
186+
# Step 1: If array- run for each element
187+
# Note: this is so complicated because it is run multiple times with mixtures of scalars and arrays
188+
inputs = array([pIn, pOut, C, A])
189+
if any([not isscalar(i) for i in inputs]):
190+
# Handle case where one or more is array
191+
size = [shape(i) for i in inputs]
192+
size = max([i[0] if i else 0 for i in size]) # Size of array
193+
194+
# Create Iterable Elements for scalars
195+
iter_inputs = [[i] * size if isscalar(i) else i for i in inputs]
196+
197+
# Run each element through function
198+
return array([self.gas_flow(a, b, c, d) for a, b, c, d in zip(*iter_inputs)])
199+
186200
k = self.parameters['gas_gamma']
187201
T = self.parameters['gas_temp']
188202
Z = self.parameters['gas_z']

0 commit comments

Comments
 (0)