2005 ROMS/TOMS Workshop Scripps Institution of Oceanography La Jolla, CA, October 25, 2005
description
Transcript of 2005 ROMS/TOMS Workshop Scripps Institution of Oceanography La Jolla, CA, October 25, 2005
2005 ROMS/TOMS Workshop2005 ROMS/TOMS WorkshopScripps Institution of OceanographyScripps Institution of Oceanography
La Jolla, CA, October 25, 2005La Jolla, CA, October 25, 2005
ean M od
earch C o m
r a i n - F o l l o w
M o d e l i n g
4D Variational Data Assimilation4D Variational Data AssimilationDriversDrivers
Hernan G. ArangoIMCS, Rutgers
Andrew M. MoorePAOS, U. Colorado
Emanuele Di LorenzoGeorgia Tech
Bruce D. CornuelleSIO, UCSD
Arthur J. MillerSIO, UCSD
ObjectivesObjectives
• To build 4D variational assimilation (To build 4D variational assimilation (4DVAR4DVAR) )
platforms:platforms:
• Strong Constraint Strong Constraint S4DVARS4DVAR Conventional S4DVAR: outer loop, Conventional S4DVAR: outer loop, NLMNLM, , ADMADM Incremental S4DVAR: inner and outer loops, Incremental S4DVAR: inner and outer loops, NLMNLM, , TLMTLM, ,
ADMADM (Courtier et al., 1994) (Courtier et al., 1994) Efficient Incremental S4DVAR (Weaver et al., 2003)Efficient Incremental S4DVAR (Weaver et al., 2003)
• Weak Constraint Weak Constraint W4DVAR W4DVAR (IOM)(IOM) Indirect Representer Method: inner and outer loops, Indirect Representer Method: inner and outer loops, NLMNLM, ,
TLMTLM, , RPMRPM, , ADM ADM (Egbert et al., 1994; Bennett et al, 1997)(Egbert et al., 1994; Bennett et al, 1997)
ROMS/TOMS Framework
ADSEN_OCEAN
SANITY CHECK S
PERT_OCEAN
PICARD_OCEAN
GRAD_OCEAN
TLCHECK _OCEAN
RP_OCEAN
ESMF
AIR_OCEAN
M
AS
TE
RWAVE S _OCE AN
OCE AN IN IT IA L IZE
F IN A L IZE
RU N
S4DVAR_OCEAN
IS4DVAR_OCEAN
W4DVAR_OCEAN
ENSEMBLE_OCEAN
NL_OCEAN
TL_OCEAN
AD_OCEAN
PROPAGATOR
K ER NELNLM, T LM, RP M, ADM
----
phys ic sbiogeochemic al
sedimentsea ic e
-
-
--
-
-
-
Optimal pertubationsADM eigenmodes
TLM eigenmodes
Forc ing singular vectorsStochastic optimals
Balance Truncation vectors
EOF’s- P seudospec tra
How To RunHow To Run
• Run nonlinear model (NLM) and save background state trajectory at regular Run nonlinear model (NLM) and save background state trajectory at regular
intervals over the desired data assimilation time window (intervals over the desired data assimilation time window (FWDnameFWDname))
Activate CPP options Activate CPP options FORWARD_WRITEFORWARD_WRITE, , FORWARD_RHSFORWARD_RHS, , andand OUT_DOUBLEOUT_DOUBLE
• Variational data assimilation CPP options:Variational data assimilation CPP options:
S4DVAR S4DVAR Conventional strong constraint 4DVARConventional strong constraint 4DVAR
IS4DVAR IS4DVAR Incremental strong constraint 4DVARIncremental strong constraint 4DVAR
W4DVAR W4DVAR Weak constraint 4DVARWeak constraint 4DVAR
(BACKGROUND, FORWARD_READ, FORWARD_MIXING)(BACKGROUND, FORWARD_READ, FORWARD_MIXING)
• Set input parameter in Set input parameter in s4dvar.in s4dvar.in oror w4dvar.in w4dvar.in::
Descent algorithm parametersDescent algorithm parameters
Spatial convolution parameters (decorrelation scales)Spatial convolution parameters (decorrelation scales)
Observation file namesObservation file names
First guess solution (background) file nameFirst guess solution (background) file name
TTstrstr TTendend
MetadataMetadataDimensions:Dimensions:
recordrecord Number of saved iterationNumber of saved iterationsurveysurvey Number of different timeNumber of different timeweightweight Number of interpolation weightNumber of interpolation weightdatumdatum Observations counter, unlimited dimensionObservations counter, unlimited dimension
Variables:Variables:
Nobs(Nobs(surveysurvey)) Number of observations per time survey Number of observations per time survey survey_time(survey_time(surveysurvey)) Survey time (days) Survey time (days) obs_type(obs_type(datumdatum)) State variable ID associated with observation State variable ID associated with observation obs_time(obs_time(datumdatum)) Time of observation (days) Time of observation (days) obs_lon(obs_lon(datumdatum)) Longitude of observation (degrees_east) Longitude of observation (degrees_east) obs_lat(obs_lat(datumdatum)) Latitude of observation (degrees_north) Latitude of observation (degrees_north) obs_depth(obs_depth(datumdatum)) Depth of observation (meters or level) Depth of observation (meters or level) obs_Xgrid(obs_Xgrid(datumdatum)) X-grid observation location (nondimensional) X-grid observation location (nondimensional) obs_Ygrid(obs_Ygrid(datumdatum)) Y-grid observation location (nondimensional) Y-grid observation location (nondimensional) obs_Zgrid(obs_Zgrid(datumdatum)) Z-grid observation location (nondimensional) Z-grid observation location (nondimensional) obs_error(obs_error(datumdatum)) Observation error, assigned weight Observation error, assigned weight obs_value(obs_value(datumdatum)) Observation value Observation value NLmodel_value(NLmodel_value(recordrecord,,datumdatum)) Nonlinear model interpolated value Nonlinear model interpolated value TLmodel_value(TLmodel_value(recordrecord,,datumdatum)) Tangent linear model interpolated value Tangent linear model interpolated value Hmat(Hmat(weightweight,,datumdatum)) Interpolation weights Interpolation weights
Observations NetCDFdimensions: record = 2 ; survey = 1 ; weight = 8 ; state_variable = 7 ; datum = UNLIMITED ; // (79416 currently)variables: char spherical ; spherical:long_name = "grid type logical switch" ; int Nobs(survey) ; Nobs:long_name = "number of observations with the same survey time" ; double survey_time(survey) ; survey_time:long_name = "survey time" ; survey_time:units = "days since 2000-01-01 00:00:00" ; survey_time:calendar = "365.25 days in every year" ; double obs_variance(state_variable) ; obs_variance:long_name = "global (time and space) observation variance" ; obs_variance:units = "squared state variable units" ; int obs_type(datum) ; obs_type:long_name = "model state variable associated with observation" ; obs_type:units = "nondimensional" ; double obs_time(datum) ; obs_time:long_name = "time of observation" ; obs_time:units = "days since 2000-01-01 00:00:00" ; obs_time:calendar = "365.25 days in every year" ; double obs_depth(datum) ; obs_depth:long_name = "depth of observation" ; obs_depth:units = "meter" ; double obs_Xgrid(datum) ; obs_Xgrid:long_name = "x-grid observation location" ; obs_Xgrid:units = "nondimensional" ; double obs_Ygrid(datum) ; obs_Ygrid:long_name = "y-grid observation location" ; obs_Ygrid:units = "nondimensional" ; double obs_Zgrid(datum) ; obs_Zgrid:long_name = "z-grid observation location" ; obs_Zgrid:units = "nondimensional" ; double obs_error(datum) ; obs_error:long_name = "observation error, assigned weight, inverse variance" ; obs_error:units = "inverse squared state variable units" ; double obs_value(datum) ; obs_value:long_name = "observation value" ; obs_value:units = "state variable units" ; double NLmodel_value(datum, record) ; NLmodel_value:long_name = "nonlinear model interpolated value" ; NLmodel_value:units = "state variable units" ; double TLmodel_value(datum, record) ; TLmodel_value:long_name = "tangent linear model interpolated value" ; TLmodel_value:units = "state variable units" ; double Hmat(datum, weight) ; Hmat:long_name = "interpolation weights" ; Hmat:units = "nondimensional"
21
3
5
4
8
6
7
(i1,j1,k1)
(i2,j2,k2)
Variable IDζ 1u 2v 3u 4v 5
temp 6salt 7
ProcessingProcessing
• Use Use hindiceshindices, , try_rangetry_range and and insideinside routines to transform routines to transform (lon,lat) to ((lon,lat) to (,,))
• Find how many survey times occur within the data set Find how many survey times occur within the data set ((surveysurvey dimension) dimension)
• Count observations available per survey (Count observations available per survey (NobsNobs) and ) and assign their times (assign their times (survey_timesurvey_time))
• Sort the observation in ascending time order and Sort the observation in ascending time order and observation time for efficiencyobservation time for efficiency
• Save a copy of the observation fileSave a copy of the observation file
• Several matlab scripts to process observationsSeveral matlab scripts to process observations
“Conventional” S4DVAR
NLM: compute model-observations misfit and cost function
ADM: compute cost function gradients
Compute NLM initial conditions using first guess conjugate gradient step size
NLM: compute change in cost functionCompute NLM initial conditions using refined conjugate gradient step size
CALL initialCALL main3d
CALL ad_initialCALL ad_main3d
CALL initialCALL main3d
CALL descentCALL wrt_ini
CALL descentCALL wrt_ini
Oute
r Lo
op
Ipass=1
Ipass=2
Incremental S4DVARCALL initialCALL main3d
Oute
r Lo
op
CALL tl_initialCALL tl_main3d
CALL ad_initialCALL ad_main3d
CALL tl_initialCALL tl_main3d
CALL descentCALL tl_wrt_ini
CALL descentCALL tl_wrt_ini
Inn
er
Loop
Ipass=1
Ipass=2
CALL ini_adjustCALL wrt_ini
NLM: compute basic state trajectory and extract model at observations locations
TLM: compute misfit cost function between model (NLM+TLM) and observationsADM: compute cost function gradients
Compute TLM initial conditions using first guess conjugate gradient step size
TLM: compute change in cost function
Compute TLM initial conditions using refined conjugate gradient step size
Compute NLM new initial conditions(NLM+TLM)
Efficient Incremental S4DVARNLM: compute basic state trajectory and extract model at observations locationsADM: compute initial estimate of the gradientInitialize conjugate direction as the negative of the gradient (adjoint) solution
RPM: compute misfit cost function between model (NLM+TLM) and observations
ADM: compute cost function gradients
Compute TLM initial conditions using conjugate gradient step size
Compute NLM new initial conditions(NLM+TLM)
CALL initialCALL main3d
Oute
r Lo
op
CALL tl_initialCALL tl_main3d
CALL ad_initialCALL ad_main3d
CALL descentCALL tl_wrt_ini
Inn
er
Loop
CALL ini_adjustCALL wrt_ini
CALL ad_initialCALL ad_main3d
CALL ini_descent
W4DVAR, IOM
iom_roms: compute first guess andmisfitbetween observation and model
nl_roms: compute basic state trajectory
Inner loop, backward (ad_roms) and forward (tl_roms) integrations to compute
an ˆ ( )d n n n nFu h R C β
ˆ nβ
nad_roms: backward integration to compute
ˆnuiom_roms: compute
nl_roms < nl_roms.in
ad_roms < ad_roms.in
tl_roms < tl_roms.in
IOM components
iom_roms < iom_roms.in
ad_roms < ad_roms.in
iom_roms < iom_roms.in
Inn
er
Loop
Oute
r Lo
op
• It is running in parallelIt is running in parallel
• Pre-conditioning, pre-conditioning …Pre-conditioning, pre-conditioning …
• Background term in cost functionBackground term in cost function
• Modeling of background error covarianceModeling of background error covariance
• Efficient spatial convolution algorithms (3D implicit Efficient spatial convolution algorithms (3D implicit diffusion algorithms; parallelism)diffusion algorithms; parallelism)
• Open boundary condition challengesOpen boundary condition challenges
• Quality control of observationsQuality control of observations
• New observational data streams New observational data streams
Final RemarksFinal Remarks