#1560: Calculate solution error in EinsteinExact ------------------------------------+--------------------------------------- Reporter: eschnett | Owner: Type: enhancement | Status: closed Priority: major | Milestone: Component: EinsteinToolkit thorn | Version: development version Resolution: fixed | Keywords: ------------------------------------+---------------------------------------
Comment (by hinder):
The way I have done this in the past is to add new variables for the exact solution rather than using the ADM variables. You can then output these, which give you the exact solution, and add a calculation which subtracts the ADM variables from the exact solution, and populates the error variables. This way, you can have all quantities available, and as a side benefit, you don't need to do the pattern matching on the calculation.
So you would have this:
{{{ calcExact = { gxxExact -> …, …}
calcADMBase = { gxx -> gxxExact, …}
calcError = { gxxError -> gxx - gxxExact, …} }}}
You would then schedule this so that the exact, ADMBase and error calculations are always run at INITIAL. Then, depending on the parameters, you would either:
1. Calculate exact, ADMBase and error also during evolution. This would preserve the current expected behaviour of the ADMBase variables containing the exact solution for the whole evolution. OR 2. Calculate just the exact and error variables during evolution, so that the error variables contain the error of the (separate) evolution of the ADMBase variables.
It is also useful to compute the gridfunction whose norm is the norm of the whole solution error. i.e. {{{ uErr = sqrt((gErr_ij)^2 + (KErr_ij)^2 + alpErr^2 + (betaErr^i)^2). }}} Then you can output the norm of this from Cactus, and you can look at convergence for the entire (ADM) solution very easily.