For more complex layering, it would be nice if there was a way of creating these more complex systems in a user-friendly way.
Some psuedo code to kick-start the thinking process (obviousy naming and desired features/functionality will have to be figured out when developing this).
import timflow as tf
# utility for specifying layers with thicknesses (accept either thickness or absolute z elevations?)
lm = tf.LayerModel(
[
tf.Aquifer("Aquifer 0", H=10.0, kaq=1e-4, Saq=1e-4),
tf.Aquitard("Aquitard 0", H=2.0, c=100.0, Sll=1e-6),
tf.Aquifer("Aquifer 1", H=[5.0, 5.0, 5.0], kaq=10, kzoverkh=0.1), # <- generates 3 aquifers with thickness 5
],
ztop=0.0,
topboundary="confined", # can maybe be derived from input above?
...
)
# helper functions for obtaining aquifer layer numbers
lm.get_aquifer_layer_number("Aquifer 0") # --> returns 0
lm.get_aquifer_layer_number("Aquifer 1", sublayer=2) # --> returns 3
lm.get_aquifer_layer_number("Aquifer 1") # --> returns [1, 2, 3]
# get layer summary
lm.get_layer_summary() # -> return table with layer properties kaq, c, etc. for each aquifer/aquitard
# build model directly from layer model
ml = tf.transient.Model.from_layer_model(lm) # build model from layer model
One challenge to consider is when calibrating the example above you would want to calibrate kzoverkh in Aquifer 1, and not the individual derived resistance values of the sublayers. Not sure how to do that yet, but we can attempt crossing that bridge when we get there.
For more complex layering, it would be nice if there was a way of creating these more complex systems in a user-friendly way.
Some psuedo code to kick-start the thinking process (obviousy naming and desired features/functionality will have to be figured out when developing this).
One challenge to consider is when calibrating the example above you would want to calibrate
kzoverkhin Aquifer 1, and not the individual derived resistance values of the sublayers. Not sure how to do that yet, but we can attempt crossing that bridge when we get there.