Skip to content

Commit

Permalink
Merge pull request #29 from stoiver/main_relative_time
Browse files Browse the repository at this point in the history
Main relative time
  • Loading branch information
stoiver committed Oct 3, 2022
2 parents 5df6d22 + 727fd25 commit bbdea0c
Showing 1 changed file with 30 additions and 18 deletions.
48 changes: 30 additions & 18 deletions anuga/abstract_2d_finite_volumes/generic_domain.py
Original file line number Diff line number Diff line change
Expand Up @@ -1137,16 +1137,17 @@ def timestepping_statistics(self,
else:
time_unit = 'sec'


if datetime:
model_dt = self.get_datetime().strftime("%Y-%m-%d %H:%M:%S%z")
model_dt = self.get_datetime().strftime("%Y-%m-%d %H:%M:%S.%f%z")

if self.recorded_min_timestep == self.recorded_max_timestep:
msg += 'DateTime: %s, delta t = %.8f (s), steps=%d' \
msg += '%s: delta t = %.8f (s), steps=%d' \
% (model_dt, self.recorded_min_timestep, self.number_of_steps)
elif self.recorded_min_timestep > self.recorded_max_timestep:
msg += 'DateTime: %s, steps=%d' % (model_dt, self.number_of_steps)
msg += '%s: steps=%d' % (model_dt, self.number_of_steps)
else:
msg += 'DateTime: %s, delta t in [%.8f, %.8f] (s), steps=%d' \
msg += '%s: delta t in [%.8f, %.8f] (s), steps=%d' \
% (model_dt, self.recorded_min_timestep,
self.recorded_max_timestep, self.number_of_steps)
else:
Expand Down Expand Up @@ -1684,22 +1685,27 @@ def _evolve_base(self, yieldstep=None,
else:
if finaltime is not None:
self.finaltime = float(finaltime)
self.relative_finaltime = self.finaltime - self.starttime
if duration is not None:
self.finaltime = float(duration) + self.get_time()
self.relative_finaltime = float(duration) + self.relative_time

if self.finaltime < self.get_time():
if self.relative_finaltime < self.relative_time:
import warnings
msg = ('\n finaltime %g is less than current time'
' %g! ' % (self.finaltime, self.get_time()))
msg += 'finaltime set to current time'
self.finaltime = self.get_time()
self.relative_finaltime = self.relative_time
warnings.warn(msg)

# let's get out of here
return

N = len(self) # Number of triangles
self.yieldtime = self.get_time() + yieldstep # set next yield time

self.relative_yieldtime = self.relative_time + yieldstep # set next relative yield time
self.yieldtime = self.relative_yieldtime + self.starttime # set next yield time

# Initialise interval of timestep sizes (for reporting only)
# Note that we set recorded_min_timestep to be large so that it comes
Expand Down Expand Up @@ -1728,7 +1734,7 @@ def _evolve_base(self, yieldstep=None,
yield(self.get_time()) # Yield initial values

while True:
initial_time = self.get_time()
initial_relative_time = self.relative_time

# Apply fluid flow fractional step
if self.get_timestepping_method() == 'euler':
Expand All @@ -1746,7 +1752,8 @@ def _evolve_base(self, yieldstep=None,
# Centroid Values of variables should be ok

# Update time
self.set_time(initial_time + self.timestep)
#self.set_time(initial_time + self.timestep)
self.relative_time = initial_relative_time + self.timestep

self.update_ghosts()

Expand All @@ -1758,11 +1765,13 @@ def _evolve_base(self, yieldstep=None,
if self._order_ == 1:
self.number_of_first_order_steps += 1

#print(self.relative_time, self.get_time())

# Yield results at finaltime
if self.finaltime is not None and\
self.get_time() >= self.finaltime - epsilon:
if self.relative_finaltime is not None and\
self.relative_time >= self.relative_finaltime - epsilon:

if self.get_time() > self.finaltime:
if self.relative_time > self.relative_finaltime:
# FIXME (Ole, 30 April 2006): Do we need this check?
# Probably not (Ole, 18 September 2008).
# Now changed to Exception.
Expand All @@ -1771,15 +1780,16 @@ def _evolve_base(self, yieldstep=None,

# Distribute to vertices, log and then yield final time
# and stop
self.set_time(self.finaltime)
#self.set_time(self.finaltime)
self.set_relative_time(self.relative_finaltime)
self.distribute_to_vertices_and_edges()
self.update_boundary()
self.log_operator_timestepping_statistics()
yield(self.get_time())
break

# Yield results at next yieldstep
if self.get_time() >= self.yieldtime:
if self.get_relative_time() >= self.relative_yieldtime:
# Yield (intermediate) time and allow inspection of domain
# if self.checkpoint is True:
# self.store_checkpoint()
Expand All @@ -1793,7 +1803,9 @@ def _evolve_base(self, yieldstep=None,
yield(self.get_time())

# Reinitialise
self.yieldtime += yieldstep # Move to next yield

self.relative_yieldtime += yieldstep
self.yieldtime = self.relative_yieldtime + self.starttime
self.recorded_min_timestep = self.evolve_max_timestep
self.recorded_max_timestep = self.evolve_min_timestep
self.number_of_steps = 0
Expand Down Expand Up @@ -2263,12 +2275,12 @@ def update_timestep(self, yieldstep, finaltime):
# given time

# Ensure that final time is not exceeded
if finaltime is not None and self.get_time() + timestep > finaltime:
timestep = finaltime - self.get_time()
if self.relative_finaltime is not None and self.relative_time + timestep > self.relative_finaltime:
timestep = self.relative_finaltime - self.relative_time

# Ensure that model time is aligned with yieldsteps
if self.get_time() + timestep > self.yieldtime:
timestep = self.yieldtime - self.get_time()
if self.relative_time + timestep > self.relative_yieldtime:
timestep = self.relative_yieldtime - self.relative_time

self.timestep = timestep

Expand Down

0 comments on commit bbdea0c

Please sign in to comment.