[Commits] [svn:einsteintoolkit] incoming/PITTNullCode/SphericalHarmonicReconGen/ (Rev. 111)
bela at caltech.edu
bela at caltech.edu
Tue Jan 7 16:35:23 CST 2014
User: szilagyi
Date: 2014/01/07 04:35 PM
Modified:
/PITTNullCode/SphericalHarmonicReconGen/
param.ccl, schedule.ccl
/PITTNullCode/SphericalHarmonicReconGen/src/
read.cc
Log:
work on the time-step adjuster algorithm
File Changes:
Directory: /PITTNullCode/SphericalHarmonicReconGen/
===================================================
File [modified]: param.ccl
Delta lines: +8 -8
===================================================================
--- PITTNullCode/SphericalHarmonicReconGen/param.ccl 2014-01-07 05:53:08 UTC (rev 110)
+++ PITTNullCode/SphericalHarmonicReconGen/param.ccl 2014-01-07 22:35:23 UTC (rev 111)
@@ -16,27 +16,27 @@
{
} no
-BOOLEAN adjust_timestep "Should the time-step be adjusted?"
+BOOLEAN adjust_timestep "Should the time-step be adjusted? Ignored if time_interpolate==false."
{
} no
-CCTK_INT adjust_timestep__steps_per_time_level \
-"Number of time-steps between two time-values in the datafile. Ignored if time_interpolate==false."
+CCTK_INT adjust_timestep__target_steps_per_time_level \
+"Target number of time-steps between two time-values in the datafile."
{
1:* :: "at least one"
} 1
CCTK_REAL adjust_timestep__maximum_time_step \
-"Maximum allowed time-step. Ignored if time_interpolate==false."
+"Maximum allowed time-step."
{
(0:* :: "larger than zero"
} 0.1
-CCTK_REAL adjust_timestep__max_relative_change_per_step \
-"Maximum allowed relative change of the time-step during a single step. Ignored if time_interpolate==false."
+CCTK_REAL adjust_timestep__rate_of_change \
+"Rate of change of the time-step."
{
- (0:1] :: "The smaller the value the more gradual the change in cctk_delta_time."
-} 0.1
+ (0:* :: "The smaller the value the more gradual the change in cctk_delta_time."
+} 0.001
CCTK_INT sphere_number "the sphere number (if multiple spheres are present in one file) that corresponds to the worldtube radius NullSHRExtract::cr"
{
File [modified]: schedule.ccl
Delta lines: +2 -3
===================================================================
--- PITTNullCode/SphericalHarmonicReconGen/schedule.ccl 2014-01-07 05:53:08 UTC (rev 110)
+++ PITTNullCode/SphericalHarmonicReconGen/schedule.ccl 2014-01-07 22:35:23 UTC (rev 111)
@@ -21,9 +21,8 @@
#} "Schedule group for reconstructing world-tube data"
if(adjust_timestep) {
- SCHEDULE SphericalHarmonicReconGeneric_SetTimeStep at CCTK_PRESTEP \
- before NullNews_InterpCycleTimelevels \
- before NullGrid_CopyTime
+ SCHEDULE SphericalHarmonicReconGeneric_SetTimeStep at CCTK_EVOL \
+ after NullEvol_Step after NullNews_ScriVals
{
LANG: C
OPTIONS: global
Directory: /PITTNullCode/SphericalHarmonicReconGen/src/
=======================================================
File [modified]: read.cc
Delta lines: +20 -27
===================================================================
--- PITTNullCode/SphericalHarmonicReconGen/src/read.cc 2014-01-07 05:53:08 UTC (rev 110)
+++ PITTNullCode/SphericalHarmonicReconGen/src/read.cc 2014-01-07 22:35:23 UTC (rev 111)
@@ -101,33 +101,24 @@
if (! SHR::initialized)
{
CCTK_WARN(CCTK_WARN_ABORT, "Schedule mismatch. \n"
- " SphericalHarmonicReconGeneric_SetTimeStep must be called after\n"
- " SphericalHarmonicReconGeneric_Startup");
+ " SphericalHarmonicReconGeneric_SetTimeStep must be called after\n"
+ " SphericalHarmonicReconGeneric_Startup");
}
CCTK_REAL &dt = cctkGH->cctk_delta_time;
// no adaptivity for the 1st few time-steps
if(cctk_iteration<5) {
- CCTK_VInfo(CCTK_THORNSTRING, "Time-step has been left at %g",(double)dt);
+ if(not time_interpolate)
+ CCTK_WARN(1, "cannot adjust time-step when time_interpolate==false");
return;
}
SHR::SPH_database& db=*(SHR::db[0]);
- const double dt_old = dt;
+ double current_time_gap_in_file = -1;
const double time=cctk_time + SHR::initial_time_in_file;
const double eps=1.e-10*(db.time(1)-db.time(0));
- if(db.n_timesteps()<2) {
- CCTK_VInfo(CCTK_THORNSTRING, "Time-step has been left at %g",(double)dt);
- return; // no adjustment
- }
- if(time<db.time(0)-eps) {
- dt = db.time(1)-db.time(0);
- CCTK_VInfo(CCTK_THORNSTRING, "Time-step has been left at %g",(double)dt);
- return;
- }
- if(time>eps+db.time(db.n_timesteps()-1)) {
- CCTK_VInfo(CCTK_THORNSTRING, "Time-step has been left at %g",(double)dt);
- return; // no adjustment
- }
+ if(db.n_timesteps()<2) return; // no adjustment
+ if(time<db.time(0)-eps) return; // no adjustment
+ if(time>eps+db.time(db.n_timesteps()-1)) return; // no adjustment
// locate by bisection the interval containing time
for(int l0=0,l1=db.n_timesteps()-1,c=0;;++c) {
@@ -135,21 +126,23 @@
if(time<db.time(lh)-eps) l1=lh;
else l0=lh;
if(l1==l0+1) {
- dt = db.time(l1)-db.time(l0);
+ current_time_gap_in_file = db.time(l1)-db.time(l0);
break;
}
if(c>2+db.n_timesteps()) CCTK_WARN(0, "run-away bisection algorithm");
}
- //if (CCTK_MyProc(cctkGH) == 0)
- if (time_interpolate)
- {
- dt /= adjust_timestep__steps_per_time_level;
- // change the time-step gradually
- dt = dt_old + (dt - dt_old) * adjust_timestep__max_relative_change_per_step;
- dt = std::min(dt,adjust_timestep__maximum_time_step);
- }
- if(verbose) CCTK_VInfo(CCTK_THORNSTRING, "Time-step has been set to %g",(double)dt);
+ if(current_time_gap_in_file<0)
+ CCTK_WARN(0, "cannot identify time gap in data file");
+
+ double target_dt = current_time_gap_in_file/
+ adjust_timestep__target_steps_per_time_level;
+ // change the time-step gradually
+ target_dt = std::min(target_dt,adjust_timestep__maximum_time_step);
+ dt += adjust_timestep__rate_of_change*(target_dt-dt);
+
+ if(verbose) CCTK_VInfo(CCTK_THORNSTRING,
+ "Time-step has been set to %g",(double)dt);
}
void SphericalHarmonicReconGeneric_ReadData(CCTK_ARGUMENTS)
More information about the Commits
mailing list