CG_DELTA not positive

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

Moderators: arango, robertson

Post Reply
Message
Author
jsaynisch

CG_DELTA not positive

#1 Unread post by jsaynisch »

I use IS4DVAR with the following configuration:

Code: Select all

ADJOINT             Adjoint Model.
 ANA_BSFLUX          Analytical kinematic bottom salinity flux.
 ANA_BTFLUX          Analytical kinematic bottom temperature flux.
 ASSUMED_SHAPE       Using assumed-shape arrays.
 AVERAGES            Writing out time-averaged nonlinear model fields.
 BACKGROUND          Include background cost function.
 BALANCE_OPERATOR    Error Covariance Multivariate Balance Operator.
 CURVGRID            Orthogonal curvilinear grid.
 DIFF_GRID           Horizontal diffusion coefficient scaled by grid size.
 DJ_GRADPS           Parabolic Splines density Jacobian (Shchepetkin, 2002).
 DOUBLE_PRECISION    Double precision arithmetic.
 FORWARD_MIXING      Read in Forward vertical mixing for Tangent/Adjoint.
 FORWARD_READ        Read in Forward solution for Tangent/Adjoint.
 FORWARD_WRITE       Write out Forward solution for Tangent/Adjoint.
 !FULL_GRID          Considering observations at interior points only.
 GLS_MIXING          Generic Length-Scale turbulence closure.
 IMPLICIT_VCONV      Implicit Vertical Convolution Algorithm.
 IS4DVAR             Incremental strong constraint 4D-Var data assimilation.
 KANTHA_CLAYSON      Kantha and Clayson stability function formulation.
 MASKING             Land/Sea masking.
 MIX_GEO_TS          Mixing of tracers along geopotential surfaces.
 MIX_S_UV            Mixing of momentum along constant S-surfaces.
 MPI                 MPI distributed-memory configuration.
 NONLINEAR           Nonlinear Model.
 NONLIN_EOS          Nonlinear Equation of State for seawater.
 N2S2_HORAVG         Horizontal smoothing of buoyancy and shear.
 OBSERVATIONS        Processing 4DVar observations.
 OUT_DOUBLE          Double precision output fields in NetCDF files.
 POWER_LAW           Power-law shape time-averaging barotropic filter.
 PROFILE             Time profiling activated .
 K_GSCHEME           Third-order upstream advection of TKE fields.
 RADIATION_2D        Use tangential phase speed in radiation conditions.
 !RST_SINGLE         Double precision fields in restart NetCDF file.
 SALINITY            Using salinity.
 SOLVE3D             Solving 3D Primitive Equations.
 SPLINES             Conservative parabolic spline reconstruction.
 SPHERICAL           Spherical grid configuration.
 TANGENT             Tangent Linear Model.
 TS_U3HADVECTION     Third-order upstream horizontal advection of tracers.
 TS_U3HADVECTION_TL  TL/AD third-order upstream horizontal tracer advection.
 TS_C4VADVECTION     Fourth-order centered vertical advection of tracers.
 TS_C4VADVECTION_TL  TL/AD fourth-order centered vertical tracer advection.
 TS_DIF2             Harmonic mixing of tracers.
 UV_ADV              Advection of momentum.
 UV_COR              Coriolis term.
 UV_U3HADVECTION     Third-order upstream horizontal advection of 3D momentum.
 UV_C4VADVECTION     Fourth-order centered vertical advection of momentum.
 UV_QDRAG            Quadratic bottom stress.
 UV_VIS2             Harmonic mixing of momentum.
 VISC_GRID           Horizontal viscosity coefficient scaled by grid size.
 VCONVOLUTION        Include vertical correlations in convolutions.
 ZETA_ELLIPTIC       Solving SSH elliptic equation in balance operator.
I use artificial SSH observations and get (I guess) reasonable results from the NLM, TLM and the adjoint model.
Nonetheless, I get the following error message:

