New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
#1252 (addition of rivers in the data reading for OFF_SRC) – NEMO

Opened 10 years ago

Closed 8 years ago

#1252 closed Enhancement (fixed)

addition of rivers in the data reading for OFF_SRC

Reported by: vichi Owned by: vichi
Priority: low Milestone:
Component: OFF Version: v3.6
Severity: Keywords:
Cc: cetlod

Description

This is a feature required with the BFM but it may be useful for PISCES as well. In the BFM we have separated the input of freshwater for rivers and precipitation because this allows to avoid dilution of tracers in case there is a river and we assume the same concentration as in seawater.
It is thus required to read the variable sorunoff together with the other dtadyn variables.
We also suggest to make the indices of input data fields to be read a bit more dynamical.

These are the suggested changes:

diff  a/NEMOGCM/NEMO/OFF_SRC/dtadyn.F90 b/NEMOGCM/NEMO/OFF_SRC/dtadyn.F90
index d641857..597763d 100644
--- a/NEMOGCM/NEMO/OFF_SRC/dtadyn.F90
+++ b/NEMOGCM/NEMO/OFF_SRC/dtadyn.F90
@@ -49,9 +49,10 @@ MODULE dtadyn
    CHARACTER(len=100) ::   cn_dir       !: Root directory for location of ssr files
    LOGICAL            ::   ln_dynwzv    !: vertical velocity read in a file (T) or computed from u/v (F)
    LOGICAL            ::   ln_dynbbl    !: bbl coef read in a file (T) or computed (F)
    LOGICAL            ::   ln_degrad    !: degradation option enabled or not 
+   LOGICAL            ::   ln_dynrnf    !: read runoff data in file (T) or set to zero (F)
 
-   INTEGER  , PARAMETER ::   jpfld = 20     ! maximum number of fields to read
+   INTEGER  , PARAMETER ::   jpfld = 21     ! maximum number of fields to read
    INTEGER  , SAVE      ::   jf_tem         ! index of temperature
    INTEGER  , SAVE      ::   jf_sal         ! index of salinity
    INTEGER  , SAVE      ::   jf_uwd         ! index of u-wind
@@ -63,6 +64,7 @@ MODULE dtadyn
    INTEGER  , SAVE      ::   jf_qsr         ! index of solar radiation
    INTEGER  , SAVE      ::   jf_wnd         ! index of wind speed
    INTEGER  , SAVE      ::   jf_ice         ! index of sea ice cover
+   INTEGER  , SAVE      ::   jf_rnf         ! index of river runoff
    INTEGER  , SAVE      ::   jf_ubl         ! index of u-bbl coef
    INTEGER  , SAVE      ::   jf_vbl         ! index of v-bbl coef
    INTEGER  , SAVE      ::   jf_ahu         ! index of u-diffusivity coef
@@ -256,6 +258,8 @@ CONTAINS
       fmmflx(:,:)      = sf_dyn(jf_fmf)%fnow(:,:,1) * tmask(:,:,1)    ! downward salt flux (v3.5+)
       fr_i(:,:)        = sf_dyn(jf_ice)%fnow(:,:,1) * tmask(:,:,1)    ! Sea-ice fraction
       qsr (:,:)        = sf_dyn(jf_qsr)%fnow(:,:,1) * tmask(:,:,1)    ! solar radiation
+      IF ( ln_dynrnf ) &
+      rnf (:,:)        = sf_dyn(jf_rnf)%fnow(:,:,1) * tmask(:,:,1)    ! river runoffs 
 
       !                                                      ! bbl diffusive coef
 #if defined key_trabbl && ! defined key_c1d
@@ -328,13 +332,13 @@ CONTAINS
       !!
       CHARACTER(len=100)            ::  cn_dir   !   Root directory for location of core files
       TYPE(FLD_N), DIMENSION(jpfld) ::  slf_d    ! array of namelist informations on the fields to read
-      TYPE(FLD_N) :: sn_tem, sn_sal, sn_mld, sn_emp, sn_ice, sn_qsr, sn_wnd  ! informations about the fields to be read
+      TYPE(FLD_N) :: sn_tem, sn_sal, sn_mld, sn_emp, sn_ice, sn_qsr, sn_wnd, sn_rnf  ! informations about the fields to be read
       TYPE(FLD_N) :: sn_uwd, sn_vwd, sn_wwd, sn_avt, sn_ubl, sn_vbl          !   "                                 "
       TYPE(FLD_N) :: sn_ahu, sn_ahv, sn_ahw, sn_eiu, sn_eiv, sn_eiw, sn_fmf  !   "                                 "
       !!----------------------------------------------------------------------
       !
-      NAMELIST/namdta_dyn/cn_dir, ln_dynwzv, ln_dynbbl, ln_degrad,    &
-         &                sn_tem, sn_sal, sn_mld, sn_emp, sn_ice, sn_qsr, sn_wnd,  &
+      NAMELIST/namdta_dyn/cn_dir, ln_dynwzv, ln_dynbbl, ln_degrad, ln_dynrnf,    &
+         &                sn_tem, sn_sal, sn_mld, sn_emp, sn_ice, sn_qsr, sn_wnd, sn_rnf,  &
          &                sn_uwd, sn_vwd, sn_wwd, sn_avt, sn_ubl, sn_vbl,          &
          &                sn_ahu, sn_ahv, sn_ahw, sn_eiu, sn_eiv, sn_eiw, sn_fmf
       !
