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 4901 for branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90 – NEMO

Ignore:
Timestamp:
2014-11-27T16:41:22+01:00 (10 years ago)
Author:
cetlod
Message:

2014/dev_CNRS_2014 : merge the 3rd branch onto dev_CNRS_2014, see ticket #1415

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2014/dev_CNRS_2014/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90

    r4897 r4901  
    3737   USE sbcice_cice      ! surface boundary condition: CICE    sea-ice model 
    3838   USE sbccpl           ! surface boundary condition: coupled florulation 
    39    USE cpl_oasis3, ONLY:lk_cpl      ! are we in coupled mode? 
    4039   USE sbcssr           ! surface boundary condition: sea surface restoring 
    4140   USE sbcrnf           ! surface boundary condition: runoffs 
     
    8281      INTEGER ::   icpt   ! local integer 
    8382      !! 
    84       NAMELIST/namsbc/ nn_fsbc   , ln_ana    , ln_flx,  ln_blk_clio, ln_blk_core, ln_cpl,   & 
     83      NAMELIST/namsbc/ nn_fsbc   , ln_ana    , ln_flx,  ln_blk_clio, ln_blk_core,           & 
    8584         &             ln_blk_mfs, ln_apr_dyn, nn_ice,  nn_ice_embd, ln_dm2dc   , ln_rnf,   & 
    86          &             ln_ssr    , nn_fwb    , ln_cdgw , ln_wave , ln_sdw, nn_lsm, cn_iceflx 
     85         &             ln_ssr    , nn_fwb    , ln_cdgw , ln_wave , ln_sdw, nn_lsm, nn_limflx 
    8786      INTEGER  ::   ios 
    8887      !!---------------------------------------------------------------------- 
     
    123122         WRITE(numout,*) '              CORE bulk  formulation                     ln_blk_core = ', ln_blk_core 
    124123         WRITE(numout,*) '              MFS  bulk  formulation                     ln_blk_mfs  = ', ln_blk_mfs 
    125          WRITE(numout,*) '              coupled    formulation (T if key_sbc_cpl)  ln_cpl      = ', ln_cpl 
    126          WRITE(numout,*) '              Flux handling over ice categories          cn_iceflx   = ', TRIM (cn_iceflx) 
     124         WRITE(numout,*) '              coupled    formulation (T if key_oasis3)   lk_cpl      = ', lk_cpl 
     125         WRITE(numout,*) '              Multicategory heat flux formulation (LIM3) nn_limflx   = ', nn_limflx 
    127126         WRITE(numout,*) '           Misc. options of sbc : ' 
    128127         WRITE(numout,*) '              Patm gradient added in ocean & ice Eqs.    ln_apr_dyn  = ', ln_apr_dyn 
     
    137136      ENDIF 
    138137 
    139       !   Flux handling over ice categories 
    140 #if defined key_coupled  
    141       SELECT CASE ( TRIM (cn_iceflx)) 
    142       CASE ('ave') 
    143          ln_iceflx_ave    = .TRUE. 
    144          ln_iceflx_linear = .FALSE. 
    145       CASE ('linear') 
    146          ln_iceflx_ave    = .FALSE. 
    147          ln_iceflx_linear = .TRUE. 
    148       CASE default 
    149          ln_iceflx_ave    = .FALSE. 
    150          ln_iceflx_linear = .FALSE. 
     138      ! LIM3 Multi-category heat flux formulation 
     139      SELECT CASE ( nn_limflx) 
     140      CASE ( -1 ) 
     141         IF(lwp) WRITE(numout,*) '              Use of per-category fluxes (nn_limflx = -1) ' 
     142      CASE ( 0  ) 
     143         IF(lwp) WRITE(numout,*) '              Average per-category fluxes (nn_limflx = 0) '  
     144      CASE ( 1  ) 
     145         IF(lwp) WRITE(numout,*) '              Average then redistribute per-category fluxes (nn_limflx = 1) ' 
     146      CASE ( 2  ) 
     147         IF(lwp) WRITE(numout,*) '              Redistribute a single flux over categories (nn_limflx = 2) ' 
    151148      END SELECT 
    152       IF(lwp) WRITE(numout,*) '              Fluxes averaged over all ice categories         ln_iceflx_ave    = ', ln_iceflx_ave 
    153       IF(lwp) WRITE(numout,*) '              Fluxes distributed linearly over ice categories ln_iceflx_linear = ', ln_iceflx_linear 
    154 #endif 
    155149      ! 
    156150#if defined key_top && ! defined key_offline 
     
    206200      IF( ( nn_ice == 3 .OR. nn_ice == 4 ) .AND. nn_ice_embd == 0 )   & 
    207201         &   CALL ctl_stop( 'LIM3 and CICE sea-ice models require nn_ice_embd = 1 or 2' ) 
    208 #if defined key_coupled 
    209       IF( ln_iceflx_ave .AND. ln_iceflx_linear ) & 
    210          &   CALL ctl_stop( ' ln_iceflx_ave and ln_iceflx_linear options are not compatible' ) 
    211       IF( ( nn_ice ==3 .AND. lk_cpl) .AND. .NOT. ( ln_iceflx_ave .OR. ln_iceflx_linear ) ) & 
    212          &   CALL ctl_stop( ' With lim3 coupled, either ln_iceflx_ave or ln_iceflx_linear must be set to .TRUE.' ) 
    213 #endif       
     202      IF( ( nn_ice /= 3 ) .AND. ( nn_limflx >= 0 ) )   & 
     203         &   WRITE(numout,*) 'The nn_limflx>=0 option has no effect if sea ice model is not LIM3' 
     204      IF( ( nn_ice == 3 ) .AND. ( lk_cpl ) .AND. ( ( nn_limflx == -1 ) .OR. ( nn_limflx == 1 ) ) )   & 
     205         &   CALL ctl_stop( 'The chosen nn_limflx for LIM3 in coupled mode must be 0 or 2' ) 
     206      IF( ( nn_ice == 3 ) .AND. ( .NOT. lk_cpl ) .AND. ( nn_limflx == 2 ) )   & 
     207         &   CALL ctl_stop( 'The chosen nn_limflx for LIM3 in forced mode cannot be 2' ) 
     208 
    214209      IF( ln_dm2dc )   nday_qsr = -1   ! initialisation flag 
    215210 
     
    236231      !                          ! Choice of the Surface Boudary Condition (set nsbc) 
    237232      icpt = 0 
    238       IF( ln_ana          ) THEN   ;   nsbc =  1   ; icpt = icpt + 1   ;   ENDIF       ! analytical      formulation 
    239       IF( ln_flx          ) THEN   ;   nsbc =  2   ; icpt = icpt + 1   ;   ENDIF       ! flux            formulation 
    240       IF( ln_blk_clio     ) THEN   ;   nsbc =  3   ; icpt = icpt + 1   ;   ENDIF       ! CLIO bulk       formulation 
    241       IF( ln_blk_core     ) THEN   ;   nsbc =  4   ; icpt = icpt + 1   ;   ENDIF       ! CORE bulk       formulation 
    242       IF( ln_blk_mfs      ) THEN   ;   nsbc =  6   ; icpt = icpt + 1   ;   ENDIF       ! MFS  bulk       formulation 
    243       IF( ln_cpl          ) THEN   ;   nsbc =  5   ; icpt = icpt + 1   ;   ENDIF       ! Coupled         formulation 
    244       IF( cp_cfg == 'gyre') THEN   ;   nsbc =  0                       ;   ENDIF       ! GYRE analytical formulation 
    245       IF( lk_esopa        )            nsbc = -1                                       ! esopa test, ALL formulations 
     233      IF( ln_ana          ) THEN   ;   nsbc = jp_ana    ; icpt = icpt + 1   ;   ENDIF       ! analytical      formulation 
     234      IF( ln_flx          ) THEN   ;   nsbc = jp_flx    ; icpt = icpt + 1   ;   ENDIF       ! flux            formulation 
     235      IF( ln_blk_clio     ) THEN   ;   nsbc = jp_clio   ; icpt = icpt + 1   ;   ENDIF       ! CLIO bulk       formulation 
     236      IF( ln_blk_core     ) THEN   ;   nsbc = jp_core   ; icpt = icpt + 1   ;   ENDIF       ! CORE bulk       formulation 
     237      IF( ln_blk_mfs      ) THEN   ;   nsbc = jp_mfs    ; icpt = icpt + 1   ;   ENDIF       ! MFS  bulk       formulation 
     238      IF( lk_cpl          ) THEN   ;   nsbc = jp_cpl    ; icpt = icpt + 1   ;   ENDIF       ! Coupled         formulation 
     239      IF( cp_cfg == 'gyre') THEN   ;   nsbc = jp_gyre                       ;   ENDIF       ! GYRE analytical formulation 
     240      IF( lk_esopa        )            nsbc = jp_esopa                                      ! esopa test, ALL formulations 
    246241      ! 
    247242      IF( icpt /= 1 .AND. .NOT.lk_esopa ) THEN 
     
    254249      IF(lwp) THEN 
    255250         WRITE(numout,*) 
    256          IF( nsbc == -1 )   WRITE(numout,*) '              ESOPA test All surface boundary conditions' 
    257          IF( nsbc ==  0 )   WRITE(numout,*) '              GYRE analytical formulation' 
    258          IF( nsbc ==  1 )   WRITE(numout,*) '              analytical formulation' 
    259          IF( nsbc ==  2 )   WRITE(numout,*) '              flux formulation' 
    260          IF( nsbc ==  3 )   WRITE(numout,*) '              CLIO bulk formulation' 
    261          IF( nsbc ==  4 )   WRITE(numout,*) '              CORE bulk formulation' 
    262          IF( nsbc ==  5 )   WRITE(numout,*) '              coupled formulation' 
    263          IF( nsbc ==  6 )   WRITE(numout,*) '              MFS Bulk formulation' 
    264       ENDIF 
    265       ! 
    266                           CALL sbc_ssm_init               ! Sea-surface mean fields initialisation 
    267       ! 
    268       IF( ln_ssr      )   CALL sbc_ssr_init               ! Sea-Surface Restoring initialisation 
    269       ! 
    270       IF( nn_ice == 4 )   CALL cice_sbc_init( nsbc )      ! CICE initialisation 
    271       ! 
     251         IF( nsbc == jp_esopa )   WRITE(numout,*) '              ESOPA test All surface boundary conditions' 
     252         IF( nsbc == jp_gyre  )   WRITE(numout,*) '              GYRE analytical formulation' 
     253         IF( nsbc == jp_ana   )   WRITE(numout,*) '              analytical formulation' 
     254         IF( nsbc == jp_flx   )   WRITE(numout,*) '              flux formulation' 
     255         IF( nsbc == jp_clio  )   WRITE(numout,*) '              CLIO bulk formulation' 
     256         IF( nsbc == jp_core  )   WRITE(numout,*) '              CORE bulk formulation' 
     257         IF( nsbc == jp_cpl   )   WRITE(numout,*) '              coupled formulation' 
     258         IF( nsbc == jp_mfs   )   WRITE(numout,*) '              MFS Bulk formulation' 
     259      ENDIF 
     260      ! 
     261                               CALL sbc_ssm_init               ! Sea-surface mean fields initialisation 
     262      ! 
     263      IF( ln_ssr           )   CALL sbc_ssr_init               ! Sea-Surface Restoring initialisation 
     264      ! 
     265      IF( nn_ice == 4      )   CALL cice_sbc_init( nsbc )      ! CICE initialisation 
     266      ! 
     267      IF( nsbc   == jp_cpl )   CALL sbc_cpl_init (nn_ice)      ! OASIS initialisation. must be done before first time step 
     268 
    272269   END SUBROUTINE sbc_init 
    273270 
     
    320317      SELECT CASE( nsbc )                                ! Compute ocean surface boundary condition 
    321318      !                                                  ! (i.e. utau,vtau, qns, qsr, emp, sfx) 
    322       CASE(  0 )   ;   CALL sbc_gyre    ( kt )                    ! analytical formulation : GYRE configuration 
    323       CASE(  1 )   ;   CALL sbc_ana     ( kt )                    ! analytical formulation : uniform sbc 
    324       CASE(  2 )   ;   CALL sbc_flx     ( kt )                    ! flux formulation 
    325       CASE(  3 )   ;   CALL sbc_blk_clio( kt )                    ! bulk formulation : CLIO for the ocean 
    326       CASE(  4 )   ;   CALL sbc_blk_core( kt )                    ! bulk formulation : CORE for the ocean 
    327       CASE(  5 )   ;   CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice )   ! coupled formulation 
    328       CASE(  6 )   ;   CALL sbc_blk_mfs ( kt )                    ! bulk formulation : MFS for the ocean 
    329       CASE( -1 )                                 
    330                        CALL sbc_ana     ( kt )                    ! ESOPA, test ALL the formulations 
    331                        CALL sbc_gyre    ( kt )                    ! 
    332                        CALL sbc_flx     ( kt )                    ! 
    333                        CALL sbc_blk_clio( kt )                    ! 
    334                        CALL sbc_blk_core( kt )                    ! 
    335                        CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice )   ! 
     319      CASE( jp_gyre )   ;   CALL sbc_gyre    ( kt )                    ! analytical formulation : GYRE configuration 
     320      CASE( jp_ana  )   ;   CALL sbc_ana     ( kt )                    ! analytical formulation : uniform sbc 
     321      CASE( jp_flx  )   ;   CALL sbc_flx     ( kt )                    ! flux formulation 
     322      CASE( jp_clio )   ;   CALL sbc_blk_clio( kt )                    ! bulk formulation : CLIO for the ocean 
     323      CASE( jp_core )   ;   CALL sbc_blk_core( kt )                    ! bulk formulation : CORE for the ocean 
     324      CASE( jp_cpl  )   ;   CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice )   ! coupled formulation 
     325      CASE( jp_mfs  )   ;   CALL sbc_blk_mfs ( kt )                    ! bulk formulation : MFS for the ocean 
     326      CASE( jp_esopa )                                 
     327                             CALL sbc_ana     ( kt )                    ! ESOPA, test ALL the formulations 
     328                             CALL sbc_gyre    ( kt )                    ! 
     329                             CALL sbc_flx     ( kt )                    ! 
     330                             CALL sbc_blk_clio( kt )                    ! 
     331                             CALL sbc_blk_core( kt )                    ! 
     332                             CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice )   ! 
    336333      END SELECT 
    337334 
     
    342339      CASE(  2 )   ;         CALL sbc_ice_lim_2( kt, nsbc )          ! LIM-2 ice model 
    343340      CASE(  3 )   ;         CALL sbc_ice_lim  ( kt, nsbc )          ! LIM-3 ice model 
    344       !is it useful? 
    345341      CASE(  4 )   ;         CALL sbc_ice_cice ( kt, nsbc )          ! CICE ice model 
    346342      END SELECT                                               
     
    414410         CALL iom_put( "qsr"   ,       qsr  )                   ! solar heat flux 
    415411         IF( nn_ice > 0 )   CALL iom_put( "ice_cover", fr_i )   ! ice fraction  
     412         CALL iom_put( "taum"  , taum       )                   ! wind stress module  
     413         CALL iom_put( "wspd"  , wndm       )                   ! wind speed  module over free ocean or leads in presence of sea-ice 
    416414      ENDIF 
    417415      ! 
    418416      CALL iom_put( "utau", utau )   ! i-wind stress   (stress can be updated at  
    419417      CALL iom_put( "vtau", vtau )   ! j-wind stress    each time step in sea-ice) 
    420       CALL iom_put( "taum", taum )   ! wind stress module  
    421       CALL iom_put( "wspd", wndm )   ! wind speed  module  
    422418      ! 
    423419      IF(ln_ctl) THEN         ! print mean trends (used for debugging) 
Note: See TracChangeset for help on using the changeset viewer.