8.5. Activating variables
There are some variables in the SICOPOLIS code, for example c_slide
, the basal sliding coefficient, that are constant in time and reinitialized at each time step in the subroutines in src/subroutines/general/calc_vxy_m.F90
. This reinitialization has an “erasing” effect on the the dependency of cost functions to such variables, resulting in identically zero adjoint fields. From a physics standpoint, it is pretty clear that c_slide
should have affect various kinds of cost functions.
The workaround to this issue is to complete the following steps (the code snippets are based on the c_slide
example):
Declare a dummy variable in
src/subroutines/general/sico_variables_m.F90
.
real(dp), dimension(0:JMAX,0:IMAX) :: xxc_slide
Initialize the dummy variable to 0. at the end of
src/subroutines/{domain}/sico_init_m.F90
. Here{domain}
can either begrl
orant
.
xxc_slide = 0.
Add the dummy variable to the actual variable. In the case of
c_slide
, add it at the point where it’s initialization is complete.
c_slide = c_slide + xxc_slide
Evaluate sensitivities to the dummy variable i.e. the
{ind_vars}
should containxxc_slide
for a non-trivial senstivity with respect toc_slide
.
This procedure has the effect of continuity of the variable xxc_slide
in time, preventing the “erasing” effect caused by the reinitialization of c_slide
to the same value for each time step. Also, since xxc_slide
is initialized to 0, the results in the normal simulations are unaffected, because for the purposes of the non-linear forward model, all we did was add zeros to c_slide
.