Description |
I have several research repositories for several ongoing new algorithms that will be available in the future. I have so many exceptional flags to update the codes that sometimes one fails, and undesired changes appear in public released version of ROMS and erase features in the research versions. To avoid doing that in the future, I am consolidating the research 4DVAR repository with the public version of the code.
For the last two months, we have been developing the saddle-point 4D-Var. By far, one of the most technically tricky algorithms that Andy and I have put our hands on. As formulated, the current available 4D-Var algorithms are sequential, and its inner loops cannot be parallelized in time to accelerate the analysis. The conjugate gradient solver used to minimize the cost function J, depends sequentially on the previous iteration.
Fisher and Gürol (2017) proposed a new weak constraint 4D-Var algorithm based on the saddle-point formulation that can be parallelized in time. The time trajectory can be split into the solution of Nsaddle intervals that can run concurrently to reduce the 4D-Var computational cost.
To achieve these technically challenging computations, we need to make changes to several ROMS routines to:
- To split the MPI communicator to carry out disjointed and concurrent runs of the nonlinear, tangent linear, and adjoint ROMS kernels. Therefore, several of the routines of distribute.F have an optional argument to pass the desired MPI communicators that are defined in mod_parallel.F.
- Add optional arguments to output NetCDF routines nf_fwrite2d.F, nf_fwrite2d_bry.F, nf_fwrite3d.F, nf_fwrite3d_bry.F, and nf_fwrite4d.F to get the minimun and maximun values ot the written fields.
- Include several new generic routines to manipulate ROMS state vector: ADfromTL.F, def_state.F, state_join.F, state_read.F, and wrt_state.F.
- No change is made to ROMS nonlinear, tangent linear, and adjoint time-stepping kernels.
- Added several routines from the LAPACK library that are needed for the Generalized Minimal Residual (GMRES) minimization solver.
- The saddle-point algorithm with be released in the future when it is fully tested and we have the proper documentation and relevant publication.
|
Description |
This update included several enhancements:
- All the roms_*.in standard input scripts were modified to allow the lateral boundary conditions and climatological variables to be separate in different files, similar to the surface forcing files. For Example, the User may have different files for physical, biology, and sediment variables. The model will scan the file list and will read the needed data in the first file containing the required variable. Therefore, the order of the filenames is critical. It is also possible to split input data time records into several NetCDF files.
! Input lateral boundary conditions file names. The USER has the option
! to separate the required lateral boundary variables into individual
! NetCDF files (NBCFILES > 1), as in the input surface forcing. Also,
! the USER may split input data time records into several NetCDF files
! (monthly, seasonal, or annual). See prologue instructions above. Use
! a single line per entry with a continuation (\) or a vertical bar (|)
! symbol after each entry, except the last one.
NBCFILES == 1 ! number of boundary files
BRYNAME == ../Data/doppio_bry_Mercator2007_corr.nc
! Input climatology file names. The USER has the option to separate the
! climatology variables into individual NetCDF files (NCLMFILES > 1),
! as in the input surface forcing. Also, the USER may split input data
! time records into several NetCDF files (monthly, seasonal, or annual).
! See prologue instructions above. Use a single line per entry with a
! continuation (\) or a vertical bar (|) symbol after each entry, except
! the last one.
NCLMFILES == 1 ! number of climatology files
CLMNAME == ../Data/doppio_clm_Mercator2007_corr.nc
That is, we can have:
NBCFILES == 2 ! number of boundary files
BRYNAME == my_physics_bry_year1.nc | ! physical kernel variables
my_physics_bry_year2.nc \
my_biology_bry_year1.nc | ! biological tracers
my_biology_bry_year2.nc
NCLMFILES == 2 ! number of climatology files
CLMNAME == my_physics_clm_year1.nc | ! physical kernel variables
my_physics_bry_year2.nc \
my_biology_bry_year1.nc | ! biological tracers
my_biology_bry_year2.nc
- The routine metrics.F was updated to include some of the statistics to exclude the land values when MASKING is activated:
Metrics information for Grid 01:
===============================
Minimum X-grid spacing, DXmin = 6.88663955E+00 km Water points = 6.90302997E+00 km
Maximum X-grid spacing, DXmax = 7.03257515E+00 km Water points = 7.03257508E+00 km
Minimum Y-grid spacing, DYmin = 6.86772676E+00 km Water points = 6.88396066E+00 km
Maximum Y-grid spacing, DYmax = 7.01314814E+00 km Water points = 7.01314814E+00 km
Minimum Z-grid spacing, DZmin = 1.22555380E-01 m Water points = 1.23127234E-01 m
Maximum Z-grid spacing, DZmax = 3.61224935E+02 m Water points = 3.61224935E+02 m
Minimum barotropic Courant Number = 1.69968839E-02
Maximum barotropic Courant Number = 5.37936938E-01
Maximum Coriolis Courant Number = 3.77305364E-02
Horizontal mixing scaled by grid area squared root, MAXVAL(grdscl) = 7.02285483E+00 km (Water Points)
- All the batch, csh, and perl scripts were updated to acceptable Standards to include:
- The csh scripts need to have extension .csh (we were using .sh)
- The batch scripts need to have extension .sh (we were using .bash)
- The perl scripts need use strict, variables declared via my or our, avoid overriding the $a built-in, and require version 5.6 or newer.
WARNING:
- All the ROMS standard input scripts roms_*.in were modified.
- All the ROMS build scripts were updated and renamed to have the proper extension according to the Standard.
- All the csh and bash scripts were renamed so they have proper extension.
|