@@ -356,6 +360,7 @@ CONTAINS
          WRITE(numout,*) '      vertical velocity read from file (T) or computed (F) ln_dynwzv  = ', ln_dynwzv
          WRITE(numout,*) '      bbl coef read from file (T) or computed (F)          ln_dynbbl  = ', ln_dynbbl
          WRITE(numout,*) '      degradation option enabled (T) or not (F)            ln_degrad  = ', ln_degrad
+         WRITE(numout,*) '      river runoff option enabled (T) or not (F)           ln_dynrnf  = ', ln_dynrnf
          WRITE(numout,*)
       ENDIF
       ! 
@@ -369,40 +374,49 @@ CONTAINS
       ENDIF
 
       jf_tem = 1   ;   jf_sal = 2   ;  jf_mld = 3   ;  jf_emp = 4   ;   jf_fmf  = 5   ;  jf_ice = 6   ;   jf_qsr = 7
-      jf_wnd = 8   ;   jf_uwd = 9   ;  jf_vwd = 10  ;  jf_wwd = 11  ;   jf_avt  = 12  ;  jfld  = 12
+      jf_wnd = 8   ;   jf_uwd = 9   ;  jf_vwd = 10  ;  jf_wwd = 11  ;   jf_avt  = 12  ;  jfld  = jf_avt
       !
       slf_d(jf_tem) = sn_tem   ;   slf_d(jf_sal)  = sn_sal   ;   slf_d(jf_mld) = sn_mld
       slf_d(jf_emp) = sn_emp   ;   slf_d(jf_fmf ) = sn_fmf   ;   slf_d(jf_ice) = sn_ice 
       slf_d(jf_qsr) = sn_qsr   ;   slf_d(jf_wnd)  = sn_wnd   ;   slf_d(jf_avt) = sn_avt 
       slf_d(jf_uwd) = sn_uwd   ;   slf_d(jf_vwd)  = sn_vwd   ;   slf_d(jf_wwd) = sn_wwd
+
+      !
+      IF ( ln_dynrnf ) THEN
+                jf_rnf = jfld + 1  ;  jfld  = jf_rnf
+         slf_d(jf_rnf) = sn_rnf
+      ELSE
+         rnf (:,:) = 0._wp
+      ENDIF
+
       !
       IF( .NOT.ln_degrad ) THEN     ! no degrad option
          IF( lk_traldf_eiv .AND. ln_dynbbl ) THEN        ! eiv & bbl
-                 jf_ubl  = 13      ;         jf_vbl  = 14      ;         jf_eiw  = 15   ;   jfld = 15
+                 jf_ubl  = jfld + 1 ;        jf_vbl  = jfld + 2 ;        jf_eiw  = jfld + 3   ;   jfld = jf_eiw
            slf_d(jf_ubl) = sn_ubl  ;   slf_d(jf_vbl) = sn_vbl  ;   slf_d(jf_eiw) = sn_eiw
          ENDIF
          IF( .NOT.lk_traldf_eiv .AND. ln_dynbbl ) THEN   ! no eiv & bbl
-                 jf_ubl  = 13      ;         jf_vbl  = 14      ;   jfld = 14
+                 jf_ubl  = jfld + 1 ;        jf_vbl  = jfld + 2 ;  jfld = jf_vbl
            slf_d(jf_ubl) = sn_ubl  ;   slf_d(jf_vbl) = sn_vbl
          ENDIF
          IF( lk_traldf_eiv .AND. .NOT.ln_dynbbl ) THEN   ! eiv & no bbl
-           jf_eiw = 13   ;   jfld = 13   ;   slf_d(jf_eiw) = sn_eiw
+           jf_eiw = jfld + 1 ; jfld = jf_eiw ; slf_d(jf_eiw) = sn_eiw
          ENDIF
       ELSE
-              jf_ahu  = 13      ;         jf_ahv  = 14      ;         jf_ahw  = 15   ;   jfld = 15
+              jf_ahu  = jfld + 1 ;        jf_ahv  = jfld + 2 ;        jf_ahw  = jfld + 3  ;  jfld = jf_ahw
         slf_d(jf_ahu) = sn_ahu  ;   slf_d(jf_ahv) = sn_ahv  ;   slf_d(jf_ahw) = sn_ahw
         IF( lk_traldf_eiv .AND. ln_dynbbl ) THEN         ! eiv & bbl
