Index: param.ccl =================================================================== RCS file: /cactusdevcvs/CactusBase/MoL/param.ccl,v retrieving revision 1.17 diff -u -r1.17 param.ccl --- param.ccl 30 Mar 2005 16:08:33 -0000 1.17 +++ param.ccl 8 Aug 2006 09:13:10 -0000 @@ -98,6 +98,15 @@ "Classic RK3" :: "Efficient RK3 - classical version" } "RK" +CCTK_REAL ICN_avg_theta "theta of averaged ICN method, usually 0.5" +{ + 0:1 :: "0 <= theta <= 1" +} 0.5 + +BOOLEAN ICN_avg_swapped "Use swapped averages in ICN method?" +{ +} "no" + CCTK_INT MoL_Intermediate_Steps "Number of intermediate steps taken by the ODE method" { 1:* :: "Anything greater than 1" Index: src/ICN.c =================================================================== RCS file: /cactusdevcvs/CactusBase/MoL/src/ICN.c,v retrieving revision 1.12 diff -u -r1.12 ICN.c --- src/ICN.c 11 Dec 2005 05:44:40 -0000 1.12 +++ src/ICN.c 8 Aug 2006 09:13:10 -0000 @@ -74,7 +74,7 @@ CCTK_INT groupindex, ierr; CCTK_INT arraytotalsize, arraydim; - CC K_INT index, var; + CCTK_INT index, var; CCTK_INT totalsize; CCTK_REAL *OldVar; CCTK_REAL *UpdateVar; @@ -92,8 +92,8 @@ #endif #ifdef MOLDEBUG - printf("Inside ICN.\nProcessor %d.\nStep %d.\nRefinement %d.\n" - "Timestep %g.\nSpacestep %g.\nTime %g\n", + printf("Inside ICN. Processor %d. Step %d. Refinement %d.\n" + " Timestep %g. Spacestep %g. Time %g\n", CCTK_MyProc(cctkGH), MoL_Intermediate_Steps - *MoL_Intermediate_Step + 1, *cctk_levfac, @@ -109,7 +109,7 @@ } #ifdef MOLDEBUG - printf("MoL: the ICN routine says dt = %f.\n", CCTK_DELTA_TIME); + printf(" MoL: the ICN routine says dt = %f.\n", CCTK_DELTA_TIME); #endif for (var = 0; var < MoLNumEvolvedVariables; var++) { @@ -215,8 +215,9 @@ CCTK_REAL *UpdateVar; CCTK_REAL *RHSVar; - /* FIXME */ + CCTK_REAL theta; + /* FIXME */ #ifdef MOLDOESCOMPLEX CCTK_COMPLEX *OldComplexVar; @@ -226,15 +227,22 @@ #endif + theta = ICN_avg_theta; + if (ICN_avg_swapped && (*MoL_Intermediate_Step%2)) + { + theta = 1.0 - theta; + } + #ifdef MOLDEBUG - printf("Inside ICN.\nProcessor %d.\nStep %d.\nRefinement %d.\n" - "Timestep %g.\nSpacestep %g.\nTime %g\n", + printf("Inside ICN. Processor %d. Step %d. Refinement %d.\n" + " Timestep %g. Spacestep %g. Time %g Theta %g\n", CCTK_MyProc(cctkGH), MoL_Intermediate_Steps - *MoL_Intermediate_Step + 1, *cctk_levfac, CCTK_DELTA_TIME, CCTK_DELTA_SPACE(0), - cctk_time); + cctk_time, + theta); #endif totalsize = 1; @@ -244,7 +252,7 @@ } #ifdef MOLDEBUG - printf("MoL: the ICN routine says dt = %f.\n", CCTK_DELTA_TIME); + printf(" MoL: the ICN routine says dt = %f.\n", CCTK_DELTA_TIME); #endif for (var = 0; var < MoLNumEvolvedVariables; var++) { @@ -257,7 +265,8 @@ for (index = 0; index < totalsize; index++) { - UpdateVar[index] = 0.5 * (UpdateVar[index] + OldVar[index]); + UpdateVar[index] = (1.0-theta) * UpdateVar[index] + + theta * OldVar[index]; } } @@ -288,7 +297,8 @@ for (index = 0; index < arraytotalsize; index++) { - UpdateVar[index] = 0.5 * (UpdateVar[index] + OldVar[index]); + UpdateVar[index] = (1.0-theta) * UpdateVar[index] + + theta * OldVar[index]; } }