Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 37 additions & 30 deletions badlands/badlands/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ def _build_mesh(self, filename, verbose):
if self.input.waveSed:
self.force.next_wave = self.input.tStart + self.input.tWave
else:
self.force.next_wave = self.input.tEnd + 1.0e5
self.force.next_wave = np.inf

if self.input.carb:

Expand All @@ -213,7 +213,7 @@ def _build_mesh(self, filename, verbose):
if self.carbTIN is not None:
self.prop = np.zeros((self.totPts, self.carbTIN.nbSed))
else:
self.next_carbStep = self.input.tEnd + 1.0e5
self.next_carbStep = np.inf
self.prop = np.zeros((self.totPts, 1))

def _rebuild_mesh(self, verbose=False):
Expand Down Expand Up @@ -297,35 +297,41 @@ def run_to_time(self, tEnd, verbose=False):

Warning:
If specified end time (**tEnd**) is greater than the one defined in the XML input file priority
is given to the XML value.
is given to the XML value. If run from Underworld (or UWGeo) use tEnd not from XML file.
"""

assert hasattr(
self, "recGrid"
), "DEM file has not been loaded. Configure one in your XML file or call the build_mesh function."

if tEnd > self.input.tEnd:
# use the smallest tEnd, either passing or from the XML - when udw coupling is disabled
if (self.input.tEnd < tEnd) and (self.input.udw == 0):
print(
"Specified end time is greater than the one used in the XML input file and has been adjusted!"
"Specified `tEnd` is greater than `tEnd` in the XML input file. Using the XML definition as it's smaller!"
)
tEnd = self.input.tEnd

# reference var within loop
tStart = self.input.tStart
ftime = self.input.ftime
tDisplay = self.input.tDisplay
laytime = self.input.laytime

# Define non-flow related processes times
if not self.simStarted:
self.force.next_rain = self.force.T_rain[0, 0]
self.force.next_disp = self.force.T_disp[0, 0]
self.force.next_carb = self.force.T_carb[0, 0]

self.force.next_display = self.input.tStart
if self.input.laytime > 0:
self.force.next_layer = self.input.tStart + self.input.laytime
self.force.next_display = tStart
if laytime > 0:
self.force.next_layer = tStart + laytime
else:
self.force.next_layer = self.input.tEnd + 1000.0
self.exitTime = self.input.tEnd
self.force.next_layer = np.inf
if self.input.flexure:
self.force.next_flexure = self.input.tStart + self.input.ftime
self.force.next_flexure = tStart + ftime
else:
self.force.next_flexure = self.exitTime + self.input.tDisplay
self.force.next_flexure = np.inf
self.simStarted = True

outStrata = 0
Expand All @@ -344,9 +350,9 @@ def run_to_time(self, tEnd, verbose=False):
# Load precipitation rate
if (
self.force.next_rain <= self.tNow
and self.force.next_rain < self.input.tEnd
and self.force.next_rain < tEnd
):
if self.tNow == self.input.tStart:
if self.tNow == tStart:
ref_elev = buildMesh.get_reference_elevation(
self.input, self.recGrid, self.elevation
)
Expand All @@ -357,15 +363,15 @@ def run_to_time(self, tEnd, verbose=False):
)

# Initialize waveFlux at tStart
# if self.tNow == self.input.tStart:
# if self.tNow == tStart:
# self.force.initWaveFlux(self.inIDs)

# Load tectonic grid
if not self.input.disp3d:
# Vertical displacements
if (
self.force.next_disp <= self.tNow
and self.force.next_disp < self.input.tEnd
and self.force.next_disp < tEnd
):
ldisp = np.zeros(self.totPts, dtype=float)
ldisp.fill(-1.0e6)
Expand All @@ -381,9 +387,9 @@ def run_to_time(self, tEnd, verbose=False):
# 3D displacements
if (
self.force.next_disp <= self.tNow
and self.force.next_disp < self.input.tEnd
and self.force.next_disp < tEnd
):
if self.input.laytime == 0:
if laytime == 0:
updateMesh = self.force.load_Disp_map(
self.tNow, self.FVmesh.node_coords[:, :2], self.inIDs
)
Expand Down Expand Up @@ -422,7 +428,7 @@ def run_to_time(self, tEnd, verbose=False):
sload = None
if (
self.input.udw == 1
and self.tNow == self.input.tStart
and self.tNow == tStart
and self.strata is not None
):
if self.strata.oldload is None:
Expand All @@ -434,7 +440,7 @@ def run_to_time(self, tEnd, verbose=False):
self.strata.oldload = np.zeros(
len(self.elevation), dtype=float
)
if self.input.laytime > 0 and self.strata.oldload is not None:
if laytime > 0 and self.strata.oldload is not None:
sload = self.strata.oldload
fstrat = 1
# Define erodibility map flags
Expand Down Expand Up @@ -488,7 +494,7 @@ def run_to_time(self, tEnd, verbose=False):
self.elevation += self.force.uDisp

# Update the stratigraphic mesh
if self.input.laytime > 0 and self.strata is not None:
if laytime > 0 and self.strata is not None:
self.strata.move_mesh(regdX, regdY, scum, verbose)

# Compute isostatic flexure
Expand Down Expand Up @@ -516,7 +522,7 @@ def run_to_time(self, tEnd, verbose=False):
self.elevation += self.tinFlex
self.cumflex += self.tinFlex
# Update next flexure time
self.force.next_flexure += self.input.ftime
self.force.next_flexure += ftime
print(
" - Compute flexural isostasy %0.02f seconds"
% (time.process_time() - flextime)
Expand Down Expand Up @@ -583,7 +589,7 @@ def run_to_time(self, tEnd, verbose=False):
# Load carbonate growth rates for species 1 and 2 during a given growth event
if (
self.force.next_carb <= self.tNow
and self.force.next_carb < self.input.tEnd
and self.force.next_carb < tEnd
):
(
self.carbMaxGrowthSp1,
Expand Down Expand Up @@ -655,7 +661,7 @@ def run_to_time(self, tEnd, verbose=False):

# Update next stratal layer time
if self.tNow >= self.force.next_layer:
self.force.next_layer += self.input.laytime
self.force.next_layer += laytime
if self.straTIN is not None:
self.straTIN.step += 1
if self.input.laststrat == True:
Expand Down Expand Up @@ -696,7 +702,7 @@ def run_to_time(self, tEnd, verbose=False):

# Create checkpoint files and write HDF5 output
if self.tNow >= self.force.next_display:
if self.force.next_display > self.input.tStart:
if self.force.next_display > tStart:
outStrata = 1
checkPoints.write_checkpoints(
self.input,
Expand Down Expand Up @@ -738,7 +744,7 @@ def run_to_time(self, tEnd, verbose=False):

# Update next display time
last_output = time.process_time()
self.force.next_display += self.input.tDisplay
self.force.next_display += tDisplay
self.outputStep += 1
if self.carbTIN is not None:
self.carbTIN.step += 1
Expand Down Expand Up @@ -819,15 +825,15 @@ def run_to_time(self, tEnd, verbose=False):
self.elevation += self.tinFlex
self.cumflex += self.tinFlex
# Update next flexure time
self.force.next_flexure += self.input.ftime
self.force.next_flexure += ftime
print(
" - Compute flexural isostasy %0.02f seconds"
% (time.process_time() - flextime)
)

# Update next stratal layer time
if self.tNow >= self.force.next_layer:
self.force.next_layer += self.input.laytime
self.force.next_layer += laytime
if self.input.laststrat==True:
self.write=1 # set parameter to call hdf5 stratal writer
sub = self.strata.buildStrata(
Expand Down Expand Up @@ -859,8 +865,9 @@ def run_to_time(self, tEnd, verbose=False):

# Create checkpoint files and write HDF5 output
if (
#self.tNow == tEnd
self.input.udw == 0
or self.tNow == self.input.tEnd
or self.tNow == tEnd
or self.tNow == self.force.next_display
):
checkPoints.write_checkpoints(
Expand Down Expand Up @@ -901,7 +908,7 @@ def run_to_time(self, tEnd, verbose=False):
% (time.process_time() - meshtime)
)

self.force.next_display += self.input.tDisplay
self.force.next_display += tDisplay
self.outputStep += 1
if self.straTIN is not None:
self.straTIN.write_hdf5_stratigraphy(self.lGIDs, self.outputStep - 1)
Expand Down
2 changes: 1 addition & 1 deletion badlands/meson.build
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
project( 'badlands',
'fortran', 'c',
version:'2.3.0',
version:'2.3.1',
license:'GPLv3',
meson_version: '>=1.4.0',
default_options : ['warning_level=2', 'python.install_env=auto'])
Expand Down
2 changes: 1 addition & 1 deletion badlands/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "mesonpy"

[project]
name = "badlands"
version = "2.3"
version = "2.3.1"
authors = [
{name="Tristan Salles", email="tristan.salles@sydney.edu.au"},
]
Expand Down