# Interface definition for thorn Whisky #################################################################### ### Whisky needs to inherit the metric from Einstein. ### ### Other thorns will need to know what EOS we're using. They ### ### inherit to get the handle. ### #################################################################### implements: Whisky inherits: ADMBase, StaticConformal, Boundary, SpaceMask, ADMMacros, Tmunubase, HydroBase #INCLUDES SOURCE: Whisky_EMTensor.inc in CalcTmunu.inc #INCLUDES: Whisky_EMTensor_temps.inc in CalcTmunu_temps.inc USES INCLUDE: FishEye.h USES INCLUDE: EOS_Base.inc USES INCLUDE: SpaceMask.h USES INCLUDE: EOS_Base.h USES INCLUDE HEADER: carpet.hh ############################################################### ### Provided functions. These are mainly to allow RNSID ### ### to convert back to primitive / conservative variables ### ### without having an explicit coupling to Whisky. ### ### NOTE: the function that converts conservative to ### ### primitive variables requires pointers to the conserved ### ### variables as well as these variables are reset if ### ### we're in the atmosphere. ### ############################################################### void FUNCTION SpatialDet(CCTK_REAL IN gxx, CCTK_REAL IN gxy, \ CCTK_REAL IN gxz, CCTK_REAL IN gyy, \ CCTK_REAL IN gyz, CCTK_REAL IN gzz, \ CCTK_REAL OUT det) void FUNCTION UpperMet(CCTK_REAL OUT uxx, CCTK_REAL OUT uxy, \ CCTK_REAL OUT uxz, CCTK_REAL OUT uyy, \ CCTK_REAL OUT uyz, CCTK_REAL OUT uzz, \ CCTK_REAL IN det, CCTK_REAL IN gxx, CCTK_REAL IN gxy, \ CCTK_REAL IN gxz, CCTK_REAL IN gyy, CCTK_REAL IN gyz, \ CCTK_REAL IN gzz) #void FUNCTION Con2Prim(CCTK_INT IN handle, \ # CCTK_REAL OUT dens, \ # CCTK_REAL OUT sx, CCTK_REAL OUT sy, CCTK_REAL OUT sz, \ # CCTK_REAL OUT tau, \ # CCTK_REAL OUT rho, \ # CCTK_REAL OUT velx, CCTK_REAL OUT vely, CCTK_REAL OUT velz, \ # CCTK_REAL OUT epsilon, CCTK_REAL OUT press, \ # CCTK_REAL OUT w_lorentz, \ # CCTK_REAL IN uxx, CCTK_REAL IN uxy, CCTK_REAL IN uxz, \ # CCTK_REAL IN uyy, CCTK_REAL IN uyz, CCTK_REAL IN uzz, \ # CCTK_REAL IN det, \ # CCTK_REAL IN x, CCTK_REAL IN y, CCTK_REAL IN z, CCTK_REAL IN r, \ # CCTK_INT OUT epsnegative, \ # CCTK_REAL IN whisky_rho_min, CCTK_REAL IN pmin, \ # CCTK_INT IN whisky_reflevel, CCTK_REAL IN whisky_C2P_failed) void FUNCTION Con2PrimPoly(CCTK_INT IN handle, CCTK_REAL OUT dens, \ CCTK_REAL OUT sx, CCTK_REAL OUT sy, \ CCTK_REAL OUT sz, CCTK_REAL OUT tau, \ CCTK_REAL OUT rho, CCTK_REAL OUT velx, \ CCTK_REAL OUT vely, CCTK_REAL OUT velz, \ CCTK_REAL OUT epsilon, CCTK_REAL OUT press, \ CCTK_REAL OUT w_lorentz, CCTK_REAL IN uxx, \ CCTK_REAL IN uxy, CCTK_REAL IN uxz, \ CCTK_REAL IN uyy, CCTK_REAL IN uyz, \ CCTK_REAL IN uzz, CCTK_REAL IN det, \ CCTK_REAL IN x, CCTK_REAL IN y, CCTK_REAL IN z, \ CCTK_REAL IN r, CCTK_REAL IN rho_min, \ CCTK_INT IN whisky_reflevel, CCTK_REAL IN whisky_C2P_failed) #void FUNCTION Prim2Con CCTK_INT handle, CCTK_REAL gxx, CCTK_REAL gxy, CCTK_REAL gxz, CCTK_REAL gyy, CCTK_REAL gyz, CCTK_REAL gzz, CCTK_REAL det, CCTK_REAL dens, CCTK_REAL sx, CCTK_REAL sy, CCTK_REAL sz, CCTK_REAL tau, CCTK_REAL rho, CCTK_REAL velx, CCTK_REAL vely, CCTK_REAL velz, CCTK_REAL epsilon, CCTK_REAL press, CCTK_REAL w_lorentz void FUNCTION Prim2ConGen(CCTK_INT IN handle, \ CCTK_REAL IN gxx, CCTK_REAL IN gxy, \ CCTK_REAL IN gxz, CCTK_REAL IN gyy, \ CCTK_REAL IN gyz, CCTK_REAL IN gzz, \ CCTK_REAL IN det, CCTK_REAL OUT dens, \ CCTK_REAL OUT sx, CCTK_REAL OUT sy, \ CCTK_REAL OUT sz, CCTK_REAL OUT tau, \ CCTK_REAL IN rho, CCTK_REAL IN velx, \ CCTK_REAL IN vely, \ CCTK_REAL IN velz, CCTK_REAL IN epsilon, \ CCTK_REAL OUT press, CCTK_REAL OUT w_lorentz) void FUNCTION Prim2ConPoly(CCTK_INT IN handle, \ CCTK_REAL IN gxx, CCTK_REAL IN gxy, \ CCTK_REAL IN gxz, CCTK_REAL IN gyy, \ CCTK_REAL IN gyz, CCTK_REAL IN gzz, \ CCTK_REAL IN det, CCTK_REAL OUT dens, \ CCTK_REAL OUT sx, CCTK_REAL OUT sy, \ CCTK_REAL OUT sz, CCTK_REAL OUT tau, \ CCTK_REAL IN rho, CCTK_REAL IN velx, \ CCTK_REAL IN vely, \ CCTK_REAL IN velz, CCTK_REAL OUT epsilon, \ CCTK_REAL OUT press, CCTK_REAL OUT w_lorentz) PROVIDES FUNCTION SpatialDet WITH SpatialDeterminant LANGUAGE Fortran PROVIDES FUNCTION UpperMet WITH UpperMetric LANGUAGE Fortran #PROVIDES FUNCTION Con2Prim WITH Con2Prim_pt LANGUAGE Fortran PROVIDES FUNCTION Con2PrimPoly WITH Con2Prim_ptPolytype LANGUAGE Fortran PROVIDES FUNCTION Prim2ConGen WITH prim2con LANGUAGE Fortran PROVIDES FUNCTION Prim2ConPoly WITH prim2conpolytype LANGUAGE Fortran #################################################### ### Functions provided by MoL for registration ### #################################################### CCTK_INT FUNCTION MoLRegisterEvolved(CCTK_INT IN EvolvedIndex, \ CCTK_INT IN RHSIndex) CCTK_INT FUNCTION MoLRegisterConstrained(CCTK_INT IN ConstrainedIndex) CCTK_INT FUNCTION MoLRegisterEvolvedGroup(CCTK_INT IN EvolvedIndex, \ CCTK_INT IN RHSIndex) CCTK_INT FUNCTION MoLRegisterConstrainedGroup(CCTK_INT IN ConstrainedIndex) CCTK_INT FUNCTION MoLRegisterSaveAndRestoreGroup(CCTK_INT IN SandRIndex) USES FUNCTION MoLRegisterEvolved USES FUNCTION MoLRegisterConstrained USES FUNCTION MoLRegisterEvolvedGroup USES FUNCTION MoLRegisterConstrainedGroup USES FUNCTION MoLRegisterSaveAndRestoreGroup ######################################### ### Aliased functions from Boundary ### ######################################### CCTK_INT FUNCTION Boundary_SelectVarForBC(CCTK_POINTER_TO_CONST IN GH, \ CCTK_INT IN faces, CCTK_INT IN boundary_width, CCTK_INT IN table_handle, \ CCTK_STRING IN var_name, CCTK_STRING IN bc_name) CCTK_INT FUNCTION Boundary_SelectGroupForBC(CCTK_POINTER_TO_CONST IN GH, \ CCTK_INT IN faces, CCTK_INT IN boundary_width, CCTK_INT IN table_handle, \ CCTK_STRING IN group_name, CCTK_STRING IN bc_name) USES FUNCTION Boundary_SelectVarForBC USES FUNCTION Boundary_SelectGroupForBC ############################################ ### Aliased function from DriftCorrect ### ############################################ void FUNCTION SetDriftCorrectPosition ( CCTK_POINTER_TO_CONST IN GH_Pointer, \ CCTK_REAL IN x, \ CCTK_REAL IN y, \ CCTK_REAL IN z ) USES FUNCTION SetDriftCorrectPosition ############################################################## ### Functions provided by GZPatchSystem for registration ### ############################################################## CCTK_INT FUNCTION GZPatchSystem_register_sync(CCTK_STRING IN cactus_group_name) USES FUNCTION GZPatchSystem_register_sync CCTK_INT FUNCTION \ GZPatchSystem_register_cxform(CCTK_INT IN time_level, \ CCTK_STRING IN cactus_group_name) USES FUNCTION GZPatchSystem_register_cxform ####################################################### ### Functions provided by the general EOS interface ### ####################################################### CCTK_INT FUNCTION EOS_SetupCall(CCTK_INT IN table_handle) USES FUNCTION EOS_SetupCall CCTK_INT FUNCTION EOS_SetGFs(CCTK_POINTER_TO_CONST IN GH, \ CCTK_INT IN call_number) USES FUNCTION EOS_SetGFs public: int whisky_eos_scalars type = SCALAR { whisky_eos_handle whisky_polytrope_handle } "Handle number for EOS" real whisky_minima type = SCALAR { whisky_rho_min # whisky_dens_min } "Atmosphere values" real dens type = GF Timelevels = 3 tags='ProlongationParameter="HydroBase::prolongation_type" tensortypealias="Scalar" tensorweight=+1.0 interpolator="matter"' "generalized particle number" real tau type = GF Timelevels = 3 tags='ProlongationParameter="HydroBase::prolongation_type" tensortypealias="Scalar" tensorweight=+1.0 interpolator="matter"' "internal energy" real scon[3] type = GF Timelevels = 3 tags='ProlongationParameter="HydroBase::prolongation_type" tensortypealias="D" tensorweight=+1.0 interpolator="matter"' "generalized momenta" real whisky_tracers[number_of_tracers] type = GF Timelevels = 3 tags='ProlongationParameter="HydroBase::prolongation_type" tensortypealias="Scalar"' { tracer } "Tracers" real w_lorentz type = GF Timelevels = 3 tags='ProlongationParameter="HydroBase::prolongation_type" tensortypealias="Scalar" tensorweight=+1.0 interpolator="matter"' "Lorentz factor" real densrhs type = GF Timelevels = 1 tags='Prolongation="None" checkpoint="no"' "Update term for dens" real taurhs type = GF Timelevels = 1 tags='Prolongation="None" checkpoint="no"' "Update term for tau" real srhs[3] type = GF Timelevels = 1 tags='Prolongation="None" checkpoint="no"' "Update term for s" ################################################## ### These variables are only protected so that ### ### the tests in init_data work. Should fix. ### ################################################## real whisky_prim_bext type = GF Timelevels = 1 tags='Prolongation="None" checkpoint="no"' { rhoplus, velxplus, velyplus, velzplus, pressplus, epsplus, w_lorentzplus, rhominus, velxminus, velyminus, velzminus, pressminus, epsminus, w_lorentzminus } "Primitive variables extended to the cell boundaries" int whisky_scalars type = SCALAR tags='checkpoint="no"' { flux_direction, xoffset, yoffset, zoffset } "Which direction are we taking the fluxes in and the offsets" int whisky_atmosphere_mask type = GF Timelevels = 1 tags='Prolongation="None"' { atmosphere_mask } "Flags to say whether a point needs to be reset to the atmosphere" int whisky_atmosphere_descriptors type=SCALAR { atmosphere_field_descriptor atmosphere_atmosp_descriptor atmosphere_normal_descriptor } real whisky_cons_tracers[number_of_tracers] TYPE=GF Timelevels = 3 tags='ProlongationParameter="HydroBase::prolongation_type" tensortypealias="Scalar"' { cons_tracer } "The conserved tracer variable" # For measuring separations CCTK_REAL whisky_maxima_position TYPE=SCALAR tags='checkpoint="no"' { maxima_x maxima_y maxima_z maximum_density } "The position (coordinate values) of the maximum value of rho" CCTK_REAL maxrho_global TYPE=SCALAR tags='checkpoint="no"' "store the global maximum of rho, for refinment-grid steering" # functions can be prolonged only if they are real (not integer). CCTK_REAL whisky_C2P_failed TYPE=GF Timelevels = 1 tags='Prolongation="restrict" tensortypealias="Scalar" checkpoint="no"' "Mask that stores the points where C2P has failed" # Should we do the same for the atmo masks? private: real whisky_fluxes type = GF Timelevels = 1 tags='Prolongation="None" checkpoint="no"' { densflux, sxflux, syflux, szflux, tauflux } "Fluxes for each conserved variable" int whisky_reflevel type = SCALAR tags='checkpoint="no"' "Refinement level Whisky is working on right now" real whisky_con_bext type = GF Timelevels = 1 tags='Prolongation="None" checkpoint="no"' { densplus, sxplus, syplus, szplus, tauplus, densminus, sxminus, syminus, szminus, tauminus } "Conservative variables extended to the cell boundaries" # real fluxweightvolume type = GF Timelevels = 1 # { # cell_volume # cell_jdet # } "Weighting factors for the interfaces for using FishEye" # # real cell_surface[3] type = GF Timelevels = 1 # # real whisky_fisheye_scalars type=GF timelevels=1 # { # frho # fpress # feps # } "Whisky scalars in physical coordinates" # # real whisky_fisheye_vectors type=GF timelevels=1 # { # fvelx # fvely # fvelz # } "Whisky vectors in physical coordinates" real whisky_coords type=GF timelevels=3 { whisky_x whisky_y whisky_z } "Coordinates to use with the comoving shift" real whisky_coords_rhs type=GF timelevels=1 tags='Prolongation="None"' { whisky_x_rhs whisky_y_rhs whisky_z_rhs } "RHS for coordinates to use with the comoving shift" #real whisky_hamiltonian type=GF tags='tensortypealias="Scalar"' #{ # whisky_hamnormalized # whisky_ham #} "Whisky hamiltonian constraints" #real whisky_momentum type=GF tags='tensortypealias="U" checkpoint="no"' #{ # whisky_momx, # whisky_momy, # whisky_momz #} "Whisky momentum constraints" int whisky_trivial_rp_gf_group type=GF timelevels=1 tags='Prolongation="None"' { whisky_trivial_rp_gf_x whisky_trivial_rp_gf_y whisky_trivial_rp_gf_z } "set gf for triv. rp (only for debugging)" real flux_splitting TYPE=GF tags='Prolongation="None" checkpoint="no"' { densfplus, densfminus sxfplus, sxfminus syfplus, syfminus szfplus, szfminus taufplus, taufminus } "Fluxes for use in the flux splitting" real fs_alpha TYPE=SCALAR { fs_alpha1 fs_alpha2 fs_alpha3 fs_alpha4 fs_alpha5 } "Maximum characteristic speeds for the flux splitting" real whisky_tracer_rhs[number_of_tracers] TYPE=GF tags='Prolongation="None" checkpoint="no"' { cons_tracerrhs } "RHS for the tracer" real whisky_tracer_flux[number_of_tracers] TYPE=GF tags='Prolongation="None" checkpoint="no"' { cons_tracerflux } "Flux for the tracer" real whisky_tracer_cons_bext[number_of_tracers] TYPE=GF tags='Prolongation="None" checkpoint="no"' { cons_tracerplus, cons_tracerminus } "Cell boundary values for the tracer" real whisky_tracer_prim_bext[number_of_tracers] TYPE=GF tags='Prolongation="None" checkpoint="no"' { tracerplus, tracerminus } "Primitive cell boundary values for the tracer" real whisky_tracer_flux_splitting[number_of_tracers] TYPE=GF tags='Prolongation="None" checkpoint="no"' { tracerfplus, tracerfminus } "Flux splitting for the tracer" real whisky_mppm_eigenvalues TYPE=GF tags='Prolongation="None" checkpoint="no"' { whisky_mppm_eigenvalue_x_left, whisky_mppm_eigenvalue_x_right whisky_mppm_eigenvalue_y_left, whisky_mppm_eigenvalue_y_right whisky_mppm_eigenvalue_z_left, whisky_mppm_eigenvalue_z_right whisky_mppm_xwind } "debug variable for flux eigenvalues in mppm" CCTK_REAL particles TYPE=ARRAY DIM=1 TIMELEVELS=3 SIZE=number_of_particles GHOSTSIZE=0 DISTRIB=DEFAULT { particle_x particle_y particle_z } "Coordinates of particles to be tracked" CCTK_REAL particle_rhs TYPE=ARRAY DIM=1 TIMELEVELS=1 SIZE=number_of_particles GHOSTSIZE=0 DISTRIB=DEFAULT { particle_x_rhs particle_y_rhs particle_z_rhs } "RHS functions for particles to be tracked" CCTK_REAL particle_arrays TYPE=ARRAY DIM=1 TIMELEVELS=1 SIZE=number_of_particles GHOSTSIZE=0 DISTRIB=DEFAULT tags='checkpoint="no"' { particle_vx particle_vy particle_vz particle_alp particle_betax particle_betay particle_betaz } "Temporaries to hold interpolated values for particle tracking" # For measuring separations CCTK_REAL whisky_maxima_location TYPE=SCALAR tags='checkpoint="no"' { maxima_i maxima_j maxima_k } "The location (point index) of the maximum value of rho" CCTK_INT whisky_maxima_iteration TYPE=SCALAR "Iteration on which maximum was last set" CCTK_REAL whisky_maxima_separation TYPE=SCALAR tags='checkpoint="no"' { whisky_separation whisky_proper_separation } "The distance between the centres (locations of maximum density) of a binary NS" CCTK_REAL DiffRho TYPE=GF tags='Prolongation="None" checkpoint="no"' "The first difference in rho" # For the new EOS interface a couple of temporaries are required CCTK_REAL EOS_temps TYPE=GF tags='Prolongation="None" checkpoint="no"' { eos_cs2_p, eos_cs2_m eos_dpdeps_p, eos_dpdeps_m } "Temporaries for the EOS calls" CCTK_REAL RoeAverage_temps TYPE=GF tags='Prolongation="None" checkpoint="no"' { rho_ave, velx_ave, vely_ave, velz_ave, eps_ave, press_ave eos_cs2_ave, eos_dpdeps_ave } "Temporaries for the Roe solver" CCTK_REAL Metric_temps TYPE=GF tags='Prolongation="None" checkpoint="no"' { Whisky_det Whisky_uxx,Whisky_uxy,Whisky_uxz,Whisky_uyy,Whisky_uyz,Whisky_uzz } "Temporaries for the determinant of the 3-metric and the inverse metric" CCTK_REAL Con2Prim_temps TYPE=GF tags='Prolongation="None" checkpoint="no"' { press_old, press_new eos_dpdeps_temp, eos_dpdrho_temp } "Temporaries for the conservative to primitive conversion"