Git reference: Tutorial example 05-exact.
This technique can be useful in a number of situations, for example when a time-dependent proces starts from a complicated initial condition that would not be represented with sufficient accuracy on a coarse initial mesh.
At the beginning of each adaptivity step, instead of calculating a solution on the fine mesh, we assign the exact function to it:
// Adaptivity loop:
int as = 1; bool done = false;
do
{
info("---- Adaptivity step %d:", as);
// Construct globally refined reference mesh and setup reference space.
Space* ref_space = Space::construct_refined_space(&space);
// Assign the function f() to the fine mesh.
info("Assigning f() to the reference mesh.");
if(ref_sln != NULL) delete ref_sln;
ref_sln = new ExactSolutionCustom(ref_space->get_mesh());
...
The rest of the adaptivity loop is as usual.