/*@@ @file Courant.c @date September 4 1999 @author Gabrielle Allen @desc Specification of timestep using Courant condition @enddesc @@*/ #include #include #include "cctk.h" #include "cctk_arguments.h" #include "cctk_parameters.h" void Time_Courant(CCTK_CARGUMENTS) { DECLARE_CCTK_PARAMETERS DECLARE_CCTK_CARGUMENTS CCTK_REAL min_spacing; CCTK_REAL courant_speed; char *message; int min_handle,ierr; /* Calculate the minimum grid spacing */ if (cctk_dim>=1) { min_spacing = cctk_delta_space[0]; } if (cctk_dim>=2) { min_spacing = (min_spacing=3) { min_spacing = (min_spacing=4) { CCTK_WARN(0,"Time Step not defined for greater than 4 dimensions"); } /* Calculate the courant timestep */ courant_speed = *wave_speed; *courant_dt = courant_fac/courant_speed/sqrt((CCTK_REAL )cctk_dim); /* Output timestep if required */ if (outcourant_every > 0 && cctk_iteration%outcourant_every == 0) { CCTK_OutputVarAsByMethod(cctkGH,"time::courant_dt","Scalar","courant"); } /* Set the Cactus timestep */ if (! courant_outonly) { cctkGH->cctk_delta_time = *courant_dt; message = (char *)malloc(1024*sizeof(char)); sprintf(message,"Time step set to %f",cctkGH->cctk_delta_time); CCTK_INFO(message); free(message); } else { cctkGH->cctk_delta_time = dtfac*min_spacing; } }