diff --git a/.docs/Notebooks/mfusg_transport_Ex1_1D.py b/.docs/Notebooks/mfusg_transport_tutorial01_1D.py similarity index 98% rename from .docs/Notebooks/mfusg_transport_Ex1_1D.py rename to .docs/Notebooks/mfusg_transport_tutorial01_1D.py index f289a66189..46cf29adcf 100644 --- a/.docs/Notebooks/mfusg_transport_Ex1_1D.py +++ b/.docs/Notebooks/mfusg_transport_tutorial01_1D.py @@ -41,8 +41,8 @@ import numpy as np import flopy -from flopy.mfusg import MfUsg, MfUsgBct, MfUsgLpf, MfUsgOc, MfUsgPcb, MfUsgSms -from flopy.modflow import ModflowBas, ModflowDis +from flopy.mfusg import MfUsg, MfUsgBas, MfUsgBct, MfUsgLpf, MfUsgOc, MfUsgPcb, MfUsgSms +from flopy.modflow import ModflowDis from flopy.utils import HeadFile # - @@ -95,7 +95,7 @@ strt = np.full((nlay, nrow, ncol), 100.0) strt[:, :, 0] = 1100.0 -bas = ModflowBas(mf, ibound=ibound, strt=strt) +bas = MfUsgBas(mf, ibound=ibound, strt=strt) # - # + diff --git a/.docs/Notebooks/mfusg_transport_Ex2_Radial.py b/.docs/Notebooks/mfusg_transport_tutorial02_Radial.py similarity index 96% rename from .docs/Notebooks/mfusg_transport_Ex2_Radial.py rename to .docs/Notebooks/mfusg_transport_tutorial02_Radial.py index 22915173c7..92580d2cd8 100644 --- a/.docs/Notebooks/mfusg_transport_Ex2_Radial.py +++ b/.docs/Notebooks/mfusg_transport_tutorial02_Radial.py @@ -44,8 +44,8 @@ import numpy as np import flopy -from flopy.mfusg import MfUsg, MfUsgBct, MfUsgLpf, MfUsgOc, MfUsgSms, MfUsgWel -from flopy.modflow import ModflowBas, ModflowChd, ModflowDis +from flopy.mfusg import MfUsg, MfUsgBas, MfUsgBct, MfUsgLpf, MfUsgOc, MfUsgSms, MfUsgWel +from flopy.modflow import ModflowChd, ModflowDis from flopy.utils import HeadFile # - @@ -101,7 +101,7 @@ strt[:, :, 0] = 20.0 strt[:, :, -1] = 20.0 -bas = ModflowBas(mf, ibound=ibound, strt=strt) +bas = MfUsgBas(mf, ibound=ibound, strt=strt) # - # + ipakcb = 50 diff --git a/.docs/Notebooks/mfusg_transport_Ex3_Conduit.py b/.docs/Notebooks/mfusg_transport_tutorial03_Conduit.py similarity index 97% rename from .docs/Notebooks/mfusg_transport_Ex3_Conduit.py rename to .docs/Notebooks/mfusg_transport_tutorial03_Conduit.py index c98221f375..3764b1999f 100644 --- a/.docs/Notebooks/mfusg_transport_Ex3_Conduit.py +++ b/.docs/Notebooks/mfusg_transport_tutorial03_Conduit.py @@ -38,8 +38,17 @@ import numpy as np import flopy -from flopy.mfusg import MfUsg, MfUsgBcf, MfUsgBct, MfUsgCln, MfUsgOc, MfUsgSms, MfUsgWel -from flopy.modflow import ModflowBas, ModflowChd, ModflowDis +from flopy.mfusg import ( + MfUsg, + MfUsgBas, + MfUsgBcf, + MfUsgBct, + MfUsgCln, + MfUsgOc, + MfUsgSms, + MfUsgWel, +) +from flopy.modflow import ModflowChd, ModflowDis from flopy.plot import PlotCrossSection, PlotMapView from flopy.utils import HeadFile @@ -98,7 +107,7 @@ strt[1, :, 0] = 60.0 strt[1, :, -1] = 60.0 -bas = ModflowBas(mf, ibound=ibound, strt=strt) +bas = MfUsgBas(mf, ibound=ibound, strt=strt) bas.ibound.fmtin = "(25I3)" bas.strt.fmtin = "(10e12.4)" # - diff --git a/.docs/Notebooks/mfusg_transport_Ex4_DualDomain.py b/.docs/Notebooks/mfusg_transport_tutorial04_DualDomain.py similarity index 96% rename from .docs/Notebooks/mfusg_transport_Ex4_DualDomain.py rename to .docs/Notebooks/mfusg_transport_tutorial04_DualDomain.py index 92ed5e979e..b0b5d264d7 100644 --- a/.docs/Notebooks/mfusg_transport_Ex4_DualDomain.py +++ b/.docs/Notebooks/mfusg_transport_tutorial04_DualDomain.py @@ -63,8 +63,17 @@ import numpy as np import flopy -from flopy.mfusg import MfUsg, MfUsgBcf, MfUsgBct, MfUsgDpt, MfUsgOc, MfUsgPcb, MfUsgSms -from flopy.modflow import ModflowBas, ModflowChd, ModflowDis +from flopy.mfusg import ( + MfUsg, + MfUsgBas, + MfUsgBcf, + MfUsgBct, + MfUsgDpt, + MfUsgOc, + MfUsgPcb, + MfUsgSms, +) +from flopy.modflow import ModflowChd, ModflowDis from flopy.utils import HeadFile # - @@ -121,7 +130,7 @@ strt[:, :, 0] = 10.0 strt[:, :, -1] = 9.0 -bas = ModflowBas(mf, ibound=ibound, strt=strt) +bas = MfUsgBas(mf, ibound=ibound, strt=strt) # - # + tran = 1000.0 diff --git a/.docs/Notebooks/mfusg_transport_Ex5_Henry.py b/.docs/Notebooks/mfusg_transport_tutorial05_Henry.py similarity index 98% rename from .docs/Notebooks/mfusg_transport_Ex5_Henry.py rename to .docs/Notebooks/mfusg_transport_tutorial05_Henry.py index 69c5153f4b..c453992602 100644 --- a/.docs/Notebooks/mfusg_transport_Ex5_Henry.py +++ b/.docs/Notebooks/mfusg_transport_tutorial05_Henry.py @@ -33,6 +33,7 @@ import flopy from flopy.mfusg import ( MfUsg, + MfUsgBas, MfUsgBct, MfUsgDdf, MfUsgDisU, @@ -42,7 +43,7 @@ MfUsgSms, MfUsgWel, ) -from flopy.modflow import ModflowBas, ModflowChd, ModflowDis +from flopy.modflow import ModflowChd, ModflowDis from flopy.plot import PlotCrossSection from flopy.utils import HeadUFile from flopy.utils.gridgen import Gridgen @@ -52,7 +53,7 @@ model_ws = "Ex5_Henry" mf = MfUsg( version="mfusg", - structured=True, + structured=False, model_ws=model_ws, modelname="Ex5_Henry", exe_name="mfusg_gsi", @@ -91,7 +92,7 @@ # mf.modelgrid = ugrid # - # + -bas = ModflowBas(mf) +bas = MfUsgBas(mf) # - # + ipakcb = 53 diff --git a/.docs/Notebooks/mfusg_transport_Ex6_Stallman_Heat_Transport.py b/.docs/Notebooks/mfusg_transport_tutorial06_StallmanHeatTransport.py similarity index 88% rename from .docs/Notebooks/mfusg_transport_Ex6_Stallman_Heat_Transport.py rename to .docs/Notebooks/mfusg_transport_tutorial06_StallmanHeatTransport.py index a958b93041..0c659dc834 100644 --- a/.docs/Notebooks/mfusg_transport_Ex6_Stallman_Heat_Transport.py +++ b/.docs/Notebooks/mfusg_transport_tutorial06_StallmanHeatTransport.py @@ -33,6 +33,7 @@ import flopy from flopy.mfusg import ( MfUsg, + MfUsgBas, MfUsgBct, MfUsgDdf, MfUsgDisU, @@ -42,7 +43,7 @@ MfUsgSms, MfUsgWel, ) -from flopy.modflow import ModflowBas, ModflowChd, ModflowDis +from flopy.modflow import ModflowChd, ModflowDis from flopy.plot import PlotCrossSection from flopy.utils import HeadUFile from flopy.utils.gridgen import Gridgen @@ -52,7 +53,7 @@ model_ws = "Ex6a_Stallman_Heat" mf = MfUsg( version="mfusg", - structured=True, + structured=False, model_ws=model_ws, modelname="Ex6_Stallman", exe_name="mfusg_gsi", @@ -103,7 +104,7 @@ # - # + -bas = ModflowBas(mf, strt=60.0) +bas = MfUsgBas(mf, strt=60.0) # - # + @@ -310,29 +311,29 @@ success, buff = mf.run_model(silent=True) # - # + -# vartype = [ -# ("kstp", "0 convertible - <0 convertible unless the THICKSTRT option is in effect. - (default is 0). + type (default is 0). + 0 is confined + >0 is convertible + <0 is convertible unless the THICKSTRT option is in effect. + =4 is convertible, with transmissivity computed using upstream + water-table depth. + =5 is richards equation for variably saturated flow. layavg : int or array of ints (nlay) Layer average 0 is harmonic mean @@ -123,7 +125,7 @@ class MfUsgLpf(ModflowLpf): When STORAGECOEFFICIENT is used, Ss is confined storage coefficient. (default is 1.e-5). sy : float or array of floats (nlay, nrow, ncol) - is specific yield. + is specific yield or the saturated water content if richards is used. (default is 0.15). vkcb : float or array of floats (nlay, nrow, ncol) is the vertical hydraulic conductivity of a Quasi-three-dimensional @@ -160,7 +162,20 @@ class MfUsgLpf(ModflowLpf): 5-8 of USGS Techniques and Methods Report 6-A16 and the vertical conductance correction described on p. 5-18 of that report. (default is False). - extension : string + bubblept : boolean + turns on the use of the bubbling point pressure in the unsaturated zone + calculation such that gas saturations are represented. + alpha : float or array of floats (nlay, nrow, ncol) + is the van Genuchten shape parameter alpha + beta : float or array of floats (nlay, nrow, ncol) + is the van Genuchten shape parameter beta (also called n sometimes) + sr : float or array of floats (nlay, nrow, ncol) + is the residual saturation (equal to theta_r/theta_s) + brook : float or array of floats (nlay, nrow, ncol) + is the Brooks-Corey shape parameter for the hydraulic conductivity function + bp : float or array of floats (nlay, nrow, ncol) + is the bubbling point pressure / air entry head. Requires bubblept to be True. + extension : string Filename extension (default is 'lpf') unitnumber : int File unit number (default is None). @@ -233,11 +248,11 @@ def __init__( novfc=False, bubblept=False, fullydry=False, - alpha=0, - beta=0, - sr=0, - brook=0, - bp=0, + alpha=1.0, + beta=7.0, + sr=0.05, + brook=6.0, + bp=0.0, extension="lpf", unitnumber=None, filenames=None, @@ -320,8 +335,17 @@ def __init__( model, (njag,), np.float32, ksat, "ksat", locat=self.unit_number[0] ) - bas = model.get_package("BAS6") - self.richards = bas.richards + if self.laytyp == 5: + self.richards = True + bas = model.get_package("BAS6") + if not hasattr(bas, "richards") or not bas.richards: + raise ValueError( + "The MfUsgBas package must have richards=True" + "when using laytyp=5 in the LPF package." + ) + else: + self.richards = False + self.bubblept = bubblept self.fullydry = fullydry diff --git a/flopy/utils/gridgen.py b/flopy/utils/gridgen.py index 5401daded5..efe66c82c8 100644 --- a/flopy/utils/gridgen.py +++ b/flopy/utils/gridgen.py @@ -1225,6 +1225,34 @@ def get_angldegx(self, fldr=None): angldegx = np.where(fldr == -2, 270, angldegx) return angldegx + def get_anglex(self, fldr=None): + """ + Get the anglex array + + Parameters + ---------- + fldr : ndarray + Flow direction indicator array. If None, then it is read from + gridgen output. + + Returns + ------- + anglex : ndarray + A 1D vector indicating the angle (in radians) between the x + axis and an outward normal to the face. + + """ + + if fldr is None: + fldr = self.get_fldr() + anglex = np.zeros(fldr.shape, dtype=float) + anglex = np.where(fldr == 0, 0.0, anglex) + anglex = np.where(abs(fldr) == 3, 0.0, anglex) + anglex = np.where(fldr == -2, 1.570796, anglex) + anglex = np.where(fldr == -1, 3.141593, anglex) + anglex = np.where(fldr == 2, 4.712389, anglex) + return anglex + def get_verts_iverts(self, ncells, verbose=False): """ Return a 2d array of x and y vertices and a list of size ncells that