Este es el comando r.solute.transportgrass que se puede ejecutar en el proveedor de alojamiento gratuito de OnWorks utilizando una de nuestras múltiples estaciones de trabajo en línea gratuitas, como Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS.
PROGRAMA:
NOMBRE
transporte.de.solutos - Programa de cálculo numérico para transitorios, confinados y no confinados
transporte de solutos en dos dimensiones
PALABRAS CLAVE
ráster, hidrología, transporte de solutos
SINOPSIS
transporte.de.solutos
transporte.de.solutos --ayuda
transporte.de.solutos [-fc] c=nombre cabeza=nombre hc_x=nombre hc_y=nombre estado=nombre diferencia_x=nombre
diferencia_y=nombre [q=nombre ] [cin=nombre ] cs=nombre rd=nombre nf=nombre parte superior=nombre fondo=nombre
salida=nombre [vx=nombre ] [vy=nombre ] tiempo=flotar [máximo=entero] [error=flotar]
[solucionador=nombre ] [relajarse=flotar] [al=flotar] [at=flotar] [bucles=flotar] [puñalada=cadena]
[-exagerar] [-ayuda] [-verboso] [-tranquilo] [-ui]
Banderas
-f
Utilice un sistema de ecuaciones lineales cuadráticas con relleno completo, el valor predeterminado es lineal disperso
sistema de ecuaciones.
-c
Utilice los criterios de Courant-Friedrichs-Lewy para el cálculo del intervalo de tiempo
--Sobrescribir
Permitir que los archivos de salida sobrescriban los archivos existentes
--ayuda
Resumen de uso de impresión
--verboso
Salida del módulo detallado
--tranquilo
Salida de módulo silencioso
--ui
Forzar el inicio del cuadro de diálogo GUI
parámetros:
c=nombre [requerido]
La concentración inicial en [kg / m ^ 3]
cabeza=nombre [requerido]
La cabeza piezométrica en [m]
hc_x=nombre [requerido]
La parte x del tensor de conductividad hidráulica en [m / s]
hc_y=nombre [requerido]
La parte y del tensor de conductividad hidráulica en [m / s]
estado=nombre [requerido]
El estado de cada celda, = 0 - celda inactiva, 1 - celda activa, 2 - dirichlet- y 3 -
condición de frontera de transferencia
diferencia_x=nombre [requerido]
La parte x del tensor de difusión en [m ^ 2 / s]
diferencia_y=nombre [requerido]
La parte y del tensor de difusión en [m ^ 2 / s]
q=nombre
Fuentes y sumideros de agua subterránea en [m ^ 3 / s]
cin=nombre
Fuentes de concentración y sumideros unidos a una fuente de agua o sumideros en [kg / s]
cs=nombre [requerido]
Concentración de fuentes internas y sumideros internos en [kg / s] (es decir, una reacción química)
rd=nombre [requerido]
Factor de retraso [-]
nf=nombre [requerido]
Porosidad efectiva [-]
parte superior=nombre [requerido]
Superficie superior del acuífero en [m]
fondo=nombre [requerido]
Superficie inferior del acuífero en [m]
salida=nombre [requerido]
La concentración resultante del cálculo numérico del transporte de solutos será
escrito en este mapa. [kg / m ^ 3]
vx=nombre
Calcule y almacene la parte del vector de velocidad del filtro de agua subterránea en la dirección x [m / s]
vy=nombre
Calcule y almacene la parte del vector de velocidad del filtro de agua subterránea en la dirección y [m / s]
tiempo=flotar [requerido]
El tiempo de cálculo en segundos.
Por defecto: 86400
máximo=entero
Número máximo de iteraciones utilizadas para resolver el sistema de ecuaciones lineales
Por defecto: 10000
error=flotar
Criterios de ruptura de errores para el solucionador iterativo
Por defecto: 0.000001
solucionador=nombre
El tipo de solucionador que debería resolver el sistema de ecuaciones lineales.
Opciones: gauss, Lu, jacobi, señor, biggstab
Por defecto: biggstab
relajarse=flotar
El parámetro de relajación utilizado por el solucionador jacobi y sor para acelerar o estabilizar
Por defecto: 1
al=flotar
La longitud de la dispersividad longitudinal. [metro]
Por defecto: 0.0
at=flotar
La longitud de la dispersividad transversal. [metro]
Por defecto: 0.0
bucles=flotar
Utilice este número de ciclos de tiempo si la bandera CFL está apagada. El paso de tiempo se convertirá
dt / bucles.
Por defecto: 1
puñalada=cadena
Configure el esquema de estabilización de flujo (upwind total o exponencial).
Opciones: completo, exp
Por defecto: ser completados
DESCRIPCIÓN
Este programa numérico calcula el soluto en estado estable y transitorio implícito numérico
transporte en medios porosos en la zona saturada de un acuífero. El cálculo se basa en
mapas ráster y la configuración actual de la región. Todas las condiciones iniciales y de contorno deben ser
proporcionados como mapas ráster. La unidad en la ubicación debe ser metros.
Este módulo es sensible a la configuración de la máscara. Todas las células que están fuera de la máscara son
ignorado y manejado como sin límites de flujo.
Este módulo calcula la concentración de la solución y opcionalmente el campo de velocidad,
basado en la conductividad hidráulica, la porosidad efectiva y la piecométrica inicial
cabezas. Los componentes vectoriales se pueden visualizar con paraview si se exportan con
r.out.vtk.
Utilice r.gwflow para calcular las alturas piezométricas del acuífero. Las alturas piezométricas
y la conductividad hidráulica se utilizan para calcular la dirección del flujo y la media
velocidad del agua subterránea. Esta es la base del cálculo del transporte de solutos.
El transporte de solutos siempre se calculará como transitorio. Para el conjunto de cómputo de estado stady
el paso de tiempo a un gran número (miles de millones de segundos).
Reducir la dispersión numérica, que es consecuencia del término de convección y la
discretización de volumen finito, puede utilizar pequeños pasos de tiempo y elegir entre total y
upwind exponencial.
NOTAS
El cálculo del transporte de solutos se basa en un diferencial parcial de difusión / convección
ecuación y una discretización numérica implícita de volumen finito. Específico para este tipo de
La ecuación diferencial es la combinación de un término de difusión / dispersión y un término de convección.
término. La discretización da como resultado un sistema de ecuaciones lineales asimétricas en forma de Ax =
b, que debe resolverse. La ecuación diferencial parcial del transporte de solutos es de
siguiente forma:
(dc / dt) * R = div (D grad c - uc) + cs -q / nf (c - c_in)
· C - la concentración [kg / m ^ 3]
· U - vector de la velocidad media del flujo de agua subterránea
· Dt - el intervalo de tiempo para el cálculo transitorio en segundos [s]
· R - el coeficiente de retardo lineal [-]
· D - el tensor de difusión y dispersión [m ^ 2 / s]
· Cs - fuentes de concentración interna / sumideros [kg / m ^ 3]
· C_in - la concentración de soluto del agua afluente [kg / m ^ 3]
· Q - fuentes / sumideros de pozos internos [m ^ 3 / s]
· Nf - la porosidad efectiva [-]
Se implementan tres condiciones de contorno diferentes, Dirichlet, Transmisión y
Condiciones de Neumann. El cálculo y el estado de los límites de las celdas individuales se pueden configurar con
el mapa de estado. Se admiten los siguientes estados:
· 0 == inactivo: la celda con el estado 0 no se llamará, las celdas activas
no tienen un límite de flujo a una celda inactiva
· 1 == activo: esta celda se utiliza para el cálculo del transporte de sloute, fuentes internas
se puede definir para esas celdas
· 2 == Dirichlet - las células de este tipo tendrán un valor de concentración fijo que no
no cambiar con el tiempo
· 3 == Transmisión: las celdas de este tipo deben colocarse en los límites del flujo de salida para
Asegurar el flujo de la corriente de soluto
Tenga en cuenta que todos los mapas ráster necesarios se leen en la memoria principal. Además, el lineal
Se asignará el sistema de ecuaciones, por lo que el consumo de memoria de este módulo crecerá rápidamente
con el tamaño de los mapas de entrada.
El sistema de ecuaciones lineales resultante Ax = b se puede resolver con varios solucionadores. Varios
Se implementan solucionadores iterativos con soporte asimétrico de matrices cuadráticas y dispersas.
El método jacobi, el método Gauss-Seidel y los gradientes estabilizados biconjugados
(bicgstab) método. Además, están disponibles un solucionador de Gauss directo y un solucionador de LU. Aquellos
Los solucionadores directos solo funcionan con matrices cuadráticas, así que tenga cuidado al usarlas con mapas grandes.
(los mapas de 10.000 celdas necesitarán más de un gigabyte de RAM). Siempre prefiero un
solucionador de matriz dispersa.
EJEMPLO
Utilice este pequeño script de Python para crear un área de transporte de solutos / flujo de agua subterránea que funcione
y datos. Asegúrese de no estar en una proyección lat / lon.
#!/ usr / bin / env pitón
# Este es un script de ejemplo de cómo el flujo de agua subterránea y el transporte de solutos son
# calculado dentro de la hierba
importación de sistemas
importar os
importar grass.script como hierba
# Sobrescribir mapas existentes
grass.run_command ("g.gisenv", set = "SOBRESCRIBIR = 1")
grass.message (_ ("Establecer la región"))
# El área es de 200 mx 100 m con un tamaño de celda de 1 mx 1 m
grass.run_command ("g.region", res = 1, res3 = 1, t = 10, b = 0, n = 100, s = 0, w = 0, e = 200)
grass.run_command ("r.mapcalc", expresión = "phead = if (col () == 1, 50, 40)")
grass.run_command ("r.mapcalc", expresión = "phead = if (col () == 200, 45 + row () / 40, phead)")
grass.run_command ("r.mapcalc", expresión = "estado = if (col () == 1 || col () == 200, 2, 1)")
grass.run_command ("r.mapcalc", expression = "well = if ((fila () == 50 && col () == 175) || (fila () == 10 && col () == 135), -0.001, 0) ")
grass.run_command ("r.mapcalc", expression = "hydcond = 0.00005")
grass.run_command ("r.mapcalc", expresión = "recarga = 0")
grass.run_command ("r.mapcalc", expresión = "top_conf = 20")
grass.run_command ("r.mapcalc", expresión = "bottom = 0")
grass.run_command ("r.mapcalc", expresión = "poros = 0.17")
grass.run_command ("r.mapcalc", expresión = "syield = 0.0001")
grass.run_command ("r.mapcalc", expresión = "nulo = 0.0")
grass.message (_ ("Calcular un flujo de agua subterránea en estado estable"))
grass.run_command ("r.gwflow", solver = "cg", top = "top_conf", bottom = "bottom", phead = "phead", \
status = "status", hc_x = "hydcond", hc_y = "hydcond", q = "bien", s = "syield", \
recarga = "recarga", salida = "gwresult_conf", dt = 8640000000000, tipo = "confinado")
grass.message (_ ("generar los datos de transporte"))
grass.run_command ("r.mapcalc", expresión = "c = if (col () == 15 && row () == 75, 500.0, 0.0)")
grass.run_command ("r.mapcalc", expression = "cs = if (col () == 15 && row () == 75, 0.0, 0.0)")
grass.run_command ("r.mapcalc", expresión = "tstatus = if (col () == 1 || col () == 200, 3, 1)")
grass.run_command ("r.mapcalc", expresión = "diff = 0.0000001")
grass.run_command ("r.mapcalc", expresión = "R = 1.0")
# Calcule el estado inicial
grass.run_command ("r.solute.transport", solver = "bicgstab", top = "top_conf", \
bottom = "bottom", phead = "gwresult_conf", status = "tstatus", hc_x = "hydcond", hc_y = "hydcond", \
rd = "R", cs = "cs", q = "pozo", nf = "poros", salida = "stresult_conf_0", dt = 3600, diff_x = "diff", \
diff_y = "diff", c = "c", al = 0.1, at = 0.01)
# Calcule el transporte de solutos durante 300 días en pasos de 10 días.
para dt en distancia(30):
grass.run_command ("r.solute.transport", solver = "bicgstab", top = "top_conf", \
bottom = "bottom", phead = "gwresult_conf", status = "tstatus", hc_x = "hydcond", hc_y = "hydcond", \
rd = "R", cs = "cs", q = "pozo", nf = "poros", salida = "stresult_conf_" + str (dt + 1), dt = 864000, diff_x = "diff", \
diff_y = "diff", c = "stresult_conf_" + str (dt), al = 0.1, at = 0.01)
Utilice r.solute.transportgrass en línea utilizando los servicios de onworks.net