19 | | {{{#!box help |
20 | | [[Include(wiki:Developers/DevProcess#preview_)]] |
21 | | }}} |
| 19 | === 1. Current implementation of tidal forcing |
| 20 | |
| 21 | The current implementation of tide-related functionality is distributed across a number of files and there are intertwined dependencies across the tide-related modules. The current implementation of tidal forcing (tidal potential and forcing at open boundaries) comprises five modules (in separate files): |
| 22 | |
| 23 | * module {{{sbctide}}} (source:/NEMO/trunk/src/OCE/SBC/sbctide.F90), |
| 24 | * module {{{tideini}}} (source:/NEMO/trunk/src/OCE/SBC/tideini.F90), |
| 25 | * module {{{tide_mod}}} (source:/NEMO/trunk/src/OCE/SBC/tide_mod.F90), |
| 26 | * module {{{updtide}}} (source:/NEMO/trunk/src/OCE/SBC/updtide.F90), and |
| 27 | * module {{{bdytides}}} (source:/NEMO/trunk/src/OCE/BDY/bdytides.F90). |
| 28 | |
| 29 | In addition, the parameters for the currently selectable tidal constituents are supplied via an include file (source:/NEMO/trunk/src/OCE/SBC/tide.h90). Further, the computation of the surface pressure gradient (source:/NEMO/trunk/src/OCE/DYN/dynspg.F90 and source:NEMO/trunk/src/OCE/DYN/dynspg_ts.F90) with activated tidal potential as well as the harmonic analysis (module {{{diaharm}}}, source:/NEMO/trunk/src/OCE/DIA/diaharm.F90) call subroutines and access variables of the modules listed above. |
| 30 | |
| 31 | === 2. Proposed addition of an alternative set of tidal component parameters |
| 32 | |
| 33 | ''To be outlined.'' |
| 34 | |
| 35 | === 3. Proposed combination of tide-related functionality into one module in a new source-code subdirectory {{{OCE/TDE}}} |
| 36 | |
| 37 | The basis of the proposed simplified and clarified tidal-forcing implementation is: |
| 38 | |
| 39 | * the relocation of module {{{tide_mod}}} (source:/NEMO/trunk/src/OCE/SBC/tide_mod.F90) from the {{{SBC}}} subdirectory to a newly created {{{TDE}}} subdirectory; |
| 40 | |
| 41 | * the merging of most of the current tide-related functionality from modules {{{sbctide}}}, {{{tideini}}}, and {{{updtide}}} into module {{{tide_mod}}}; and |
| 42 | |
| 43 | * the provision of an appropriate public interface in module {{{tide_mod}}} for access to module subroutines and data as required by other modules ({{{sbctide}}}, {{{dynspg}}}, {{{dynspg_ts}}}, {{{bdytides}}}, {{{diaharm}}}). |
| 44 | |
| 45 | Further, specific proposed modifications of the tide-related code include: |
| 46 | |
| 47 | a. the addition of a new namelist parameter {{{rn_love_number}}} with a default value of 0.7 that replaces the hard-coded Love-number coefficient in subroutine {{{tide_init_potential}}} (currently in module {{{sbctide}}}); |
| 48 | |
| 49 | b. the renaming of the current namelist parameters that violate the namelist parameter naming convention (renaming of parameters {{{rndttideramp}}} and {{{clname}}} to {{{rn_tide_ramp_dt}}} and {{{sn_tide_cnames}}}, respectively); |
| 50 | |
| 51 | c. the replacement of the array {{{Wave}}} that contains parameters for all available tidal components by an array ({{{tide_components}}}) that is returned by a new reentrant initialisation subroutine ({{{tide_init_components}}}) and only contains the parameters for the selected components, thereby enabling the reading in of alternative tidal parameter databases with differing numbers of components (see part 2 above), simplifying the implementation (the subsetting of the database using an array of selected indices, {{{ntide}}}, would no longer be required), and making it possible to reuse the initialisation subroutine (e.g., it can be used when a subroutine of module {{{diaharm}}} requests a list of harmonics parameters for a specific subset of tidal components, see item 2e below); |
| 52 | |
| 53 | d. the simplification of the internal representation of amplitudes, frequencies, and phases of the selected tidal components in the new public array {{{tide_harmonics}}} (for internal use as well as for external access of tidal harmonics information by module {{{bdytides}}}) that contains variables of a new type {{{tide_harmonic}}}, |
| 54 | |
| 55 | {{{#f |
| 56 | TYPE, PUBLIC :: tide_harmonic |
| 57 | CHARACTER(LEN=4) :: name |
| 58 | REAL(wp) :: f |
| 59 | REAL(wp) :: omega |
| 60 | REAL(wp) :: u |
| 61 | REAL(wp) :: v |
| 62 | END TYPE tide_harmonic |
| 63 | }}}, |
| 64 | |
| 65 | and which replaces the arrays {{{omega_tide}}}, {{{v0tide}}}, {{{utide}}}, {{{ftide}}} (and additionally stores the names of the components; this feature would be used by subroutine {{{tide_harmo}}}, see item 2e, and module {{{bdytides}}}, see item 2i); |
| 66 | |
| 67 | e. the extension of subroutine {{{tide_harmo}}} of module {{{tide_mod}}} so that it optionally accepts an array of tidal-component names and, if called with such a list of names, returns a pointer to an array of elements of type {{{tide_harmonic}}} that have been filled with the tidal harmonic parameters for the respective components (this proposed development would make use of developments 2c and 2d, and take into account modification 2g); |
| 68 | |
| 69 | f. the simplified daily synchronisation of the temporal tidal-forcing update in subroutine {{{sbc_tide}}} (module {{{sbctide}}}) using a single call to a new subroutine {{{tide_update}}} of module {{{tide_mod}}} (this proposed subroutine would include calls to subroutines {{{tide_harmo}}} and {{{tide_init_potential}}} and the output of tide-related information); |
| 70 | |
| 71 | g. the replacement of the use of variable {{{nset_day}}} by the value of an argument (passed via subroutine {{{tide_harmo}}}) in subroutine {{{astronomic_angle}}} (module {{{tide_mod}}}), in order to remove the dangerous temporary modification of {{{nday_sec}}} in module {{{sbcmod}}}; |
| 72 | |
| 73 | h. the modification of subroutine {{{upd_tide}}}, called in the computation of the surface pressure graident, so that instead of {{{kt}}} and {{{kt_tide}}} only the time between midnight and the current (sub)timestep is required as argument (this makes the setting of {{{kt_tide}}} in module {{{sbctide}}} unnecessary); and |
| 74 | |
| 75 | i. in module {{{bdytide}}}, the replacement of references to variables {{{Wave}}}, {{{ftide}}}, {{{omega}}}, {{{utide}}}, and {{{v0tide}}} by references to components of variable {{{tide_harmonics}}}. |