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 4306 for branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC – NEMO

Ignore:
Timestamp:
2013-11-21T15:59:57+01:00 (10 years ago)
Author:
cetlod
Message:

dev_MERGE_2013 : merge in the solar mean flux branch from MERCATOR, see ticket #1187

Location:
branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/SBC
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_ice.F90

    r3625 r4306  
    1919# if defined key_lim2 
    2020   USE par_ice_2        ! LIM-2 parameters 
     21   USE ice_2 
    2122# endif 
    2223# if defined key_cice  
     
    5556 
    5657#if defined key_lim3 || defined key_lim2  
    57    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qns_ice   !: non solar heat flux over ice                  [W/m2] 
    58    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qsr_ice   !: solar heat flux over ice                      [W/m2] 
    59    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qla_ice   !: latent flux over ice                          [W/m2] 
    60    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   dqla_ice  !: latent sensibility over ice                 [W/m2/K] 
    61    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   dqns_ice  !: non solar heat flux over ice (LW+SEN+LA)    [W/m2/K] 
    62    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   tn_ice    !: ice surface temperature                          [K] 
    63    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   alb_ice   !: albedo of ice 
     58   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qns_ice       !: non solar heat flux over ice                  [W/m2] 
     59   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qsr_ice       !: solar heat flux over ice                      [W/m2] 
     60   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qsr_ice_mean  !: dauly mean solar heat flux over ice       [W/m2] 
     61   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qla_ice       !: latent flux over ice                          [W/m2] 
     62   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   dqla_ice      !: latent sensibility over ice                 [W/m2/K] 
     63   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   dqns_ice      !: non solar heat flux over ice (LW+SEN+LA)    [W/m2/K] 
     64   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   tn_ice        !: ice surface temperature                          [K] 
     65   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   alb_ice       !: albedo of ice 
    6466 
    6567   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   utau_ice  !: atmos-ice u-stress. VP: I-pt ; EVP: U,V-pts   [N/m2] 
     
    109111      !!                     ***  FUNCTION sbc_ice_alloc  *** 
    110112      !!---------------------------------------------------------------------- 
     113      INTEGER :: ierr(2) 
     114      !!---------------------------------------------------------------------- 
     115      ierr(:) = 0 
     116 
    111117#if defined key_lim3 || defined key_lim2 
    112118      ALLOCATE( qns_ice (jpi,jpj,jpl) , qsr_ice (jpi,jpj,jpl) ,     & 
     
    117123         &      fr1_i0  (jpi,jpj)     , fr2_i0  (jpi,jpj)     ,     & 
    118124#if defined key_lim3 
    119          &      emp_ice(jpi,jpj)      , tatm_ice(jpi,jpj)     , STAT= sbc_ice_alloc ) 
     125         &      emp_ice(jpi,jpj)      , tatm_ice(jpi,jpj)     , STAT= ierr(1) ) 
    120126#else 
    121          &      emp_ice(jpi,jpj)                              , STAT= sbc_ice_alloc ) 
     127         &      emp_ice(jpi,jpj)                              , STAT= ierr(1) ) 
    122128#endif 
    123129#elif defined key_cice 
     
    126132                wndj_ice(jpi,jpj)     , nfrzmlt(jpi,jpj)      , ss_iou(jpi,jpj)       , & 
    127133                ss_iov(jpi,jpj)       , fr_iu(jpi,jpj)        , fr_iv(jpi,jpj)        , & 
    128                 a_i(jpi,jpj,ncat)     , topmelt(jpi,jpj,ncat) , botmelt(jpi,jpj,ncat), STAT= sbc_ice_alloc ) 
     134                a_i(jpi,jpj,ncat)     , topmelt(jpi,jpj,ncat) , botmelt(jpi,jpj,ncat), STAT= ierr(1) ) 
    129135#endif 
    130136         ! 
     137#if defined key_lim2 
     138      IF( ltrcdm2dc_ice )THEN 
     139         ALLOCATE( qsr_ice_mean (jpi,jpj,jpl), STAT=ierr(2) ) 
     140      ENDIF 
     141#endif 
     142         ! 
     143      sbc_ice_alloc = MAXVAL( ierr ) 
    131144      IF( lk_mpp            )   CALL mpp_sum ( sbc_ice_alloc ) 
    132145      IF( sbc_ice_alloc > 0 )   CALL ctl_warn('sbc_ice_alloc: allocation of arrays failed') 
  • branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90

    r4292 r4306  
    6464   !!---------------------------------------------------------------------- 
    6565   LOGICAL , PUBLIC ::   lhftau = .FALSE.        !: HF tau used in TKE: mean(stress module) - module(mean stress) 
     66   LOGICAL , PUBLIC ::   ltrcdm2dc               !: In case of Diurnal Cycle short wave, compute a Daily Mean short waves flux 
    6667   !!                                   !!   now    ! before   !! 
    6768   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   utau   , utau_b   !: sea surface i-stress (ocean referential)     [N/m2] 
     
    7172   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   wndm              !: wind speed module at T-point (=|U10m-Uoce|)  [m/s] 
    7273   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   qsr               !: sea heat flux:     solar                     [W/m2] 
     74   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   qsr_mean          !: daily mean sea heat flux: solar              [W/m2] 
    7375   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   qns    , qns_b    !: sea heat flux: non solar                     [W/m2] 
    7476   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   qsr_tot           !: total     solar heat flux (over sea and ice) [W/m2] 
     
    141143#endif 
    142144         ! 
     145      IF( ltrcdm2dc ) ALLOCATE( qsr_mean(jpi,jpj) , STAT=ierr(5) ) 
     146         ! 
    143147      sbc_oce_alloc = MAXVAL( ierr ) 
    144148      IF( lk_mpp            )   CALL mpp_sum ( sbc_oce_alloc ) 
  • branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_core.F90

    r4245 r4306  
    4949   PUBLIC   sbc_blk_core         ! routine called in sbcmod module 
    5050   PUBLIC   blk_ice_core         ! routine called in sbc_ice_lim module 
     51   PUBLIC   blk_ice_meanqsr      ! routine called in sbc_ice_lim module 
    5152   PUBLIC   turb_core_2z         ! routine calles in sbcblk_mfs module 
    5253 
     
    189190      !                                            ! compute the surface ocean fluxes using CORE bulk formulea 
    190191      IF( MOD( kt - 1, nn_fsbc ) == 0 )   CALL blk_oce_core( kt, sf, sst_m, ssu_m, ssv_m ) 
     192 
     193      ! If diurnal cycle is activated, compute a daily mean short waves flux for biogeochemistery  
     194      IF( ltrcdm2dc )   CALL blk_bio_meanqsr 
    191195 
    192196#if defined key_cice 
     
    438442      ! 
    439443   END SUBROUTINE blk_oce_core 
    440     
     444   
     445   SUBROUTINE blk_bio_meanqsr 
     446      !!--------------------------------------------------------------------- 
     447      !!                     ***  ROUTINE blk_bio_meanqsr 
     448      !!                      
     449      !! ** Purpose :   provide daily qsr_mean for PISCES when 
     450      !!                analytic diurnal cycle is applied in physic 
     451      !!                 
     452      !! ** Method  :   add part where there is no ice 
     453      !!  
     454      !!--------------------------------------------------------------------- 
     455      IF( nn_timing == 1 )  CALL timing_start('blk_bio_meanqsr') 
     456 
     457      qsr_mean(:,:) = (1. - albo ) *  sf(jp_qsr)%fnow(:,:,1) 
     458 
     459      IF( nn_timing == 1 )  CALL timing_stop('blk_bio_meanqsr') 
     460 
     461   END SUBROUTINE blk_bio_meanqsr 
     462  
     463  
     464   SUBROUTINE blk_ice_meanqsr(palb,p_qsr_mean,pdim) 
     465      !!--------------------------------------------------------------------- 
     466      !! 
     467      !! ** Purpose :   provide the daily qsr_mean over sea_ice for PISCES when 
     468      !!                analytic diurnal cycle is applied in physic 
     469      !! 
     470      !! ** Method  :   compute qsr 
     471      !!  
     472      !!--------------------------------------------------------------------- 
     473      REAL(wp), DIMENSION(:,:,:), INTENT(in   ) ::   palb       ! ice albedo (clear sky) (alb_ice_cs)               [%] 
     474      REAL(wp), DIMENSION(:,:,:), INTENT(  out) ::   p_qsr_mean !     solar heat flux over ice (T-point)         [W/m2] 
     475      INTEGER                   , INTENT(in   ) ::   pdim       ! number of ice categories 
     476      !! 
     477      INTEGER  ::   ijpl          ! number of ice categories (size of 3rd dim of input arrays) 
     478      INTEGER  ::   ji, jj, jl    ! dummy loop indices 
     479      REAL(wp) ::   zztmp         ! temporary variable 
     480      !!--------------------------------------------------------------------- 
     481      IF( nn_timing == 1 )  CALL timing_start('blk_ice_meanqsr') 
     482      ! 
     483      ijpl  = pdim                            ! number of ice categories 
     484      zztmp = 1. / ( 1. - albo ) 
     485      !                                     ! ========================== ! 
     486      DO jl = 1, ijpl                       !  Loop over ice categories  ! 
     487         !                                  ! ========================== ! 
     488         DO jj = 1 , jpj 
     489            DO ji = 1, jpi 
     490                  p_qsr_mean(ji,jj,jl) = zztmp * ( 1. - palb(ji,jj,jl) ) * qsr_mean(ji,jj) 
     491            END DO 
     492         END DO 
     493      END DO 
     494      ! 
     495      IF( nn_timing == 1 )  CALL timing_stop('blk_ice_meanqsr') 
     496      ! 
     497   END SUBROUTINE blk_ice_meanqsr   
     498  
    441499    
    442500   SUBROUTINE blk_ice_core(  pst   , pui   , pvi   , palb ,   & 
  • branches/2013/dev_MERGE_2013/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim_2.F90

    r3680 r4306  
    176176               &                      tprecip    , sprecip    ,                         & 
    177177               &                      fr1_i0     , fr2_i0     , cp_ice_msh , jpl  ) 
     178            IF( ltrcdm2dc_ice )   CALL blk_ice_meanqsr( zalb_ice_cs, qsr_ice_mean, jpl ) 
     179 
    178180         CASE( 5 )           ! Coupled formulation : atmosphere-ice stress only (fluxes provided after ice dynamics) 
    179181            CALL sbc_cpl_ice_tau( utau_ice , vtau_ice ) 
     
    216218                           CALL lim_thd_2      ( kt )      ! Ice thermodynamics  
    217219                           CALL lim_sbc_flx_2  ( kt )      ! update surface ocean mass, heat & salt fluxes  
     220#if defined key_top 
     221        IF( ltrcdm2dc_ice )CALL lim_bio_meanqsr_2 
     222#endif 
    218223 
    219224         IF( ( MOD( kt+nn_fsbc-1, ninfo ) == 0 .OR. ntmoy == 1 ) .AND. .NOT. lk_mpp )   & 
Note: See TracChangeset for help on using the changeset viewer.