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 1859 for branches/DEV_r1837_mass_heat_salt_fluxes/NEMO/OPA_SRC/SBC/sbcfwb.F90 – NEMO

Ignore:
Timestamp:
2010-05-06T10:40:07+02:00 (14 years ago)
Author:
gm
Message:

ticket:#665 step 2 & 3: heat content in qns & new forcing terms

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DEV_r1837_mass_heat_salt_fluxes/NEMO/OPA_SRC/SBC/sbcfwb.F90

    r1822 r1859  
    44   !! Ocean fluxes   : domain averaged freshwater budget 
    55   !!====================================================================== 
    6    !! History :  8.2  !  01-02  (E. Durand)  Original code 
    7    !!            8.5  !  02-06  (G. Madec)  F90: Free form and module 
    8    !!            9.0  !  06-08  (G. Madec)  Surface module 
    9    !!            9.2  !  09-07  (C. Talandier) emp mean s spread over erp area  
     6   !! History :  OPA  !  2001-02  (E. Durand)  Original code 
     7   !!   NEMO     1.0  !  2002-06  (G. Madec)  F90: Free form and module 
     8   !!            3.0  !  2006-08  (G. Madec)  Surface module 
     9   !!            3.2  !  2009-07  (C. Talandier) emp mean s spread over erp area  
     10   !!            3.3  !  2010-05  (Y. Aksenov G. Madec) embedded sea-ice case 
    1011   !!---------------------------------------------------------------------- 
    1112 
     
    2728   PRIVATE 
    2829 
    29    PUBLIC   sbc_fwb      ! routine called by step 
    30  
    31    REAL(wp) ::   a_fwb_b            ! annual domain averaged freshwater budget 
    32    REAL(wp) ::   a_fwb              ! for 2 year before (_b) and before year. 
    33    REAL(wp) ::   empold             ! empold to be suppressed 
    34    REAL(wp) ::   area               ! global mean ocean surface (interior domain) 
     30   PUBLIC   sbc_fwb    ! routine called by step 
     31 
     32   REAL(wp) ::   a_fwb_b   ! annual domain averaged freshwater budget 
     33   REAL(wp) ::   a_fwb     ! for 2 year before (_b) and before year. 
     34   REAL(wp) ::   empold    ! empold to be suppressed 
     35   REAL(wp) ::   area      ! global mean ocean surface (interior domain) 
    3536 
    3637   REAL(wp), DIMENSION(jpi,jpj) ::   e1e2_i    ! area of the interior domain (e1t*e2t*tmask_i) 
     
    4041#  include "vectopt_loop_substitute.h90" 
    4142   !!---------------------------------------------------------------------- 
    42    !!  OPA 9.0 , LOCEAN-IPSL (2006)  
     43   !! NEMO/OPA 3.3 , LOCEAN-IPSL (2010)  
    4344   !! $Id$ 
    4445   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
     
    5758      !!                =2 annual global mean corrected from previous year 
    5859      !!                =3 global mean of emp set to zero at each nn_fsbc time step 
    59       !!                   & spread out over erp area depending its sign 
     60      !!                   and spread out over erp area depending its sign 
    6061      !!---------------------------------------------------------------------- 
    6162      INTEGER, INTENT( in ) ::   kt       ! ocean time-step index 
     
    6364      INTEGER, INTENT( in ) ::   kn_fwb   ! ocean time-step index 
    6465      !! 
    65       INTEGER  ::   inum                  ! temporary logical unit 
    66       INTEGER  ::   ikty, iyear           !  
    67       REAL(wp) ::   z_emp, z_emp_nsrf, zsum_emp, zsum_erp       ! temporary scalars 
    68       REAL(wp) ::   zsurf_neg, zsurf_pos, zsurf_tospread 
    69       REAL(wp), DIMENSION(jpi,jpj) ::   ztmsk_neg, ztmsk_pos, ztmsk_tospread 
    70       REAL(wp), DIMENSION(jpi,jpj) ::   z_wgt, zerp_cor 
     66      INTEGER  ::   inum          ! temporary logical unit 
     67      INTEGER  ::   ikty, iyear   !  
     68      REAL(wp) ::   z_emp, z_emp_nsrf, zsum_emp, zsum_erp, zcoef     ! temporary scalars 
     69      REAL(wp) ::   zsurf_neg, zsurf_pos, zsurf_tospread             !    -         - 
     70      REAL(wp), DIMENSION(jpi,jpj) ::   ztmsk_neg, ztmsk_tospread    ! 2D workspace 
     71      REAL(wp), DIMENSION(jpi,jpj) ::   ztmsk_pos, z_wgt, zerp_cor   !  -      - 
    7172      !!---------------------------------------------------------------------- 
    7273      ! 
     
    8384            IF( kn_fwb == 3 .AND. nn_sssr /= 2 )   & 
    8485               &   CALL ctl_stop( 'The option nn_fwb = 3 must be associated to nn_sssr = 2 ' ) 
    85              
    8686         ENDIF 
    8787         ! 
     
    9999         CALL ctl_stop( ctmp1 ) 
    100100         ! 
    101           
    102       ! 
    103101      CASE ( 1 )                               ! global mean emp set to zero 
    104102         IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 
    105103            z_emp = SUM( e1e2_i(:,:) * emp(:,:) ) / area 
    106104            IF( lk_mpp )   CALL  mpp_sum( z_emp    )   ! sum over the global domain 
    107             emp (:,:) = emp (:,:) - z_emp 
    108             emps(:,:) = emps(:,:) - z_emp 
     105            zcoef = z_emp * rcp 
     106            emp(:,:) = emp(:,:) - z_emp 
     107            qns(:,:) = qns(:,:) + zcoef * sst_m(:,:) 
    109108         ENDIF 
    110109         ! 
     
    138137         ! correct the freshwater fluxes 
    139138         IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 
    140             emp (:,:) = emp (:,:) + empold 
    141             emps(:,:) = emps(:,:) + empold 
     139            zcoef = z_emp * rcp 
     140            emp(:,:) = emp (:,:) + empold 
     141            qns(:,:) = qns(:,:) - zcoef * sst_m(:,:) 
    142142         ENDIF 
    143143         ! 
     
    152152         ! 
    153153         IF( MOD( kt-1, kn_fsbc ) == 0 ) THEN 
    154             ! Select <0 and >0 area of erp 
     154            !                                       ! Select <0 and >0 area of erp 
    155155            ztmsk_pos(:,:) = tmask_i(:,:) 
    156             WHERE( erp < 0.e0 ) ztmsk_pos = 0.e0 
     156            WHERE( erp(:,:) < 0.e0 )   ztmsk_pos(:,:) = 0.e0 
    157157            ztmsk_neg(:,:) = tmask_i(:,:) - ztmsk_pos(:,:) 
    158158 
    159             ! Area filled by <0 and >0 erp  
    160             zsurf_neg = SUM( e1e2_i(:,:)*ztmsk_neg(:,:) ) 
    161             zsurf_pos = SUM( e1e2_i(:,:)*ztmsk_pos(:,:) ) 
     159            !                                       ! Area filled by <0 and >0 erp  
     160            zsurf_neg = SUM(  e1e2_i(:,:) * ztmsk_neg(:,:) ) 
     161            zsurf_pos = SUM(  e1e2_i(:,:) * ztmsk_pos(:,:) ) 
    162162         
    163             ! emp global mean  
     163            !                                       ! emp global mean  
    164164            z_emp = SUM( e1e2_i(:,:) * emp(:,:) ) / area 
    165165            ! 
    166             IF( lk_mpp )   CALL  mpp_sum( z_emp ) 
     166            IF( lk_mpp )   CALL  mpp_sum( z_emp     ) 
    167167            IF( lk_mpp )   CALL  mpp_sum( zsurf_neg ) 
    168168            IF( lk_mpp )   CALL  mpp_sum( zsurf_pos ) 
    169169             
    170             IF( z_emp < 0.e0 ) THEN 
    171                 ! to spread out over >0 erp area to increase evaporation damping process 
     170            IF( z_emp < 0.e0 ) THEN                 ! spread out over >0 erp area to increase evaporation damping process 
    172171                zsurf_tospread = zsurf_pos 
    173172                ztmsk_tospread(:,:) = ztmsk_pos(:,:) 
    174             ELSE 
    175                 ! to spread out over <0 erp area to increase precipitation damping process 
     173            ELSE                                    ! spread out over <0 erp area to increase precipitation damping process 
    176174                zsurf_tospread = zsurf_neg 
    177175                ztmsk_tospread(:,:) = ztmsk_neg(:,:) 
     
    192190            CALL lbc_lnk( zerp_cor, 'T', 1. ) 
    193191 
    194             emp (:,:) = emp (:,:) + zerp_cor(:,:) 
    195             emps(:,:) = emps(:,:) + zerp_cor(:,:) 
    196             erp (:,:) = erp (:,:) + zerp_cor(:,:) 
     192            emp(:,:) = emp(:,:) + zerp_cor(:,:) 
     193            qns(:,:) = qns(:,:) - zerp_cor(:,:) * rcp * sst_m(:,:) 
     194            erp(:,:) = erp(:,:) + zerp_cor(:,:) 
    197195             
    198196            IF( nprint == 1 .AND. lwp ) THEN 
Note: See TracChangeset for help on using the changeset viewer.