This driver computes the response of a chosen function, J, of the model circulation to variations in all physical attributes of the system. This driver is generic and the User can define any sensitivity functional (for example, an upwelling index in terms of surface temperature) to initialize and force the adjoint model. Several spatial masking arrays (scope_rho, scope_u, scope_v) have been introduced to limit the analysis to specific region(s) in the application grid. These variables can be appended to ROMS/TOMS grid NetCDF by using the new matlab GUI editscope.m.
The adjoint sensitivity of a function or index, J, in terms of space and/or time integrals of the model state, S(zeta,ubar,vbar,u,v,T,...) can be defined using variational calculus. Small changes, dS, in S will lead to changes dJ in J, such that
dJ = (dJ/dzeta) dzeta + (dJ/dubar) dubar + (dJ/dvbar) dv + (dJ/du) du + (dJ/dv) dv + (dJ/dT) dT ...
and
dJ/dS = R' S
where R' (transpose R) is the adjoint propagator. It implies that the sensitivity for all variables, parameters, and space-time points can be computed from a single integration backward in time of the adjoint model.
The User needs first to define J. In general,
J(t2) = 1/n integral [t1,t2] {integral [y1,y2] {integral [x1,x2] { (F - Fmean)^n dx} dy} dt}
or
J = 1/n S' W S^n
where F is a state variable, Fmean is it time mean (nonzero if anomaly analysis), n is a possitive, nonzero integer power, and W is the spatial scope operator.
The forcing of the adjoint model can be derived using
S --> S +delta(s),
delta(J) ~ delta(s') W S^(n-1),
and
delta(J) = dJ/ds delta(s)
to give
dJ/ds(t1) = R' W [F(t2) - Fmean]^(n-1) + integral [t1,t2]{ R' W (F(t)-Fmean)^(n-1) } dt
For example, if F=SST, Fmean=0, and n=2, the adjoint model is forced with the sea surface temperature, SST, multiplied by scope_rho from t2 to t1. The sea surface temperature is read from input adjoint sensitivity forcing NetCDF file ADSNAME. Since Fmean=0 and n=2, this input file is same as the nonlinear basic state FWDNAME.
Several new parameters are added to ROMS/TOMS input script file (ocean.in):
Code: Select all
DstrS Starting day (t1) for adjoint sensitivity forcing.
DendS Ending day (t2) for adjoint sensitivity forcing.
KstrS Starting vertical level of the 3D adjoint state variables whose sensitivity is required.
KendS Ending vertical level of the 3D adjoint state variables whose sensitivity is required.
Lstate Logical switches (TRUE/FALSE) to specify the adjoint state variables whose sensitivity is required.
Lstate(isFsur): Free-surface
Lstate(isUbar): 2D U-momentum
Lstate(isVbar): 2D V-momentum
Lstate(isUvel): 3D U-momentum
Lstate(isVvel): 3D V-momentum
Lstate(isTvar): Traces (NT values expected)