Changeset 5222


Ignore:
Timestamp:
2015-04-17T12:24:12+02:00 (6 years ago)
Author:
cetlod
Message:

dev_r5204_CNRS_PISCES_dcy: some improvments

Location:
branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/LIM_SRC_2/limsbc_2.F90

    r5206 r5222  
    264264 
    265265      !   daily mean qsr when diurnal cycle is applied on physics - for BGC models 
    266       IF( l_trcdm2dc ) qsr_mean(:,:) =  pfrld(:,:) * qsr_mean(:,:) + ( 1. - pfrld(:,:) ) * fstric_mean(:,:) 
     266      IF( l_trcdm2dc ) THEN qsr_mean(:,:) =  pfrld(:,:) * qsr_mean(:,:) + ( 1. - pfrld(:,:) ) * fstric_mean(:,:) 
     267         !   computation the solar flux at ocean surface 
     268         IF( lk_cpl ) THEN 
     269            qsr_mean(:,:) = qsr_mean(:,:) + ( fstric_mean(:,:) - qsr_ice_mean(:,:,1) ) * ( 1.0 - pfrld(:,:) )  ! qsr_mean = qsr_tot 
     270         ELSE 
     271            qsr_mean(:,:) =  pfrld(:,:) * qsr_mean(:,:) + ( 1. - pfrld(:,:) ) * fstric_mean(:,:) 
     272         ENDIF 
     273      ENDIF 
    267274 
    268275 
  • branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90

    r5207 r5222  
    219219 
    220220 
     221      IF( lk_cpl ) THEN  
     222         !!! LIM2 version zqsr = qsr_tot(ji,jj) + ( fstric(ji,jj) - qsr_ice(ji,jj,1) ) * ( 1.0 - pfrld(ji,jj) ) 
     223          zfcm1 = qsr_tot(ji,jj) 
     224          DO jl = 1, jpl 
     225             zfcm1 = zfcm1 + ( ftr_ice(ji,jj,jl) - qsr_ice(ji,jj,jl) ) * a_i_b(ji,jj,jl) 
     226          END DO 
     227      ELSE 
     228          !!! LIM2 version zqsr = pfrld(ji,jj) * qsr(ji,jj)  + ( 1.  - pfrld(ji,jj) ) * fstric(ji,jj) 
     229          zfcm1   = pfrld(ji,jj) * qsr(ji,jj) 
     230          DO jl = 1, jpl 
     231             zfcm1   = zfcm1 + a_i_b(ji,jj,jl) * ftr_ice(ji,jj,jl) 
     232          END DO 
     233      ENDIF 
     234 
    221235      !   daily mean qsr when diurnal cycle is applied on physics - for BGC models 
    222236      IF( l_trcdm2dc ) THEN 
    223          DO jj = 1, jpj 
    224             DO ji = 1, jpi 
    225                zfcm1 = pfrld(ji,jj) * qsr_mean(ji,jj) 
    226                DO jl = 1, jpl 
    227                   zfcm1 = zfcm1 + ftr_ice_mean(ji,jj,jl) 
    228                END DO 
    229                qsr_mean(ji,jj) = zfcm1                                       
     237         IF( lk_cpl ) THEN  
     238            DO jj = 1, jpj 
     239               DO ji = 1, jpi 
     240                  zfcm1 = qsr_mean(ji,jj) 
     241                  DO jl = 1, jpl 
     242                    zfcm1 = zfcm1 + ftr_ice_mean(ji,jj,jl) - qsr_ice_mean(ji,jj,jl) * a_i_b(ji,jj,jl) 
     243                 END DO 
     244                 qsr_mean(ji,jj) = zfcm1                                       
     245               ENDDO 
    230246            ENDDO 
    231          ENDDO 
     247         ELSE 
     248            DO jj = 1, jpj 
     249               DO ji = 1, jpi 
     250                  zfcm1 = pfrld(ji,jj) * qsr_mean(ji,jj) 
     251                  DO jl = 1, jpl 
     252                     zfcm1 = zfcm1 + ftr_ice_mean(ji,jj,jl) 
     253                  END DO 
     254                  qsr_mean(ji,jj) = zfcm1                                       
     255               ENDDO 
     256            ENDDO 
     257         ENDIF 
    232258      ENDIF 
    233259 
  • branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90

    r5206 r5222  
    8181   !!              Ocean Surface Boundary Condition fields 
    8282   !!---------------------------------------------------------------------- 
    83    LOGICAL , PUBLIC ::   l_trcdm2dc               !: In case of Diurnal Cycle short wave, compute a Daily Mean short waves flux 
     83   LOGICAL , PUBLIC ::  l_trcdm2dc               !: In case of Diurnal Cycle short wave, compute a Daily Mean short waves flux 
     84   INTEGER , PUBLIC ::  n_cpl_qsr                !: qsr coupling frequency per days 
    8485   ! 
    8586   LOGICAL , PUBLIC ::   lhftau = .FALSE.        !: HF tau used in TKE: mean(stress module) - module(mean stress) 
     
    137138      !!                  ***  FUNCTION sbc_oce_alloc  *** 
    138139      !!--------------------------------------------------------------------- 
    139       INTEGER :: ierr(6) 
     140      INTEGER :: ierr(5) 
    140141      !!--------------------------------------------------------------------- 
    141142      ierr(:) = 0 
     
    145146         ! 
    146147      ALLOCATE( qns_tot(jpi,jpj) , qns  (jpi,jpj) , qns_b(jpi,jpj),        & 
    147          &      qsr_tot(jpi,jpj) , qsr  (jpi,jpj) ,                        & 
     148         &      qsr_tot(jpi,jpj) , qsr  (jpi,jpj) , qsr_mean(jpi,jpj),     & 
    148149         &      emp    (jpi,jpj) , emp_b(jpi,jpj) ,                        & 
    149150         &      sfx    (jpi,jpj) , sfx_b(jpi,jpj) , emp_tot(jpi,jpj), fmmflx(jpi,jpj), STAT=ierr(2) ) 
     
    159160         &      ssv_m  (jpi,jpj) , sss_m  (jpi,jpj), ssh_m(jpi,jpj) , STAT=ierr(4) ) 
    160161         ! 
    161          IF( l_trcdm2dc )   ALLOCATE( qsr_mean(jpi,jpj) , STAT=ierr(5) ) 
    162          ! 
    163162#if defined key_vvl 
    164       ALLOCATE( e3t_m(jpi,jpj) , STAT=ierr(6) ) 
     163      ALLOCATE( e3t_m(jpi,jpj) , STAT=ierr(5) ) 
    165164#endif 
    166165         ! 
  • branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90

    r5146 r5222  
    135135 
    136136   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   albedo_oce_mix     ! ocean albedo sent to atmosphere (mix clear/overcast sky) 
     137 
     138   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)   :: qsr_tot_tmp     ! arrays containing consecutives qsr in a day 
     139   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: qsr_ice_tmp     !  ===                        ===  
    137140 
    138141   INTEGER , ALLOCATABLE, SAVE, DIMENSION(    :) ::   nrcvinfo           ! OASIS info argument 
     
    583586      ENDIF 
    584587      ! 
    585       IF( ln_dm2dc .AND. ( cpl_freq( jpr_qsroce ) + cpl_freq( jpr_qsrmix ) /= 86400 ) )   & 
     588      n_cpl_qsr = INT( 86400 / ( cpl_freq( jpr_qsroce ) + cpl_freq( jpr_qsrmix ) )  ! qsr coupling frequency per day 
     589      ! 
     590      IF( ln_dm2dc .AND. n_cpl_qsr /= 1 )   & 
    586591         &   CALL ctl_stop( 'sbc_cpl_init: diurnal cycle reconstruction (ln_dm2dc) needs daily couping for solar radiation' ) 
    587592 
     593      ! 
     594      ! 
    588595      CALL wrk_dealloc( jpi,jpj, zacs, zaos ) 
    589596      ! 
     
    10561063    
    10571064 
    1058    SUBROUTINE sbc_cpl_ice_flx( p_frld  , palbi   , psst    , pist    ) 
     1065   SUBROUTINE sbc_cpl_ice_flx( p_frld  , kt, palbi   , psst    , pist    ) 
    10591066      !!---------------------------------------------------------------------- 
    10601067      !!             ***  ROUTINE sbc_cpl_ice_flx  *** 
     
    10961103      !!                   sprecip             solid precipitation over the ocean   
    10971104      !!---------------------------------------------------------------------- 
     1105      INTEGER,  INTENT(in   ), OPTIONAL         ::   kt     !  time-step 
    10981106      REAL(wp), INTENT(in   ), DIMENSION(:,:)   ::   p_frld     ! lead fraction                [0 to 1] 
    10991107      ! optional arguments, used only in 'mixed oce-ice' case 
     
    11021110      REAL(wp), INTENT(in   ), DIMENSION(:,:,:), OPTIONAL ::   pist    ! ice surface temperature     [Kelvin] 
    11031111      ! 
    1104       INTEGER ::   jl   ! dummy loop index 
     1112      INTEGER ::   it, jl   ! dummy loop index 
    11051113      REAL(wp), POINTER, DIMENSION(:,:) ::   zcptn, ztmp, zicefr 
    11061114      !!---------------------------------------------------------------------- 
     
    11091117      ! 
    11101118      CALL wrk_alloc( jpi,jpj, zcptn, ztmp, zicefr ) 
     1119 
     1120      IF( PRESENT( kt ) ) it = kt 
    11111121 
    11121122      zicefr(:,:) = 1.- p_frld(:,:) 
     
    12721282            &                     + palbi         (:,:,1) * zicefr(:,:) ) ) 
    12731283      END SELECT 
     1284      ! 
    12741285      IF( ln_dm2dc ) THEN   ! modify qsr to include the diurnal cycle 
    12751286         qsr_tot(:,:  ) = sbc_dcy( qsr_tot(:,:  ) ) 
     
    12781289         ENDDO 
    12791290      ENDIF 
     1291      ! 
     1292      IF( l_trcdm2dc )  CALL sbc_cpl_qsr_mean( it )    ! computation of daily mean qsr for biogeochemical model if needed 
    12801293 
    12811294      !                                                      ! ========================= ! 
     
    13131326      ! 
    13141327   END SUBROUTINE sbc_cpl_ice_flx 
     1328 
     1329   SUBROUTINE sbc_cpl_qsr_mean( kt ) 
     1330      !!---------------------------------------------------------------------- 
     1331      !!             ***  ROUTINE sbc_cpl_mean  *** 
     1332      !! 
     1333      !! ** Purpose :   Compute daily mean qsr for biogeochmeical model in case of diurnal cycle 
     1334      !! 
     1335      !!---------------------------------------------------------------------- 
     1336      INTEGER, INTENT(in) ::   kt 
     1337      INTEGER  :: jn 
     1338 
     1339      IF( kt == nit000 ) THEN 
     1340         ALLOCATE( qsr_tot_tmp(jpi,jpj,n_cpl_qsr), qsr_ice_tmp(jpi,jpj,jpl,n_cpl_qsr) )  
     1341         DO jn = 1, n_cpl_qsr 
     1342            qsr_tot_tmp(:,:  ,jn) = qsr_tot(:,:  ) 
     1343            qsr_ice_tmp(:,:,:,jn) = qsr_ice(:,:,:) 
     1344         ENDDO 
     1345         qsr_mean    (:,:  ) = qsr_tot(:,:  )  
     1346         qsr_ice_mean(:,:,:) = qsr_ice(:,:,:) 
     1347      ENDIF 
     1348      ! 
     1349      IF( kt /= nit000 .AND.  nrcvinfo(jpr_qsroce) == OASIS_Rcv ) THEN !  => need to be done only when we receive the field 
     1350         DO jn = 1, n_cpl_qsr - 1 
     1351            qsr_tot_tmp(:,:  ,jn) = qsr_tot_tmp(:,:  ,jn+1) 
     1352            qsr_ice_tmp(:,:,:,jn) = qsr_ice_tmp(:,:,:,jn+1) 
     1353         ENDDO 
     1354         qsr_tot_tmp(:,:  ,n_cpl_qsr ) = qsr_tot(:,:  ) 
     1355         qsr_ice_tmp(:,:,:,n_cpl_qsr ) = qsr_ice(:,:,:) 
     1356         ! 
     1357         qsr_mean    (:,:) = SUM( qsr_tot_tmp(:,:,:), 3 ) / n_cpl_qsr  
     1358         qsr_ice_mean(:,:) = SUM( qsr_ice_tmp(:,:,:), 4 ) / n_cpl_qsr  
     1359         ! 
     1360      ENDIF 
     1361      ! 
     1362   END SUBROUTINE sbc_cpl_qsr_mean 
    13151363    
    13161364    
  • branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90

    r5206 r5222  
    224224         SELECT CASE( kblk ) 
    225225         CASE ( jp_cpl ) 
    226             CALL sbc_cpl_ice_flx( p_frld=pfrld, palbi=zalb_ice, psst=sst_m, pist=t_su    ) 
     226            CALL sbc_cpl_ice_flx( p_frld=pfrld, kt=kt, palbi=zalb_ice, psst=sst_m, pist=t_su    ) 
    227227            IF( nn_limflx == 2 )   CALL ice_lim_flx( t_su, zalb_ice, qns_ice, qsr_ice ,   & 
    228228               &                                           dqns_ice, qla_ice, dqla_ice, nn_limflx ) 
  • branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim_2.F90

    r5207 r5222  
    233233            CALL sbc_cpl_ice_flx( frld,                                              & 
    234234            !                                optional arguments, used only in 'mixed oce-ice' case 
    235             &                                             palbi = zalb_ice, psst = sst_m, pist = zsist ) 
     235            &                                             kt=kt, palbi=zalb_ice, psst=sst_m, pist=zsist ) 
    236236            sprecip(:,:) = - emp_ice(:,:)   ! Ugly patch, WARNING, in coupled mode, sublimation included in snow (parsub = 0.) 
    237237         ENDIF 
  • branches/2015/dev_r5204_CNRS_PISCES_dcy/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90

    r5206 r5222  
    152152      END SELECT 
    153153      ! 
    154       IF( ln_dm2dc .AND. lk_top  )  THEN    
    155          l_trcdm2dc = .TRUE. 
    156          IF( lwp ) THEN 
    157             WRITE(numout,*) "In case of diurnal cycle coupled with passive tracers" 
    158             WRITE(numout,*) "Computation of a daily mean shortwave for some biogeochemical models" 
    159          ENDIF 
    160       ELSE              
    161          l_trcdm2dc = .FALSE. 
    162       ENDIF 
    163  
    164154      !                              ! allocate sbc arrays 
    165155      IF( sbc_oce_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'sbc_init : unable to allocate sbc_oce arrays' ) 
     
    276266      ! 
    277267      IF( nsbc   == jp_cpl )   CALL sbc_cpl_init (nn_ice)      ! OASIS initialisation. must be done before first time step 
     268       
     269      l_trcdm2dc == lk_top .AND. ( ln_dm2dc .OR. ( lk_cpl .AND. n_cpl_qsr /= 1 ) )   
     270      IF( l_trcdm2dc .AND. lwp ) THEN 
     271            WRITE(numout,*) "Coupling with passive tracers and used of diurnal cycle !!!!! " 
     272            WRITE(numout,*) "Computation of a daily mean shortwave for some biogeochemical models" 
     273         ENDIF 
     274      ENDIF 
    278275 
    279276   END SUBROUTINE sbc_init 
Note: See TracChangeset for help on using the changeset viewer.