diff --git a/src/raster/r.sim.terrain/r.sim.terrain.html b/src/raster/r.sim.terrain/r.sim.terrain.html
index 43a27ebc8d..9cd67c6fc4 100644
--- a/src/raster/r.sim.terrain/r.sim.terrain.html
+++ b/src/raster/r.sim.terrain/r.sim.terrain.html
@@ -93,19 +93,18 @@
EXAMPLES
ERROR MESSAGES
If the module fails with
-
-ERROR: nwalk (7000001) > maxw (7000000)!
+ERROR: Unable to insert dataset of type raster in the temporal database. The mapset of the dataset does not match the current mapset.
-
-then a lower nwalkers parameter value has to be selected.
+check that the input elevation map is in the current mapset.
+The input elevation map must be in the current mapset
+so that it can be registered in the temporal database.
REFERENCES
-
-Harmon, B., Mitasova, H., Petrasova, A., Petras, V., 2019.
-r.sim.terrain: a dynamic landscape evolution model.
+Harmon, B. A., Mitasova, H., Petrasova, A., and Petras, V.: r.sim.terrain 1.0: a landscape evolution model with dynamic hydrology, Geosci. Model Dev., 12, 2837–2854, https://doi.org/10.5194/gmd-12-2837-2019, 2019.
-
Mitasova H., Barton M., Ullah I., Hofierka J., Harmon R.S., 2013.
@@ -115,6 +114,7 @@
REFERENCES
+
SEE ALSO
diff --git a/src/raster/r.sim.terrain/r.sim.terrain.py b/src/raster/r.sim.terrain/r.sim.terrain.py
index a425088fa8..2b0d2e3244 100755
--- a/src/raster/r.sim.terrain/r.sim.terrain.py
+++ b/src/raster/r.sim.terrain/r.sim.terrain.py
@@ -1,6 +1,5 @@
#!/usr/bin/env python
-
"""
MODULE: r.sim.terrain
@@ -379,13 +378,10 @@
#% description: Fill depressions
#%end
-
-import os
import sys
import atexit
import csv
import datetime
-from math import exp
import grass.script as gscript
from grass.exceptions import CalledModuleError
@@ -477,82 +473,58 @@ def main():
# check for alternative input parameters
if not runoff:
runoff = "runoff"
- gscript.run_command(
- "r.mapcalc",
- expression="runoff = {runoff_value}".format(**locals()),
- overwrite=True,
- )
+ gscript.mapcalc("runoff = {runoff_value}".format(**locals()), overwrite=True)
if not mannings:
mannings = "mannings"
- gscript.run_command(
- "r.mapcalc",
- expression="mannings = {mannings_value}".format(**locals()),
- overwrite=True,
+ gscript.mapcalc(
+ "mannings = {mannings_value}".format(**locals()), overwrite=True
)
if not detachment:
detachment = "detachment"
- gscript.run_command(
- "r.mapcalc",
- expression="detachment = {detachment_value}".format(**locals()),
- overwrite=True,
+ gscript.mapcalc(
+ "detachment = {detachment_value}".format(**locals()), overwrite=True
)
if not transport:
transport = "transport"
- gscript.run_command(
- "r.mapcalc",
- expression="transport = {transport_value}".format(**locals()),
- overwrite=True,
+ gscript.mapcalc(
+ "transport = {transport_value}".format(**locals()), overwrite=True
)
if not shearstress:
shearstress = "shearstress"
- gscript.run_command(
- "r.mapcalc",
- expression="shearstress = {shearstress_value}".format(**locals()),
- overwrite=True,
+ gscript.mapcalc(
+ "shearstress = {shearstress_value}".format(**locals()), overwrite=True
)
if not mass:
mass = "mass"
- gscript.run_command(
- "r.mapcalc",
- expression="mass = {mass_value}".format(**locals()),
- overwrite=True,
- )
+ gscript.mapcalc("mass = {mass_value}".format(**locals()), overwrite=True)
density = "density"
if density_raster:
# convert g/cm^3 to kg/m^3
- gscript.run_command(
- "r.mapcalc",
- expression="density = {density_raster} * 1000".format(**locals()),
- overwrite=True,
+ gscript.mapcalc(
+ "density = {density_raster} * 1000".format(**locals()), overwrite=True
)
else:
# convert g/cm^3 to kg/m^3
- gscript.run_command(
- "r.mapcalc",
- expression="density = {density_value} * 1000".format(**locals()),
- overwrite=True,
+ gscript.mapcalc(
+ "density = {density_value} * 1000".format(**locals()), overwrite=True
)
if not c_factor:
c_factor = "c_factor"
- gscript.run_command(
- "r.mapcalc",
- expression="c_factor = {c_factor_value}".format(**locals()),
- overwrite=True,
+ gscript.mapcalc(
+ "c_factor = {c_factor_value}".format(**locals()), overwrite=True
)
if not k_factor:
k_factor = "k_factor"
- gscript.run_command(
- "r.mapcalc",
- expression="k_factor = {k_factor_value}".format(**locals()),
- overwrite=True,
+ gscript.mapcalc(
+ "k_factor = {k_factor_value}".format(**locals()), overwrite=True
)
# copy the elevation raster if it is not in the current mapset
@@ -561,14 +533,10 @@ def main():
"g.list", type="raster", pattern=name, mapset=".", flags="m"
)
if not filename:
- gscript.run_command(
- "g.copy",
- raster="{fullname},{name}".format(fullname=elevation, name=name),
- overwrite=True,
- )
+ gscript.run_command("g.copy", raster=f"{elevation},{name}", overwrite=True)
elevation = name
- # create dynamic_evolution object
+ # create dynamic evolution object
dynamics = DynamicEvolution(
elevation=elevation,
mode=mode,
@@ -724,13 +692,8 @@ def compute_slope(self):
# assign variables
slope = "slope"
- aspect = "aspect"
dx = "dx"
dy = "dy"
- grow_slope = "grow_slope"
- grow_aspect = "grow_aspect"
- grow_dx = "grow_dx"
- grow_dy = "grow_dy"
# compute slope and partial derivatives
gscript.run_command(
@@ -739,58 +702,21 @@ def compute_slope(self):
slope=slope,
dx=dx,
dy=dy,
+ flags="e",
overwrite=True,
)
- # grow border to fix edge effects of moving window computations
- gscript.run_command(
- "r.grow.distance", input=slope, value=grow_slope, overwrite=True
- )
- gscript.run_command(
- "r.mapcalc",
- expression="{slope}={grow_slope}".format(
- slope=slope, grow_slope=grow_slope
- ),
- overwrite=True,
- )
- gscript.run_command("r.grow.distance", input=dx, value=grow_dx, overwrite=True)
- gscript.run_command(
- "r.mapcalc",
- expression="{dx}={grow_dx}".format(dx=dx, grow_dx=grow_dx),
- overwrite=True,
- )
- gscript.run_command("r.grow.distance", input=dy, value=grow_dy, overwrite=True)
- gscript.run_command(
- "r.mapcalc",
- expression="{dy}={grow_dy}".format(dy=dy, grow_dy=grow_dy),
- overwrite=True,
- )
-
- # remove temporary maps
- gscript.run_command(
- "g.remove",
- type="raster",
- name=["grow_slope", "grow_dx", "grow_dy"],
- flags="f",
- )
-
return slope, dx, dy
def simwe(self, dx, dy, depth):
- """hydrologic simulation using monte carlo path sampling method
+ """hydrologic simulation using a monte carlo path sampling method
to solve the shallow water flow equations"""
# assign variable
rain = "rain"
# hydrology parameters
- gscript.run_command(
- "r.mapcalc",
- expression="{rain} = {rain_intensity}*{runoff}".format(
- rain=rain, rain_intensity=self.rain_intensity, runoff=self.runoff
- ),
- overwrite=True,
- )
+ gscript.mapcalc(f"{rain} = {self.rain_intensity}*{self.runoff}", overwrite=True)
# hydrologic simulation
gscript.run_command(
@@ -821,12 +747,8 @@ def event_based_r_factor(self):
r_factor = "r_factor"
# derive rainfall energy (MJ ha^-1 mm^-1)
- gscript.run_command(
- "r.mapcalc",
- expression="{rain_energy}"
- "=0.29*(1.-(0.72*exp(-0.05*{rain_intensity})))".format(
- rain_energy=rain_energy, rain_intensity=self.rain_intensity
- ),
+ gscript.mapcalc(
+ f"{rain_energy}" f"=0.29*(1.-(0.72*exp(-0.05*{self.rain_intensity})))",
overwrite=True,
)
@@ -837,32 +759,21 @@ def event_based_r_factor(self):
* (rainfall interval (min)
* (1 hr / 60 min))
"""
- gscript.run_command(
- "r.mapcalc",
- expression="{rain_volume}"
- "= {rain_intensity}"
- "*({rain_interval}"
- "/60.)".format(
- rain_volume=rain_volume,
- rain_intensity=self.rain_intensity,
- rain_interval=self.rain_interval,
- ),
+ gscript.mapcalc(
+ f"{rain_volume}"
+ f"= {self.rain_intensity}"
+ f"*({self.rain_interval}"
+ f"/60.)",
overwrite=True,
)
# derive event erosivity index (MJ mm ha^-1 hr^-1)
- gscript.run_command(
- "r.mapcalc",
- expression="{erosivity}"
- "=({rain_energy}"
- "*{rain_volume})"
- "*{rain_intensity}"
- "*1.".format(
- erosivity=erosivity,
- rain_energy=rain_energy,
- rain_volume=rain_volume,
- rain_intensity=self.rain_intensity,
- ),
+ gscript.mapcalc(
+ f"{erosivity}"
+ f"=({rain_energy}"
+ f"*{rain_volume})"
+ f"*{self.rain_intensity}"
+ f"*1.",
overwrite=True,
)
@@ -873,14 +784,8 @@ def event_based_r_factor(self):
/ (rainfall interval (min)
* (1 yr / 525600 min))
"""
- gscript.run_command(
- "r.mapcalc",
- expression="{r_factor}"
- "={erosivity}"
- "/({rain_interval}"
- "/525600.)".format(
- r_factor=r_factor, erosivity=erosivity, rain_interval=self.rain_interval
- ),
+ gscript.mapcalc(
+ f"{r_factor}" f"={erosivity}" f"/({self.rain_interval}" f"/525600.)",
overwrite=True,
)
@@ -900,8 +805,6 @@ def gravitational_diffusion(self, evolved_elevation):
# assign variables
dxx = "dxx"
dyy = "dyy"
- grow_dxx = "grow_dxx"
- grow_dyy = "grow_dyy"
divergence = "divergence"
settled_elevation = "settled_elevation"
@@ -911,36 +814,14 @@ def gravitational_diffusion(self, evolved_elevation):
elevation=evolved_elevation,
dxx=dxx,
dyy=dyy,
+ flags="e",
overwrite=True,
)
- # grow border to fix edge effects of moving window computations
- gscript.run_command(
- "r.grow.distance", input=dxx, value=grow_dxx, overwrite=True
- )
- gscript.run_command(
- "r.mapcalc",
- expression="{dxx}={grow_dxx}".format(dxx=dxx, grow_dxx=grow_dxx),
- overwrite=True,
- )
- gscript.run_command(
- "r.grow.distance", input=dyy, value=grow_dyy, overwrite=True
- )
- gscript.run_command(
- "r.mapcalc",
- expression="{dyy}={grow_dyy}".format(dyy=dyy, grow_dyy=grow_dyy),
- overwrite=True,
- )
-
- # compute divergence
+ # compute the laplacian (m^-1)
+ # i.e. the divergence of the elevation gradient
# from the sum of the second order derivatives of elevation
- gscript.run_command(
- "r.mapcalc",
- expression="{divergence} = {dxx}+{dyy}".format(
- divergence=divergence, dxx=dxx, dyy=dyy
- ),
- overwrite=True,
- )
+ gscript.mapcalc(f"{divergence} = {dxx}+{dyy}", overwrite=True)
# compute settling caused by gravitational diffusion
"""
@@ -951,45 +832,24 @@ def gravitational_diffusion(self, evolved_elevation):
* gravitational diffusion coefficient (m^2/s)
* divergence (m^-1))
"""
- gscript.run_command(
- "r.mapcalc",
- expression="{settled_elevation}"
- "={evolved_elevation}"
- "-({rain_interval}*60"
- "/{density}"
- "*{grav_diffusion}"
- "*{divergence})".format(
- settled_elevation=settled_elevation,
- evolved_elevation=evolved_elevation,
- density=self.density,
- grav_diffusion=self.grav_diffusion,
- rain_interval=self.rain_interval,
- divergence=divergence,
- ),
+ gscript.mapcalc(
+ f"{settled_elevation}"
+ f"={evolved_elevation}"
+ f"-({self.rain_interval}*60"
+ f"/{self.density}"
+ f"*{self.grav_diffusion}"
+ f"*{divergence})",
overwrite=True,
)
# update elevation
- gscript.run_command(
- "r.mapcalc",
- expression="{evolved_elevation} = {settled_elevation}".format(
- evolved_elevation=evolved_elevation, settled_elevation=settled_elevation
- ),
- overwrite=True,
- )
+ gscript.mapcalc(f"{evolved_elevation} = {settled_elevation}", overwrite=True)
gscript.run_command("r.colors", map=evolved_elevation, color="elevation")
# remove temporary maps
gscript.run_command(
"g.remove",
type="raster",
- name=[
- "settled_elevation",
- "divergence",
- "dxx",
- "dyy",
- "grow_dxx",
- "grow_dyy",
- ],
+ name=["settled_elevation", "divergence", "dxx", "dyy"],
flags="f",
)
@@ -1012,13 +872,8 @@ def fill_sinks(self, evolved_elevation):
)
# update elevation
- gscript.run_command(
- "r.mapcalc",
- expression="{evolved_elevation} = {depressionless_elevation}".format(
- evolved_elevation=evolved_elevation,
- depressionless_elevation=depressionless_elevation,
- ),
- overwrite=True,
+ gscript.mapcalc(
+ f"{evolved_elevation} = {depressionless_elevation}", overwrite=True
)
gscript.run_command("r.colors", map=evolved_elevation, color="elevation")
@@ -1035,20 +890,9 @@ def fill_sinks(self, evolved_elevation):
def compute_difference(self, evolved_elevation, difference):
"""compute the change in elevation"""
- gscript.run_command(
- "r.mapcalc",
- expression="{difference} = {evolved_elevation}-{elevation}".format(
- difference=difference,
- evolved_elevation=evolved_elevation,
- elevation=self.elevation,
- ),
- overwrite=True,
+ gscript.mapcalc(
+ f"{difference} = {evolved_elevation}-{self.elevation}", overwrite=True
)
- # gscript.write_command(
- # 'r.colors',
- # map=difference,
- # rules='-',
- # stdin=difference_colors)
gscript.run_command("r.colors", map=difference, color="differences")
return difference
@@ -1059,7 +903,6 @@ def erosion_deposition(self):
# assign variables
erdep = "erdep" # kg/m^2s
- sedflux = "flux" # kg/ms
# parse, advance, and stamp time
(
@@ -1096,17 +939,11 @@ def erosion_deposition(self):
)
# filter outliers
- gscript.run_command(
- "r.mapcalc",
- expression="{erosion_deposition}"
- "=if({erdep}<{erdepmin},"
- "{erdepmin},"
- "if({erdep}>{erdepmax},{erdepmax},{erdep}))".format(
- erosion_deposition=erosion_deposition,
- erdep=erdep,
- erdepmin=self.erdepmin,
- erdepmax=self.erdepmax,
- ),
+ gscript.mapcalc(
+ f"{erosion_deposition}"
+ f"=if({erdep}<{self.erdepmin},"
+ f"{self.erdepmin},"
+ f"if({erdep}>{self.erdepmax},{self.erdepmax},{erdep}))",
overwrite=True,
)
gscript.run_command("r.colors", map=erosion_deposition, raster=erdep)
@@ -1118,19 +955,12 @@ def erosion_deposition(self):
* net erosion-deposition (kg/m^2s)
/ sediment mass density (kg/m^3)
"""
- gscript.run_command(
- "r.mapcalc",
- expression="{evolved_elevation}"
- "={elevation}"
- "+({rain_interval}*60"
- "*{erosion_deposition}"
- "/{density})".format(
- evolved_elevation=evolved_elevation,
- elevation=self.elevation,
- rain_interval=self.rain_interval,
- erosion_deposition=erosion_deposition,
- density=self.density,
- ),
+ gscript.mapcalc(
+ f"{evolved_elevation}"
+ f"={self.elevation}"
+ f"+({self.rain_interval}*60"
+ f"*{erosion_deposition}"
+ f"/{self.density})",
overwrite=True,
)
@@ -1165,10 +995,6 @@ def usped(self):
qsxdx = "qsxdx"
qsy = "qsy"
qsydy = "qsydy"
- grow_slope = "grow_slope"
- grow_aspect = "grow_aspect"
- grow_qsxdx = "grow_qsxdx"
- grow_qsydy = "grow_qsydy"
erdep = "erdep" # kg/m^2s
sedflow = "sedflow"
@@ -1191,28 +1017,7 @@ def usped(self):
elevation=self.elevation,
slope=slope,
aspect=aspect,
- overwrite=True,
- )
-
- # grow border to fix edge effects of moving window computations
- gscript.run_command(
- "r.grow.distance", input=slope, value=grow_slope, overwrite=True
- )
- gscript.run_command(
- "r.mapcalc",
- expression="{slope}={grow_slope}".format(
- slope=slope, grow_slope=grow_slope
- ),
- overwrite=True,
- )
- gscript.run_command(
- "r.grow.distance", input=aspect, value=grow_aspect, overwrite=True
- )
- gscript.run_command(
- "r.mapcalc",
- expression="{aspect}={grow_aspect}".format(
- aspect=aspect, grow_aspect=grow_aspect
- ),
+ flags="e",
overwrite=True,
)
@@ -1226,23 +1031,13 @@ def usped(self):
)
region = gscript.parse_command("g.region", flags="g")
res = region["nsres"]
- gscript.run_command(
- "r.mapcalc",
- expression="{depth}"
- "=({flowacc}*{res})".format(depth=depth, flowacc=flowacc, res=res),
- overwrite=True,
- )
+ gscript.mapcalc(f"{depth}=({flowacc}*{res})", overwrite=True)
# add depression parameter to r.watershed
# derive from landcover class
# compute dimensionless topographic factor
- gscript.run_command(
- "r.mapcalc",
- expression="{ls_factor}"
- "=({flowacc}^{m})*(sin({slope})^{n})".format(
- ls_factor=ls_factor, m=self.m, flowacc=depth, slope=slope, n=self.n
- ),
- overwrite=True,
+ gscript.mapcalc(
+ f"{ls_factor}=({depth}^{self.m})*(sin({slope})^{self.n})", overwrite=True
)
# compute sediment flow at sediment transport capacity
@@ -1257,26 +1052,18 @@ def usped(self):
LST is the topographic component of sediment transport capacity
of overland flow
"""
- gscript.run_command(
- "r.mapcalc",
- expression="{sedflow}"
- "={r_factor}"
- "*{k_factor}"
- "*{c_factor}"
- "*{ls_factor}".format(
- r_factor=r_factor,
- k_factor=self.k_factor,
- c_factor=self.c_factor,
- ls_factor=ls_factor,
- sedflow=sedflow,
- ),
+ gscript.mapcalc(
+ f"{sedflow}"
+ f"={r_factor}"
+ f"*{self.k_factor}"
+ f"*{self.c_factor}"
+ f"*{ls_factor}",
overwrite=True,
)
# convert sediment flow from tons/ha/yr to kg/m^2s
- gscript.run_command(
- "r.mapcalc",
- expression="{converted_sedflow}"
+ gscript.mapcalc(
+ "{converted_sedflow}"
"={sedflow}"
"*{ton_to_kg}"
"/{ha_to_m2}"
@@ -1291,75 +1078,33 @@ def usped(self):
)
# compute sediment flow rate in x direction (m^2/s)
- gscript.run_command(
- "r.mapcalc",
- expression="{qsx}={sedflow}*cos({aspect})".format(
- sedflow=sediment_flux, aspect=aspect, qsx=qsx
- ),
- overwrite=True,
- )
+ gscript.mapcalc(f"{qsx}={sediment_flux}*cos({aspect})", overwrite=True)
# compute sediment flow rate in y direction (m^2/s)
- gscript.run_command(
- "r.mapcalc",
- expression="{qsy}={sedflow}*sin({aspect})".format(
- sedflow=sediment_flux, aspect=aspect, qsy=qsy
- ),
- overwrite=True,
- )
+ gscript.mapcalc(f"{qsy}={sediment_flux}*sin({aspect})", overwrite=True)
# compute change in sediment flow in x direction
# as partial derivative of sediment flow field
- gscript.run_command("r.slope.aspect", elevation=qsx, dx=qsxdx, overwrite=True)
+ gscript.run_command(
+ "r.slope.aspect", elevation=qsx, dx=qsxdx, flags="e", overwrite=True
+ )
# compute change in sediment flow in y direction
# as partial derivative of sediment flow field
- gscript.run_command("r.slope.aspect", elevation=qsy, dy=qsydy, overwrite=True)
-
- # grow border to fix edge effects of moving window computations
- gscript.run_command(
- "r.grow.distance", input=qsxdx, value=grow_qsxdx, overwrite=True
- )
- gscript.run_command(
- "r.mapcalc",
- expression="{qsxdx}={grow_qsxdx}".format(
- qsxdx=qsxdx, grow_qsxdx=grow_qsxdx
- ),
- overwrite=True,
- )
- gscript.run_command(
- "r.grow.distance", input=qsydy, value=grow_qsydy, overwrite=True
- )
gscript.run_command(
- "r.mapcalc",
- expression="{qsydy}={grow_qsydy}".format(
- qsydy=qsydy, grow_qsydy=grow_qsydy
- ),
- overwrite=True,
+ "r.slope.aspect", elevation=qsy, dy=qsydy, flags="e", overwrite=True
)
# compute net erosion-deposition (kg/m^2s)
# as divergence of sediment flow
- gscript.run_command(
- "r.mapcalc",
- expression="{erdep} = {qsxdx} + {qsydy}".format(
- erdep=erdep, qsxdx=qsxdx, qsydy=qsydy
- ),
- overwrite=True,
- )
+ gscript.mapcalc(f"{erdep} = {qsxdx} + {qsydy}", overwrite=True)
# filter outliers
- gscript.run_command(
- "r.mapcalc",
- expression="{erosion_deposition}"
- "=if({erdep}<{erdepmin},"
- "{erdepmin},"
- "if({erdep}>{erdepmax},{erdepmax},{erdep}))".format(
- erosion_deposition=erosion_deposition,
- erdep=erdep,
- erdepmin=self.erdepmin,
- erdepmax=self.erdepmax,
- ),
+ gscript.mapcalc(
+ f"{erosion_deposition}"
+ f"=if({erdep}<{self.erdepmin},"
+ f"{self.erdepmin},"
+ f"if({erdep}>{self.erdepmax},{self.erdepmax},{erdep}))",
overwrite=True,
)
@@ -1375,19 +1120,12 @@ def usped(self):
* net erosion-deposition (kg/m^2s)
/ sediment mass density (kg/m^3)
"""
- gscript.run_command(
- "r.mapcalc",
- expression="{evolved_elevation}"
- "={elevation}"
- "+({rain_interval}*60"
- "*{erosion_deposition}"
- "/{density})".format(
- evolved_elevation=evolved_elevation,
- elevation=self.elevation,
- rain_interval=self.rain_interval,
- erosion_deposition=erosion_deposition,
- density=self.density,
- ),
+ gscript.mapcalc(
+ f"{evolved_elevation}"
+ f"={self.elevation}"
+ f"+({self.rain_interval}*60"
+ f"*{erosion_deposition}"
+ f"/{self.density})",
overwrite=True,
)
@@ -1409,10 +1147,6 @@ def usped(self):
"qsy",
"qsxdx",
"qsydy",
- "grow_slope",
- "grow_aspect",
- "grow_qsxdx",
- "grow_qsydy",
"erdep",
"sedflow",
"r_factor",
@@ -1431,7 +1165,6 @@ def rusle(self):
# assign variables
ls_factor = "ls_factor"
slope = "slope"
- grow_slope = "grow_slope"
flowacc = "flowacc"
sedflow = "sedflow"
sedflux = "flux"
@@ -1451,18 +1184,10 @@ def rusle(self):
# compute slope
gscript.run_command(
- "r.slope.aspect", elevation=self.elevation, slope=slope, overwrite=True
- )
-
- # grow border to fix edge effects of moving window computations
- gscript.run_command(
- "r.grow.distance", input=slope, value=grow_slope, overwrite=True
- )
- gscript.run_command(
- "r.mapcalc",
- expression="{slope}={grow_slope}".format(
- slope=slope, grow_slope=grow_slope
- ),
+ "r.slope.aspect",
+ elevation=self.elevation,
+ slope=slope,
+ flags="e",
overwrite=True,
)
@@ -1476,22 +1201,14 @@ def rusle(self):
)
region = gscript.parse_command("g.region", flags="g")
res = region["nsres"]
- gscript.run_command(
- "r.mapcalc",
- expression="{depth}"
- "=({flowacc}*{res})".format(depth=depth, flowacc=flowacc, res=res),
- overwrite=True,
- )
+ gscript.mapcalc(f"{depth}=({flowacc}*{res})", overwrite=True)
# compute dimensionless topographic factor
- gscript.run_command(
- "r.mapcalc",
- expression="{ls_factor}"
- "=({m}+1.0)"
- "*(({flowacc}/22.1)^{m})"
- "*((sin({slope})/5.14)^{n})".format(
- ls_factor=ls_factor, m=self.m, flowacc=depth, slope=slope, n=self.n
- ),
+ gscript.mapcalc(
+ f"{ls_factor}"
+ f"=({self.m}+1.0)"
+ f"*(({depth}/22.1)^{self.m})"
+ f"*((sin({slope})/5.14)^{self.n})",
overwrite=True,
)
@@ -1505,26 +1222,18 @@ def rusle(self):
C is a dimensionless land cover factor
P is a dimensionless prevention measures factor
"""
- gscript.run_command(
- "r.mapcalc",
- expression="{sedflow}"
- "={r_factor}"
- "*{k_factor}"
- "*{ls_factor}"
- "*{c_factor}".format(
- sedflow=sedflow,
- r_factor=r_factor,
- k_factor=self.k_factor,
- ls_factor=ls_factor,
- c_factor=self.c_factor,
- ),
+ gscript.mapcalc(
+ f"{sedflow}"
+ f"={r_factor}"
+ f"*{self.k_factor}"
+ f"*{ls_factor}"
+ f"*{self.c_factor}",
overwrite=True,
)
# convert sediment flow from tons/ha/yr to kg/m^2s
- gscript.run_command(
- "r.mapcalc",
- expression="{converted_sedflow}"
+ gscript.mapcalc(
+ "{converted_sedflow}"
"={sedflow}"
"*{ton_to_kg}"
"/{ha_to_m2}"
@@ -1539,12 +1248,9 @@ def rusle(self):
)
# filter outliers
- gscript.run_command(
- "r.mapcalc",
- expression="{sediment_flux}"
- "=if({sedflux}>{erdepmax},{erdepmax},{sedflux})".format(
- sediment_flux=sediment_flux, sedflux=sedflux, erdepmax=self.erdepmax
- ),
+ gscript.mapcalc(
+ f"{sediment_flux}"
+ f"=if({sedflux}>{self.erdepmax},{self.erdepmax},{sedflux})",
overwrite=True,
)
gscript.run_command("r.colors", map=sediment_flux, color="viridis", flags="g")
@@ -1556,19 +1262,12 @@ def rusle(self):
* sediment flux (kg/ms)
/ mass of sediment per unit area (kg/m^2)
"""
- gscript.run_command(
- "r.mapcalc",
- expression="{evolved_elevation}"
- "={elevation}"
- "-({rain_interval}*60"
- "*{sediment_flux}"
- "/{mass})".format(
- evolved_elevation=evolved_elevation,
- elevation=self.elevation,
- rain_interval=self.rain_interval,
- sediment_flux=sediment_flux,
- mass=self.mass,
- ),
+ gscript.mapcalc(
+ f"{evolved_elevation}"
+ f"={self.elevation}"
+ f"-({self.rain_interval}*60"
+ f"*{sediment_flux}"
+ f"/{self.mass})",
overwrite=True,
)
@@ -1584,7 +1283,6 @@ def rusle(self):
type="raster",
name=[
"slope",
- "grow_slope",
"flowacc",
"sedflow",
"flux",
@@ -1605,6 +1303,7 @@ def __init__(
elevation,
mode,
precipitation,
+ start,
rain_intensity,
rain_duration,
rain_interval,
@@ -1624,7 +1323,6 @@ def __init__(
difference_timeseries,
difference_title,
difference_description,
- start,
walkers,
runoff,
mannings,
@@ -1789,30 +1487,18 @@ def rainfall_event(self):
if i > 0:
# derive excess water (mm/hr) from rainfall rate (mm/hr)
# plus the depth (m) per rainfall interval (min)
- gscript.run_command(
- "r.mapcalc",
- expression="{rain_excess}"
- "={rain_intensity}"
- "+{depth}"
- "/1000."
- "/{rain_interval}"
- "*60.".format(
- rain_excess=rain_excess,
- rain_intensity=self.rain_intensity,
- depth=depth,
- rain_interval=self.rain_interval,
- ),
+ gscript.mapcalc(
+ f"{rain_excess}"
+ f"={self.rain_intensity}"
+ f"+{depth}"
+ f"/1000."
+ f"/{self.rain_interval}"
+ f"*60.",
overwrite=True,
)
# update excess rainfall
rain_intensity = "rain_intensity"
- gscript.run_command(
- "r.mapcalc",
- expression="{rain_intensity} = {rain_excess}".format(
- rain_intensity="rain_intensity", rain_excess=rain_excess
- ),
- overwrite=True,
- )
+ gscript.mapcalc(f"{rain_intensity} = {rain_excess}", overwrite=True)
evol.rain_intensity = rain_intensity
# determine mode and run model
@@ -1848,7 +1534,7 @@ def rainfall_event(self):
) = evol.rusle()
else:
- raise RuntimeError("{mode} mode does not exist").format(mode=self.mode)
+ raise RuntimeError(f"{self.mode} mode does not exist")
# register the evolved maps
gscript.run_command(
@@ -1923,15 +1609,8 @@ def rainfall_event(self):
i = i + 1
# compute net elevation change
- gscript.run_command(
- "r.mapcalc",
- expression="{net_difference}"
- "={evolved_elevation}-{elevation}".format(
- net_difference=net_difference,
- elevation=self.elevation,
- evolved_elevation=evol.elevation,
- ),
- overwrite=True,
+ gscript.mapcalc(
+ f"{net_difference}={evol.elevation}-{self.elevation}", overwrite=True
)
gscript.write_command(
"r.colors", map=net_difference, rules="-", stdin=difference_colors
@@ -1948,7 +1627,6 @@ def rainfall_series(self):
raster = "raster"
rain_excess = "rain_excess"
net_difference = "net_difference"
- # iterations = sum(1 for row in precip)
# create a raster space time dataset
gscript.run_command(
@@ -2016,6 +1694,7 @@ def rainfall_series(self):
start=self.start,
rain_intensity=self.rain_intensity,
rain_interval=self.rain_interval,
+ rain_duration=self.rain_duration,
walkers=self.walkers,
runoff=self.runoff,
mannings=self.mannings,
@@ -2036,10 +1715,10 @@ def rainfall_series(self):
)
# open txt file with precipitation data
- with open(evol.precipitation) as csvfile:
+ with open(evol.precipitation, newline="") as csvfile:
# check for header
- has_header = csv.Sniffer().has_header(csvfile.read(1024))
+ has_header = csv.Sniffer().has_header(csvfile.readline())
# rewind
csvfile.seek(0)
@@ -2057,16 +1736,11 @@ def rainfall_series(self):
evol.rain_intensity = "rain_intensity"
# compute rainfall intensity (mm/hr)
# from rainfall observation (mm)
- gscript.run_command(
- "r.mapcalc",
- expression="{rain_intensity}"
- "={rain_observation}"
- "/{rain_interval}"
- "*60.".format(
- rain_intensity=evol.rain_intensity,
- rain_observation=float(initial[1]),
- rain_interval=self.rain_interval,
- ),
+ gscript.mapcalc(
+ f"{evol.rain_intensity}"
+ f"={float(initial[1])}"
+ f"/{self.rain_interval}"
+ f"*60.",
overwrite=True,
)
@@ -2103,7 +1777,7 @@ def rainfall_series(self):
) = evol.rusle()
else:
- raise RuntimeError("{mode} mode does not exist").format(mode=self.mode)
+ raise RuntimeError(f"{self.mode} mode does not exist")
# register the evolved maps
gscript.run_command(
@@ -2175,45 +1849,28 @@ def rainfall_series(self):
# compute rainfall intensity (mm/hr)
# from rainfall observation (mm)
rain_intensity = "rain_intensity"
- gscript.run_command(
- "r.mapcalc",
- expression="{rain_intensity}"
- "={rain_observation}"
- "/{rain_interval}"
- "*60.".format(
- rain_intensity=rain_intensity,
- rain_observation=float(row[1]),
- rain_interval=self.rain_interval,
- ),
+ gscript.mapcalc(
+ f"{rain_intensity}"
+ f"={float(row[1])}"
+ f"/{self.rain_interval}"
+ f"*60.",
overwrite=True,
)
# derive excess water (mm/hr) from rainfall rate (mm/hr)
# plus the depth (m) per rainfall interval (min)
- gscript.run_command(
- "r.mapcalc",
- expression="{rain_excess}"
- "={rain_intensity}"
- "+{depth}"
- "/1000."
- "/{rain_interval}"
- "*60.".format(
- rain_excess=rain_excess,
- rain_intensity=rain_intensity,
- depth=depth,
- rain_interval=self.rain_interval,
- ),
+ gscript.mapcalc(
+ f"{rain_excess}"
+ f"={rain_intensity}"
+ f"+{depth}"
+ f"/1000."
+ f"/{self.rain_interval}"
+ f"*60.",
overwrite=True,
)
# update excess rainfall
- gscript.run_command(
- "r.mapcalc",
- expression="{rain_intensity} = {rain_excess}".format(
- rain_intensity="rain_intensity", rain_excess=rain_excess
- ),
- overwrite=True,
- )
+ gscript.mapcalc(f"{rain_intensity} = {rain_excess}", overwrite=True)
evol.rain_intensity = rain_intensity
# determine mode and run model
@@ -2251,9 +1908,7 @@ def rainfall_series(self):
) = evol.rusle()
else:
- raise RuntimeError("{mode} mode does not exist").format(
- mode=self.mode
- )
+ raise RuntimeError(f"{self.mode} mode does not exist")
# register the evolved maps
gscript.run_command(
@@ -2312,22 +1967,17 @@ def rainfall_series(self):
flags="i",
overwrite=True,
)
-
- # remove temporary maps
- gscript.run_command(
- "g.remove", type="raster", name=["rain_excess"], flags="f"
- )
+ try:
+ # remove temporary maps
+ gscript.run_command(
+ "g.remove", type="raster", name=["rain_excess"], flags="f"
+ )
+ except (CalledModuleError):
+ pass
# compute net elevation change
- gscript.run_command(
- "r.mapcalc",
- expression="{net_difference}"
- "= {evolved_elevation}-{elevation}".format(
- net_difference=net_difference,
- elevation=self.elevation,
- evolved_elevation=evol.elevation,
- ),
- overwrite=True,
+ gscript.mapcalc(
+ f"{net_difference} = {evol.elevation}-{self.elevation}", overwrite=True
)
gscript.write_command(
"r.colors", map=net_difference, rules="-", stdin=difference_colors
@@ -2377,14 +2027,6 @@ def cleanup():
"qsydy",
"slope",
"aspect",
- "grow_slope",
- "grow_aspect",
- "grow_dx",
- "grow_dy",
- "grow_dxx",
- "grow_dyy",
- "grow_qsxdx",
- "grow_qsydy",
],
flags="f",
)