La representación y el análisis de los resultados de flujo y transporte es un desafío para los modeladores de aguas subterráneas. Aspectos como la velocidad, la compatibilidad, el formato de datos y las opciones de visualización son clave en la representación 2D / 3D de la carga hidráulica y la concentración en las celdas del modelo. En Jupyterlab se han desarrollado nuevas herramientas que pueden ser útiles para representar los resultados del modelo de una manera fácil de usar.
En esta ocasión hemos realizado un tutorial para la representación interactiva de una pluma contaminante en Jupyterlab; el modelo se realizó con Modflow Nwt y Mt3d, la representación se realizó con Matplolib, Ipywidgets y Voila.
Tienes dos formas de ejecutar este código:
De la imagen de Hakuchik para Docker: docker run -it -p 8888: 8888 hatarilabs / hakuchik: 74a2c9c18727
Usando Anaconda con todas las bibliotecas instaladas
Los archivos y datos del modelo pueden ser descargado con:
git clone https://github.com/SaulMontoya/interactiveModflowTransportVisualization.git
Animación
Tutorial
Código
Este es el código utilizado:
import flopy, os
import numpy as np
import ipywidgets as widgets
from IPython.display import display
import matplotlib.pyplot as plt
#get nam list
namList = [x[:-4] for x in os.listdir('../model') if x[-4:]=='.nam']
#get ucn list
ucnList = [x[:-4] for x in os.listdir('../model') if x[-4:]=='.ucn']
#nam dropdown widget
namDrop = widgets.Dropdown(
options=namList,
value=namList[0],
description='Nam file:',
disabled=False,
layout=widgets.Layout(width='20%')
)
#nam dropdown widget
ucnDrop = widgets.Dropdown(
options=ucnList,
value=ucnList[0],
description='Conc file:',
disabled=False,
layout=widgets.Layout(width='20%')
)
#times dropdown widget
timeBot = widgets.Button(
description='Show times:',
disabled=False,
button_style='success', # 'success', 'info', 'warning', 'danger' or ''
tooltip='Show available times',
)
#times dropdown widget
timeDrop = widgets.Dropdown(
options=[0],
value=0, #ucnList[0],
description='Times:',
disabled=False,
layout=widgets.Layout(width='20%')
)
#plot widget
plotBot = widgets.Button(
description='Plot conc.',
disabled=True,
button_style='success', # 'success', 'info', 'warning', 'danger' or ''
tooltip='Plot concentrations at specified layer',
)
#plot function
def showLayConc(namFile,ucnFile,timeDrop):
with out:
out.clear_output()
m = flopy.modflow.mf.Modflow.load('../model/'+namFile+'.nam',version='mfnwt')
fig, ax = plt.subplots(figsize=(12,8))
#modelmap = m.modelgrid.plot(ax=ax)
modelmap = flopy.plot.PlotMapView(m,ax=ax)
ucnFile = flopy.utils.binaryfile.UcnFile('../model/'+ucnFile+'.ucn')
concArray = ucnFile.get_data(totim=timeDrop)
concArray[concArray == -1.e+30] = np.nan
modelmap.plot_array(concArray)
plt.show()
def listTimes(ucnFile):
ucnFile = flopy.utils.binaryfile.UcnFile('../model/'+ucnFile+'.ucn')
return ucnFile.get_times()
#on click function
def plotButtonClicked(b):
showLayConc(namDrop.value,ucnDrop.value,timeDrop.value)
#plotBot.disabled = True
#on click function
def timesButtonClicked(b):
timeDrop.options = listTimes(ucnDrop.value)
plotBot.disabled = False
timeBot.disabled = True
timeBot.button_style = ''
plotBot.on_click(plotButtonClicked)
timeBot.on_click(timesButtonClicked)
display(widgets.HBox([namDrop, ucnDrop, timeBot, timeDrop, plotBot]))
out = widgets.Output()
display(out)

FloPy es la librerìa de Python que construye y ejecuta modelos MODFLOW; esta librería se ha mejorado para proporcionar un soporte completo de MODFLOW 6 y la mayor parte de su desarrollo está relacionado con la funcionalidad de MODFLOW 6, herramientas para usar datos espaciales vectoriales, rasters y funcionalidades comunes de ploteo y exportación.
Python es un lenguaje de programación sencillo y potente; su simplicidad es notable en comparación con otros lenguajes de programación y su potencia se basa en la cantidad de herramientas disponibles para las diferentes áreas de estudio.
Hemos desarrollado un programa completo en modelamiento de aguas subterráneas con MODFLOW y FloPy que abarca desde los temas esenciales en Python hasta casos aplicados de modelamiento regional e intrusión marina. El programa está diseñado para brindarle al estudiante un enfoque metodológico para aprender FloPy basado en una serie de ejemplos aplicados junto con las opiniones/experiencias del profesor y la revisión del software.