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 6808 for branches/NERC/dev_r5549_BDY_ZEROGRAD/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90 – NEMO

Ignore:
Timestamp:
2016-07-19T10:38:35+02:00 (8 years ago)
Author:
jamesharle
Message:

merge with trunk@6232 for consistency with SSB code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/NERC/dev_r5549_BDY_ZEROGRAD/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90

    r5407 r6808  
    66   !! History :  9.0  ! 2006-07  (G. Madec)  Original code 
    77   !!            3.3  ! 2010-10  (C. Bricaud, G. Madec)  add the Patm forcing for sea-ice 
    8    !!---------------------------------------------------------------------- 
    9  
    10    !!---------------------------------------------------------------------- 
    11    !!   sbc_ssm        : calculate sea surface mean currents, temperature,   
    12    !!                    and salinity over nn_fsbc time-step 
    13    !!---------------------------------------------------------------------- 
    14    USE oce             ! ocean dynamics and tracers 
    15    USE dom_oce         ! ocean space and time domain 
    16    USE sbc_oce         ! surface boundary condition: ocean fields 
    17    USE sbcapr          ! surface boundary condition: atmospheric pressure 
    18    USE eosbn2          ! equation of state and related derivatives 
     8   !!            3.7  ! 2015-11  (G. Madec)  non linear free surface by default: e3t_m always computed 
     9   !!---------------------------------------------------------------------- 
     10 
     11   !!---------------------------------------------------------------------- 
     12   !!   sbc_ssm       : calculate sea surface mean currents, temperature,   
     13   !!                   and salinity over nn_fsbc time-step 
     14   !!---------------------------------------------------------------------- 
     15   USE oce            ! ocean dynamics and tracers 
     16   USE dom_oce        ! ocean space and time domain 
     17   USE sbc_oce        ! surface boundary condition: ocean fields 
     18   USE sbcapr         ! surface boundary condition: atmospheric pressure 
     19   USE eosbn2         ! equation of state and related derivatives 
    1920   ! 
    20    USE in_out_manager  ! I/O manager 
    21    USE prtctl          ! Print control 
    22    USE iom             ! IOM library 
     21   USE in_out_manager ! I/O manager 
     22   USE prtctl         ! Print control 
     23   USE iom            ! IOM library 
    2324 
    2425   IMPLICIT NONE 
    2526   PRIVATE 
    2627 
    27    PUBLIC   sbc_ssm         ! routine called by step.F90 
    28    PUBLIC   sbc_ssm_init    ! routine called by sbcmod.F90 
    29  
    30    LOGICAL, SAVE  ::   l_ssm_mean = .FALSE.       ! keep track of whether means have been read 
    31                                                   ! from restart file 
     28   PUBLIC   sbc_ssm        ! routine called by step.F90 
     29   PUBLIC   sbc_ssm_init   ! routine called by sbcmod.F90 
     30 
     31   LOGICAL, SAVE ::   l_ssm_mean = .FALSE.   ! keep track of whether means have been read from restart file 
    3232    
    33    !! * Substitutions 
    34 #  include "domzgr_substitute.h90" 
    3533   !!---------------------------------------------------------------------- 
    3634   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     
    5957      REAL(wp), DIMENSION(jpi,jpj,jpts) :: zts 
    6058      !!--------------------------------------------------------------------- 
    61  
     59      ! 
    6260      !                                        !* surface T-, U-, V- ocean level variables (T, S, depth, velocity) 
    6361      DO jj = 1, jpj 
     
    8179         ENDIF 
    8280         ! 
    83          IF( lk_vvl )   e3t_m(:,:) = fse3t_n(:,:,1) 
     81         e3t_m(:,:) = e3t_n(:,:,1) 
    8482         ! 
    8583         frq_m(:,:) = fraqsr_1lev(:,:) 
     
    103101            ENDIF 
    104102            ! 
    105             IF( lk_vvl )   e3t_m(:,:) = zcoef * fse3t_n(:,:,1) 
     103            e3t_m(:,:) = zcoef * e3t_n(:,:,1) 
    106104            ! 
    107105            frq_m(:,:) = zcoef * fraqsr_1lev(:,:) 
     
    109107         ELSEIF( MOD( kt - 2 , nn_fsbc ) == 0 ) THEN      !   Initialisation: New mean computation   ! 
    110108            !                                             ! ---------------------------------------- ! 
    111             ssu_m(:,:) = 0.e0      ! reset to zero ocean mean sbc fields 
    112             ssv_m(:,:) = 0.e0 
    113             sst_m(:,:) = 0.e0 
    114             sss_m(:,:) = 0.e0 
    115             ssh_m(:,:) = 0.e0 
    116             IF( lk_vvl )   e3t_m(:,:) = 0.e0 
    117             frq_m(:,:) = 0.e0 
     109            ssu_m(:,:) = 0._wp     ! reset to zero ocean mean sbc fields 
     110            ssv_m(:,:) = 0._wp 
     111            sst_m(:,:) = 0._wp 
     112            sss_m(:,:) = 0._wp 
     113            ssh_m(:,:) = 0._wp 
     114            e3t_m(:,:) = 0._wp 
     115            frq_m(:,:) = 0._wp 
    118116         ENDIF 
    119117         !                                                ! ---------------------------------------- ! 
     
    131129         ENDIF 
    132130         ! 
    133          IF( lk_vvl )   e3t_m(:,:) = fse3t_m(:,:) + fse3t_n(:,:,1) 
    134          ! 
    135          frq_m(:,:) =   frq_m(:,:) + fraqsr_1lev(:,:) 
     131         e3t_m(:,:) = e3t_m(:,:) + e3t_n(:,:,1) 
     132         ! 
     133         frq_m(:,:) = frq_m(:,:) + fraqsr_1lev(:,:) 
    136134 
    137135         !                                                ! ---------------------------------------- ! 
     
    139137            !                                             ! ---------------------------------------- ! 
    140138            zcoef = 1. / REAL( nn_fsbc, wp ) 
    141             sst_m(:,:) = sst_m(:,:) * zcoef           ! mean SST             [Celcius] 
    142             sss_m(:,:) = sss_m(:,:) * zcoef           ! mean SSS             [psu] 
    143             ssu_m(:,:) = ssu_m(:,:) * zcoef           ! mean suface current  [m/s] 
    144             ssv_m(:,:) = ssv_m(:,:) * zcoef           ! 
    145             ssh_m(:,:) = ssh_m(:,:) * zcoef           ! mean SSH             [m] 
    146             IF( lk_vvl )   e3t_m(:,:) = fse3t_m(:,:) * zcoef   ! mean vertical scale factor [m] 
    147             frq_m(:,:) = frq_m(:,:) * zcoef   ! mean fraction of solar net radiation absorbed in the 1st T level [-] 
     139            sst_m(:,:) = sst_m(:,:) * zcoef     ! mean SST             [Celcius] 
     140            sss_m(:,:) = sss_m(:,:) * zcoef     ! mean SSS             [psu] 
     141            ssu_m(:,:) = ssu_m(:,:) * zcoef     ! mean suface current  [m/s] 
     142            ssv_m(:,:) = ssv_m(:,:) * zcoef     ! 
     143            ssh_m(:,:) = ssh_m(:,:) * zcoef     ! mean SSH             [m] 
     144            e3t_m(:,:) = e3t_m(:,:) * zcoef     ! mean vertical scale factor [m] 
     145            frq_m(:,:) = frq_m(:,:) * zcoef     ! mean fraction of solar net radiation absorbed in the 1st T level [-] 
    148146            ! 
    149147         ENDIF 
     
    162160            CALL iom_rstput( kt, nitrst, numrow, 'sss_m'  , sss_m  ) 
    163161            CALL iom_rstput( kt, nitrst, numrow, 'ssh_m'  , ssh_m  ) 
    164             IF( lk_vvl )   CALL iom_rstput( kt, nitrst, numrow, 'e3t_m'  , e3t_m  ) 
     162            CALL iom_rstput( kt, nitrst, numrow, 'e3t_m'  , e3t_m  ) 
    165163            CALL iom_rstput( kt, nitrst, numrow, 'frq_m'  , frq_m  ) 
    166164            ! 
     
    175173         CALL iom_put( 'sss_m', sss_m ) 
    176174         CALL iom_put( 'ssh_m', ssh_m ) 
    177          IF( lk_vvl )   CALL iom_put( 'e3t_m', e3t_m ) 
     175         CALL iom_put( 'e3t_m', e3t_m ) 
    178176         CALL iom_put( 'frq_m', frq_m ) 
    179177      ENDIF 
    180178      ! 
    181179   END SUBROUTINE sbc_ssm 
     180 
    182181 
    183182   SUBROUTINE sbc_ssm_init 
     
    189188      !! ** Action  : - read parameters 
    190189      !!---------------------------------------------------------------------- 
    191       REAL(wp) ::   zcoef, zf_sbc       ! local scalar 
     190      REAL(wp) ::   zcoef, zf_sbc   ! local scalar 
    192191      !!---------------------------------------------------------------------- 
    193  
     192      ! 
    194193      IF( nn_fsbc == 1 ) THEN 
    195194         ! 
     
    206205         IF( ln_rstart .AND. iom_varid( numror, 'nn_fsbc', ldstop = .FALSE. ) > 0 ) THEN 
    207206            l_ssm_mean = .TRUE. 
    208             CALL iom_get( numror               , 'nn_fsbc', zf_sbc )   ! sbc frequency of previous run 
    209             CALL iom_get( numror, jpdom_autoglo, 'ssu_m'  , ssu_m  )   ! sea surface mean velocity    (T-point) 
    210             CALL iom_get( numror, jpdom_autoglo, 'ssv_m'  , ssv_m  )   !   "         "    velocity    (V-point) 
    211             CALL iom_get( numror, jpdom_autoglo, 'sst_m'  , sst_m  )   !   "         "    temperature (T-point) 
    212             CALL iom_get( numror, jpdom_autoglo, 'sss_m'  , sss_m  )   !   "         "    salinity    (T-point) 
    213             CALL iom_get( numror, jpdom_autoglo, 'ssh_m'  , ssh_m  )   !   "         "    height      (T-point) 
    214             IF( lk_vvl ) CALL iom_get( numror, jpdom_autoglo, 'e3t_m', e3t_m ) 
     207            CALL iom_get( numror               , 'nn_fsbc', zf_sbc )    ! sbc frequency of previous run 
     208            CALL iom_get( numror, jpdom_autoglo, 'ssu_m'  , ssu_m  )    ! sea surface mean velocity    (U-point) 
     209            CALL iom_get( numror, jpdom_autoglo, 'ssv_m'  , ssv_m  )    !   "         "    velocity    (V-point) 
     210            CALL iom_get( numror, jpdom_autoglo, 'sst_m'  , sst_m  )    !   "         "    temperature (T-point) 
     211            CALL iom_get( numror, jpdom_autoglo, 'sss_m'  , sss_m  )    !   "         "    salinity    (T-point) 
     212            CALL iom_get( numror, jpdom_autoglo, 'ssh_m'  , ssh_m  )    !   "         "    height      (T-point) 
     213            CALL iom_get( numror, jpdom_autoglo, 'e3t_m'  , e3t_m  )    ! 1st level thickness          (T-point) 
    215214            ! fraction of solar net radiation absorbed in 1st T level 
    216215            IF( iom_varid( numror, 'frq_m', ldstop = .FALSE. ) > 0 ) THEN 
     
    229228               sss_m(:,:) = zcoef * sss_m(:,:) 
    230229               ssh_m(:,:) = zcoef * ssh_m(:,:) 
    231                IF( lk_vvl )   e3t_m(:,:) = zcoef * fse3t_m(:,:) 
     230               e3t_m(:,:) = zcoef * e3t_m(:,:) 
    232231               frq_m(:,:) = zcoef * frq_m(:,:) 
    233232            ELSE 
     
    245244         ELSE                    ;   sst_m(:,:) = tsn(:,:,1,jp_tem) 
    246245         ENDIF 
    247          sss_m(:,:) = tsn(:,:,1,jp_sal) 
    248          ssh_m(:,:) = sshn(:,:) 
    249          IF( lk_vvl )   e3t_m(:,:) = fse3t_n(:,:,1) 
     246         sss_m(:,:) = tsn  (:,:,1,jp_sal) 
     247         ssh_m(:,:) = sshn (:,:) 
     248         e3t_m(:,:) = e3t_n(:,:,1) 
    250249         frq_m(:,:) = 1._wp 
    251250         ! 
Note: See TracChangeset for help on using the changeset viewer.