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.
Changeset 1938 for branches/DEV_R1821_Rivers/NEMO – NEMO

Ignore:
Timestamp:
2010-06-16T16:34:29+02:00 (14 years ago)
Author:
rfurner
Message:

rnf has been separated from emp and emps. Also temperature and salinity of runoff can be specified, and runoff can be added to a user specified depth

Location:
branches/DEV_R1821_Rivers/NEMO/OPA_SRC
Files:
18 edited

Legend:

Unmodified
Added
Removed
  • branches/DEV_R1821_Rivers/NEMO/OPA_SRC/BDY/bdyvol.F90

    r1739 r1938  
    8686      z_cflxemp = 0.e0 
    8787      zraur = 1.e0 / rau0 
    88       z_cflxemp = SUM ( emp(:,:) * bdytmask(:,:) * e1t(:,:) * e2t(:,:) * zraur ) 
     88      z_cflxemp = SUM ( ( emp(:,:)-rnf(:,:) ) * bdytmask(:,:) * e1t(:,:) * e2t(:,:) * zraur )  
    8989      IF( lk_mpp )   CALL mpp_sum( z_cflxemp )   ! sum over the global domain 
    9090 
  • branches/DEV_R1821_Rivers/NEMO/OPA_SRC/DIA/diafwb.F90

    r1581 r1938  
    3030   LOGICAL, PUBLIC, PARAMETER ::   lk_diafwb = .TRUE.    !: fresh water budget flag 
    3131 
    32    REAL(wp)               ::   a_emp ,          & 
     32   REAL(wp)               ::   a_fwf ,          & 
    3333      &                        a_sshb, a_sshn, a_salb, a_saln 
    3434   REAL(wp), DIMENSION(4) ::   a_flxi, a_flxo, a_temi, a_temo, a_sali, a_salo 
     
    5959      REAL(wp) ::  ztemi(4), ztemo(4), zsali(4), zsalo(4), zflxi(4), zflxo(4) 
    6060      REAL(wp) ::  zt, zs, zu   
    61       REAL(wp) ::  zsm0, zempnew 
     61      REAL(wp) ::  zsm0, zfwfnew 
    6262      !!---------------------------------------------------------------------- 
    6363 
     
    6565      zsm0 = 34.72654 
    6666 
    67       ! To compute emp mean value mean emp 
     67      ! To compute fwf mean value mean fwf 
    6868 
    6969      IF( kt == nit000 ) THEN 
    7070 
    71          a_emp    = 0.e0 
     71         a_fwf    = 0.e0 
    7272         a_sshb   = 0.e0 ! valeur de ssh au debut de la simulation 
    7373         a_salb   = 0.e0 ! valeur de sal au debut de la simulation 
     
    8787      ENDIF 
    8888       
    89       a_emp    = SUM( e1t(:,:) * e2t(:,:) * emp   (:,:) * tmask_i(:,:) ) 
    90       IF( lk_mpp )   CALL mpp_sum( a_emp    )       ! sum over the global domain 
     89      a_fwf    = SUM( e1t(:,:) * e2t(:,:) * ( emp(:,:)-rnf(:,:) ) * tmask_i(:,:) )  
     90      IF( lk_mpp )   CALL mpp_sum( a_fwf    )       ! sum over the global domain 
    9191 
    9292      IF( kt == nitend ) THEN 
     
    9595         zarea = 0.e0 
    9696         zvol  = 0.e0 
    97          zempnew = 0.e0 
     97         zfwfnew = 0.e0 
    9898         ! Mean sea level at nitend 
    9999         a_sshn = SUM( e1t(:,:) * e2t(:,:) * sshn(:,:) * tmask_i(:,:) ) 
     
    115115          
    116116         ! Conversion in m3 
    117          a_emp    = a_emp * rdttra(1) * 1.e-3  
     117         a_fwf    = a_fwf * rdttra(1) * 1.e-3  
    118118          
    119          ! emp correction to bring back the mean ssh to zero 
    120          zempnew = a_sshn / ( ( nitend - nit000 + 1 ) * rdt ) * 1.e3 / zarea 
     119         ! fwf correction to bring back the mean ssh to zero 
     120         zfwfnew = a_sshn / ( ( nitend - nit000 + 1 ) * rdt ) * 1.e3 / zarea 
    121121 
    122122      ENDIF 
     
    362362         WRITE(inum,*) 
    363363         WRITE(inum,*)    'Net freshwater budget ' 
    364          WRITE(inum,9010) '  emp    = ',a_emp,   ' m3 =', a_emp   /(FLOAT(nitend-nit000+1)*rdttra(1)) * 1.e-6,' Sv' 
     364         WRITE(inum,9010) '  fwf    = ',a_fwf,   ' m3 =', a_fwf   /(FLOAT(nitend-nit000+1)*rdttra(1)) * 1.e-6,' Sv' 
    365365         WRITE(inum,*) 
    366366         WRITE(inum,9010) '  zarea =',zarea 
  • branches/DEV_R1821_Rivers/NEMO/OPA_SRC/DIA/diawri.F90

    r1792 r1938  
    346346!!$            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout ) 
    347347!!$#endif 
    348          CALL histdef( nid_T, "sowaflup", "Net Upward Water Flux"              , "Kg/m2/s",   &  ! emp 
     348         CALL histdef( nid_T, "sowaflup", "Net Upward Water Flux"              , "Kg/m2/s",   &  ! (emp-rnf) 
    349349            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout ) 
    350350!!$         CALL histdef( nid_T, "sorunoff", "Runoffs"                            , "Kg/m2/s",   &  ! runoffs 
    351351!!$            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout ) 
    352          CALL histdef( nid_T, "sowaflcd", "concentration/dilution water flux"  , "kg/m2/s",   &  ! emps 
    353             &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout ) 
    354          CALL histdef( nid_T, "sosalflx", "Surface Salt Flux"                  , "Kg/m2/s",   &  ! emps * sn 
     352         CALL histdef( nid_T, "sowaflcd", "concentration/dilution water flux"  , "kg/m2/s",   &  ! (emps-rnf) 
     353            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout ) 
     354         CALL histdef( nid_T, "sosalflx", "Surface Salt Flux"                  , "Kg/m2/s",   &  ! (emps-rnf) * sn 
    355355            &          jpi, jpj, nh_T, 1  , 1, 1  , -99 , 32, clop, zsto, zout ) 
    356356         CALL histdef( nid_T, "sohefldo", "Net Downward Heat Flux"             , "W/m2"   ,   &  ! qns + qsr 
     
    498498!!$      CALL histwrite( nid_T, "sowaflep", it, fmass(:,:)    , ndim_hT, ndex_hT )   ! atmos=>ocean water flux 
    499499!!$#endif 
    500       CALL histwrite( nid_T, "sowaflup", it, emp           , ndim_hT, ndex_hT )   ! upward water flux 
     500      CALL histwrite( nid_T, "sowaflup", it, ( emp-rnf )   , ndim_hT, ndex_hT )   ! upward water flux 
    501501!!$      CALL histwrite( nid_T, "sorunoff", it, runoff        , ndim_hT, ndex_hT )   ! runoff 
    502       CALL histwrite( nid_T, "sowaflcd", it, emps          , ndim_hT, ndex_hT )   ! c/d water flux 
    503       zw2d(:,:) = emps(:,:) * sn(:,:,1) * tmask(:,:,1) 
     502      CALL histwrite( nid_T, "sowaflcd", it, ( emps-rnf )  , ndim_hT, ndex_hT )   ! c/d water flux 
     503      zw2d(:,:) = ( emps(:,:) - rnf(:,:) ) * sn(:,:,1) * tmask(:,:,1) 
    504504      CALL histwrite( nid_T, "sosalflx", it, zw2d          , ndim_hT, ndex_hT )   ! c/d salt flux 
    505505      CALL histwrite( nid_T, "sohefldo", it, qns + qsr     , ndim_hT, ndex_hT )   ! total heat flux 
     
    700700      CALL histwrite( id_i, "vomecrty", kt, vn       , jpi*jpj*jpk, idex )    ! now j-velocity 
    701701      CALL histwrite( id_i, "vovecrtz", kt, wn       , jpi*jpj*jpk, idex )    ! now k-velocity 
    702       CALL histwrite( id_i, "sowaflup", kt, emp      , jpi*jpj    , idex )    ! freshwater budget 
     702      CALL histwrite( id_i, "sowaflup", kt, (emp-rnf), jpi*jpj    , idex )    ! freshwater budget 
    703703      CALL histwrite( id_i, "sohefldo", kt, qsr + qns, jpi*jpj    , idex )    ! total heat flux 
    704704      CALL histwrite( id_i, "soshfldo", kt, qsr      , jpi*jpj    , idex )    ! solar heat flux 
  • branches/DEV_R1821_Rivers/NEMO/OPA_SRC/DIA/diawri_dimg.h90

    r1685 r1938  
    4242    !!  level 2:  vtau(:,:) * vmask(:,:,1) meridional stress in N. m-2 
    4343    !!  level 3:  qsr + qns                total heat flux (W/m2) 
    44     !!  level 4:  emp (:,:)               E-P flux (mm/day) 
     44    !!  level 4:  ( emp (:,:)-rnf(:,:) )   E-P flux (mm/day) 
    4545    !!  level 5:  tb  (:,:,1)-sst          model SST -forcing sst (degree C) ! deprecated 
    4646    !!  level 6:  bsfb(:,:)         streamfunction (m**3/s) 
     
    5454    !!  level 14: qct(:,:)                 equivalent flux due to treshold SST 
    5555    !!  level 15: fbt(:,:)                 feedback term . 
    56     !!  level 16: emps(:,:)                concentration/dilution water flux 
     56    !!  level 16: ( emps(:,:) - rnf(:,:) ) concentration/dilution water flux 
    5757    !!  level 17: fsalt(:,:)               Ice=>ocean net freshwater 
    5858    !!  level 18: gps(:,:)                 the surface pressure (m). 
     
    167167       fsel(:,:,2 ) = fsel(:,:,2 ) + vtau(:,:) * vmask(:,:,1) 
    168168       fsel(:,:,3 ) = fsel(:,:,3 ) + qsr (:,:) + qns  (:,:)  
    169        fsel(:,:,4 ) = fsel(:,:,4 ) + emp (:,:) 
     169       fsel(:,:,4 ) = fsel(:,:,4 ) + ( emp(:,:)-rnf(:,:) )  
    170170       !        fsel(:,:,5 ) = fsel(:,:,5 ) + tb  (:,:,1)  !RB not used 
    171171       fsel(:,:,6 ) = fsel(:,:,6 ) + sshn(:,:)  
     
    179179       !        fsel(:,:,14) = fsel(:,:,14) + qct(:,:) 
    180180       !        fsel(:,:,15) = fsel(:,:,15) + fbt(:,:) 
    181        fsel(:,:,16) = fsel(:,:,16) + emps(:,:) 
     181       fsel(:,:,16) = fsel(:,:,16) + ( emps(:,:)-rnf(:,:) )  
    182182#ifdef key_diaspr    
    183183       fsel(:,:,18) = fsel(:,:,18) + gps(:,:)/g  
     
    242242          fsel(:,:,2 ) = vtau(:,:) * vmask(:,:,1) 
    243243          fsel(:,:,3 ) = (qsr (:,:) + qns (:,:)) * tmask(:,:,1) 
    244           fsel(:,:,4 ) = emp (:,:) * tmask(:,:,1) 
     244          fsel(:,:,4 ) = ( emp(:,:)-rnf(:,:) ) * tmask(:,:,1)  
    245245          !         fsel(:,:,5 ) = (tb  (:,:,1) - sf_sst(1)%fnow(:,:) ) *tmask(:,:,1) !RB not used 
    246246 
     
    255255          !         fsel(:,:,14) =  qct(:,:) 
    256256          !         fsel(:,:,15) =  fbt(:,:) 
    257           fsel(:,:,16) =  emps(:,:) * tmask(:,:,1) 
     257          fsel(:,:,16) = ( emps(:,:)-rnf(:,:) ) * tmask(:,:,1)  
    258258#ifdef key_diaspr            
    259259          fsel(:,:,18) =      gps(:,:) /g 
  • branches/DEV_R1821_Rivers/NEMO/OPA_SRC/DOM/closea.F90

    r1601 r1938  
    180180      INTEGER                     ::   ji, jj, jc, jn   ! dummy loop indices 
    181181      REAL(wp)                    ::   zze2 
    182       REAL(wp), DIMENSION (jpncs) ::   zemp 
     182      REAL(wp), DIMENSION (jpncs) ::   zfwf  
     183  
     184      REAL(wp), DIMENSION (jpi,jpj)       ::   fwf              !: fresh water flux,for volume: emp-rnf   
     185      REAL(wp), DIMENSION (jpi,jpj)       ::   fwfs             !: fresh water flux, for conc/dilution effect: emps-rnf   
    183186      !!---------------------------------------------------------------------- 
    184187      ! 
     
    216219      !                                                   !--------------------! 
    217220      !                                                   !  update emp, emps  ! 
    218       zemp = 0.e0                                         !--------------------! 
     221      zfwf = 0.e0                                         !--------------------! 
    219222      DO jc = 1, jpncs 
    220223         DO jj = ncsj1(jc), ncsj2(jc) 
    221224            DO ji = ncsi1(jc), ncsi2(jc) 
    222                zemp(jc) = zemp(jc) + e1t(ji,jj) * e2t(ji,jj) * emp(ji,jj) * tmask_i(ji,jj) 
     225               zfwf(jc) = zfwf(jc) + e1t(ji,jj) * e2t(ji,jj) * ( emp(ji,jj)-rnf(ji,jj) ) * tmask_i(ji,jj)  
    223226            END DO   
    224227         END DO  
    225228      END DO 
    226       IF( lk_mpp )   CALL mpp_sum ( zemp(:) , jpncs )       ! mpp: sum over all the global domain 
     229      IF( lk_mpp )   CALL mpp_sum ( zfwf(:) , jpncs )       ! mpp: sum over all the global domain 
    227230 
    228231      IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN      ! Black Sea case for ORCA_R2 configuration 
    229          zze2    = ( zemp(3) + zemp(4) ) / 2. 
    230          zemp(3) = zze2 
    231          zemp(4) = zze2 
     232         zze2    = ( zfwf(3) + zfwf(4) ) / 2. 
     233         zfwf(3) = zze2 
     234         zfwf(4) = zze2 
    232235      ENDIF 
    233236 
     
    236239         IF( ncstt(jc) == 0 ) THEN  
    237240            ! water/evap excess is shared by all open ocean 
    238             emp (:,:) = emp (:,:) + zemp(jc) / surf(jpncs+1) 
    239             emps(:,:) = emps(:,:) + zemp(jc) / surf(jpncs+1) 
     241            emp (:,:) = emp (:,:) + zfwf(jc) / surf(jpncs+1) 
     242            emps(:,:) = emps(:,:) + zfwf(jc) / surf(jpncs+1) 
    240243         ELSEIF( ncstt(jc) == 1 ) THEN  
    241244            ! Excess water in open sea, at outflow location, excess evap shared 
    242             IF ( zemp(jc) <= 0.e0 ) THEN  
     245            IF ( zfwf(jc) <= 0.e0 ) THEN  
    243246                DO jn = 1, ncsnr(jc) 
    244247                  ji = mi0(ncsir(jc,jn)) 
     
    246249                  IF (      ji > 1 .AND. ji < jpi   & 
    247250                      .AND. jj > 1 .AND. jj < jpj ) THEN  
    248                       emp (ji,jj) = emp (ji,jj) + zemp(jc) /   & 
     251                      emp (ji,jj) = emp (ji,jj) + zfwf(jc) /   & 
    249252                         (FLOAT(ncsnr(jc)) * e1t(ji,jj) * e2t(ji,jj)) 
    250                       emps(ji,jj) = emps(ji,jj) + zemp(jc) /   & 
     253                      emps(ji,jj) = emps(ji,jj) + zfwf(jc) /   & 
    251254                          (FLOAT(ncsnr(jc)) * e1t(ji,jj) * e2t(ji,jj)) 
    252255                  END IF  
    253256                END DO  
    254257            ELSE  
    255                 emp (:,:) = emp (:,:) + zemp(jc) / surf(jpncs+1) 
    256                 emps(:,:) = emps(:,:) + zemp(jc) / surf(jpncs+1) 
     258                emp (:,:) = emp (:,:) + zfwf(jc) / surf(jpncs+1) 
     259                emps(:,:) = emps(:,:) + zfwf(jc) / surf(jpncs+1) 
    257260            ENDIF 
    258261         ELSEIF( ncstt(jc) == 2 ) THEN  
     
    263266                  ji = mi0(ncsir(jc,jn)) 
    264267                  jj = mj0(ncsjr(jc,jn)) ! Location of outflow in open ocean 
    265                   emp (ji,jj) = emp (ji,jj) + zemp(jc)   & 
     268                  emp (ji,jj) = emp (ji,jj) + zfwf(jc)   & 
    266269                      / (FLOAT(ncsnr(jc)) *  e1t(ji,jj) * e2t(ji,jj) ) 
    267                   emps(ji,jj) = emps(ji,jj) + zemp(jc)   & 
     270                  emps(ji,jj) = emps(ji,jj) + zfwf(jc)   & 
    268271                      / (FLOAT(ncsnr(jc)) *  e1t(ji,jj) * e2t(ji,jj) ) 
    269272                END DO  
     
    273276         DO jj = ncsj1(jc), ncsj2(jc) 
    274277            DO ji = ncsi1(jc), ncsi2(jc) 
    275                emp (ji,jj) = emp (ji,jj) - zemp(jc) / surf(jc) 
    276                emps(ji,jj) = emps(ji,jj) - zemp(jc) / surf(jc) 
     278               emp (ji,jj) = emp (ji,jj) - zfwf(jc) / surf(jc) 
     279               emps(ji,jj) = emps(ji,jj) - zfwf(jc) / surf(jc) 
    277280            END DO   
    278281         END DO  
     
    280283      END DO  
    281284      ! 
    282       CALL lbc_lnk( emp , 'T', 1. ) 
    283       CALL lbc_lnk( emps, 'T', 1. ) 
     285      fwf(:,:)  = emp(:,:)  - rnf(:,:)   
     286      fwfs(:,:) = emps(:,:) - rnf(:,:)   
     287      CALL lbc_lnk( fwf , 'T', 1. )  
     288      CALL lbc_lnk( fwfs, 'T', 1. )  
    284289      ! 
    285290   END SUBROUTINE sbc_clo 
  • branches/DEV_R1821_Rivers/NEMO/OPA_SRC/DYN/dynspg_flt.F90

    r1792 r1938  
    8585      !!         where (spgu,spgv) are given by: 
    8686      !!            spgu = vertical sum[ e3u (ub+ 2 rdt ua ) ] 
    87       !!                 - grav 2 rdt hu /e1u di[sshn + emp] 
     87      !!                 - grav 2 rdt hu /e1u di[sshn + (emp-rnf)] 
    8888      !!            spgv = vertical sum[ e3v (vb+ 2 rdt va) ] 
    89       !!                 - grav 2 rdt hv /e2v dj[sshn + emp] 
     89      !!                 - grav 2 rdt hv /e2v dj[sshn + (emp-rnf)] 
    9090      !!         and define the first guess from previous computation : 
    9191      !!            zbtd = btda 
  • branches/DEV_R1821_Rivers/NEMO/OPA_SRC/DYN/dynspg_ts.F90

    r1779 r1938  
    379379         DO jj = 2, jpjm1                                      ! leap-frog on ssh_e 
    380380            DO ji = fs_2, fs_jpim1   ! vector opt. 
    381                ssha_e(ji,jj) = ( zsshb_e(ji,jj) - z2dt_e * ( zraur * emp(ji,jj) + zhdiv(ji,jj) ) ) * tmask(ji,jj,1) 
     381               ssha_e(ji,jj) = ( zsshb_e(ji,jj) - z2dt_e * ( zraur * ( emp(ji,jj)-rnf(ji,jj) ) + zhdiv(ji,jj) ) ) * tmask(ji,jj,1)  
    382382            END DO 
    383383         END DO 
  • branches/DEV_R1821_Rivers/NEMO/OPA_SRC/DYN/sshwzv.F90

    r1792 r1938  
    154154 
    155155      !                                                ! Sea surface elevation time stepping 
    156       ssha(:,:) = (  sshb(:,:) - z2dt * ( zraur * emp(:,:) + zhdiv(:,:) )  ) * tmask(:,:,1) 
     156      ssha(:,:) = (  sshb(:,:) - z2dt * ( zraur * ( emp(:,:)-rnf(:,:) ) + zhdiv(:,:) )  ) * tmask(:,:,1)  
    157157 
    158158#if defined key_obc 
  • branches/DEV_R1821_Rivers/NEMO/OPA_SRC/OBC/obcvol.F90

    r1739 r1938  
    9797      ! --------------------------------------------------------------------------- 
    9898 
    99       zCflxemp = SUM ( emp(:,:)*obctmsk(:,:)* e1t(:,:) * e2t(:,:)  / rau0 ) 
     99      zCflxemp = SUM ( ( emp(:,:)-rnf(:,:) )*obctmsk(:,:)* e1t(:,:) * e2t(:,:)  / rau0 )  
    100100 
    101101      IF( lk_mpp )   CALL mpp_sum( zCflxemp )   ! sum over the global domain 
  • branches/DEV_R1821_Rivers/NEMO/OPA_SRC/SBC/sbc_oce.F90

    r1705 r1938  
    4949   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   emp       !: freshwater budget: volume flux               [Kg/m2/s] 
    5050   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   emps      !: freshwater budget: concentration/dillution   [Kg/m2/s] 
     51   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   rnf       !: river runoff   [Kg/m2/s]   
    5152   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   emp_tot   !: total evaporation - (liquid + solid) precpitation over oce and ice 
    5253   REAL(wp), PUBLIC, DIMENSION(jpi,jpj) ::   tprecip   !: total precipitation           [Kg/m2/s] 
  • branches/DEV_R1821_Rivers/NEMO/OPA_SRC/SBC/sbcfwb.F90

    r1715 r1938  
    3131   REAL(wp) ::   a_fwb_b            ! annual domain averaged freshwater budget 
    3232   REAL(wp) ::   a_fwb              ! for 2 year before (_b) and before year. 
    33    REAL(wp) ::   empold             ! empold to be suppressed 
     33   REAL(wp) ::   fwfold             ! fwfold to be suppressed 
    3434   REAL(wp) ::   area               ! global mean ocean surface (interior domain) 
    3535 
     
    6565      INTEGER  ::   inum                  ! temporary logical unit 
    6666      INTEGER  ::   ikty, iyear           !  
    67       REAL(wp) ::   z_emp, z_emp_nsrf       ! temporary scalars 
     67      REAL(wp) ::   z_fwf, z_fwf_nsrf       ! temporary scalars 
    6868      REAL(wp) ::   zsurf_neg, zsurf_pos, zsurf_tospread 
    6969      REAL(wp), DIMENSION(jpi,jpj) ::   ztmsk_neg, ztmsk_pos, ztmsk_tospread 
     
    7979            IF( kn_fwb == 1 )   WRITE(numout,*) '          instantaneously set to zero' 
    8080            IF( kn_fwb == 2 )   WRITE(numout,*) '          adjusted from previous year budget' 
    81             IF( kn_fwb == 3 )   WRITE(numout,*) '          emp set to zero and spread out over erp area' 
     81            IF( kn_fwb == 3 )   WRITE(numout,*) '          fwf set to zero and spread out over erp area' 
    8282            ! 
    8383            IF( kn_fwb == 3 .AND. nn_sssr /= 2 )   & 
     
    101101          
    102102      ! 
    103       CASE ( 1 )                               ! global mean emp set to zero 
     103      CASE ( 1 )                               ! global mean fwf set to zero 
    104104         IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 
    105             z_emp = SUM( e1e2_i(:,:) * emp(:,:) ) / area 
    106             IF( lk_mpp )   CALL  mpp_sum( z_emp    )   ! sum over the global domain 
    107             emp (:,:) = emp (:,:) - z_emp 
    108             emps(:,:) = emps(:,:) - z_emp 
    109          ENDIF 
    110          ! 
    111       CASE ( 2 )                               ! emp budget adjusted from the previous year 
     105            z_fwf = SUM( e1e2_i(:,:) * ( emp(:,:)-rnf(:,:) ) ) / area  
     106            IF( lk_mpp )   CALL  mpp_sum( z_fwf    )   ! sum over the global domain  
     107            emp (:,:) = emp (:,:) - z_fwf  
     108            emps(:,:) = emps(:,:) - z_fwf  
     109         ENDIF 
     110         ! 
     111      CASE ( 2 )                               ! fwf budget adjusted from the previous year 
    112112         ! initialisation 
    113113         IF( kt == nit000 ) THEN 
    114             ! Read the corrective factor on precipitations (empold) 
     114            ! Read the corrective factor on precipitations (fwfold) 
    115115            CALL ctl_opn( inum, 'EMPave_old.dat', 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 
    116116            READ ( inum, "(24X,I8,2ES24.16)" ) iyear, a_fwb_b, a_fwb 
    117117            CLOSE( inum ) 
    118             empold = a_fwb                  ! current year freshwater budget correction 
     118            fwfold = a_fwb                  ! current year freshwater budget correction 
    119119            !                               ! estimate from the previous year budget 
    120120            IF(lwp)WRITE(numout,*) 
    121             IF(lwp)WRITE(numout,*)'sbc_fwb : year = ',iyear  , ' freshwater budget correction = ', empold 
     121            IF(lwp)WRITE(numout,*)'sbc_fwb : year = ',iyear  , ' freshwater budget correction = ', fwfold 
    122122            IF(lwp)WRITE(numout,*)'          year = ',iyear-1, ' freshwater budget read       = ', a_fwb 
    123123            IF(lwp)WRITE(numout,*)'          year = ',iyear-2, ' freshwater budget read       = ', a_fwb_b 
    124124         ENDIF    
    125125         !  
    126          ! Update empold if new year start 
     126         ! Update fwfold if new year start 
    127127         ikty = 365 * 86400 / rdttra(1)    !!bug  use of 365 days leap year or 360d year !!!!!!! 
    128128         IF( MOD( kt, ikty ) == 0 ) THEN 
     
    132132            a_fwb   = a_fwb * 1.e+3 / ( area * 86400. * 365. )     ! convert in Kg/m3/s = mm/s 
    133133!!gm        !                                                      !!bug 365d year  
    134             empold =  a_fwb                 ! current year freshwater budget correction 
     134            fwfold =  a_fwb                 ! current year freshwater budget correction 
    135135            !                               ! estimate from the previous year budget 
    136136         ENDIF 
     
    138138         ! correct the freshwater fluxes 
    139139         IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 
    140             emp (:,:) = emp (:,:) + empold 
    141             emps(:,:) = emps(:,:) + empold 
    142          ENDIF 
    143          ! 
    144          ! save empold value in a file 
     140            emp (:,:) = emp (:,:) + fwfold 
     141            emps(:,:) = emps(:,:) + fwfold 
     142         ENDIF 
     143         ! 
     144         ! save fwfold value in a file 
    145145         IF( kt == nitend .AND. lwp ) THEN 
    146146            CALL ctl_opn( inum, 'EMPave.dat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE., narea ) 
     
    149149         ENDIF 
    150150         ! 
    151       CASE ( 3 )                               ! global emp set to zero and spread out over erp area 
     151      CASE ( 3 )                               ! global fwf set to zero and spread out over erp area 
    152152         ! 
    153153         IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 
     
    161161            zsurf_pos = SUM( e1e2_i(:,:)*ztmsk_pos(:,:) ) 
    162162         
    163             ! emp global mean  
    164             z_emp = SUM( e1e2_i(:,:) * emp(:,:) ) / area 
     163            ! fwf global mean  
     164            z_fwf = SUM( e1e2_i(:,:) * ( emp(:,:)-rnf(:,:) ) ) / area  
    165165            ! 
    166             IF( lk_mpp )   CALL  mpp_sum( z_emp ) 
     166            IF( lk_mpp )   CALL  mpp_sum( z_fwf ) 
    167167             
    168             IF( z_emp < 0.e0 ) THEN 
     168            IF( z_fwf < 0.e0 ) THEN 
    169169                ! to spread out over >0 erp area to increase evaporation damping process 
    170170                zsurf_tospread = zsurf_pos 
     
    176176            ENDIF 
    177177 
    178             ! emp global mean over <0 or >0 erp area 
    179             z_emp_nsrf = SUM( e1e2_i(:,:) * z_emp ) / ( zsurf_tospread + rsmall ) 
     178            ! fwf global mean over <0 or >0 erp area 
     179            z_fwf_nsrf = SUM( e1e2_i(:,:) * z_fwf ) / ( zsurf_tospread + rsmall ) 
    180180            ! weight to respect erp field 2D structure  
    181181            z_wgt(:,:) = ztmsk_tospread(:,:) * erp(:,:) / ( SUM( ztmsk_tospread(:,:) * erp(:,:) * e1e2_i(:,:) ) + rsmall ) 
    182182            ! final correction term to apply 
    183             zerp_cor(:,:) = -1. * z_emp_nsrf * zsurf_tospread * z_wgt(:,:) 
     183            zerp_cor(:,:) = -1. * z_fwf_nsrf * zsurf_tospread * z_wgt(:,:) 
    184184 
    185185            CALL lbc_lnk( zerp_cor, 'T', 1. ) 
     
    190190             
    191191            IF( nprint == 1 .AND. lwp ) THEN 
    192                IF( z_emp < 0.e0 ) THEN 
    193                   WRITE(numout,*)'       z_emp < 0' 
     192               IF( z_fwf < 0.e0 ) THEN 
     193                  WRITE(numout,*)'       z_fwf < 0' 
    194194                  WRITE(numout,*)'       SUM(erp+)        = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1e2_i(:,:) )*1.e-3,' m3.s-1' 
    195195               ELSE 
    196                    WRITE(numout,*)'      z_emp >= 0' 
     196                   WRITE(numout,*)'      z_fwf >= 0' 
    197197                   WRITE(numout,*)'      SUM(erp-)        = ', SUM( ztmsk_tospread(:,:)*erp(:,:)*e1e2_i(:,:) )*1.e-3,' m3.s-1' 
    198198               ENDIF 
    199                WRITE(numout,*)'      SUM(empG)        = ', SUM( z_emp*e1e2_i(:,:) )*1.e-3,' m3.s-1' 
    200                WRITE(numout,*)'      z_emp            = ', z_emp      ,' mm.s-1' 
    201                WRITE(numout,*)'      z_emp_nsrf       = ', z_emp_nsrf ,' mm.s-1' 
     199               WRITE(numout,*)'      SUM(empG)        = ', SUM( z_fwf*e1e2_i(:,:) )*1.e-3,' m3.s-1' 
     200               WRITE(numout,*)'      z_fwf            = ', z_fwf      ,' mm.s-1' 
     201               WRITE(numout,*)'      z_fwf_nsrf       = ', z_fwf_nsrf ,' mm.s-1' 
    202202               WRITE(numout,*)'      MIN(zerp_cor)    = ', MINVAL(zerp_cor)  
    203203               WRITE(numout,*)'      MAX(zerp_cor)    = ', MAXVAL(zerp_cor)  
  • branches/DEV_R1821_Rivers/NEMO/OPA_SRC/SBC/sbcmod.F90

    r1792 r1938  
    185185      INTEGER, INTENT(in) ::   kt       ! ocean time step 
    186186      !!--------------------------------------------------------------------- 
     187 
     188      emp(:,:)=0.0   
     189      emps(:,:)=0.0   
     190      rnf(:,:)=0.0  
    187191 
    188192      CALL iom_setkt( kt + nn_fsbc - 1 )         !  in sbc, iom_put is called every nn_fsbc time step 
     
    237241      ! 
    238242      IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN 
    239          CALL iom_put( "emp"    , emp       )                   ! upward water flux 
    240          CALL iom_put( "emps"   , emps      )                   ! c/d water flux 
    241          CALL iom_put( "qns+qsr", qns + qsr )                   ! total heat flux   (caution if ln_dm2dc=true, to be  
    242          CALL iom_put( "qns"    , qns       )                   ! solar heat flux    moved after the call to iom_setkt) 
    243          CALL iom_put( "qsr"    ,       qsr )                   ! solar heat flux    moved after the call to iom_setkt) 
     243         CALL iom_put( "emp-rnf"  , (emp-rnf)  )                ! upward water flux  
     244         CALL iom_put( "emps-rnf" , (emps-rnf) )                ! c/d water flux  
     245         CALL iom_put( "qns+qsr"  , qns + qsr  )                ! total heat flux   (caution if ln_dm2dc=true, to be  
     246         CALL iom_put( "qns"      , qns        )                ! solar heat flux    moved after the call to iom_setkt) 
     247         CALL iom_put( "qsr"      ,       qsr  )                ! solar heat flux    moved after the call to iom_setkt) 
    244248         IF(  nn_ice > 0 )   CALL iom_put( "ice_cover", fr_i )  ! ice fraction  
    245249      ENDIF 
     
    254258      IF(ln_ctl) THEN         ! print mean trends (used for debugging) 
    255259         CALL prt_ctl(tab2d_1=fr_i   , clinfo1=' fr_i - : ', mask1=tmask, ovlap=1 ) 
    256          CALL prt_ctl(tab2d_1=emp    , clinfo1=' emp  - : ', mask1=tmask, ovlap=1 ) 
    257          CALL prt_ctl(tab2d_1=emps   , clinfo1=' emps - : ', mask1=tmask, ovlap=1 ) 
     260         CALL prt_ctl(tab2d_1=(emp-rnf) , clinfo1=' emp-rnf  - : ', mask1=tmask, ovlap=1 )  
     261         CALL prt_ctl(tab2d_1=(emps-rnf), clinfo1=' emps-rnf - : ', mask1=tmask, ovlap=1 )  
    258262         CALL prt_ctl(tab2d_1=qns    , clinfo1=' qns  - : ', mask1=tmask, ovlap=1 ) 
    259263         CALL prt_ctl(tab2d_1=qsr    , clinfo1=' qsr  - : ', mask1=tmask, ovlap=1 ) 
  • branches/DEV_R1821_Rivers/NEMO/OPA_SRC/SBC/sbcrnf.F90

    r1730 r1938  
    3232   TYPE(FLD_N)       , PUBLIC ::   sn_rnf                 !: information about the runoff file to be read 
    3333   TYPE(FLD_N)       , PUBLIC ::   sn_cnf                 !: information about the runoff mouth file to be read 
     34   TYPE(FLD_N)                ::   sn_sal_rnf             !: information about the salinities of runoff file to be read   
     35   TYPE(FLD_N)                ::   sn_tmp_rnf             !: information about the temperatures of runoff file to be read   
     36   TYPE(FLD_N)                ::   sn_dep_rnf             !: information about the depth which river inflow affects 
    3437   LOGICAL           , PUBLIC ::   ln_rnf_mouth = .false. !: specific treatment in mouths vicinity 
    3538   REAL(wp)          , PUBLIC ::   rn_hrnf      = 0.e0    !: runoffs, depth over which enhanced vertical mixing is used 
    3639   REAL(wp)          , PUBLIC ::   rn_avt_rnf   = 0.e0    !: runoffs, value of the additional vertical mixing coef. [m2/s] 
     40   LOGICAL           , PUBLIC ::   ln_rnf_att   = .false.  !: river runoffs attributes (temp, sal & depth) are specified in a file  
    3741   REAL(wp)          , PUBLIC ::   rn_rfact     = 1.e0    !: multiplicative factor for runoff 
    3842 
     
    4246 
    4347   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_rnf   ! structure of input SST (file information, fields read) 
     48 
     49   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_sal_rnf    !: structure of input salinity (file information, fields read)   
     50   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_tmp_rnf    !: structure of input tmeperature (file information, fields read)   
     51  
     52!   REAL,    PUBLIC, DIMENSION(jpi,jpj) ::  rnf             !: mass flux of river runoff (in kg/m2/s)   
     53   REAL,    PUBLIC, DIMENSION(jpi,jpj) ::  rnf_dep         !: depth of runoff in m   
     54   INTEGER, PUBLIC, DIMENSION(jpi,jpj) ::  rnf_mod_dep     !: depth of runoff in model levels   
     55   REAL,    PUBLIC, DIMENSION(jpi,jpj) ::  rnf_sal         !: salinity of river runoff   
     56   REAL,    PUBLIC, DIMENSION(jpi,jpj) ::  rnf_tmp         !: temperature of river runoff   
     57   
     58   INTEGER  ::  ji, jj ,jk    ! dummy loop indices   
     59   INTEGER  ::  inum          ! temporary logical unit   
     60   
     61   !! * Substitutions   
     62#  include "domzgr_substitute.h90"   
    4463 
    4564   !!---------------------------------------------------------------------- 
     
    7796            ALLOCATE( sf_rnf(1)%fnow(jpi,jpj) ) 
    7897            ALLOCATE( sf_rnf(1)%fdta(jpi,jpj,2) ) 
    79          ENDIF 
    80          CALL sbc_rnf_init(sf_rnf) 
     98  
     99            ALLOCATE( sf_sal_rnf(1), STAT=ierror )   
     100            IF( ierror > 0 ) THEN   
     101               CALL ctl_stop( 'sbc_sal_rnf: unable to allocate sf_sal_rnf structure' )   ;   RETURN   
     102            ENDIF   
     103            ALLOCATE( sf_sal_rnf(1)%fnow(jpi,jpj) )   
     104            ALLOCATE( sf_sal_rnf(1)%fdta(jpi,jpj,2) )   
     105    
     106            ALLOCATE( sf_tmp_rnf(1), STAT=ierror )   
     107            IF( ierror > 0 ) THEN   
     108                CALL ctl_stop( 'sbc_tmp_rnf: unable to allocate sf_tmp_rnf structure' )   ;   RETURN   
     109            ENDIF   
     110            ALLOCATE( sf_tmp_rnf(1)%fnow(jpi,jpj) )   
     111            ALLOCATE( sf_tmp_rnf(1)%fdta(jpi,jpj,2) )   
     112         ENDIF   
     113         CALL sbc_rnf_init( sf_rnf, sf_tmp_rnf, sf_sal_rnf )   
    81114      ENDIF 
    82115 
     
    87120         CALL fld_read( kt, nn_fsbc, sf_rnf )   ! Read Runoffs data and provides it 
    88121         !                                      ! at the current time-step 
     122         IF ( ln_rnf_att ) THEN   
     123            CALL fld_read ( kt, nn_fsbc, sf_sal_rnf )   
     124            CALL fld_read ( kt, nn_fsbc, sf_tmp_rnf )   
     125         ENDIF   
    89126 
    90127         ! Runoff reduction only associated to the ORCA2_LIM configuration 
     
    101138 
    102139         IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN 
    103             emp (:,:) = emp (:,:) - rn_rfact * ABS( sf_rnf(1)%fnow(:,:) ) 
    104             emps(:,:) = emps(:,:) - rn_rfact * ABS( sf_rnf(1)%fnow(:,:) ) 
     140            rnf(:,:)  = rn_rfact * ( sf_rnf(1)%fnow(:,:) )   
     141            IF ( ln_rnf_att ) THEN   
     142               rnf_sal(:,:) = ( sf_sal_rnf(1)%fnow(:,:) )   
     143               rnf_tmp(:,:) = ( sf_tmp_rnf(1)%fnow(:,:) )   
     144            ELSE   
     145               rnf_sal(:,:) = 0   
     146               rnf_tmp(:,:) = -999   
     147            ENDIF   
    105148            CALL iom_put( "runoffs", sf_rnf(1)%fnow )         ! runoffs 
    106149         ENDIF 
     
    111154 
    112155 
    113    SUBROUTINE sbc_rnf_init( sf_rnf ) 
     156   SUBROUTINE sbc_rnf_init( sf_rnf, sf_tmp_rnf, sf_sal_rnf )   
    114157      !!---------------------------------------------------------------------- 
    115158      !!                  ***  ROUTINE sbc_rnf_init  *** 
     
    121164      !! ** Action  : - read parameters 
    122165      !!---------------------------------------------------------------------- 
    123       TYPE(FLD), INTENT(inout), DIMENSION(:) :: sf_rnf   ! input data 
    124       !! 
    125       NAMELIST/namsbc_rnf/ cn_dir, ln_rnf_emp, sn_rnf, sn_cnf, ln_rnf_mouth,   & 
    126          &                 rn_hrnf, rn_avt_rnf, rn_rfact 
     166      TYPE(FLD), INTENT(inout), DIMENSION(:) :: sf_rnf, sf_tmp_rnf, sf_sal_rnf   ! input data   
     167      CHARACTER(len=32) ::   rn_dep_file   ! runoff file name   
     168      !!  
     169      NAMELIST/namsbc_rnf/ cn_dir, ln_rnf_emp, sn_rnf, sn_cnf, sn_sal_rnf, sn_tmp_rnf, sn_dep_rnf,   &   
     170         &                 ln_rnf_mouth, ln_rnf_att, rn_hrnf, rn_avt_rnf, rn_rfact   
    127171      !!---------------------------------------------------------------------- 
    128172 
     
    136180      sn_cnf = FLD_N( 'runoffs',     0     , 'sorunoff' ,  .FALSE.   , .true. ,   'yearly'  , ''       , ''         ) 
    137181 
     182      sn_sal_rnf = FLD_N( 'runoffs',  24.  , 'rosaline' ,  .TRUE.    , .true. ,   'yearly'  , ''    , ''  )   
     183      sn_tmp_rnf = FLD_N( 'runoffs',  24.  , 'rotemper' ,  .TRUE.    , .true. ,   'yearly'  , ''    , ''  )   
     184      sn_dep_rnf = FLD_N( 'runoffs',   0.  , 'rodepth'  ,  .FALSE.   , .true. ,   'yearly'  , ''    , ''  )   
    138185      ! 
    139186      REWIND ( numnam )                         ! Read Namelist namsbc_rnf 
     
    160207         IF(lwp) WRITE(numout,*) 
    161208         IF(lwp) WRITE(numout,*) '          runoffs directly provided in the precipitations' 
     209         IF ( ln_rnf_att ) CALL ctl_warn( 'runoffs already included in precipitations & so runoff attributes not included' )  
    162210         ! 
    163211      ELSE                                      ! runoffs read in a file : set sf_rnf structure  
     
    166214         ! fill sf_rnf with sn_rnf and control print 
    167215         CALL fld_fill( sf_rnf, (/ sn_rnf /), cn_dir, 'sbc_rnf_init', 'read runoffs data', 'namsbc_rnf' ) 
    168          ! 
     216  
     217         IF ( ln_rnf_att ) THEN   
     218            CALL fld_fill (sf_sal_rnf, (/ sn_sal_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff salinity data', 'namsbc_rnf' )   
     219            CALL fld_fill (sf_tmp_rnf, (/ sn_tmp_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff temperature data', 'namsbc_rnf' )   
     220   
     221            rn_dep_file = TRIM( cn_dir )//TRIM( sn_dep_rnf%clname )   
     222            CALL iom_open ( rn_dep_file, inum )                           ! open file   
     223            CALL iom_get  ( inum, jpdom_data, sn_dep_rnf%clvar, rnf_dep )    ! read the river mouth array   
     224            CALL iom_close( inum )                                      ! close file   
     225   
     226            rnf_mod_dep(:,:)=0   
     227            DO jj=1,jpj   
     228              DO ji=1,jpi   
     229                IF ( rnf_dep(ji,jj) > 0.e0 ) THEN   
     230                  jk=2   
     231                  DO WHILE ( jk/=jpkm1 .AND. fsdept(ji,jj,jk) < rnf_dep(ji,jj) );  jk=jk+1;   ENDDO   
     232                  rnf_mod_dep(ji,jj)=jk   
     233                ELSE IF ( rnf_dep(ji,jj) .eq. -1 ) THEN   
     234                  rnf_mod_dep(ji,jj)=1   
     235                ELSE IF ( rnf_dep(ji,jj) .eq. -999 ) THEN   
     236                  rnf_mod_dep(ji,jj)=jpkm1   
     237                ELSE IF ( rnf_dep(ji,jj) /= 0 ) THEN   
     238                  CALL ctl_stop( 'runoff depth not positive, and not -999 or -1, rnf value in file fort.999'  )   
     239                  WRITE(999,*) 'ji, jj, rnf(ji,jj) :', ji, jj, rnf(ji,jj)   
     240                ENDIF   
     241              ENDDO   
     242            ENDDO   
     243         ELSE   
     244            rnf_mod_dep(:,:)=1   
     245         ENDIF   
     246      !  
    169247      ENDIF 
    170248 
     
    179257         ! 
    180258         !                                          ! Number of level over which Kz increase 
     259         IF ( ln_rnf_att )  &   
     260              &  CALL ctl_warn( 'increased mixing turned on but effects may already be spread through depth by ln_rnf_att' )  
    181261         nkrnf = 0 
    182262         IF( rn_hrnf > 0.e0 ) THEN 
  • branches/DEV_R1821_Rivers/NEMO/OPA_SRC/TRA/trasbc.F90

    r1739 r1938  
    2121   USE in_out_manager  ! I/O manager 
    2222   USE prtctl          ! Print control 
     23   USE sbcrnf          ! River runoff   
     24   USE sbcmod          ! ln_rnf   
    2325 
    2426   IMPLICIT NONE 
     
    103105      INTEGER, INTENT(in) ::   kt     ! ocean time-step index 
    104106      !! 
    105       INTEGER  ::   ji, jj                   ! dummy loop indices 
    106       REAL(wp) ::   zta, zsa, zsrau, zse3t   ! temporary scalars 
     107      INTEGER  ::   ji, jj, jk           ! dummy loop indices   
     108      REAL(wp) ::   zta, zsa             ! temporary scalars, adjustment to temperature and salinity   
     109      REAL(wp) ::   azta, azsa           ! temporary scalars, calculations of automatic change to temp & sal due to vvl (done elsewhere)   
     110      REAL(wp) ::   zsrau, zse3t, zdep   ! temporary scalars, 1/density, 1/height of box, 1/height of effected water column   
     111      REAL(wp) ::   dheat, dsalt          ! total change of temperature and salinity   
     112      REAL(wp) ::   tot_sal1, tot_tmp1   
    107113      !!---------------------------------------------------------------------- 
    108114 
     
    125131      IF( .NOT.ln_traqsr )   qsr(:,:) = 0.e0   ! no solar radiation penetration 
    126132 
    127       ! Concentration dillution effect on (t,s) 
     133      ! Concentration dillution effect on (t,s) due to evapouration, precipitation and qns, but not river runoff   
    128134      DO jj = 2, jpj 
    129135         DO ji = fs_2, fs_jpim1   ! vector opt. 
     
    132138#endif 
    133139            IF( lk_vvl) THEN 
    134                zta = ro0cpr * qns(ji,jj) * zse3t &                   ! temperature : heat flux 
    135                 &    - emp(ji,jj) * zsrau * tn(ji,jj,1)  * zse3t     ! & cooling/heating effet of EMP flux 
     140               zta =  ro0cpr * qns(ji,jj) * zse3t &                  ! temperature : heat flux  
     141                &    - emp(ji,jj) * zsrau * tn(ji,jj,1) * zse3t      ! & cooling/heating effet of EMP flux  
    136142               zsa = 0.e0                                            ! No salinity concent./dilut. effect 
    137143            ELSE 
    138                zta = ro0cpr * qns(ji,jj) * zse3t     ! temperature : heat flux 
    139                zsa = emps(ji,jj) * zsrau * sn(ji,jj,1)   * zse3t     ! salinity :  concent./dilut. effect 
     144               zta =  ro0cpr * qns(ji,jj) * zse3t                    ! temperature : heat flux  
     145               zsa =  emps(ji,jj) * zsrau * sn(ji,jj,1) * zse3t      ! salinity :  concent./dilut. effect  
    140146            ENDIF 
    141147            ta(ji,jj,1) = ta(ji,jj,1) + zta                          ! add the trend to the general tracer trend 
     
    143149         END DO 
    144150      END DO 
     151 
     152      IF ( ln_rnf ) THEN   
     153      ! Concentration / dilution effect on (t,s) due to river runoff   
     154        DO jj=1,jpj   
     155           DO ji=1,jpi   
     156              rnf_dep(ji,jj)=0   
     157              DO jk=1,rnf_mod_dep(ji,jj)                          ! recalculates rnf_dep to be the depth   
     158                rnf_dep(ji,jj)=rnf_dep(ji,jj)+fse3t(ji,jj,jk)    ! in metres to the bottom of the relevant grid box   
     159              ENDDO   
     160              zdep = 1. / rnf_dep(ji,jj)   
     161              zse3t= 1. / fse3t(ji,jj,1)   
     162              IF ( rnf_tmp(ji,jj) == -999 )   rnf_tmp(ji,jj)=tn(ji,jj,1)        ! if not specified set runoff temp to be sst   
     163   
     164              IF ( rnf(ji,jj) .gt. 0.0 ) THEN   
     165   
     166                IF( lk_vvl) THEN   
     167                  !!!indirect flux, concentration or dilution effect   
     168                  !!!force a dilution effect in all levels;   
     169                  dheat=0.0   
     170                  dsalt=0.0   
     171                  DO jk=1, rnf_mod_dep(ji,jj)   
     172                    zta = -tn(ji,jj,jk) * rnf(ji,jj) * zsrau * zdep   
     173                    zsa = -sn(ji,jj,jk) * rnf(ji,jj) * zsrau * zdep   
     174                    ta(ji,jj,jk)=ta(ji,jj,jk)+zta   
     175                    sa(ji,jj,jk)=sa(ji,jj,jk)+zsa   
     176                    dheat=dheat+zta*fse3t(ji,jj,jk)   
     177                    dsalt=dsalt+zsa*fse3t(ji,jj,jk)   
     178                  ENDDO   
     179                  !!!negate this total change in heat and salt content from top level   
     180                  zta=-dheat*zse3t   
     181                  zsa=-dsalt*zse3t   
     182                  ta(ji,jj,1)=ta(ji,jj,1)+zta   
     183                  sa(ji,jj,1)=sa(ji,jj,1)+zsa   
     184     
     185                  !!!direct flux   
     186                  zta = rnf_tmp(ji,jj) * rnf(ji,jj) * zsrau * zdep   
     187                  zsa = rnf_sal(ji,jj) * rnf(ji,jj) * zsrau * zdep   
     188     
     189                  DO jk=1, rnf_mod_dep(ji,jj)   
     190                    ta(ji,jj,jk) = ta(ji,jj,jk) + zta   
     191                    sa(ji,jj,jk) = sa(ji,jj,jk) + zsa   
     192                  ENDDO   
     193    
     194                ELSE   
     195                  DO jk=1, rnf_mod_dep(ji,jj)   
     196                    zta = ( rnf_tmp(ji,jj)-tn(ji,jj,jk) ) * rnf(ji,jj) * zsrau * zdep   
     197                    zsa = ( rnf_sal(ji,jj)-sn(ji,jj,jk) ) * rnf(ji,jj) * zsrau * zdep   
     198                    ta(ji,jj,jk) = ta(ji,jj,jk) + zta   
     199                    sa(ji,jj,jk) = sa(ji,jj,jk) + zsa   
     200                  ENDDO   
     201                ENDIF   
     202   
     203              ELSEIF (rnf(ji,jj) .lt. 0.) THEN   !! for use in baltic when flow is out of domain, want no change in temp and sal   
     204   
     205                IF( lk_vvl) THEN   
     206                  !calculate automatic adjustment to sal and temp due to dilution/concentraion effect    
     207                  azta = -tn(ji,jj,1) * rnf(ji,jj) * zsrau * zse3t   
     208                  azsa = -sn(ji,jj,1) * rnf(ji,jj) * zsrau * zse3t   
     209                  !!!negate this change in sal and temp    
     210                  ta(ji,jj,1)=ta(ji,jj,1)-azta   
     211                  sa(ji,jj,1)=sa(ji,jj,1)-azsa   
     212                ENDIF   
     213   
     214              ENDIF   
     215   
     216           ENDDO   
     217        ENDDO   
     218        
     219      ENDIF   
    145220 
    146221      IF( l_trdtra ) THEN      ! save the sbc trends for diagnostic 
  • branches/DEV_R1821_Rivers/NEMO/OPA_SRC/ZDF/zdfkpp.F90

    r1695 r1938  
    453453            zBosol(ji,jj) = grav * zthermal * qsr(ji,jj) 
    454454            ! Non radiative surface buoyancy force 
    455             zBo   (ji,jj) = grav * zthermal * qns(ji,jj) -  grav * zhalin * emps(ji,jj) 
     455            zBo   (ji,jj) = grav * zthermal * qns(ji,jj) -  grav * zhalin * ( emps(ji,jj)-rnf(ji,jj) )  
    456456            ! Surface Temperature flux for non-local term 
    457457            wt0(ji,jj) = - ( qsr(ji,jj) + qns(ji,jj) )* ro0cpr * tmask(ji,jj,1) 
    458458            ! Surface salinity flux for non-local term 
    459             ws0(ji,jj) = - ( emps(ji,jj) * sn(ji,jj,1) * rcs ) * tmask(ji,jj,1) 
     459            ws0(ji,jj) = - ( ( emps(ji,jj)-rnf(ji,jj) ) * sn(ji,jj,1) * rcs ) * tmask(ji,jj,1)  
    460460         ENDDO 
    461461      ENDDO 
  • branches/DEV_R1821_Rivers/NEMO/OPA_SRC/cla.F90

    r1146 r1938  
    163163         DO ji = mi0(148), mi1(160) 
    164164            zwei    = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 
    165             zempred = zempred + emp(ji,jj) * zwei 
     165            zempred = zempred + ( emp(ji,jj) - rnf(ji,jj) ) * zwei  
    166166         END DO 
    167167      END DO 
     
    365365         DO ji = mi0(141),mi1(181) 
    366366            zwei    = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 
    367             zempmed = zempmed + emp(ji,jj) * zwei 
     367            zempmed = zempmed + ( emp(ji,jj) - rnf(ji,jj) ) * zwei  
    368368         END DO 
    369369      END DO 
     
    374374      DO jj = mj0(96),mj1(96) 
    375375         DO ji = mi0(148),mi1(148) 
    376             zempmed = zempmed  -  emp(ji  ,jj) * tmask(ji  ,jj,1) * e1t(ji  ,jj) * e2t(ji  ,jj)   & 
    377                                -  emp(ji+1,jj) * tmask(ji+1,jj,1) * e1t(ji+1,jj) * e2t(ji+1,jj)    
     376            zempmed = zempmed  -  ( emp(ji  ,jj)-rnf(ji  ,jj) ) * tmask(ji  ,jj,1) * e1t(ji  ,jj) * e2t(ji  ,jj)   &  
     377                               -  ( emp(ji+1,jj)-rnf(ji+1,jj) ) * tmask(ji+1,jj,1) * e1t(ji+1,jj) * e2t(ji+1,jj)     
    378378         END DO 
    379379      END DO 
     
    389389      zu3_ms(:) = zu3_ms_i(:) 
    390390 
    391       ! velocity profile at 139,101  South point + emp on surface  
     391      ! velocity profile at 139,101  South point + (emp-rnf) on surface  
    392392      DO jk = 1, 14                       
    393393         DO jj = mj0(102), mj1(102)  
     
    399399 
    400400      ! profile at East Gibraltar     
    401       ! velocity profile at 141,102  + emp on surface  
     401      ! velocity profile at 141,102  + (emp-rnf) on surface  
    402402      DO  jk = 1, 14                      
    403403         DO jj = mj0(102), mj1(102)  
  • branches/DEV_R1821_Rivers/NEMO/OPA_SRC/cla_div.F90

    r1146 r1938  
    124124         DO ji = mi0(148), mi1(160)  
    125125            zwei    = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 
    126             zempred = zempred + emp(ji,jj) * zwei 
     126            zempred = zempred + ( emp(ji,jj) - rnf(ji,jj) ) * zwei  
    127127         END DO 
    128128      END DO 
     
    234234         DO ji = mi0(141),mi1(181) 
    235235            zwei    = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 
    236             zempmed = zempmed + emp(ji,jj) * zwei 
     236            zempmed = zempmed + ( emp(ji,jj) - rnf(ji,jj) ) * zwei  
    237237         END DO 
    238238      END DO 
     
    242242      DO jj = mj0(96), mj1(96) 
    243243         DO ji = mi0(148),mi1(148) 
    244             zempmed = zempmed -  emp(ji  , jj) * tmask(ji  , jj,1) * e1t(ji  , jj) * e2t(ji  , jj)   & 
    245                               -  emp(ji+1, jj) * tmask(ji+1, jj,1) * e1t(ji+1, jj) * e2t(ji+1, jj)    
     244            zempmed = zempmed -  ( emp(ji  , jj) - rnf(ji  ,jj) ) * tmask(ji  , jj,1) * e1t(ji  , jj) * e2t(ji  , jj)   &  
     245                              -  ( emp(ji+1, jj) - rnf(ji+1,jj) ) * tmask(ji+1, jj,1) * e1t(ji+1, jj) * e2t(ji+1, jj)     
    246246         END DO 
    247247      END DO 
  • branches/DEV_R1821_Rivers/NEMO/OPA_SRC/cla_dynspg.F90

    r1556 r1938  
    7979      ! EMP on Mediterranean Sea and Red Sea  
    8080      ! ------------------------------------ 
    81       ! compute the emp in Mediterranean Sea 
     81      ! compute the (emp-rnf) in Mediterranean Sea 
    8282      zempmed = 0.e0 
    8383      zwei = 0.e0 
     
    8787         DO ji = mi0(ii0),mi1(ii1) 
    8888            zwei    = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 
    89             zempmed = zempmed + emp(ji,jj) * zwei 
     89            zempmed = zempmed + ( emp(ji,jj)-rnf(ji,jj) ) * zwei  
    9090         END DO 
    9191      END DO 
     
    9797      DO jj = mj0(ij0), mj1(ij1) 
    9898         DO ji = mi0(ii0),mi1(ii1) 
    99             zempmed = zempmed - emp(ji  ,jj) * tmask(ji  ,jj,1) * e1t(ji  ,jj) * e2t(ji  ,jj)   & 
    100                &              - emp(ji+1,jj) * tmask(ji+1,jj,1) * e1t(ji+1,jj) * e2t(ji+1,jj)    
     99            zempmed = zempmed - ( emp(ji  ,jj) - rnf(ji  ,jj) ) * tmask(ji  ,jj,1) * e1t(ji  ,jj) * e2t(ji  ,jj)   &  
     100               &              - ( emp(ji+1,jj) - rnf(ji+1,jj) ) * tmask(ji+1,jj,1) * e1t(ji+1,jj) * e2t(ji+1,jj)     
    101101         END DO 
    102102      END DO 
     
    104104      zempmed = zempmed * 1.e-3 
    105105 
    106       ! compute the emp in Red Sea    
     106      ! compute the (emp-rnf) in Red Sea    
    107107      zempred = 0.e0 
    108108      zwei = 0.e0 
     
    112112         DO ji = mi0(ii0),mi1(ii1) 
    113113            zwei      = tmask(ji,jj,1) * e1t(ji,jj) * e2t(ji,jj) 
    114             zempred   = zempred + emp(ji,jj) * zwei 
     114            zempred   = zempred + ( emp(ji,jj) - rnf(ji,jj) ) * zwei  
    115115         END DO 
    116116      END DO 
Note: See TracChangeset for help on using the changeset viewer.