123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- """Test to verify r.gwflow calculation, this calculation is based on
- the example at page 133 of the following book:
- author = "Kinzelbach, W. and Rausch, R.",
- title = "Grundwassermodellierung",
- publisher = "Gebr{\"u}der Borntraeger (Berlin, Stuttgart)",
- year = "1995"
- @author Soeren Gebbert
- """
- from grass.gunittest.case import TestCase
- class Validation7x7Grid(TestCase):
- @classmethod
- def setUpClass(cls):
- """Use temporary region settings"""
- cls.use_temp_region()
- cls.runModule("g.region", res=100, n=700, s=0, w=0, e=700)
- @classmethod
- def tearDownClass(cls):
- """!Remove the temporary region
- """
- cls.del_temp_region()
- def setUp(self):
- """Create input data for transient groundwater flow computation
- """
- self.runModule("r.mapcalc", expression="phead=50")
- self.runModule("r.mapcalc", expression="status=if(col() == 1 || col() == 7 , 2, 1)")
- self.runModule("r.mapcalc", expression="well=if((row() == 4 && col() == 4), -0.1, 0)")
- self.runModule("r.mapcalc", expression="hydcond=0.0005")
- self.runModule("r.mapcalc", expression="recharge=0")
- self.runModule("r.mapcalc", expression="top_conf=20")
- self.runModule("r.mapcalc", expression="bottom=0")
- self.runModule("r.mapcalc", expression="s=0.0001")
- self.runModule("r.mapcalc", expression="null=0.0")
- def test_transient(self):
- #First compute the groundwater flow after 500 seconds to have initial conditions
- self.assertModule("r.gwflow", flags="f", solver="cholesky", top="top_conf", bottom="bottom", phead="phead",\
- status="status", hc_x="hydcond", hc_y="hydcond", q="well", s="s",\
- recharge="recharge", output="gwresult_conf", dtime=500, type="confined", budget="water_budget", overwrite=True)
- # loop over the timesteps each 500 seconds
- for i in range(20):
- self.assertModule("r.gwflow", flags="f", solver="cholesky", top="top_conf", bottom="bottom", phead="gwresult_conf",\
- status="status", hc_x="hydcond", hc_y="hydcond", q="well", s="s",\
- recharge="recharge", output="gwresult_conf", dtime=500, type="confined", budget="water_budget", overwrite=True)
- # Output of r.univar
- univar_string="""n=49
- null_cells=0
- cells=49
- min=45.1219899394172
- max=50
- range=4.8780100605828
- mean=49.081632669812
- mean_of_abs=49.081632669812
- stddev=0.908558909200636
- variance=0.825479291487849
- coeff_var=1.85111794326975
- sum=2405.00000082079"""
-
- # Output of r.info, only a subset of the output is needed
- info_string="""north=700
- south=0
- east=700
- west=0
- nsres=100
- ewres=100
- rows=7
- cols=7
- cells=49
- datatype=DCELL
- ncats=0
- min=45.1219899394172
- max=50
- map=gwresult_conf"""
-
- self.assertRasterFitsUnivar(raster="gwresult_conf", reference=univar_string, precision=3)
- self.assertRasterFitsInfo(raster="gwresult_conf", reference=info_string, precision=3)
- if __name__ == '__main__':
- from grass.gunittest.main import test
- test()
|