# Schedule definitions for thorn Exact # $Header$ ####################################################################### # PARAMCHECK ####################################################################### Schedule Exact_ParamCheck at PARAMCHECK { LANG: C } "do consistency checks on our parameters" ####################################################################### # INITIAL DATA ####################################################################### # decode/copy parameters into grid scalars # (to share them properly so Calc_Tmunu code can see them even # though it's compiled in other thorns) Schedule Exact__decode_pars at INITIAL { LANG: Fortran } "decode/copy thorn Exact parameters into grid scalars" # Initial data (g and K) from a trivial slice through an exact solution. if (CCTK_Equals(initial_data,"exact")) { schedule Exact__initialize at CCTK_INITIAL { LANG: Fortran } "Set initial data from exact solution on a trivial slice" } # Initial data from an arbitrary slice through an exact solution, # but NOT evolving the slice afterwards. # Note we only need storage for the slice itself, and only at startup. if ( (CCTK_Equals(initial_data,"slice")) && ! (CCTK_Equals(evolution_method,"slice")) ) { schedule Exact__slice_initialize at CCTK_INITIAL { STORAGE: Exact_slice LANG: Fortran } "Set initial data from exact solution on an arbitrary slice" } ####################################################################### # LAPSE AND SHIFT ####################################################################### # Lapse and/or shift from a trivial slice through an exact solution. # At the initial time: if ( (CCTK_Equals(initial_lapse,"exact")) || (CCTK_Equals(initial_shift,"exact")) ) { schedule Exact__gauge at CCTK_INITIAL { LANG: Fortran } "Set initial lapse and/or shift from exact solution on a trivial slice" } # During the evolution: if ( (CCTK_Equals(lapse_evolution_method,"exact")) || (CCTK_Equals(shift_evolution_method,"exact")) ) { schedule Exact__RegisterSlicing at CCTK_STARTUP { LANG: C } "Register slicings" schedule Exact__gauge at CCTK_PRESTEP { LANG: Fortran } "Set evolution lapse and/or shift from exact solution on a trivial slice" } ####################################################################### # EVOLUTION ####################################################################### # Fake the evolution of g and K by evolving the slice and # reading them off from the slice again. We need the slice and two # temporary copies throughout. Note that if we set evolution_system # = "slice" without also setting initial_data = "slice", nothing will # happen as a failsafe, and Cactus should complain about not having an # evolution routine. Setting initial_data = "slice" on its own is ok though. if ( (CCTK_Equals(evolution_method,"slice")) && (CCTK_Equals(initial_data,"slice")) ) { STORAGE: Exact_slice STORAGE: Exact_slicetemp1 STORAGE: Exact_slicetemp2 schedule Exact__slice_initialize at CCTK_INITIAL { LANG: Fortran } "Set initial data from exact solution on arbitrary slice" schedule Exact__slice_evolve at CCTK_EVOL { LANG: Fortran } "Evolve arbitrary slice and extract Cauchy data" } ####################################################################### # BOUNDARY DATA ####################################################################### if (CCTK_Equals(overwrite_boundary,"exact")) { schedule Exact__boundary at CCTK_POSTSTEP { LANG: Fortran } "Overwrite g and K on the boundary with exact solution data" }