-                 jf_ubl  = 16      ;         jf_vbl  = 17      
-           slf_d(jf_ubl) = sn_ubl  ;   slf_d(jf_vbl) = sn_vbl  
-                 jf_eiu  = 18      ;         jf_eiv  = 19      ;          jf_eiw  = 20   ;   jfld = 20
+                 jf_ubl  = jfld + 1 ;        jf_vbl  = jfld + 2 ;
+           slf_d(jf_ubl) = sn_ubl  ;   slf_d(jf_vbl) = sn_vbl
+                 jf_eiu  = jfld + 3 ;        jf_eiv  = jfld + 4 ;    jf_eiw  = jfld + 5   ;  jfld = jf_eiw 
            slf_d(jf_eiu) = sn_eiu  ;   slf_d(jf_eiv) = sn_eiv  ;    slf_d(jf_eiw) = sn_eiw
         ENDIF
         IF( .NOT.lk_traldf_eiv .AND. ln_dynbbl ) THEN    ! no eiv & bbl
-                 jf_ubl  = 16      ;         jf_vbl  = 17      ;   jfld = 17
+                 jf_ubl  = jfld + 1 ;        jf_vbl  = jfld + 2 ;  jfld = jf_vbl
            slf_d(jf_ubl) = sn_ubl  ;   slf_d(jf_vbl) = sn_vbl
         ENDIF
         IF( lk_traldf_eiv .AND. .NOT.ln_dynbbl ) THEN    ! eiv & no bbl
-                 jf_eiu  = 16      ;         jf_eiv  = 17      ;         jf_eiw  = 18   ;   jfld = 18
+                 jf_eiu  = jfld + 1 ;         jf_eiv  = jfld + 2 ;    jf_eiw  = jfld + 3   ; jfld = jf_eiw 
            slf_d(jf_eiu) = sn_eiu  ;   slf_d(jf_eiv) = sn_eiv  ;   slf_d(jf_eiw) = sn_eiw
         ENDIF
       ENDIF

diff --git a/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90 b/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90
index 9d64fcb..2efab39 100644
--- a/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90
+++ b/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90
@@ -430,6 +430,8 @@ CONTAINS
             &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
          CALL histdef( nid_T, "sowaflup", "Net Upward Water Flux"              , "Kg/m2/s",   &  ! (emp-rnf)
             &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
+         CALL histdef( nid_T, "sorunoff", "River runoffs"                      , "Kg/m2/s",   &  ! runoffs
+            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
          CALL histdef( nid_T, "sosfldow", "downward salt flux"                 , "PSU/m2/s",  &  ! sfx
             &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout )
          IF(  .NOT. lk_vvl  ) THEN
@@ -641,6 +643,7 @@ CONTAINS
       ENDIF
       CALL histwrite( nid_T, "sossheig", it, sshn          , ndim_hT, ndex_hT )   ! sea surface height
       CALL histwrite( nid_T, "sowaflup", it, ( emp-rnf )   , ndim_hT, ndex_hT )   ! upward water flux
+      CALL histwrite( nid_T, "sorunoff", it, rnf           , ndim_hT, ndex_hT )   ! river runoffs
       CALL histwrite( nid_T, "sosfldow", it, sfx           , ndim_hT, ndex_hT )   ! downward salt flux 
                                                                                   ! (includes virtual salt flux beneath ice 
                                                                                   ! in linear free surface case)

Commit History (2)

ChangesetAuthorTimeChangeLog
6134lovato2015-12-18T16:01:55+01:00

Add changes proposed in ticket #1252 and #1645 (related to runoff data sharing)

4570vichi2014-03-25T18:47:41+01:00

Add reading of river runoff data in off-line simulation, Ticket #1252

Change History (3)

comment:1 Changed 10 years ago by vichi

  • Resolution set to fixed
  • Status changed from new to closed

Added in [4570]

comment:2 Changed 10 years ago by vichi

  • Resolution fixed deleted
  • Status changed from closed to reopened

There are more changes needed to implement this feature.

Index: nemogcm.F90
===================================================================
--- nemogcm.F90	(revision 4614)
+++ nemogcm.F90	(working copy)
@@ -13,6 +13,7 @@
    !!   nemo_ctl        : initialisation of algorithm flag
    !!   nemo_closefile  : close remaining files
    !!----------------------------------------------------------------------
+   USE step_oce        ! module used in the ocean time stepping module
    USE dom_oce         ! ocean space domain variables
    USE oce             ! dynamics and tracers variables
    USE c1d             ! 1D configuration
@@ -50,6 +51,8 @@
    USE trc
    USE trcnam
    USE trcrst
+   USE sbcrnf,   ONLY: sbc_rnf    !
+   USE sbc_oce,  ONLY: ln_rnf

    IMPLICIT NONE
    PRIVATE
@@ -95,6 +98,11 @@
       !
       CALL iom_init( "nemo" )            ! iom_put initialization (must be done after nemo_init for AGRIF+XIOS+OASIS)
       !
+      !
+      ! Initialize arrays of runoffs and read data from the namelist
+      !
+      IF ( ln_rnf ) CALL sbc_rnf(istp)
+      !
       DO WHILE ( istp <= nitend .AND. nstop == 0 )    ! time stepping
          !
          IF( istp /= nit000 )   CALL day      ( istp )         ! Calendar (day was already called at nit000 in day_init)

comment:3 Changed 8 years ago by lovato

  • Resolution set to fixed
  • Status changed from reopened to closed

Changes were applied in revision r6134.

Note: See TracTickets for help on using tickets.