El siguiente codigo se encarga de simular la cuenca de salgar a partir de la informacion de radar obtenida por Julian, para el evento de Mayo 20.
La siguiente celda inicia los paquetes necesarios, esta simulación se realiza como un primer ensayo del nuevo paquete WMF, el cual no ha sido probado
In [1]:
%matplotlib inline
from wmf import wmf
from fwm import utils
import numpy as np
import pylab as pl
Lectura de mapas de direcciones y de elevación:
In [2]:
DEM=wmf.read_map_raster('raster/dem2.tif',True)
DIR=wmf.read_map_raster('raster/dir.tif',True)
wmf.cu.nodata=-9999.0; wmf.cu.dxp=30.0
DIR[DIR<=0]=wmf.cu.nodata.astype(int)
DIR=wmf.cu.dir_reclass(DIR,wmf.cu.ncols,wmf.cu.nrows)
In [3]:
# Trazado de la cuenca
cuSalgar = wmf.SimuBasin(-75.9808, 5.9647, DEM, DIR, name='Liboriana',
dt = 300)
In [4]:
# Establecer Parametros Geomorfo
cuSalgar.GetGeo_Cell_Basics()
cuSalgar.set_Geomorphology(stream_width=cuSalgar.CellLong)
Los parámetros físicos del modelo se dividen en velocidades verticales y vel horizontales, las cuales a su ves se dividen en versiones lineales y no lineales de las mismas, en el caso de las velocidades verticales todas las relaciones son lineales, a continuación se describen las variables relacionadas con los flujos que se encuentran en el modelo:
Velocidades Horizontales:
Almacenamientos:
La calibración se compone de 10 parámetros escalares, los cuales son:
In [5]:
# Evaporación en la cuenca estimada por Turc.
Evp=4.658*np.exp(-0.0002*cuSalgar.CellHeight)/288.0
# Infiltración Ks
Ks = 0.00028
# Percolación
Kp = Ks/100.0
# Perdidas se asumen iguales a cero
Kpp = 0.0
# Inclusión de los parámetros en el modelo
Lista=[Evp,Ks,Kp,Kpp]
for pos,var in enumerate(Lista):
cuSalgar.set_PhysicVariables('v_coef',var,pos)
In [6]:
# Velocidades superficial, sub-super, y subte.
v2 = 1.4 * cuSalgar.CellSlope**0.5
v3 = Ks * cuSalgar.CellSlope**0.5
v4 = Kp * cuSalgar.CellSlope**0.5
Lista=[v2,v3,v4]
for pos,var in enumerate(Lista):
cuSalgar.set_PhysicVariables('h_coef',var,pos)
In [7]:
v2.mean()
Out[7]:
A continuación se presentan los valores que tendrían los 3 tanques lineales en el modelo para el caso en que se usen los coeficientes de calibración R[5] = 1.0, R[6] = 1000 y R[7] = 1800
In [8]:
#Si uno calcula los coeficientes lineales de salida de cada tanque
calib = [0.1, 100, 1800]
hflux=[]
for c,v in zip(calib,Lista):
hflux.append(1.0 - (wmf.models.hill_long/(c*v*300 + wmf.models.hill_long)) )
for h in hflux:
utils.plot_basin_map(cuSalgar.structure,h,cuSalgar.ncells)
print 'Tasa transferencia Media [%]: ' + str(h.mean())
In [9]:
#Calcula variable para el coeficiente horizontal
area = cuSalgar.CellAcum * (30**2)
var,w1 = wmf.OCG_param(pend = cuSalgar.CellSlope, area = area)
cuSalgar.set_PhysicVariables('h_coef',var,3)
#Variable del exponente horizontal
cuSalgar.set_PhysicVariables('h_exp',w1,3)
In [10]:
cuSalgar.set_record()
cuSalgar.set_speed_type()
A continuación se realiza una ejecución ensayo del modelo, ojo esta es una prueba inicial puede fallar facilmente
La calibración se compone de 10 parámetros escalares, los cuales son:
In [11]:
#wmf.models.storage = Res['Storage']
cuSalgar.set_storage(10,3)
Calibracion = [0.5, 1.0, 1.0, 0.0, 1.0, 1000, 2800, 0.999, 0.005, 1.0]
ruta_lluvia = 'lluvia/lluvia_201501010000_201501312355.bin'
Res = cuSalgar.run_shia(Calibracion,ruta_lluvia,100,7200)
In [12]:
pl.plot(Res['Qsim'][0])
cuSalgar.Plot_basin_fast(Res['Storage'][4],ZeroAsNaN='si')
pl.plot(Res['Balance'])
Out[12]:
A continuación se realiza un ensayo similar pero simulando por laderas, este ejercicio pretende ejecutar por privera ves el modelo en un esquema de laderas y canales y no de celdas.
En el modelo de ladar cabe destacar las siguientes distinciones
- La ecuación de continuidad en laderas es afectada, de manera que: $E_{i} = \left(1- \frac{L_{ladera}}{L_{ladera} + v_{i} \Delta t } \right) S_{i,t}$, para $i$ en tanques 2, 3 y 4.
- La ecuación en los canales queda descrita de la siguiente manera: $A_{sec,i,t} = \frac{S_{5,t}F_{conv}}{L_{canal}+v_{5,t}\Delta t}$, donde $F_{conv} = W_{canal} L_{canal} / 1000 [m^2/mm]$ El ancho del canal esta dado en función del área acumulada.
- Todos los elementos de la cuenca se identifican como elementos con un cauce interior por lo tanto todos son elementos tipo 3 [models.unit_type=3].
In [13]:
# Trazado de la cuenca
cuSalgar = wmf.SimuBasin(-75.9808, 5.9647, DEM, DIR, name='Liboriana',
dt = 300, modelType = 'hills',umbral=500)
cuSalgar.GetGeo_Cell_Basics()
Para obtener el ancho de cada canal este se calcula en función del caudal medio (Leopold y Maddok, 1953). Se puede usar la siguiente expresión:
Por lo tanto se puede aproximar el ancho de la siguiente manera:
Para la ecuación 1, Mejía y Posada (2002) encuentran que el valor más acertado de exponente para la región andina es $0.46$, Leopold (1953) indica que este valor puede oscilar entre $0.42$ y $0.55$, como coeficiente encuentran un valor igual a $2.261$, de esta forma la ecuación queda:
In [50]:
#Calcula el caudal medio
cuSalgar.GetQ_Balance(3000,Tipo_ETR=1)
#Basado en el Q medio calcula el ancho
W = 2.261*cuSalgar.CellQmed**0.46
#Obtiene los parametros geomorfo
cuSalgar.set_Geomorphology(stream_width=W,umbrales=[30, 500])
# Inclusión de los parámetros en el modelo
Lista=[Evp,Ks,Kp,Kpp]
for pos,var in enumerate(Lista):
cuSalgar.set_PhysicVariables('v_coef',var,pos)
In [51]:
v2 = 1.4 * cuSalgar.CellSlope**0.5
v3 = Ks * cuSalgar.CellSlope**0.5
v4 = Kp * cuSalgar.CellSlope**0.5
Lista=[v2,v3,v4]
for pos,var in enumerate(Lista):
cuSalgar.set_PhysicVariables('h_coef',var,pos)
A cotninuación se pasan las velocidades que se encuentran en forma de celda a forma de ladera
In [16]:
ListaHills=[]
for var in Lista:
ListaHills.append(cuSalgar.Transform_Basin2Hills(var))
Ahora se calcula como sería la cantidad de agua transportada por cada ladera con esas velocidades (asumiendo un omportamiento lineal):
In [397]:
#Si uno calcula los coeficientes lineales de salida de cada tanque
calib = [0.5, 500, 108000]
hflux=[]
for c,v in zip(calib,ListaHills):
hflux.append(1.0 - (wmf.models.hill_long/(c*v*300 + wmf.models.hill_long)) )
for h in hflux:
hBasin = cuSalgar.Transform_Hills2Basin(h[0])
cuSalgar.Plot_basin_fast(hBasin)
print 'Tasa transferencia Media [%]: ' + str(h.mean())
In [53]:
#Calcula variable para el coeficiente horizontal
area = cuSalgar.CellAcum * (30**2)
var,w1 = wmf.OCG_param(pend = cuSalgar.CellSlope, area = area)
cuSalgar.set_PhysicVariables('h_coef',var,3,mask=cuSalgar.CellCauce)
#Variable del exponente horizontal
cuSalgar.set_PhysicVariables('h_exp',w1,3,mask=cuSalgar.CellCauce)
In [84]:
a = cuSalgar.Transform_Hills2Basin(wmf.models.h_coef[3])
cuSalgar.Plot_basin_fast(a)
cuSalgar.Plot_basin_fast(var)
A continuación se realiza un primer ensayo de la ejecución del modelo en su versión de ladera, esta es puramente experimental.
La calibración se compone de 10 parámetros escalares, los cuales son:
In [493]:
Calibracion = [0.8, 100, 100, 0.0, 20, 90, 50, 0.3, 1, 1]
ruta_lluvia = 'lluvia/lluvia_lad_201505010000_201505312355.bin'
Res = cuSalgar.run_shia(Calibracion,ruta_lluvia,2000,1500)
pl.plot(Res['Qsim'][0])
print Res['Qsim'][0][800:1000].mean()
for i in range(4):
cuSalgar.set_storage(Res['Storage'][i],i)
In [494]:
pos = 3
s = cuSalgar.Transform_Hills2Basin(Res['Storage'][pos])
cuSalgar.Plot_basin_fast(s)
pl.hist(Res['Storage'][pos])
print np.percentile(Res['Qsim'][0],25)
In [359]:
Kp
Out[359]:
In [ ]: