Il s'agit de la commande r.solute.transportgrass qui peut être exécutée dans le fournisseur d'hébergement gratuit OnWorks en utilisant l'un de nos multiples postes de travail en ligne gratuits tels que Ubuntu Online, Fedora Online, l'émulateur en ligne Windows ou l'émulateur en ligne MAC OS
PROGRAMME:
Nom
r.soluté.transport - Programme de calcul numérique pour transitoire, confiné et non confiné
transport de soluté en deux dimensions
MOTS-CLÉS
raster, hydrologie, transport de soluté
SYNOPSIS
r.soluté.transport
r.soluté.transport --Aidez-moi
r.soluté.transport [-fc] c=prénom tête=prénom hc_x=prénom hc_y=prénom statuts=prénom diff_x=prénom
diff_y=prénom [q=prénom] [cin=prénom] cs=prénom rd=prénom nf=prénom top=prénom bas=prénom
sortie=prénom [vx=prénom] [vy=prénom] heure=flotter [maximum=entier] [erreur=flotter]
[solveur=prénom] [relaxation=flotter] [al=flotter] [at=flotter] [boucles=flotter] [coup de couteau=un magnifique]
[--écraser] [--vous aider] [--verbeux] [--calme] [--ui]
Drapeaux:
-f
Utilisez un système d'équations linéaires quadratiques entièrement rempli, la valeur par défaut est un linéaire clairsemé
système d'équations.
-c
Utiliser les critères de Courant-Friedrichs-Lewy pour le calcul du pas de temps
--écraser
Autoriser les fichiers de sortie à écraser les fichiers existants
--Aidez-moi
Imprimer le récapitulatif d'utilisation
--verbeux
Sortie du module verbeux
--silencieux
Sortie module silencieuse
--interface utilisateur
Forcer le lancement de la boîte de dialogue GUI
Paramètres:
c=prénom [obligatoire]
La concentration initiale en [kg/m^3]
tête=prénom [obligatoire]
La tête piézométrique en [m]
hc_x=prénom [obligatoire]
La partie x du tenseur de conductivité hydraulique en [m/s]
hc_y=prénom [obligatoire]
La partie y du tenseur de conductivité hydraulique en [m/s]
statuts=prénom [obligatoire]
L'état de chaque cellule, = 0 - cellule inactive, 1 - cellule active, 2 - dirichlet- et 3 -
condition aux limites de transfert
diff_x=prénom [obligatoire]
La partie x du tenseur de diffusion en [m^2/s]
diff_y=prénom [obligatoire]
La partie y du tenseur de diffusion en [m^2/s]
q=prénom
Sources et puits d'eau souterraine en [m^3/s]
cin=prénom
Sources de concentration et puits liés à une source d'eau ou à un puits en [kg/s]
cs=prénom [obligatoire]
Concentration des sources internes et des puits internes en [kg/s] (c'est-à-dire une réaction chimique)
rd=prénom [obligatoire]
Facteur de retard [-]
nf=prénom [obligatoire]
Porosité efficace [-]
top=prénom [obligatoire]
Surface supérieure de l'aquifère en [m]
bas=prénom [obligatoire]
Surface inférieure de l'aquifère en [m]
sortie=prénom [obligatoire]
La concentration résultante du calcul numérique du transport de soluté sera
écrit sur cette carte. [kg/m^3]
vx=prénom
Calculer et stocker la partie du vecteur vitesse du filtre à eau souterraine dans la direction x [m/s]
vy=prénom
Calculer et stocker la partie du vecteur vitesse du filtre d'eau souterraine dans la direction y [m/s]
heure=flotter [obligatoire]
Le temps de calcul en secondes
Valeur par défaut: 86400
maximum=entier
Nombre maximum d'itérations utilisées pour résoudre le système d'équations linéaires
Valeur par défaut: 10000
erreur=flotter
Critères de rupture d'erreur pour le solveur itératif
Valeur par défaut: 0.000001
solveur=prénom
Le type de solveur qui devrait résoudre le système d'équations linéaires
Options : gauss, lu, Jacobi, monsieur, biggstab
Valeur par défaut: biggstab
relaxation=flotter
Le paramètre de relaxation utilisé par le solveur jacobi et sor pour accélérer ou stabiliser
Valeur par défaut: 1
al=flotter
La longueur de dispersivité longitudinale. [m]
Valeur par défaut: 0.0
at=flotter
La longueur de dispersivité transversale. [m]
Valeur par défaut: 0.0
boucles=flotter
Utilisez ce nombre de boucles temporelles si le drapeau CFL est désactivé. Le pas de temps deviendra
dt/boucles.
Valeur par défaut: 1
coup de couteau=un magnifique
Définissez le schéma de stabilisation du flux (remontage complet ou exponentiel).
Options : plein, exp
Valeur par défaut: plein
DESCRIPTION
Ce programme numérique calcule le soluté numérique implicite transitoire et stationnaire
transport en milieu poreux dans la zone saturée d'un aquifère. Le calcul est basé sur
les cartes raster et les paramètres de région actuels. Toutes les conditions initiales et aux limites doivent être
fournies sous forme de cartes raster. L'unité dans l'emplacement doit être des mètres.
Ce module est sensible aux paramètres de masque. Toutes les cellules qui sont à l'extérieur du masque sont
ignoré et traité comme aucune limite de flux.
Ce module calcule la concentration de la solution et éventuellement le champ de vitesse,
sur la base de la conductivité hydraulique, de la porosité effective et de la piécométrie initiale
têtes. Les composantes vectorielles peuvent être visualisées avec paraview si elles sont exportées avec
r.out.vtk.
Utilisez r.gwflow pour calculer les hauteurs piézométriques de l'aquifère. Les hauteurs piézométriques
et la conductivité hydraulique sont utilisées pour calculer la direction d'écoulement et la moyenne
vitesse de la nappe phréatique. C'est la base du calcul du transport de soluté.
Le transport de soluté sera toujours calculé transitoire. Pour l'ensemble de calcul d'état stationnaire
le pas de temps à un grand nombre (milliards de secondes).
Pour réduire la dispersion numérique, qui est une conséquence du terme de convection et de la
discrétisation en volume fini, vous pouvez utiliser de petits pas de temps et choisir entre
remontée exponentielle.
NOTES
Le calcul du transport de soluté est basé sur un différentiel partiel diffusion/convection
équation et une discrétisation numérique implicite des volumes finis. Spécifique pour ce genre de
l'équation différentielle est la combinaison d'un terme de diffusion/dispersion et d'une convection
terme. La discrétisation se traduit par un système d'équations linéaires non symétriques sous forme de Ax =
b, qui doit être résolu. L'équation différentielle partielle du transport de solutés est de la
forme suivante :
(dc/dt)*R = div ( D grad c - uc) + cs -q/nf(c - c_in)
· c -- la concentration [kg/m^3]
· u -- vecteur de la vitesse moyenne d'écoulement des eaux souterraines
· dt -- le pas de temps pour le calcul transitoire en secondes [s]
· R -- le coefficient de retard linéaire [-]
· D -- le tenseur de diffusion et de dispersion [m^2/s]
· cs -- concentration interne sources/puits [kg/m^3]
· c_in -- la concentration en soluté de l'eau entrante [kg/m^3]
· q -- sources/puits de puits intérieurs [m^3/s]
· nf -- la porosité effective [-]
Trois conditions aux limites différentes sont mises en œuvre, le Dirichlet, la Transmission et
conditions de Neumann. Le calcul et l'état des limites des cellules individuelles peuvent être définis avec
la carte d'état. Les états suivants sont pris en charge :
· 0 == inactif - la cellule avec le statut 0 ne sera pas calculée, les cellules actives seront
avoir une frontière sans flux vers une cellule inactive
· 1 == actif - cette cellule est utilisée pour le calcul du transport sloute, sources internes
peut être défini pour ces cellules
· 2 == Dirichlet - les cellules de ce type auront une valeur de concentration fixe qui ne
pas changer avec le temps
· 3 == Transmission - les cellules de ce type doivent être placées sur les limites de sortie pour
assurer l'écoulement du flux de soluté
Notez que toutes les cartes raster requises sont lues dans la mémoire principale. De plus, le linéaire
système d'équation sera alloué, donc la consommation de mémoire de ce module augmente rapidement
avec la taille des cartes d'entrée.
Le système d'équations linéaires résultant Ax = b peut être résolu avec plusieurs solveurs. Nombreuses
des solveurs itératifs avec support de matrices creuses et quadratiques asymétriques sont implémentés.
La méthode de Jacobi, la méthode de Gauss-Seidel et les gradients biconjugués stabilisés
méthode (bicgstab). De plus, un solveur direct de Gauss et un solveur LU sont disponibles. Celles
les solveurs directs ne fonctionnent qu'avec des matrices quadratiques, donc soyez prudent en les utilisant avec de grandes cartes
(les cartes de taille 10.000 cellules auront besoin de plus d'un gigaoctet de RAM). Préférez toujours un
solveur de matrice creuse.
EXEMPLE
Utilisez ce petit script python pour créer une zone de travail d'écoulement des eaux souterraines / de transport de soluté
et données. Assurez-vous que vous n'êtes pas dans une projection lat/long.
#!/ usr / bin / env python
# Ceci est un exemple de script expliquant comment l'écoulement des eaux souterraines et le transport des solutés sont
# calculé dans l'herbe
système d'importation
importer os
importer grass.script en tant qu'herbe
# Écraser les cartes existantes
grass.run_command("g.gisenv", set="OVERWRITE=1")
grass.message(_("Définir la région"))
# La superficie est de 200m x 100m avec une taille de cellule de 1m x 1m
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", expression="phead = if(col() == 1 , 50, 40)")
grass.run_command("r.mapcalc", expression="phead = if(col() ==200 , 45 + row()/40, phead)")
grass.run_command("r.mapcalc", expression="status = if(col() == 1 || col() == 200 , 2, 1)")
grass.run_command("r.mapcalc", expression="well = if((row() == 50 && col() == 175) || (row() == 10 && col() == 135) , -0.001, 0)")
grass.run_command("r.mapcalc", expression="hydcond = 0.00005")
grass.run_command("r.mapcalc", expression="recharge = 0")
grass.run_command("r.mapcalc", expression="top_conf = 20")
grass.run_command("r.mapcalc", expression="bottom = 0")
grass.run_command("r.mapcalc", expression="poros = 0.17")
grass.run_command("r.mapcalc", expression="syield = 0.0001")
grass.run_command("r.mapcalc", expression="null = 0.0")
grass.message(_("Calculer un débit d'eau souterraine en régime permanent"))
grass.run_command("r.gwflow", solver="cg", top="top_conf", bottom="bottom", phead="phead",\
status="status", hc_x="hydcond", hc_y="hydcond", q="well", s="syield",\
recharge="recharge", output="gwresult_conf", dt=8640000000000, type="confiné")
grass.message(_("générer les données de transport"))
grass.run_command("r.mapcalc", expression="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", expression="tstatus = if(col() == 1 || col() == 200 , 3, 1)")
grass.run_command("r.mapcalc", expression="diff = 0.0000001")
grass.run_command("r.mapcalc", expression="R = 1.0")
# Calculer l'état initial
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="well", nf="poros", output="stresult_conf_0", dt=3600, diff_x="diff",\
diff_y="diff", c="c", al=0.1, at=0.01)
# Calculer le transport de soluté pendant 300 jours par pas de 10 jours
pour dt dans gamme(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="well", nf="poros", output="stresult_conf_" + str(dt + 1), dt=864000, diff_x="diff",\
diff_y="diff", c="stresult_conf_" + str(dt), al=0.1, at=0.01)
Utilisez r.solute.transportgrass en ligne en utilisant les services onworks.net