Beispiel #1
0
    def _act_vals_clima(símismo, f_0, f_1, vars_clima=None):

        vars_clima = vars_clima or símismo.vars_clima
        # Actualizar datos de clima
        p = símismo.paso_en_ciclo

        if símismo.corrida.clima and vars_clima and p == (símismo.tmñ_ciclo -
                                                          1):
            t = símismo.corrida.t
            f_inic = t.fecha()

            un_día = deltarelativo(days=1)

            vars_clim_paso = {
                vr: d
                for vr, d in vars_clima.items()
                if isinstance(símismo.variables[vr], VarPasoDeter)
            }
            vars_clim_ciclo = {
                vr: d
                for vr, d in vars_clima.items() if vr not in vars_clim_paso
            }

            base_t, factor = a_unid_tnmt(símismo.unidad_tiempo())

            f_final = f_inic + deltarelativo(
                **{a_unid_ft[base_t]: factor * símismo.tmñ_ciclo}) - un_día

            datos_ciclo = símismo.corrida.clima.combin_datos(
                vars_clima=vars_clim_ciclo, f_inic=f_inic, f_final=f_final)
            for var, vl in datos_ciclo.items():
                símismo.variables[var].poner_val(vl)

            for i in range(símismo.tmñ_ciclo):

                f_final = f_inic + deltarelativo(
                    **{a_unid_ft[base_t]: factor}) - un_día

                # Calcular los datos
                datos = símismo.corrida.clima.combin_datos(
                    vars_clima=vars_clim_paso, f_inic=f_inic, f_final=f_final)

                # Aplicar los valores de variables calculados
                for var, datos_vrs in datos.items():
                    # Guardar el valor para esta estación
                    símismo.variables[var].poner_vals_paso(datos_vrs, paso=i)

                f_inic = f_final + un_día
Beispiel #2
0
    def _act_vals_clima(símismo, n_paso, f):
        """
        Actualiza los variables climáticos, según la estación.

        :param n_paso: El número de pasos para avanzar
        :type n_paso: int
        :param f: La fecha actual.
        :type f: ft.datetime | ft.date

        """

        # Si avanzamos por más que un año, perderemos la precisión del clima
        if n_paso > 12:
            avisar('El paso es superior a 1 año (12 meses). Las predicciones climáticas perderán su precisión.')

        # Solamante hay que cambiar los datos si es el principio de un nuevo año.
        if símismo.mes == 0 and símismo.estación == 0:

            # La lista de variables climáticos
            vars_clima = list(símismo.vars_clima)
            nombres_extrn = [d['nombre_extrn'] for d in símismo.vars_clima.values()]

            # La lista de maneras de combinar los valores diarios
            combins = [d['combin'] for d in símismo.vars_clima.values()]

            # La lista de factores de conversiones de variables de clima
            convs = [d['conv'] for d in símismo.vars_clima.values()]

            # La fecha inicial
            f_inic = f

            for e, dur in enumerate(símismo.dur_estaciones):
                # Para cada estación...

                # La fecha final
                f_final = f_inic + deltarelativo(months=+dur)

                # Calcular los datos
                datos = símismo.lugar.comb_datos(vars_clima=nombres_extrn, combin=combins,
                                                 f_inic=f_inic, f_final=f_final)

                # Aplicar los valores de variables calculados
                for i, var in enumerate(vars_clima):
                    # Para cada variable en la lista de clima...

                    # El nombre oficial del variable de clima
                    var_clima = nombres_extrn[i]

                    # El factor de conversión
                    conv = convs[i]

                    # Guardar el valor para esta estación
                    símismo.datos_internos[var][e, ...] = datos[var_clima] * conv

                # Avanzar la fecha
                f_inic = f_final
Beispiel #3
0
    def _act_vals_clima(símismo, f_0, f_1, vars_clima=None):

        vars_clima = vars_clima or símismo.vars_clima

        # Actualizar datos de clima
        p = símismo.paso_en_ciclo

        if símismo.corrida.clima and vars_clima and p == (símismo.tmñ_ciclo - 1):
            t = símismo.corrida.t
            f_inic = t.fecha()

            un_día = deltarelativo(days=1)

            vars_clim_bloque = {
                vr: d for vr, d in vars_clima.items() if isinstance(símismo.variables[vr], VarBloque)
            }
            vars_otros = {vr: d for vr, d in vars_clima.items() if vr not in vars_clim_bloque}

            super()._act_vals_clima(f_0=f_0, f_1=f_1, vars_clima=vars_otros)

            base_t, factor = a_unid_tnmt(símismo.unidad_tiempo())

            for i, b in enumerate(símismo.tmñ_bloques):

                f_final = f_inic + deltarelativo(**{a_unid_ft[base_t]: factor * b}) - un_día

                # Calcular los datos
                datos = símismo.corrida.clima.combin_datos(
                    vars_clima=vars_clim_bloque, f_inic=f_inic, f_final=f_final
                )

                # Aplicar los valores de variables calculados
                for var, datos_vrs in datos.items():
                    # Guardar el valor para esta estación
                    símismo.variables[var].poner_vals_paso(datos_vrs, paso=i)

                f_inic = f_final + un_día
Beispiel #4
0
    def _act_vals_clima(símismo, f_0, f_1, lugar):

        # Solamante hay que cambiar los datos si es el principio de un nuevo ciclo.
        if símismo.paso_en_ciclo == 0:

            # La lista de variables climáticos
            vars_clima = list(símismo.vars_clima)
            nombres_extrn = [
                d['nombre_extrn'] for d in símismo.vars_clima.values()
            ]

            # La lista de maneras de combinar los valores diarios
            combins = [d['combin'] for d in símismo.vars_clima.values()]

            # La lista de factores de conversiones de variables de clima
            convs = [d['conv'] for d in símismo.vars_clima.values()]

            # La fecha inicial
            f_inic = f_0

            for b, tmñ in enumerate(símismo.tmñ_bloques):
                # Para cada bloque...

                # La fecha final
                base_t, factor = símismo._unid_tiempo_python()
                f_final = f_0 + deltarelativo(**{base_t: tmñ * factor})

                # Calcular los datos
                datos = lugar.comb_datos(vars_clima=nombres_extrn,
                                         combin=combins,
                                         f_inic=f_inic,
                                         f_final=f_final)

                # Aplicar los valores de variables calculados
                for i, var in enumerate(vars_clima):
                    # Para cada variable en la lista de clima...

                    # El nombre oficial del variable de clima
                    var_clima = nombres_extrn[i]

                    # El factor de conversión
                    conv = convs[i]

                    # Guardar el valor para esta estación
                    símismo.matrs_ingr[var][b, ...] = datos[var_clima] * conv

                # Avanzar la fecha
                f_inic = f_final