Commit 003581c6 authored by Steve Plimpton's avatar Steve Plimpton
Browse files

final changes to fix halt

parent 1f1c8723
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -162,8 +162,7 @@ void FixHalt::end_of_step()
  }

  // hard halt -> exit LAMMPS
  // soft halt -> trigger timer to break from run loop
  // continue halt -> trigger time to exit only this run loop
  // soft/continue halt -> trigger timer to break from run loop
  // print message with ID of fix halt in case multiple instances

  char str[128];
@@ -183,6 +182,8 @@ void FixHalt::end_of_step()

void FixHalt::post_run()
{
  // continue halt -> subsequent runs are allowd

  if (eflag == CONTINUE) timer->reset_timeout();
}

+11 −3
Original line number Diff line number Diff line
@@ -95,10 +95,10 @@ Timer::Timer(LAMMPS *lmp) : Pointers(lmp)
{
  _level = NORMAL;
  _sync  = OFF;
  _timeout = -1;
  _s_timeout = -1;
  _timeout = -1.0;
  _checkfreq = 10;
  _nextcheck = -1;
  _laststep = -1;
  this->_stamp(RESET);
}

@@ -216,7 +216,7 @@ void Timer::set_wall(enum ttype which, double newtime)

void Timer::init_timeout()
{
  _s_timeout = _timeout;
  _laststep = -1;
  if (_timeout < 0)
    _nextcheck = -1;
  else
@@ -249,6 +249,14 @@ void Timer::print_timeout(FILE *fp)

/* ---------------------------------------------------------------------- */

void Timer::force_timeout()
{
  _timeout = 0.0;
  _nextcheck = _laststep + 1;
}

/* ---------------------------------------------------------------------- */

bool Timer::_check_timeout()
{
  double walltime = MPI_Wtime() - timeout_start;
+3 −6
Original line number Diff line number Diff line
@@ -64,10 +64,7 @@ class Timer : protected Pointers {
  void init_timeout();

  // trigger enforced timeout
  void force_timeout() { _timeout = 0.0; }

  // restore original timeout setting after enforce timeout
  void reset_timeout() { _timeout = _s_timeout; }
  void force_timeout();

  // get remaining time in seconds. 0.0 if inactive, negative if expired
  double get_timeout_remain();
@@ -78,7 +75,7 @@ class Timer : protected Pointers {
  // check for timeout. inline wrapper around internal
  // function to reduce overhead in case there is no check.
  bool check_timeout(int step) {
    if (_timeout == 0.0) return true;
    _laststep = step;
    if (_nextcheck != step) return false;
    else return _check_timeout();
  }
@@ -94,9 +91,9 @@ class Timer : protected Pointers {
  int _level;     // level of detail: off=0,loop=1,normal=2,full=3
  int _sync;      // if nonzero, synchronize tasks before setting the timer
  int _timeout;   // max allowed wall time in seconds. infinity if negative
  int _s_timeout; // copy of timeout for restoring after a forced timeout
  int _checkfreq; // frequency of timeout checking
  int _nextcheck; // loop number of next timeout check
  int _laststep;  // loop number of last iteration

  // update one specific timer array
  void _stamp(enum ttype);