コード例 #1
0
ファイル: conv_model.py プロジェクト: tudspahner/hydpy
 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
コード例 #2
0
ファイル: conv_model.py プロジェクト: tudspahner/hydpy
 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
コード例 #3
0
ファイル: conv_model.py プロジェクト: tudspahner/hydpy
 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
コード例 #4
0
ファイル: conv_model.py プロジェクト: tudspahner/hydpy
 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
コード例 #5
0
ファイル: musk_model.py プロジェクト: hydpy-dev/hydpy
 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,
     )