diff --git a/py_wake/deficit_models/deficit_model.py b/py_wake/deficit_models/deficit_model.py index f1e93acbfbdfc30112179542993af3c2925964e6..3594d89fb30ab36a20e22ef25c61deeb1d5aaa9a 100644 --- a/py_wake/deficit_models/deficit_model.py +++ b/py_wake/deficit_models/deficit_model.py @@ -1,11 +1,16 @@ from abc import ABC, abstractmethod import numpy as np from numpy import newaxis as na +import inspect class DeficitModel(ABC): deficit_initalized = False + def __init__(self): + if not hasattr(self, 'args4deficit'): + self.args4deficit = set(inspect.getfullargspec(self.calc_deficit).args) - {'self'} + def _calc_layout_terms(self, **_): """Calculate layout dependent terms, which is not updated during simulation""" diff --git a/py_wake/deficit_models/gaussian.py b/py_wake/deficit_models/gaussian.py index c35d5fbc67f368356eadc798c661724ad70b8089..0e8bf9bb42952331c80d89b83362db2ff6f44953 100644 --- a/py_wake/deficit_models/gaussian.py +++ b/py_wake/deficit_models/gaussian.py @@ -14,11 +14,11 @@ class BastankhahGaussianDeficit(ConvectionDeficitModel): A new analytical model for wind-turbine wakes. J. Renew. Energy. 2014;70:116-23. """ - args4deficit = ['WS_ilk', 'WS_eff_ilk', 'dw_ijlk', 'cw_ijlk', 'D_src_il', 'ct_ilk'] def __init__(self, k=0.0324555, use_effective_ws=False): self._k = k self.use_effective_ws = use_effective_ws + ConvectionDeficitModel.__init__(self) def k_ilk(self, **_): return np.reshape(self._k, (1, 1, 1)) diff --git a/py_wake/utils/tensorflow_surrogate_utils.py b/py_wake/utils/tensorflow_surrogate_utils.py index 8efba343eeb54c2d2e86b0a00734f0fbaf1089b0..306b042781c4ccda77ed1ca13e10ce5300b75a73 100644 --- a/py_wake/utils/tensorflow_surrogate_utils.py +++ b/py_wake/utils/tensorflow_surrogate_utils.py @@ -41,13 +41,8 @@ class TensorflowSurrogate(): path = Path(path) with open(path / 'extra_data.json') as fid: extra_data = json.load(fid) - - self.input_channel_names = extra_data['input_channel_names'] - self.output_channel_name = extra_data['output_channel_name'] - self.wind_speed_cut_in = extra_data['wind_speed_cut_in'] - self.wind_speed_cut_out = extra_data['wind_speed_cut_out'] - if 'wohler_exponent' in extra_data: - self.wohler_exponent = extra_data['wohler_exponent'] + for k, v in extra_data.items(): + setattr(self, k, v) # Create the MinMaxScaler scaler objects. def json2scaler(d): @@ -56,8 +51,8 @@ class TensorflowSurrogate(): setattr(scaler, k, v) return scaler - self.input_scaler = json2scaler(extra_data['input_scalers'][set_name]) - self.output_scaler = json2scaler(extra_data['output_scalers'][set_name]) + self.input_scaler = json2scaler(self.input_scalers[set_name]) + self.output_scaler = json2scaler(self.output_scalers[set_name]) self.model = tf.keras.models.load_model(path / f'model_set_{set_name}.h5')