36 | | {{{#!box help |
37 | | [[Include(wiki:Developers/DevProcess#review)]] |
38 | | }}} |
| 36 | Some years ago, when we created iom.F90, the idea was to be able to use different IO libraries as transparently as possible... |
| 37 | |
| 38 | This was still the case in NEMO 3.6. |
| 39 | In that version, you could find 3 different IO libraries: nf90, ioipsl and dimg. |
| 40 | the choice between theses libraries was done in iom_def.F90 (lines 30 to 37) |
| 41 | https://forge.ipsl.jussieu.fr/nemo/browser/NEMO/releases/release-3.6/NEMOGCM/NEMO/OPA_SRC/IOM/iom_def.F90 [[BR]] |
| 42 | |
| 43 | |
| 44 | The iom routines where therefore organized in a 2 stages modules. |
| 45 | |
| 46 | - The first stage is iom.F90 that contains all public subroutines, prepare all the IO work but do the IO work. |
| 47 | All the idea was iom.F90 is the common interface for all IO libraries. |
| 48 | https://forge.ipsl.jussieu.fr/nemo/browser/NEMO/releases/release-3.4/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90 |
| 49 | |
| 50 | - The second stage is called by iom.F90 subroutines and consist in 3 different IO routines |
| 51 | https://forge.ipsl.jussieu.fr/nemo/browser/NEMO/releases/release-3.6/NEMOGCM/NEMO/OPA_SRC/IOM/iom_nf90.F90 |
| 52 | https://forge.ipsl.jussieu.fr/nemo/browser/NEMO/releases/release-3.6/NEMOGCM/NEMO/OPA_SRC/IOM/iom_ioipsl.F90 |
| 53 | https://forge.ipsl.jussieu.fr/nemo/browser/NEMO/releases/release-3.6/NEMOGCM/NEMO/OPA_SRC/IOM/iom_rstdimg.F90 |
| 54 | |
| 55 | |
| 56 | The fork toward the different libraries was done in iom.F90, with case statements. |
| 57 | See for example iom_rstput interface in this version of iom.F90 (from line 1046) |
| 58 | |
| 59 | We think that the use of xios to read/write restarts should try follow this same logic. |
| 60 | -> reintroduce case in iom to be able to switch from native netcdf (nf90) to xios library [[BR]] |
| 61 | -> Ideally, the use of xios for restarts should not be visible somewhere else, no? [[BR]] |
| 62 | -> once the interface is done it is directly usable for all restarts [[BR]] |
| 63 | |
| 64 | We know that the reality is more complex that this simple description and developing such interface wont be so easy… |
| 65 | We think a good stating point is to follow what is done for nf90 restarts that are performed in 2 steps: |
| 66 | 1) 1 time step before restart: define all the restart file using a specific context (so xios_context_initialize and xios_close_context_definition cand be done anytime)[[BR]] |
| 67 | 2) fill the file when is it restart time step. |
| 68 | |
| 69 | |
| 70 | Sebastien and Clement |