198 | | if appropriate. |
| 198 | if appropriate. The files need to be ordered in ascending time coordinate. |
| 199 | |
| 200 | * The multipe output files are activated in '''roms.in''' by setting any of their parameters ('''NDEFHIS''', '''NDEFQCK''', '''NDEFAVG''', '''NDEFDIA''') to be greater than zero. ROMS creates new files every specified number of timesteps. The parameters '''NDEFADJ''' and '''NDEFTLM''' are special and some algorithms do not allow its values to be greater than zero. |
| 201 | |
| 202 | * Started to solve the issue with '''DSTART''' in the adjoint-based algorithms. The management of '''DSTART''' has evolved over the years. It is set in '''roms.in''' standard input file. Nowadays, we need to set its value to the actual initialization time (in days) every time that we run any of the 4D-Var drivers or their associated analysis tools. The reason for it is that '''tl_initial''', '''rp_initial''', and '''ad_initial''' rarely reads an initial conditions NetCDF file for the '''TLM''', '''RPM''', and '''ADM''', respectively. Usually, those initial conditions are initialized from rest ('''zeros''') or computed by the 4D-Var driver. Therefore, we need to use '''DSTART''' to compute the correct and crucial time-stepping parameters: '''time(ng)''', '''tdays(ng)''', '''ntstart(ng)''', '''ntend(ng)''', and '''ntfirst(ng)''' since we are not reading an initial NetCDF file to set '''time(ng)''' for those kernels. |
| 203 | |
| 204 | My current strategy is to use the initialization time from the nonlinear model or forward trajectory, which is now saved in '''INItime(ng)'''. It is already coded but not activated because it requires rigorous testing. I am not fully satisfied yet. This capability is activated with the new '''GENERIC_DSTART''' C-preprocessing option. '''Please do not activate this option'''! You may get different and wrong results. There is a tricky bug somewhere that I haven't been able to find. In '''tl_initial.F''', we have: |
| 205 | {{{ |
| 206 | # ifdef GENERIC_DSTART |
| 207 | ! |
| 208 | ! Rarely, the tangent linear model is initialized from a NetCDF file, |
| 209 | ! so we do not know its actual initialization time. Usually, it is |
| 210 | ! computed from DSTART, implying that its value is correct in the ROMS |
| 211 | ! input script. Therefore, the user needs to check and update its value |
| 212 | ! to every time that ROMS is executed. Alternatively, if available, we |
| 213 | ! can use the initialization time from the nonlinear model, INItime. |
| 214 | ! This variable is assigned when computing or processing the basic |
| 215 | ! state trajectory needed to linearize the adjoint model. |
| 216 | ! |
| 217 | IF (INItime(ng).lt.0.0_dp) THEN |
| 218 | my_dstart=dstart ! ROMS input script |
| 219 | ELSE |
| 220 | my_dstart=INItime(ng)/86400.0_dp ! NLM IC time is known |
| 221 | END IF |
| 222 | tdays(ng)=my_dstart |
| 223 | # else |
| 224 | tdays(ng)=dstart |
| 225 | # endif |
| 226 | time(ng)=tdays(ng)*day2sec |
| 227 | }}} |
| 228 | |
| 229 | The reason why I am looking at it is that we want an unrestrained value of '''DSTART''' because of the multiple-file option that now is allowed in the adjoint-based algorithms. Recall that '''DSTART''' controls the split file enumeration and the starting value for '''iic(ng)'''. If '''DSTART''' is set to the initial conditions time value, the count always starts at zero. |
| 230 | |
| 231 | * Corrected few tiny bugs in the 2D applications set-up. Many thanks to Brian Powell for bringing these issues to my attention. |