5 #include "exahype2/RefinementControl.h"
6 #include "repositories/SolverRepository.h"
48 const double* NOALIAS Q,
49 const tarch::la::Vector<DIMENSIONS, double>& volumeX,
50 const tarch::la::Vector<DIMENSIONS, double>& meshCellH,
53 return tarch::la::norm2(volumeX) - std::sqrt(DIMENSIONS)*meshCellH(0) < BlackHoleFVRegion
54 ? ::exahype2::RefinementCommand::Refine
55 : ::exahype2::RefinementCommand::Keep;
62 const tarch::la::Vector<DIMENSIONS, double>& meshCellCentre,
63 const tarch::la::Vector<DIMENSIONS, double>& meshCellH,
64 bool gridIsConstructed
66 logTraceInWith3Arguments(
"initialCondition(...)", meshCellCentre, meshCellH, gridIsConstructed);
70 logTraceOut(
"initialCondition(...)");
74 double globalMinTimeStamp,
double globalMaxTimeStamp,
double globalMinTimeStepSize,
double globalMaxTimeStepSize
76 AbstractCCZ4SBH_FD4::startTimeStep(
77 globalMinTimeStamp, globalMaxTimeStamp, globalMinTimeStepSize, globalMaxTimeStepSize
80 #if defined(CoupleWithFV)
81 if (isFirstGridSweepOfTimeStep()) {
82 double fvTimeStepSize = repositories::instanceOfCCZ4SBH_FV.getAdmissibleTimeStepSize();
83 double newTimeStepSize =
std::min(fvTimeStepSize, _admissibleTimeStepSize);
84 if (tarch::la::smaller(newTimeStepSize, fvTimeStepSize)) {
87 "reduce admissible time step size from dt_{dg}="
88 << _admissibleTimeStepSize <<
" vs dt_{fv}=" << fvTimeStepSize <<
" to dt=" << newTimeStepSize
89 <<
" (previously reported time step sizes for this step are invalid)"
92 _admissibleTimeStepSize = newTimeStepSize;
93 repositories::instanceOfCCZ4SBH_FV.reduceAdmissibleTimeStepSize(newTimeStepSize);
static tarch::logging::Log _log
CCZ4SBH_FD4()
Initialise the two punctures object if required.
virtual ::exahype2::RefinementCommand refinementCriterion(const double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &meshCellCentre, const tarch::la::Vector< DIMENSIONS, double > &meshCellH, double t) override
Refinement criterion.
virtual void initialCondition(double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &meshCellCentre, const tarch::la::Vector< DIMENSIONS, double > &meshCellH, bool gridIsConstructed) override
virtual void startTimeStep(double globalMinTimeStamp, double globalMaxTimeStamp, double globalMinTimeStepSize, double globalMaxTimeStepSize) override
Start a new time step.
double norm2(double *v, int n)
static double min(double const x, double const y)
void ApplyTwoPunctures(double *NOALIAS Q, const tarch::la::Vector< DIMENSIONS, double > &X, double t, TP::TwoPunctures *tp, bool low_res)
void prepareTwoPunctures()
TP::TwoPunctures * twoPunctures
std::string grid_setup_method