def __call__(model: modeltools.Model) -> None: con = model.parameters.control.fastaccess der = model.parameters.derived.fastaccess flu = model.sequences.fluxes.fastaccess counter = 0 for idx in range(der.nmbinputs): if not modelutils.isnan(flu.inputs[idx]): counter += 1 if counter == con.minnmbinputs: break else: flu.actualfactor = con.defaultfactor flu.actualconstant = con.defaultconstant return d_mean_height = model.return_mean_v1(con.inputheights, flu.inputs, der.nmbinputs) d_mean_inputs = model.return_mean_v1(flu.inputs, flu.inputs, der.nmbinputs) d_nominator = 0.0 d_denominator = 0.0 for idx in range(der.nmbinputs): if not modelutils.isnan(flu.inputs[idx]): d_temp = con.inputheights[idx] - d_mean_height d_nominator += d_temp * (flu.inputs[idx] - d_mean_inputs) d_denominator += d_temp * d_temp if d_denominator > 0.0: flu.actualfactor = d_nominator / d_denominator flu.actualconstant = d_mean_inputs - flu.actualfactor * d_mean_height else: flu.actualfactor = con.defaultfactor flu.actualconstant = con.defaultconstant return
def __call__(model: modeltools.Model, inputs: Vector, outputs: Vector) -> None: con = model.parameters.control.fastaccess der = model.parameters.derived.fastaccess for idx_out in range(der.nmboutputs): d_sumweights = 0.0 d_sumvalues = 0.0 d_sumvalues_inf = 0.0 counter_inf = 0 for idx_try in range(con.maxnmbinputs): idx_in = der.proximityorder[idx_out, idx_try] if not modelutils.isnan(inputs[idx_in]): if modelutils.isinf(der.weights[idx_out, idx_try]): d_sumvalues_inf += inputs[idx_in] counter_inf += 1 else: d_sumweights += der.weights[idx_out, idx_try] d_sumvalues += der.weights[idx_out, idx_try] * inputs[idx_in] if counter_inf: outputs[idx_out] = d_sumvalues_inf / counter_inf elif d_sumweights: outputs[idx_out] = d_sumvalues / d_sumweights else: outputs[idx_out] = modelutils.nan
def __call__(model: modeltools.Model) -> None: con = model.parameters.control.fastaccess der = model.parameters.derived.fastaccess flu = model.sequences.fluxes.fastaccess for idx_out in range(der.nmboutputs): for idx_try in range(con.maxnmbinputs): idx_in = der.proximityorder[idx_out, idx_try] flu.outputs[idx_out] = flu.inputs[idx_in] if not modelutils.isnan(flu.outputs[idx_out]): break
def __call__( model: modeltools.Model, values: Vector[float], mask: Vector[float], number: int, ) -> float: counter = 0 d_result = 0.0 for idx in range(number): if not modelutils.isnan(mask[idx]): counter += 1 d_result += values[idx] if counter > 0: return d_result / counter return modelutils.nan
def __call__(model: modeltools.SegmentModel) -> None: sol = model.parameters.solver.fastaccess fac = model.sequences.factors.fastaccess i = model.idx_segment d_wl = fac.referencewaterlevel[i] if modelutils.isnan(d_wl) or modelutils.isinf(d_wl): d_min, d_max = 0.0, 2.0 elif d_wl <= 0.001: d_min, d_max = 0.0, 0.01 else: d_min, d_max = 0.9 * d_wl, 1.1 * d_wl fac.referencewaterlevel[i] = model.pegasusreferencewaterlevel.find_x( d_min, d_max, 0.0, 1000.0, sol.tolerancewaterlevel, sol.tolerancedischarge, 100, )