Adjoint Sensitivity Driver

Discussion about tangent linear and adjoint models, variational data assimilation, and other related issues.

Moderators: arango, robertson

Post Reply
Message
Author
User avatar
arango
Site Admin
Posts: 1361
Joined: Wed Feb 26, 2003 4:41 pm
Location: DMCS, Rutgers University
Contact:

Adjoint Sensitivity Driver

#1 Unread post by arango »

Adjoint Sensitivity Driver: adsen_ocean

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)

LiZhou
Posts: 12
Joined: Tue Dec 26, 2017 5:39 pm
Location: IOCAS,Qingdao,China

Re: Adjoint Sensitivity Driver

#2 Unread post by LiZhou »

Hi:
Thanks very much for your introduction of AD-sensitivity. For a practical application, would you like to provide a note about how to select cpp options when conducting AD-sensitivity with ROMS?

Post Reply