Changeset 2474
- Timestamp:
- 2010-12-16T16:32:33+01:00 (14 years ago)
- Location:
- branches/nemo_v3_3_beta
- Files:
-
- 7 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/nemo_v3_3_beta/DOC/TexFiles/Chapters/Chap_ASM.tex
r2349 r2474 5 5 \label{ASM} 6 6 7 Authors: D. Lea, K. Mogensen, A. Weaver, M. Martin ...7 Authors: D. Lea, M. Martin, K. Mogensen, A. Weaver, ... % do we keep 8 8 9 9 \minitoc … … 13 13 $\ $\newline % force a new line 14 14 15 The ASM branchadds the functionality to apply increments to model variables,15 The ASM code adds the functionality to apply increments to model variables, 16 16 temperature, salinity, sea surface height, velocity and sea ice concentration. 17 These are read into the model from a file which may be produced by data assimilation. 18 This code is controlled by the namelist \textit{nam\_asminc}. 19 There is a brief description of all the namelist options provided. 20 To build the ASM code \key{asminc} must be set. 17 These are read into the model from a NetCDF file which may be produced by data 18 assimilation. The code can also output model background fields which are used 19 as an input to data assimilation code. This is all controlled by the namelist 20 \textit{nam\_asminc}. There is a brief description of all the namelist options 21 provided. To build the ASM code \key{asminc} must be set. 21 22 22 23 %=============================================================== … … 94 95 %------------------------------------------------------------------------------------------------------------- 95 96 96 The header of an assimilation increments file produced using \textit{ncdump~-h} is shown below 97 The header of an assimilation increments file produced using the NetCDF tool 98 \mbox{\textit{ncdump~-h}} is shown below 97 99 98 100 \begin{alltt} -
branches/nemo_v3_3_beta/DOC/TexFiles/Chapters/Chap_OBS.tex
r2414 r2474 5 5 \label{OBS} 6 6 7 Authors: D. Lea, K. Mogensen, A. Weaver, M. Martin... % do we keep that ?7 Authors: D. Lea, M. Martin, K. Mogensen, A. Vidard, A. Weaver... % do we keep that ? 8 8 9 9 \minitoc … … 13 13 $\ $\newline % force a new line 14 14 15 The OBS branch is a diagnostic branch which reads in observation files (profile temperature and 16 salinity, sea surface temperature, sea level anomaly and sea ice concentration) and calculates 17 an interpolated model equivalent value at the observation location and nearest model timestep. 18 This is code with was originally developed for use with NEMOVAR. 19 20 In the case of temperature data from moored buoys (TAO, TRITON, PIRATA) which in the 21 ENACT/ENSEMBLES data-base are available as daily averaged quantities the observation operator 22 averages the model temperature fields over one day before interpolating them to the observation 23 location. For SST and altimeter observations, a 2D horizontal interpolator is needed. For {\em in 24 situ} profiles, a 1D vertical interpolator is needed in addition to the 2D interpolator. 25 26 The resulting data is saved in a ``feedback'' file or files which can be used for model validation 27 and verification and also to provide information for data assimilation. This code is controlled by 28 the namelist \textit{nam\_obs}. To build with the OBS code active \key{diaobs} must be set. 29 30 There is a brief description of all the namelist options provided. 31 32 Missing information: description of \key{sp}, \key{datetime\_out} 33 15 The observation and model comparison code (OBS) reads in observation files 16 (profile temperature and salinity, sea surface temperature, sea level anomaly 17 and sea ice concentration) and calculates an interpolated model equivalent 18 value at the observation location and nearest model timestep. The OBS code is 19 called from \np{opa.F90} in order to initialise the model and to calculate the 20 model equivalent values for observations on the 0th timestep. The code is then 21 called again after each timestep from \np{step.F90}. The code was originally 22 developed for use with NEMOVAR. 23 24 For all data types a 2D horizontal interpolator is needed 25 to interpolate the model fields to the observation location. 26 For {\em in situ} profiles, a 1D vertical interpolator is needed in addition to 27 provide model fields at the observation depths. Currently this only works in 28 z-level model configurations but is currently being developed to work with a 29 generalised vertical coordinate system. 30 Temperature data from moored buoys (TAO, TRITON, PIRATA) which in the 31 ENACT/ENSEMBLES data-base are available as daily averaged quantities. For this 32 type of observations the 33 observation operator will compare such observations to the model temperature 34 fields over one day. The relevant observation type may be specified in the namelist 35 using \np{endailyavtypes}. Otherwise the model value from the nearest 36 timestep to the observation time is used. 37 38 The resulting data is saved in a ``feedback'' file (or files) which can be used 39 for model validation and verification and also to provide information for data 40 assimilation. This code is controlled by the namelist \textit{nam\_obs}. To 41 build with the OBS code active \key{diaobs} must be set. 42 43 Section~\ref{OBS_example} introduces a test example of the observation operator 44 code including where to obtain data and how to setup the namelist. 45 Section~\ref{OBS_details} introduces some more technical details of the 46 different observation types used and also shows a more complete namelist. 47 Finally section~\ref{OBS_theory} introduces some of the theoretical aspects of 48 the observation operator including interpolation methods and running on multiple 49 processors. 34 50 35 51 % ================================================================ … … 40 56 41 57 This section describes an example of running the observation operator code using 42 profile data which can be freely downloaded. This shows how to adapt an existing 43 run and build of NEMO to run the observation operator. 44 45 First compile NEMO with \key{diaobs} set. 46 47 Next download some ENSEMBLES EN3 data from the \href{http://www.hadobs.org}{website}. 48 You should choose observations which are valid for the period of your test run 49 because the observation operator compares the model and observations for a 50 matching date and time. 51 52 You will need to add the following to the namelist to run the observation 53 operator on this data - set the \np{enactfiles} namelist parameter to the observation 54 file name you wish to use (or link in): 58 profile data which can be freely downloaded. It shows how to adapt an 59 existing run and build of NEMO to run the observation operator. 60 61 \begin{enumerate} 62 \item Compile NEMO with \key{diaobs} set. 63 64 \item Download some ENSEMBLES EN3 data from 65 \href{http://www.hadobs.org}{http://www.hadobs.org}. Choose observations which are 66 valid for the period of your test run because the observation operator compares 67 the model and observations for a matching date and time. 68 69 \item Add the following to the NEMO namelist to run the observation 70 operator on this data. Set the \np{enactfiles} namelist parameter to the 71 observation file name (or link in to \np{profiles\_01\.nc}): 72 \end{enumerate} 55 73 56 74 %------------------------------------------namobs_example----------------------------------------------------- … … 58 76 %------------------------------------------------------------------------------------------------------------- 59 77 60 The option \np{ln\_t3d} and \np{ln\_s3d} switch on the temperature and salinity profile 61 observation operator code. \np{ln\_ena} switch turns on the reading on ENACT/ENSEMBLES type 62 profile data. The filename of the ENACT/ENSEMBLES data is set with enactfiles. Not this can be 63 array of multiple files. The observation operator code needs to convert from observation 64 latitude and longitude to model grid point. This is done using the grid searching part of the 65 code. Setting \np{ln\_grid\_global} means that the code distributes the observations evenly 66 between processors in a round-robin. Alternatively each processor will work with observations 67 located within the model subdomain. The grid searching can be expensive, particularly for large 68 numbers of observations, setting \np{ln\_grid\_search\_lookup} allows the use of a lookup 69 table. This will need to generated the first time if it does not exist in the run directory 70 however once produced it will significantly speed up future grid searches. 71 72 The next step is viewing and working with the data. The NEMOVAR system contains utilities to 73 plot the feedback files, convert and recombine the files which are available on request from 74 the NEMOVAR team. 78 The option \np{ln\_t3d} and \np{ln\_s3d} switch on the temperature and salinity 79 profile observation operator code. The \np{ln\_ena} switch turns on the reading 80 of ENACT/ENSEMBLES type profile data. The filename or array of filenames are 81 specified using the \np{enactfiles} variable. The model grid points for a 82 particular observation latitude and longitude are found using the grid 83 searching part of the code. This can be expensive, particularly for large 84 numbers of observations, setting \np{ln\_grid\_search\_lookup} allows the use of 85 a lookup table which is saved into an ``xypos`` file (or files). This will need 86 to be generated the first time if it does not exist in the run directory. 87 However, once produced it will significantly speed up future grid searches. 88 Setting \np{ln\_grid\_global} means that the code distributes the observations 89 evenly between processors. Alternatively each processor will work with 90 observations located within the model subdomain. 91 92 The NEMOVAR system contains utilities to plot the feedback files, convert and 93 recombine the files. These are available on request from the NEMOVAR team. 75 94 76 95 \section{Technical details} 77 96 \label{OBS_details} 78 97 79 Here we show a more complete example namelist and also describe the observation files that may 80 be used with the observation operator 98 Here we show a more complete example namelist and also show the NetCDF headers 99 of the observation 100 files that may be used with the observation operator 81 101 82 102 %------------------------------------------namobs-------------------------------------------------------- … … 84 104 %------------------------------------------------------------------------------------------------------------- 85 105 86 This name list uses the "feedback" type observation file input format for profile, sea level 87 anomaly and sea surface temperature data 106 This name list uses the "feedback" type observation file input format for 107 profile, sea level anomaly and sea surface temperature data. All the 108 observation files must be in NetCDF format. Some example headers (produced using 109 \mbox{\textit{ncdump~-h}}) for profile 110 data, sea level anomaly and sea surface temperature are in the following 111 subsections. 88 112 89 113 \subsection{Profile feedback type observation file header} … … 94 118 netcdf profiles_01 { 95 119 dimensions: 96 97 98 99 100 101 102 103 104 105 106 120 N_OBS = 603 ; 121 N_LEVELS = 150 ; 122 N_VARS = 2 ; 123 N_QCF = 2 ; 124 N_ENTRIES = 1 ; 125 N_EXTRA = 1 ; 126 STRINGNAM = 8 ; 127 STRINGGRID = 1 ; 128 STRINGWMO = 8 ; 129 STRINGTYP = 4 ; 130 STRINGJULD = 14 ; 107 131 variables: 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 132 char VARIABLES(N_VARS, STRINGNAM) ; 133 VARIABLES:long_name = "List of variables in feedback files" ; 134 char ENTRIES(N_ENTRIES, STRINGNAM) ; 135 ENTRIES:long_name = "List of additional entries for each variable in feedback files" ; 136 char EXTRA(N_EXTRA, STRINGNAM) ; 137 EXTRA:long_name = "List of extra variables" ; 138 char STATION_IDENTIFIER(N_OBS, STRINGWMO) ; 139 STATION_IDENTIFIER:long_name = "Station identifier" ; 140 char STATION_TYPE(N_OBS, STRINGTYP) ; 141 STATION_TYPE:long_name = "Code instrument type" ; 142 double LONGITUDE(N_OBS) ; 143 LONGITUDE:long_name = "Longitude" ; 144 LONGITUDE:units = "degrees_east" ; 145 LONGITUDE:_Fillvalue = 99999.f ; 146 double LATITUDE(N_OBS) ; 147 LATITUDE:long_name = "Latitude" ; 148 LATITUDE:units = "degrees_north" ; 149 LATITUDE:_Fillvalue = 99999.f ; 150 double DEPTH(N_OBS, N_LEVELS) ; 151 DEPTH:long_name = "Depth" ; 152 DEPTH:units = "metre" ; 153 DEPTH:_Fillvalue = 99999.f ; 154 int DEPTH_QC(N_OBS, N_LEVELS) ; 155 DEPTH_QC:long_name = "Quality on depth" ; 156 DEPTH_QC:Conventions = "q where q =[0,9]" ; 157 DEPTH_QC:_Fillvalue = 0 ; 158 int DEPTH_QC_FLAGS(N_OBS, N_LEVELS, N_QCF) ; 159 DEPTH_QC_FLAGS:long_name = "Quality flags on depth" ; 160 DEPTH_QC_FLAGS:Conventions = "NEMOVAR flag conventions" ; 161 double JULD(N_OBS) ; 162 JULD:long_name = "Julian day" ; 163 JULD:units = "days since JULD_REFERENCE" ; 164 JULD:Conventions = "relative julian days with decimal part (as parts of day)" ; 165 JULD:_Fillvalue = 99999.f ; 166 char JULD_REFERENCE(STRINGJULD) ; 167 JULD_REFERENCE:long_name = "Date of reference for julian days" ; 168 JULD_REFERENCE:Conventions = "YYYYMMDDHHMMSS" ; 169 int OBSERVATION_QC(N_OBS) ; 170 OBSERVATION_QC:long_name = "Quality on observation" ; 171 OBSERVATION_QC:Conventions = "q where q =[0,9]" ; 172 OBSERVATION_QC:_Fillvalue = 0 ; 173 int OBSERVATION_QC_FLAGS(N_OBS, N_QCF) ; 174 OBSERVATION_QC_FLAGS:long_name = "Quality flags on observation" ; 175 OBSERVATION_QC_FLAGS:Conventions = "NEMOVAR flag conventions" ; 176 OBSERVATION_QC_FLAGS:_Fillvalue = 0 ; 177 int POSITION_QC(N_OBS) ; 178 POSITION_QC:long_name = "Quality on position (latitude and longitude)" ; 179 POSITION_QC:Conventions = "q where q =[0,9]" ; 180 POSITION_QC:_Fillvalue = 0 ; 181 int POSITION_QC_FLAGS(N_OBS, N_QCF) ; 182 POSITION_QC_FLAGS:long_name = "Quality flags on position" ; 183 POSITION_QC_FLAGS:Conventions = "NEMOVAR flag conventions" ; 184 POSITION_QC_FLAGS:_Fillvalue = 0 ; 185 int JULD_QC(N_OBS) ; 186 JULD_QC:long_name = "Quality on date and time" ; 187 JULD_QC:Conventions = "q where q =[0,9]" ; 188 JULD_QC:_Fillvalue = 0 ; 189 int JULD_QC_FLAGS(N_OBS, N_QCF) ; 190 JULD_QC_FLAGS:long_name = "Quality flags on date and time" ; 191 JULD_QC_FLAGS:Conventions = "NEMOVAR flag conventions" ; 192 JULD_QC_FLAGS:_Fillvalue = 0 ; 193 int ORIGINAL_FILE_INDEX(N_OBS) ; 194 ORIGINAL_FILE_INDEX:long_name = "Index in original data file" ; 195 ORIGINAL_FILE_INDEX:_Fillvalue = -99999 ; 196 float POTM_OBS(N_OBS, N_LEVELS) ; 197 POTM_OBS:long_name = "Potential temperature" ; 198 POTM_OBS:units = "Degrees Celsius" ; 199 POTM_OBS:_Fillvalue = 99999.f ; 200 float POTM_Hx(N_OBS, N_LEVELS) ; 201 POTM_Hx:long_name = "Model interpolated potential temperature" ; 202 POTM_Hx:units = "Degrees Celsius" ; 203 POTM_Hx:_Fillvalue = 99999.f ; 204 int POTM_QC(N_OBS) ; 205 POTM_QC:long_name = "Quality on potential temperature" ; 206 POTM_QC:Conventions = "q where q =[0,9]" ; 207 POTM_QC:_Fillvalue = 0 ; 208 int POTM_QC_FLAGS(N_OBS, N_QCF) ; 209 POTM_QC_FLAGS:long_name = "Quality flags on potential temperature" ; 210 POTM_QC_FLAGS:Conventions = "NEMOVAR flag conventions" ; 211 POTM_QC_FLAGS:_Fillvalue = 0 ; 212 int POTM_LEVEL_QC(N_OBS, N_LEVELS) ; 213 POTM_LEVEL_QC:long_name = "Quality for each level on potential temperature" ; 214 POTM_LEVEL_QC:Conventions = "q where q =[0,9]" ; 215 POTM_LEVEL_QC:_Fillvalue = 0 ; 216 int POTM_LEVEL_QC_FLAGS(N_OBS, N_LEVELS, N_QCF) ; 217 POTM_LEVEL_QC_FLAGS:long_name = "Quality flags for each level on potential temperature" ; 218 POTM_LEVEL_QC_FLAGS:Conventions = "NEMOVAR flag conventions" ; 219 POTM_LEVEL_QC_FLAGS:_Fillvalue = 0 ; 220 int POTM_IOBSI(N_OBS) ; 221 POTM_IOBSI:long_name = "ORCA grid search I coordinate" ; 222 int POTM_IOBSJ(N_OBS) ; 223 POTM_IOBSJ:long_name = "ORCA grid search J coordinate" ; 224 int POTM_IOBSK(N_OBS, N_LEVELS) ; 225 POTM_IOBSK:long_name = "ORCA grid search K coordinate" ; 226 char POTM_GRID(STRINGGRID) ; 227 POTM_GRID:long_name = "ORCA grid search grid (T,U,V)" ; 228 float PSAL_OBS(N_OBS, N_LEVELS) ; 229 PSAL_OBS:long_name = "Practical salinity" ; 230 PSAL_OBS:units = "PSU" ; 231 PSAL_OBS:_Fillvalue = 99999.f ; 232 float PSAL_Hx(N_OBS, N_LEVELS) ; 233 PSAL_Hx:long_name = "Model interpolated practical salinity" ; 234 PSAL_Hx:units = "PSU" ; 235 PSAL_Hx:_Fillvalue = 99999.f ; 236 int PSAL_QC(N_OBS) ; 237 PSAL_QC:long_name = "Quality on practical salinity" ; 238 PSAL_QC:Conventions = "q where q =[0,9]" ; 239 PSAL_QC:_Fillvalue = 0 ; 240 int PSAL_QC_FLAGS(N_OBS, N_QCF) ; 241 PSAL_QC_FLAGS:long_name = "Quality flags on practical salinity" ; 242 PSAL_QC_FLAGS:Conventions = "NEMOVAR flag conventions" ; 243 PSAL_QC_FLAGS:_Fillvalue = 0 ; 244 int PSAL_LEVEL_QC(N_OBS, N_LEVELS) ; 245 PSAL_LEVEL_QC:long_name = "Quality for each level on practical salinity" ; 246 PSAL_LEVEL_QC:Conventions = "q where q =[0,9]" ; 247 PSAL_LEVEL_QC:_Fillvalue = 0 ; 248 int PSAL_LEVEL_QC_FLAGS(N_OBS, N_LEVELS, N_QCF) ; 249 PSAL_LEVEL_QC_FLAGS:long_name = "Quality flags for each level on practical salinity" ; 250 PSAL_LEVEL_QC_FLAGS:Conventions = "NEMOVAR flag conventions" ; 251 PSAL_LEVEL_QC_FLAGS:_Fillvalue = 0 ; 252 int PSAL_IOBSI(N_OBS) ; 253 PSAL_IOBSI:long_name = "ORCA grid search I coordinate" ; 254 int PSAL_IOBSJ(N_OBS) ; 255 PSAL_IOBSJ:long_name = "ORCA grid search J coordinate" ; 256 int PSAL_IOBSK(N_OBS, N_LEVELS) ; 257 PSAL_IOBSK:long_name = "ORCA grid search K coordinate" ; 258 char PSAL_GRID(STRINGGRID) ; 259 PSAL_GRID:long_name = "ORCA grid search grid (T,U,V)" ; 260 float TEMP(N_OBS, N_LEVELS) ; 261 TEMP:long_name = "Insitu temperature" ; 262 TEMP:units = "Degrees Celsius" ; 263 TEMP:_Fillvalue = 99999.f ; 240 264 241 265 // global attributes: 242 243 266 :title = "NEMO observation operator output" ; 267 :Convention = "NEMO unified observation operator output" ; 244 268 } 245 269 \end{verbatim} … … 253 277 netcdf sla_01 { 254 278 dimensions: 255 256 257 258 259 260 261 262 263 264 265 279 N_OBS = 41301 ; 280 N_LEVELS = 1 ; 281 N_VARS = 1 ; 282 N_QCF = 2 ; 283 N_ENTRIES = 1 ; 284 N_EXTRA = 1 ; 285 STRINGNAM = 8 ; 286 STRINGGRID = 1 ; 287 STRINGWMO = 8 ; 288 STRINGTYP = 4 ; 289 STRINGJULD = 14 ; 266 290 variables: 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 291 char VARIABLES(N_VARS, STRINGNAM) ; 292 VARIABLES:long_name = "List of variables in feedback files" ; 293 char ENTRIES(N_ENTRIES, STRINGNAM) ; 294 ENTRIES:long_name = "List of additional entries for each variable in feedback files" ; 295 char EXTRA(N_EXTRA, STRINGNAM) ; 296 EXTRA:long_name = "List of extra variables" ; 297 char STATION_IDENTIFIER(N_OBS, STRINGWMO) ; 298 STATION_IDENTIFIER:long_name = "Station identifier" ; 299 char STATION_TYPE(N_OBS, STRINGTYP) ; 300 STATION_TYPE:long_name = "Code instrument type" ; 301 double LONGITUDE(N_OBS) ; 302 LONGITUDE:long_name = "Longitude" ; 303 LONGITUDE:units = "degrees_east" ; 304 LONGITUDE:_Fillvalue = 99999.f ; 305 double LATITUDE(N_OBS) ; 306 LATITUDE:long_name = "Latitude" ; 307 LATITUDE:units = "degrees_north" ; 308 LATITUDE:_Fillvalue = 99999.f ; 309 double DEPTH(N_OBS, N_LEVELS) ; 310 DEPTH:long_name = "Depth" ; 311 DEPTH:units = "metre" ; 312 DEPTH:_Fillvalue = 99999.f ; 313 int DEPTH_QC(N_OBS, N_LEVELS) ; 314 DEPTH_QC:long_name = "Quality on depth" ; 315 DEPTH_QC:Conventions = "q where q =[0,9]" ; 316 DEPTH_QC:_Fillvalue = 0 ; 317 int DEPTH_QC_FLAGS(N_OBS, N_LEVELS, N_QCF) ; 318 DEPTH_QC_FLAGS:long_name = "Quality flags on depth" ; 319 DEPTH_QC_FLAGS:Conventions = "NEMOVAR flag conventions" ; 320 double JULD(N_OBS) ; 321 JULD:long_name = "Julian day" ; 322 JULD:units = "days since JULD_REFERENCE" ; 323 JULD:Conventions = "relative julian days with decimal part (as parts of day)" ; 324 JULD:_Fillvalue = 99999.f ; 325 char JULD_REFERENCE(STRINGJULD) ; 326 JULD_REFERENCE:long_name = "Date of reference for julian days" ; 327 JULD_REFERENCE:Conventions = "YYYYMMDDHHMMSS" ; 328 int OBSERVATION_QC(N_OBS) ; 329 OBSERVATION_QC:long_name = "Quality on observation" ; 330 OBSERVATION_QC:Conventions = "q where q =[0,9]" ; 331 OBSERVATION_QC:_Fillvalue = 0 ; 332 int OBSERVATION_QC_FLAGS(N_OBS, N_QCF) ; 333 OBSERVATION_QC_FLAGS:long_name = "Quality flags on observation" ; 334 OBSERVATION_QC_FLAGS:Conventions = "NEMOVAR flag conventions" ; 335 OBSERVATION_QC_FLAGS:_Fillvalue = 0 ; 336 int POSITION_QC(N_OBS) ; 337 POSITION_QC:long_name = "Quality on position (latitude and longitude)" ; 338 POSITION_QC:Conventions = "q where q =[0,9]" ; 339 POSITION_QC:_Fillvalue = 0 ; 340 int POSITION_QC_FLAGS(N_OBS, N_QCF) ; 341 POSITION_QC_FLAGS:long_name = "Quality flags on position" ; 342 POSITION_QC_FLAGS:Conventions = "NEMOVAR flag conventions" ; 343 POSITION_QC_FLAGS:_Fillvalue = 0 ; 344 int JULD_QC(N_OBS) ; 345 JULD_QC:long_name = "Quality on date and time" ; 346 JULD_QC:Conventions = "q where q =[0,9]" ; 347 JULD_QC:_Fillvalue = 0 ; 348 int JULD_QC_FLAGS(N_OBS, N_QCF) ; 349 JULD_QC_FLAGS:long_name = "Quality flags on date and time" ; 350 JULD_QC_FLAGS:Conventions = "NEMOVAR flag conventions" ; 351 JULD_QC_FLAGS:_Fillvalue = 0 ; 352 int ORIGINAL_FILE_INDEX(N_OBS) ; 353 ORIGINAL_FILE_INDEX:long_name = "Index in original data file" ; 354 ORIGINAL_FILE_INDEX:_Fillvalue = -99999 ; 355 float SLA_OBS(N_OBS, N_LEVELS) ; 356 SLA_OBS:long_name = "Sea level anomaly" ; 357 SLA_OBS:units = "metre" ; 358 SLA_OBS:_Fillvalue = 99999.f ; 359 float SLA_Hx(N_OBS, N_LEVELS) ; 360 SLA_Hx:long_name = "Model interpolated sea level anomaly" ; 361 SLA_Hx:units = "metre" ; 362 SLA_Hx:_Fillvalue = 99999.f ; 363 int SLA_QC(N_OBS) ; 364 SLA_QC:long_name = "Quality on sea level anomaly" ; 365 SLA_QC:Conventions = "q where q =[0,9]" ; 366 SLA_QC:_Fillvalue = 0 ; 367 int SLA_QC_FLAGS(N_OBS, N_QCF) ; 368 SLA_QC_FLAGS:long_name = "Quality flags on sea level anomaly" ; 369 SLA_QC_FLAGS:Conventions = "NEMOVAR flag conventions" ; 370 SLA_QC_FLAGS:_Fillvalue = 0 ; 371 int SLA_LEVEL_QC(N_OBS, N_LEVELS) ; 372 SLA_LEVEL_QC:long_name = "Quality for each level on sea level anomaly" ; 373 SLA_LEVEL_QC:Conventions = "q where q =[0,9]" ; 374 SLA_LEVEL_QC:_Fillvalue = 0 ; 375 int SLA_LEVEL_QC_FLAGS(N_OBS, N_LEVELS, N_QCF) ; 376 SLA_LEVEL_QC_FLAGS:long_name = "Quality flags for each level on sea level anomaly" ; 377 SLA_LEVEL_QC_FLAGS:Conventions = "NEMOVAR flag conventions" ; 378 SLA_LEVEL_QC_FLAGS:_Fillvalue = 0 ; 379 int SLA_IOBSI(N_OBS) ; 380 SLA_IOBSI:long_name = "ORCA grid search I coordinate" ; 381 int SLA_IOBSJ(N_OBS) ; 382 SLA_IOBSJ:long_name = "ORCA grid search J coordinate" ; 383 int SLA_IOBSK(N_OBS, N_LEVELS) ; 384 SLA_IOBSK:long_name = "ORCA grid search K coordinate" ; 385 char SLA_GRID(STRINGGRID) ; 386 SLA_GRID:long_name = "ORCA grid search grid (T,U,V)" ; 387 float MDT(N_OBS, N_LEVELS) ; 388 MDT:long_name = "Mean Dynamic Topography" ; 389 MDT:units = "metre" ; 390 MDT:_Fillvalue = 99999.f ; 367 391 368 392 // global attributes: 369 370 393 :title = "NEMO observation operator output" ; 394 :Convention = "NEMO unified observation operator output" ; 371 395 } 396 \end{verbatim} 397 \end{alltt} 398 399 The mean dynamic 400 topography (MDT) must be provided in a separate file defined on the model grid 401 called {\it slaReferenceLevel.nc}. The MDT is required in 402 order to produce the model equivalent sea level anomaly from the model sea 403 surface height. Below is an example header for this file (on the ORCA025 grid). 404 405 \begin{alltt} 406 \tiny 407 \begin{verbatim} 408 dimensions: 409 x = 1442 ; 410 y = 1021 ; 411 variables: 412 float nav_lon(y, x) ; 413 nav_lon:units = "degrees_east" ; 414 float nav_lat(y, x) ; 415 nav_lat:units = "degrees_north" ; 416 float sossheig(y, x) ; 417 sossheig:_FillValue = -1.e+30f ; 418 sossheig:coordinates = "nav_lon nav_lat" ; 419 sossheig:long_name = "Mean Dynamic Topography" ; 420 sossheig:units = "metres" ; 421 sossheig:grid = "orca025T" ; 372 422 \end{verbatim} 373 423 \end{alltt} … … 380 430 netcdf sst_01 { 381 431 dimensions: 382 383 384 385 386 387 388 389 390 391 432 N_OBS = 33099 ; 433 N_LEVELS = 1 ; 434 N_VARS = 1 ; 435 N_QCF = 2 ; 436 N_ENTRIES = 1 ; 437 STRINGNAM = 8 ; 438 STRINGGRID = 1 ; 439 STRINGWMO = 8 ; 440 STRINGTYP = 4 ; 441 STRINGJULD = 14 ; 392 442 variables: 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 443 char VARIABLES(N_VARS, STRINGNAM) ; 444 VARIABLES:long_name = "List of variables in feedback files" ; 445 char ENTRIES(N_ENTRIES, STRINGNAM) ; 446 ENTRIES:long_name = "List of additional entries for each variable in feedback files" ; 447 char STATION_IDENTIFIER(N_OBS, STRINGWMO) ; 448 STATION_IDENTIFIER:long_name = "Station identifier" ; 449 char STATION_TYPE(N_OBS, STRINGTYP) ; 450 STATION_TYPE:long_name = "Code instrument type" ; 451 double LONGITUDE(N_OBS) ; 452 LONGITUDE:long_name = "Longitude" ; 453 LONGITUDE:units = "degrees_east" ; 454 LONGITUDE:_Fillvalue = 99999.f ; 455 double LATITUDE(N_OBS) ; 456 LATITUDE:long_name = "Latitude" ; 457 LATITUDE:units = "degrees_north" ; 458 LATITUDE:_Fillvalue = 99999.f ; 459 double DEPTH(N_OBS, N_LEVELS) ; 460 DEPTH:long_name = "Depth" ; 461 DEPTH:units = "metre" ; 462 DEPTH:_Fillvalue = 99999.f ; 463 int DEPTH_QC(N_OBS, N_LEVELS) ; 464 DEPTH_QC:long_name = "Quality on depth" ; 465 DEPTH_QC:Conventions = "q where q =[0,9]" ; 466 DEPTH_QC:_Fillvalue = 0 ; 467 int DEPTH_QC_FLAGS(N_OBS, N_LEVELS, N_QCF) ; 468 DEPTH_QC_FLAGS:long_name = "Quality flags on depth" ; 469 DEPTH_QC_FLAGS:Conventions = "NEMOVAR flag conventions" ; 470 double JULD(N_OBS) ; 471 JULD:long_name = "Julian day" ; 472 JULD:units = "days since JULD_REFERENCE" ; 473 JULD:Conventions = "relative julian days with decimal part (as parts of day)" ; 474 JULD:_Fillvalue = 99999.f ; 475 char JULD_REFERENCE(STRINGJULD) ; 476 JULD_REFERENCE:long_name = "Date of reference for julian days" ; 477 JULD_REFERENCE:Conventions = "YYYYMMDDHHMMSS" ; 478 int OBSERVATION_QC(N_OBS) ; 479 OBSERVATION_QC:long_name = "Quality on observation" ; 480 OBSERVATION_QC:Conventions = "q where q =[0,9]" ; 481 OBSERVATION_QC:_Fillvalue = 0 ; 482 int OBSERVATION_QC_FLAGS(N_OBS, N_QCF) ; 483 OBSERVATION_QC_FLAGS:long_name = "Quality flags on observation" ; 484 OBSERVATION_QC_FLAGS:Conventions = "NEMOVAR flag conventions" ; 485 OBSERVATION_QC_FLAGS:_Fillvalue = 0 ; 486 int POSITION_QC(N_OBS) ; 487 POSITION_QC:long_name = "Quality on position (latitude and longitude)" ; 488 POSITION_QC:Conventions = "q where q =[0,9]" ; 489 POSITION_QC:_Fillvalue = 0 ; 490 int POSITION_QC_FLAGS(N_OBS, N_QCF) ; 491 POSITION_QC_FLAGS:long_name = "Quality flags on position" ; 492 POSITION_QC_FLAGS:Conventions = "NEMOVAR flag conventions" ; 493 POSITION_QC_FLAGS:_Fillvalue = 0 ; 494 int JULD_QC(N_OBS) ; 495 JULD_QC:long_name = "Quality on date and time" ; 496 JULD_QC:Conventions = "q where q =[0,9]" ; 497 JULD_QC:_Fillvalue = 0 ; 498 int JULD_QC_FLAGS(N_OBS, N_QCF) ; 499 JULD_QC_FLAGS:long_name = "Quality flags on date and time" ; 500 JULD_QC_FLAGS:Conventions = "NEMOVAR flag conventions" ; 501 JULD_QC_FLAGS:_Fillvalue = 0 ; 502 int ORIGINAL_FILE_INDEX(N_OBS) ; 503 ORIGINAL_FILE_INDEX:long_name = "Index in original data file" ; 504 ORIGINAL_FILE_INDEX:_Fillvalue = -99999 ; 505 float SST_OBS(N_OBS, N_LEVELS) ; 506 SST_OBS:long_name = "Sea surface temperature" ; 507 SST_OBS:units = "Degree centigrade" ; 508 SST_OBS:_Fillvalue = 99999.f ; 509 float SST_Hx(N_OBS, N_LEVELS) ; 510 SST_Hx:long_name = "Model interpolated sea surface temperature" ; 511 SST_Hx:units = "Degree centigrade" ; 512 SST_Hx:_Fillvalue = 99999.f ; 513 int SST_QC(N_OBS) ; 514 SST_QC:long_name = "Quality on sea surface temperature" ; 515 SST_QC:Conventions = "q where q =[0,9]" ; 516 SST_QC:_Fillvalue = 0 ; 517 int SST_QC_FLAGS(N_OBS, N_QCF) ; 518 SST_QC_FLAGS:long_name = "Quality flags on sea surface temperature" ; 519 SST_QC_FLAGS:Conventions = "NEMOVAR flag conventions" ; 520 SST_QC_FLAGS:_Fillvalue = 0 ; 521 int SST_LEVEL_QC(N_OBS, N_LEVELS) ; 522 SST_LEVEL_QC:long_name = "Quality for each level on sea surface temperature" ; 523 SST_LEVEL_QC:Conventions = "q where q =[0,9]" ; 524 SST_LEVEL_QC:_Fillvalue = 0 ; 525 int SST_LEVEL_QC_FLAGS(N_OBS, N_LEVELS, N_QCF) ; 526 SST_LEVEL_QC_FLAGS:long_name = "Quality flags for each level on sea surface temperature" ; 527 SST_LEVEL_QC_FLAGS:Conventions = "NEMOVAR flag conventions" ; 528 SST_LEVEL_QC_FLAGS:_Fillvalue = 0 ; 529 int SST_IOBSI(N_OBS) ; 530 SST_IOBSI:long_name = "ORCA grid search I coordinate" ; 531 int SST_IOBSJ(N_OBS) ; 532 SST_IOBSJ:long_name = "ORCA grid search J coordinate" ; 533 int SST_IOBSK(N_OBS, N_LEVELS) ; 534 SST_IOBSK:long_name = "ORCA grid search K coordinate" ; 535 char SST_GRID(STRINGGRID) ; 536 SST_GRID:long_name = "ORCA grid search grid (T,U,V)" ; 487 537 488 538 // global attributes: 489 490 539 :title = "NEMO observation operator output" ; 540 :Convention = "NEMO unified observation operator output" ; 491 541 } 492 542 \end{verbatim} … … 494 544 495 545 \section{Theoretical details} 546 \label{OBS_theory} 496 547 497 548 \subsection{Horizontal interpolation methods} … … 669 720 with explicit message passing for exchange of information along the 670 721 domain boundaries when running on a massively parallel processor (MPP) 671 system. This approach is used by the\NEMO.722 system. This approach is used by \NEMO. 672 723 673 724 For observations there is no natural distribution since the … … 679 730 680 731 %>>>>>>>>>>>>>>>>>>>>>>>>>>>> 681 \begin{figure} 732 \begin{figure} \begin{center} 682 733 \includegraphics[width=10cm,height=12cm,angle=-90.]{./TexFiles/Figures/Fig_ASM_obsdist_local} 683 \caption{ 734 \caption{ \label{fig:obslocal} 684 735 Example of the distribution of observations with the geographical distribution of observational data.} 685 \end{center} 736 \end{center} \end{figure} 686 737 %>>>>>>>>>>>>>>>>>>>>>>>>>>>> 687 738 … … 706 757 707 758 %>>>>>>>>>>>>>>>>>>>>>>>>>>>> 708 \begin{figure} 759 \begin{figure} \begin{center} 709 760 \includegraphics[width=10cm,height=12cm,angle=-90.]{./TexFiles/Figures/Fig_ASM_obsdist_global} 710 \caption{ 761 \caption{ \label{fig:obsglobal} 711 762 Example of the distribution of observations with the round-robin distribution of observational data.} 712 \end{center} 763 \end{center} \end{figure} 713 764 %>>>>>>>>>>>>>>>>>>>>>>>>>>>> 714 765 -
branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90
r2358 r2474 347 347 WRITE(numout,*) 'dia_obs_init : Observation diagnostic initialization' 348 348 WRITE(numout,*) '~~~~~~~~~~~~' 349 #if defined key_datetime_out350 CALL DATE_AND_TIME(datestr,timestr)351 WRITE(numout,*) 'dia_obs_init date_and_time ',datestr,' ',timestr352 #endif353 349 WRITE(numout,*) ' Namelist namobs : set observation diagnostic parameters' 354 350 WRITE(numout,*) ' Logical switch for T profile observations ln_t3d = ', ln_t3d … … 551 547 IF ( ln_ena ) THEN 552 548 553 #if defined key_datetime_out554 IF (lwp) THEN555 CALL DATE_AND_TIME(datestr,timestr)556 WRITE(numout,*) 'Read enact date_and_time ',datestr,' ',timestr557 ENDIF558 #endif559 549 jprofset = jprofset + 1 560 550 … … 649 639 ! - Sea level anomalies 650 640 IF ( ln_sla ) THEN 651 #if defined key_datetime_out 652 IF (lwp) THEN 653 CALL DATE_AND_TIME(datestr,timestr) 654 WRITE(numout,*) 'Read SLA date_and_time ',datestr,' ',timestr 655 ENDIF 656 #endif 657 ! Set the number of variables for sla to 1 641 ! Set the number of variables for sla to 1 658 642 nslavars = 1 659 643 … … 689 673 & nslavars, nslaextr, nitend-nit000+2, & 690 674 & dobsini, dobsend, ln_ignmis, .FALSE. ) 691 #if defined key_datetime_out692 IF (lwp) THEN693 CALL DATE_AND_TIME(datestr,timestr)694 WRITE(numout,*) 'obs_pre_sla date_and_time ',datestr,' ',timestr695 ENDIF696 #endif697 675 CALL obs_pre_sla( sladata(nslasets), sladatqc(nslasets), & 698 676 & ln_sla, ln_nea ) … … 702 680 nslasets = nslasets + 1 703 681 704 #if defined key_datetime_out705 IF (lwp) THEN706 CALL DATE_AND_TIME(datestr,timestr)707 WRITE(numout,*) 'obs_pre_sla date_and_time ',datestr,' ',timestr708 ENDIF709 #endif710 682 CALL obs_rea_sla( 1, sladata(nslasets), jnumslapas, & 711 683 & slafilespas(1:jnumslapas), & … … 713 685 & dobsini, dobsend, ln_ignmis, .FALSE. ) 714 686 715 #if defined key_datetime_out716 IF (lwp) THEN717 CALL DATE_AND_TIME(datestr,timestr)718 WRITE(numout,*) 'obs_pre_sla date_and_time ',datestr,' ',timestr719 ENDIF720 #endif721 687 CALL obs_pre_sla( sladata(nslasets), sladatqc(nslasets), & 722 688 & ln_sla, ln_nea ) … … 736 702 & nslavars, nslaextr, nitend-nit000+2, & 737 703 & dobsini, dobsend, ln_ignmis, .FALSE. ) 738 #if defined key_datetime_out739 IF (lwp) THEN740 CALL DATE_AND_TIME(datestr,timestr)741 WRITE(numout,*) 'obs_pre_sla date_and_time ',datestr,' ',timestr742 ENDIF743 #endif744 704 CALL obs_pre_sla( sladata(nslasets), sladatqc(nslasets), & 745 705 & ln_sla, ln_nea ) … … 749 709 ENDIF 750 710 751 #if defined key_datetime_out752 IF (lwp) THEN753 CALL DATE_AND_TIME(datestr,timestr)754 WRITE(numout,*) 'obs_rea_mdt date_and_time ',datestr,' ',timestr755 ENDIF756 #endif757 711 CALL obs_rea_mdt( nslasets, sladatqc, n2dint ) 758 712 … … 772 726 ! - Sea surface temperature 773 727 IF ( ln_sst ) THEN 774 #if defined key_datetime_out775 IF (lwp) THEN776 CALL DATE_AND_TIME(datestr,timestr)777 WRITE(numout,*) 'Read SST date_and_time ',datestr,' ',timestr778 ENDIF779 #endif780 728 781 729 ! Set the number of variables for sst to 1 … … 820 768 & nsstvars, nsstextr, nitend-nit000+2, & 821 769 & dobsini, dobsend, ln_ignmis, .FALSE. ) 822 #if defined key_datetime_out823 IF (lwp) THEN824 CALL DATE_AND_TIME(datestr,timestr)825 WRITE(numout,*) 'obs_pre_sst date_and_time ',datestr,' ',timestr826 ENDIF827 #endif828 770 CALL obs_pre_sst( sstdata(nsstsets), sstdatqc(nsstsets), ln_sst, & 829 771 & ln_nea ) … … 843 785 & nsstvars, nsstextr, nitend-nit000+2, & 844 786 & dobsini, dobsend, ln_ignmis, .FALSE. ) 845 #if defined key_datetime_out846 IF (lwp) THEN847 CALL DATE_AND_TIME(datestr,timestr)848 WRITE(numout,*) 'obs_pre_sst date_and_time ',datestr,' ',timestr849 ENDIF850 #endif851 787 CALL obs_pre_sst( sstdata(nsstsets), sstdatqc(nsstsets), & 852 788 & ln_sst, ln_nea ) … … 866 802 867 803 IF ( ln_seaice ) THEN 868 869 #if defined key_datetime_out870 IF (lwp) THEN871 CALL DATE_AND_TIME(datestr,timestr)872 WRITE(numout,*) 'Read sea ice data date_and_time ',datestr,' ',timestr873 ENDIF874 #endif875 804 876 805 ! Set the number of variables for seaice to 1 … … 892 821 & nseaicevars, nseaiceextr, nitend-nit000+2, & 893 822 & dobsini, dobsend, ln_ignmis, .FALSE. ) 894 895 #if defined key_datetime_out896 IF (lwp) THEN897 CALL DATE_AND_TIME(datestr,timestr)898 WRITE(numout,*) 'obs_pre_seaice date_and_time ',datestr,' ',timestr899 ENDIF900 #endif901 823 902 824 CALL obs_pre_seaice( seaicedata(nseaicesets), seaicedatqc(nseaicesets), & … … 1060 982 1061 983 ENDIF 1062 1063 #if defined key_datetime_out1064 IF (lwp) THEN1065 CALL DATE_AND_TIME(datestr,timestr)1066 WRITE(numout,*) 'end dia_obs_init date_and_time ',datestr,' ',timestr1067 ENDIF1068 #endif1069 984 1070 985 END SUBROUTINE dia_obs_init … … 1133 1048 WRITE(numout,*) 'dia_obs : Call the observation operators', kstp 1134 1049 WRITE(numout,*) '~~~~~~~' 1135 #if defined key_datetime_out1136 CALL DATE_AND_TIME(datestr,timestr)1137 WRITE(numout,*) 'dia_obs date_and_time ',datestr,' ',timestr1138 #endif1139 1050 ENDIF 1140 1051 … … 1210 1121 ENDIF 1211 1122 1212 #if defined key_datetime_out1213 IF(lwp) THEN1214 CALL DATE_AND_TIME(datestr,timestr)1215 WRITE(numout,*) 'dia_obs finished date_and_time ',datestr,' ',timestr1216 ENDIF1217 #endif1218 1219 1123 END SUBROUTINE dia_obs 1220 1124 … … 1253 1157 !----------------------------------------------------------------------- 1254 1158 1255 #if defined key_datetime_out1256 IF (lwp) THEN1257 CALL DATE_AND_TIME(datestr,timestr)1258 WRITE(numout,*) 'dia_obs_wri date_and_time ',datestr,' ',timestr1259 ENDIF1260 #endif1261 1262 1159 ! - Temperature/salinity profiles 1263 1160 … … 1275 1172 1276 1173 jprofset = 0 1277 1278 1174 1279 1175 ! ENACT insitu data … … 1498 1394 1499 1395 ENDIF 1500 1501 #if defined key_datetime_out1502 IF (lwp) THEN1503 CALL DATE_AND_TIME(datestr,timestr)1504 WRITE(numout,*) 'dia_obs_wri end date_and_time ',datestr,' ',timestr1505 ENDIF1506 #endif1507 1396 1508 1397 END SUBROUTINE dia_obs_wri -
branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/OBS/obs_grid.F90
r2358 r2474 685 685 WRITE(numout,*) 'Calling obs_grid_setup' 686 686 687 #ifdef key_datetime_out688 IF (lwp) THEN689 CALL DATE_AND_TIME(datestr,timestr)690 WRITE(numout,*) 'obs_grid_setup begin date_and_time ',datestr,' ',timestr691 ENDIF692 #endif693 694 687 IF(lwp) WRITE(numout,*) 695 688 IF(lwp) WRITE(numout,*)'Grid search resolution : ', grid_search_res -
branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/OBS/obs_mpp.F90
r2363 r2474 8 8 !! - ! 2008-01 (K. Mogensen) add mpp_global_max 9 9 !!---------------------------------------------------------------------- 10 #if defined key_mpp_mpi11 # if defined key_sp12 # define mpivar mpi_real13 # else14 10 # define mpivar mpi_double_precision 15 # endif16 #endif17 11 !!---------------------------------------------------------------------- 18 12 !! obs_mpp_bcast_integer : Broadcast an integer array from a processor to all processors -
branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/OBS/obsinter_h2d.h90
r2287 r2474 1057 1057 itermax = 100 1058 1058 1059 #if defined key_sp 1060 zeps = 1.0e-6_wp1061 #else 1062 zeps = 1.0e-10_wp1063 #endif 1059 IF ( wp == sp ) THEN 1060 zeps = 1.0e-6_wp ! Single precision 1061 ELSE 1062 zeps = 1.0e-10_wp ! Double precision 1063 ENDIF 1064 1064 1065 1065 !------------------------------------------------------------------------ -
branches/nemo_v3_3_beta/NEMOGCM/NEMO/OPA_SRC/step.F90
r2392 r2474 161 161 IF( lk_diahth ) CALL dia_hth( kstp ) ! Thermocline depth (20 degres isotherm depth) 162 162 IF( lk_diafwb ) CALL dia_fwb( kstp ) ! Fresh water budget diagnostics 163 IF( lk_diaobs ) CALL dia_obs( kstp ) ! obs-minus-model (assimilation) diagnostics164 163 IF( ln_diaptr ) CALL dia_ptr( kstp ) ! Poleward TRansports diagnostics 165 164 IF( lk_diaar5 ) CALL dia_ar5( kstp ) ! ar5 diag … … 234 233 235 234 IF( ln_diahsb ) CALL dia_hsb( kstp ) ! - ML - global conservation diagnostics 235 IF( lk_diaobs ) CALL dia_obs( kstp ) ! obs-minus-model (assimilation) diagnostics (call after dynamics update) 236 236 237 237 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Note: See TracChangeset
for help on using the changeset viewer.