La representación de la dirección del flujo de agua subterránea es útil para comprender las condiciones actuales y previstas del régimen de flujo de agua subterránea. La dirección y la magnitud de las flechas (vectores) proporcionan una perspectiva rápida de las direcciones principales del flujo de agua subterránea y la interconexión entre las fuentes y los puntos de descarga. Los vectores de dirección de flujo no eran una característica muy común en el modelo de de aguas subterráneas con software de código abierto hasta el desarrollo en Python de la librería Flopy que tiene una herramienta especial para la representación de gráficos Quiver.
Este tutorial muestra el flujo de trabajo completo para determinar las direcciones de flujo de un modelo en MODFLOW realizado con Model Muse. Las secuencias de comandos insertan una imagen de fondo, georreferencian el modelo de los parámetros exportados como comentarios y exportan la figura resultante como un archivo PNG. El tutorial se realiza en Python 3 en un entorno de Jupyter Notebook.
Tutorial
Código
Este es el script completo de Python para este tutorial:
Importar las bibliotecas requeridas.
Desde numpy, matplotlib y flopy, así como las bibliotecas de Python.
%matplotlib inline
import sys, os, re
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import flopy
import flopy.utils.binaryfile as bf
Establecer una imagen de fondo para la figura.
Esto no es obligatorio, pero ayuda a localizar y analizar el flujo de agua subterránea con respecto a las características geomorfológicas y geográficas. El mapa de fondo se puede generar desde QGIS exportando el lienzo que realmente viene con el archivo (.pgw o similar), este archivo permite la georreferenciación de la imagen. Hay opciones para mejorar los gráficos con líneas de contorno y la representación de la condición de contorno, por favor verifique los ejemplos: https://github.com/modflowpy/flopy/tree/develop/examples/Notebooks
wrlFile = open('../Rst/BackgroundImage.pgw').read().split('\n')
cellsize = float(wrlFile[0])
bcgImg = mpimg.imread('../Rst/BackgroundImage.png')
left = float(wrlFile[4])
right = float(wrlFile[4]) + bcgImg.shape[1]*cellsize
bottom = float(wrlFile[5]) - bcgImg.shape[0]*cellsize
top = float(wrlFile[5])
Crea nuestro modelo de modflow como un objeto
Configuración básica de un modelo de modflow en flopy.
#Model
modPath = '../Model/'
modName = 'SingleLayerModel'
exeName = '../Exe/mf2005.exe'
ml = flopy.modflow.Modflow.load(modName+'.nam', model_ws=modPath,
exe_name=exeName,check=False)
Importar algunos parámetros geoespaciales desde el modelo.
El modelo Muse inserta algunos parámetros geoespaciales como comentarios en el archivo DIS. Tenemos que importarlo abriendo el archivo DIS y aplicar los parámetros al objeto modelo. Nota: El código EPSG debe configurarse a mano ya que no está escrito en el archivo DIS.
#Open the DIS file and extract the spatial parametes
spatialpar = open(modPath + modName + '.dis').readlines()[:6]
ul = re.findall("\d+\.\d+", spatialpar[1])
lr = re.findall("\d+\.\d+", spatialpar[4])
xul, yul = float(ul[0]), float(ul[1])
xlr, ylr = float(ul[0]), float(ul[1])
rotation = -float(re.findall("\d+", spatialpar[5])[0])
#Assign parameters to the model object
ml.dis.sr.set_spatialreference(xul=xul, yul=yul, rotation=-rotation)
ml.dis.sr.proj4_str= 'EPSG:32718' #### Defined by the user
ml.dis.sr.attribute_dict
ml.dis.sr
xul:199558.1423; yul:8807344.096; rotation:0; proj4_str:+init=EPSG:32718; units:meters; lenuni:2; length_multiplier:1.0
Importar los cargas hidráulicas de salida
h = flopy.utils.formattedfile.FormattedHeadFile(modPath+modName+'.fhd',model=ml)
head = h.get_data(totim=1)
head[0,30:33,30:33] #Sample of the heads values
array([[24.3446, 26.4447, 28.8097],
[23.7384, 25.8897, 28.1835],
[23.2935, 25.5388, 27.3164]], dtype=float32)
Crear una figura
La figura se genera como una figura matplotlib, donde los vectores de dirección del flujo se superponen a la imagen de fondo. Hay opciones para filtrar el número de flechas con el istep / jstep, esto es altamente recomendado para mejorar la representación y la experiencia del usuario.
fig = plt.figure(figsize=(16, 10))
ax = fig.add_subplot(1, 1, 1, aspect='equal')
modelmap = flopy.plot.ModelMap(model=ml)
cbb = bf.CellBudgetFile(modPath+modName+'.cbc')
frf = cbb.get_data(text='FLOW RIGHT FACE', totim=1)[0]
fff = cbb.get_data(text='FLOW FRONT FACE', totim=1)[0]
lc = modelmap.plot_grid(linewidth=1, color='gray',alpha=0.3)
vectors = modelmap.plot_discharge(frf, fff, head=head,istep=2,jstep=2,normalize=False,color='cyan')
image = plt.imshow(bcgImg, extent=(left, right, bottom, top), alpha=0.7)
Datos de ingreso
Puede descargar los archivos para este tutorial del siguiente enlace.