3.16.3.3. Tasks¶
This is what the class hierarchy looks like when radiative transfer (RT) is included::
!experiment_t -> solver_t -> mhd_t -> extras_t -> gpatch_t -> patch_t -> task_t
! |---rt_t -> gpatch_t -> patch_t -> task_t
! |-grav_t -> gpatch_t -> patch_t -> task_t
The task list consist of 1) a number of “MHD tasks” (experiment_t tasks),
and 2) A number of rt_t tasks, which subdivide into 2a)
one “main RT task” (an rt_t task) for each MHD task, and 2b)
n_omega “RT sub-tasks” (also rt_t tasks)
Each MHD task has connections to the rt_t tasks via the extras_t class, and each
main RT task has connections to the RT sub-task, which are allocated as an array
of rt_t tasks inside the main rt_t task.
Each rt_t task also has a connection to the patch_t part of the MHD task, and can
thus access the MHD time and other attributes
The MHD task update procedure is called directly from task_list_t%update(), and
calls extras_t%pre_update before the MHD update, and extras_t%post_update after it.
Through that call path, rt_t%post_update is (only) called when the MHD task has
updated. It is not called as part of the normal rt_t%update. This is the correct
point to detect that a new EOS calculation is needed.
The RT tasks are also called directly from the task_list_t%update(), and as
illustrated above, they do not go through the extras_t layer. Those calls go
only to rt_t%update().