Code: Select all

 TLM: GET_STATE - Read v-space increments,                   t =  2193 00:00:00
                   (Grid 01, File: ocean_itl.nc, Rec=0001, Index=1)
                - free-surface
                   (Min = -2.81705926E-02 Max =  2.77907880E-02)
                - vertically integrated u-momentum component
                   (Min =  0.00000000E+00 Max =  0.00000000E+00)
                - vertically integrated v-momentum component
                   (Min =  0.00000000E+00 Max =  0.00000000E+00)
                - u-momentum component
                   (Min = -3.50023965E-02 Max =  3.09755988E-02)
                - v-momentum component
                   (Min = -5.58496923E-02 Max =  3.39090215E-02)
                - potential temperature
                   (Min = -3.78477034E-01 Max =  2.17940332E-01)
                - salinity
                   (Min = -2.35268280E-02 Max =  5.59604732E-02)

 TLM: GET_STATE - Read v-space increments,                   t =  2193 00:00:00
                   (Grid 01, File: ocean_itl.nc, Rec=0001, Index=2)
                - free-surface
                   (Min = -2.81705926E-02 Max =  2.77907880E-02)
                - vertically integrated u-momentum component
                   (Min =  0.00000000E+00 Max =  0.00000000E+00)
                - vertically integrated v-momentum component
                   (Min =  0.00000000E+00 Max =  0.00000000E+00)
                - u-momentum component
                   (Min = -3.50023965E-02 Max =  3.09755988E-02)
                - v-momentum component
                   (Min = -5.58496923E-02 Max =  3.39090215E-02)
                - potential temperature
                   (Min = -3.78477034E-01 Max =  2.17940332E-01)
                - salinity
                   (Min = -2.35268280E-02 Max =  5.59604732E-02)

 ADM: GET_STATE - Read latest adjoint state solution,        t =  2193 00:00:00
                   (Grid 01, File: za_adj_001.nc, Rec=0001, Index=2)
                - free-surface
                   (Min = -2.84382716E-05 Max =  6.53508152E-04)
                - vertically integrated u-momentum component
                   (Min = -1.25437686E+03 Max =  1.43251412E+03)
                - vertically integrated v-momentum component
                   (Min = -1.99218268E+03 Max =  1.40747070E+03)
                - u-momentum component
                   (Min = -1.29402765E-02 Max =  1.46191528E-02)
                - v-momentum component
                   (Min = -2.47037059E-02 Max =  1.81783417E-02)
                - potential temperature
                   (Min = -6.74280091E-02 Max =  5.43788692E-02)
                - salinity
                   (Min = -8.36367447E-03 Max =  7.47036749E-03)

 NLM: GET_STATE - Read previous state initial conditions,    t =  2193 00:00:00
                   (Grid 01, File: za_ini.nc, Rec=0002, Index=2)
                - free-surface
                   (Min = -1.67400898E+00 Max =  1.64807835E+00)
                - vertically integrated u-momentum component
                   (Min = -1.49075648E+00 Max =  6.44656120E-01)
                - vertically integrated v-momentum component
                   (Min = -1.52064299E+00 Max =  8.20836836E-01)
                - u-momentum component
                   (Min = -2.87649882E+00 Max =  2.72146996E+00)
                - v-momentum component
                   (Min = -3.23322773E+00 Max =  2.28254094E+00)
                - potential temperature
                   (Min = -5.35978216E+00 Max =  2.92327918E+01)
                - salinity
                   (Min =  3.28323630E+01 Max =  3.68394618E+01)
                - vertical viscosity coefficient
                   (Min =  0.00000000E+00 Max =  9.10820383E+01)
                - temperature vertical diffusion coefficient
                   (Min =  0.00000000E+00 Max =  1.23642693E+02)
                - salinity vertical diffusion coefficient
                   (Min =  0.00000000E+00 Max =  1.23642693E+02)

 ADM: GET_STATE - Read previous adjoint state solution,      t =  2193 00:00:00
                   (Grid 01, File: za_adj_001.nc, Rec=0001, Index=1)
                - free-surface
                   (Min = -2.84382716E-05 Max =  6.53508152E-04)
                - vertically integrated u-momentum component
                   (Min = -1.25437686E+03 Max =  1.43251412E+03)
                - vertically integrated v-momentum component
                   (Min = -1.99218268E+03 Max =  1.40747070E+03)
                - u-momentum component
                   (Min = -1.29402765E-02 Max =  1.46191528E-02)
                - v-momentum component
                   (Min = -2.47037059E-02 Max =  1.81783417E-02)
                - potential temperature
                   (Min = -6.74280091E-02 Max =  5.43788692E-02)
                - salinity
                   (Min = -8.36367447E-03 Max =  7.47036749E-03)

 <<<< Descent Algorithm >>>>

  CG_DELTA not positive.
  CG_DELTA =  -2959.10090971697127 , outer =  1 , inner =  1
As I understand it this means that some of the Hessian is negative determined? In the code it is calculated as some kind of dot product... I see that the respective entries for AMD and TLM do not differ and I guess they should?
What can I do about it? Is this just due to to the artificial nature of my observations or a mistake in the model configuration or maybe a problem of I/O file handling...

Alas, I have two more (related) questions:
Is the value of obs_provenance of any relevance? I could not find that it is used somewhere in the code.
On what time basis are the modeled values and the observations compared? Is it just model snapshots versus the observations or can I specify a time averaging window for the model values?

I hope you can help me here.

wangzc
Posts: 28
Joined: Fri Dec 28, 2012 5:44 am
Location: National Marine Environmental Forecasting Center

Re: CG_DELTA not positive

#2 Unread post by wangzc »

hey!
Last time I came up this situation is "NRREC=-1". After making ini.nc, it's ok!

jsaynisch

Re: CG_DELTA not positive

#3 Unread post by jsaynisch »

AWESOME, this did the trick!
Thank you, wangzc - it would have taken me quite a while before I would have thought of NRREC! (If at all!)
So thanks gain!
Jan

Post Reply