Changeset 5146


Ignore:
Timestamp:
2015-03-11T18:30:22+01:00 (6 years ago)
Author:
vancop
Message:

Fixes on the LIM3 coupled interface (important for ESMs)

Location:
trunk/NEMOGCM
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/CONFIG/SHARED/namelist_ice_lim3_ref

    r5129 r5146  
    9494                                   !     3: activate G(he) only              --- temporary option 
    9595                                   !     4: activate lateral melting only    --- temporary option 
     96  ln_it_qnsice = .true.            !  iterate the surface non-solar flux with surface temperature (T) or not (F) 
    9697/ 
    9798!------------------------------------------------------------------------------ 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/ice.F90

    r5128 r5146  
    198198   INTEGER , PUBLIC ::   nn_ice_thcon        !: thermal conductivity: =0 Untersteiner (1964) ; =1 Pringle et al (2007) 
    199199   INTEGER , PUBLIC ::   nn_monocat          !: virtual ITD mono-category parameterizations (1) or not (0) 
     200   LOGICAL , PUBLIC ::   ln_it_qnsice        !: iterate surface flux with changing surface temperature or not (F) 
    200201 
    201202   !                                     !!** ice-mechanical redistribution namelist (namiceitdme) 
     
    285286   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hfx_snw     !: heat flux for snow melt  
    286287   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hfx_err     !: heat flux error after heat diffusion  
     288   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hfx_err_dif !: heat flux remaining due to change in non-solar flux 
    287289   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hfx_err_rem !: heat flux error after heat remapping  
    288290   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hfx_in      !: heat flux available for thermo transformations  
     
    433435         &      sfx_res(jpi,jpj) , sfx_bri(jpi,jpj) , sfx_dyn(jpi,jpj) ,                        & 
    434436         &      sfx_bog(jpi,jpj) , sfx_bom(jpi,jpj) , sfx_sum(jpi,jpj) , sfx_sni(jpi,jpj) , sfx_opw(jpi,jpj) ,    & 
    435          &      hfx_res(jpi,jpj) , hfx_snw(jpi,jpj) , hfx_sub(jpi,jpj) , hfx_err(jpi,jpj) , hfx_err_rem(jpi,jpj), & 
     437         &      hfx_res(jpi,jpj) , hfx_snw(jpi,jpj) , hfx_sub(jpi,jpj) , hfx_err(jpi,jpj) ,     &  
     438         &      hfx_err_dif(jpi,jpj) , hfx_err_rem(jpi,jpj) ,                                   & 
    436439         &      hfx_in (jpi,jpj) , hfx_out(jpi,jpj) , fhld(jpi,jpj) ,                           & 
    437440         &      hfx_sum(jpi,jpj) , hfx_bom(jpi,jpj) , hfx_bog(jpi,jpj) , hfx_dif(jpi,jpj) , hfx_opw(jpi,jpj) ,    & 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limsbc.F90

    r5128 r5146  
    146146            hfx_out(ji,jj) = hfx_out(ji,jj) + zf_mass + zfcm1 
    147147 
     148            ! Add the residual from heat diffusion equation (W.m-2) 
     149            !------------------------------------------------------- 
     150            hfx_out(ji,jj) = hfx_out(ji,jj) + hfx_err_dif(ji,jj) 
     151 
    148152            ! New qsr and qns used to compute the oceanic heat flux at the next time step 
    149153            !--------------------------------------------------- 
     
    164168            !  computing freshwater exchanges at the ice/ocean interface 
    165169            IF( lk_cpl ) THEN  
    166                zemp = - emp_tot(ji,jj) + emp_ice(ji,jj) * ( 1. - pfrld(ji,jj) )    &   ! 
    167                   &   + wfx_snw(ji,jj) 
     170                zemp =   emp_tot(ji,jj)                                    &   ! net mass flux over grid cell 
     171                   &   - emp_ice(ji,jj) * ( 1._wp - pfrld(ji,jj) )         &   ! minus the mass flux intercepted by sea ice 
     172                   &   + sprecip(ji,jj) * ( pfrld(ji,jj) - pfrld(ji,jj)**rn_betas )   ! 
    168173            ELSE 
    169174               zemp =   emp(ji,jj)     *           pfrld(ji,jj)            &   ! evaporation over oceanic fraction 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd.F90

    r5134 r5146  
    601601         CALL tab_2d_1d( nbpb, hfx_err_1d (1:nbpb), hfx_err         , jpi, jpj, npb(1:nbpb) ) 
    602602         CALL tab_2d_1d( nbpb, hfx_res_1d (1:nbpb), hfx_res         , jpi, jpj, npb(1:nbpb) ) 
     603         CALL tab_2d_1d( nbpb, hfx_err_dif_1d (1:nbpb), hfx_err_dif , jpi, jpj, npb(1:nbpb) ) 
    603604         CALL tab_2d_1d( nbpb, hfx_err_rem_1d (1:nbpb), hfx_err_rem , jpi, jpj, npb(1:nbpb) ) 
    604605 
     
    651652         CALL tab_1d_2d( nbpb, hfx_res       , npb, hfx_res_1d(1:nbpb)   , jpi, jpj ) 
    652653         CALL tab_1d_2d( nbpb, hfx_err_rem   , npb, hfx_err_rem_1d(1:nbpb), jpi, jpj ) 
     654         CALL tab_1d_2d( nbpb, hfx_err_dif   , npb, hfx_err_dif_1d(1:nbpb), jpi, jpj ) 
    653655         ! 
    654656         CALL tab_1d_2d( nbpb, qns_ice(:,:,jl), npb, qns_ice_1d(1:nbpb) , jpi, jpj) 
     
    675677      NAMELIST/namicethd/ rn_hnewice, ln_frazil, rn_maxfrazb, rn_vfrazb, rn_Cfrazb,                       & 
    676678         &                rn_himin, parsub, rn_betas, rn_kappa_i, nn_conv_dif, rn_terr_dif, nn_ice_thcon, & 
    677          &                nn_monocat 
     679         &                nn_monocat, ln_it_qnsice 
    678680      !!------------------------------------------------------------------- 
    679681      ! 
     
    718720         WRITE(numout,*)'      check heat conservation in the ice/snow                 con_i        = ', con_i 
    719721         WRITE(numout,*)'      virtual ITD mono-category parameterizations (1) or not  nn_monocat   = ', nn_monocat 
     722         WRITE(numout,*)'      iterate the surface non-solar flux (T) or not (F)       ln_it_qnsice = ', ln_it_qnsice 
    720723      ENDIF 
    721724      ! 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/limthd_dif.F90

    r5128 r5146  
    120120      REAL(wp), POINTER, DIMENSION(:)     ::   zh_s        ! snow layer thickness 
    121121      REAL(wp), POINTER, DIMENSION(:)     ::   zfsw        ! solar radiation absorbed at the surface 
     122      REAL(wp), POINTER, DIMENSION(:)     ::   zqns_ice_b  ! solar radiation absorbed at the surface 
    122123      REAL(wp), POINTER, DIMENSION(:)     ::   zf          ! surface flux function 
    123124      REAL(wp), POINTER, DIMENSION(:)     ::   dzf         ! derivative of the surface flux function 
     
    168169      CALL wrk_alloc( jpij, numeqmin, numeqmax ) 
    169170      CALL wrk_alloc( jpij, isnow, ztsub, ztsubit, zh_i, zh_s, zfsw ) 
    170       CALL wrk_alloc( jpij, zf, dzf, zerrit, zdifcase, zftrice, zihic, zghe ) 
     171      CALL wrk_alloc( jpij, zf, dzf, zqns_ice_b, zerrit, zdifcase, zftrice, zihic, zghe ) 
    171172      CALL wrk_alloc( jpij, nlay_i+1, ztcond_i, zradtr_i, zradab_i, zkappa_i, ztib, zeta_i, ztitemp, z_i, zspeche_i, kjstart=0) 
    172173      CALL wrk_alloc( jpij, nlay_s+1,           zradtr_s, zradab_s, zkappa_s, ztsb, zeta_s, ztstemp, z_s, kjstart=0) 
     
    242243      !------------------------------------------------------- 
    243244      DO ji = kideb , kiut 
    244          zfsw   (ji) =  qsr_ice_1d(ji) * ( 1 - i0(ji) )   ! Shortwave radiation absorbed at surface 
    245          zftrice(ji) =  qsr_ice_1d(ji) *       i0(ji)     ! Solar radiation transmitted below the surface layer 
    246          dzf    (ji) = dqns_ice_1d(ji)                    ! derivative of incoming nonsolar flux  
     245         zfsw   (ji)    =  qsr_ice_1d(ji) * ( 1 - i0(ji) )   ! Shortwave radiation absorbed at surface 
     246         zftrice(ji)    =  qsr_ice_1d(ji) *       i0(ji)     ! Solar radiation transmitted below the surface layer 
     247         dzf    (ji)    = dqns_ice_1d(ji)                    ! derivative of incoming nonsolar flux  
     248         zqns_ice_b(ji) = qns_ice_1d(ji)                     ! store previous qns_ice_1d value 
    247249      END DO 
    248250 
     
    452454         !------------------------------------------------------------------------------| 
    453455         ! 
    454          IF( .NOT. lk_cpl ) THEN   !--- forced atmosphere case 
     456         IF ( ln_it_qnsice ) THEN  
    455457            DO ji = kideb , kiut 
    456458               ! update of the non solar flux according to the update in T_su 
     
    757759      CALL lim_thd_enmelt( kideb, kiut ) 
    758760 
     761      ! --- diagnose the change in non-solar flux due to surface temperature change --- ! 
     762      IF ( ln_it_qnsice ) hfx_err_dif_1d(:) = hfx_err_dif_1d(:) - ( qns_ice_1d(:)  - zqns_ice_b(:) ) * a_i_1d(:)  
    759763 
    760764      ! --- diag conservation imbalance on heat diffusion - PART 2 --- ! 
     
    770774      END DO  
    771775 
    772       ! diagnose external surface (forced case) or bottom (forced case) from heat conservation 
    773       IF( .NOT. lk_cpl ) THEN   ! --- forced case: qns_ice and fc_su are diagnosed 
    774          ! 
    775          DO ji = kideb, kiut 
    776             qns_ice_1d(ji) = qns_ice_1d(ji) - zhfx_err(ji) 
    777             fc_su     (ji) = fc_su(ji)      - zhfx_err(ji) 
    778          END DO 
    779          ! 
    780       ELSE                      ! --- coupled case: ocean turbulent heat flux is diagnosed 
    781          ! 
    782          DO ji = kideb, kiut 
    783             fhtur_1d  (ji) = fhtur_1d(ji)   - zhfx_err(ji) 
    784          END DO 
    785          ! 
    786       ENDIF 
     776      hfx_err_dif_1d(:) = hfx_err_dif_1d(:) - zhfx_err(:) * a_i_1d(:) 
    787777 
    788778      !----------------------------------------- 
  • trunk/NEMOGCM/NEMO/LIM_SRC_3/thd_ice.F90

    r5123 r5146  
    5555   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   hfx_err_1d 
    5656   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   hfx_err_rem_1d 
     57   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   hfx_err_dif_1d 
    5758 
    5859   ! heat flux associated with ice-atmosphere mass exchange 
     
    144145         &      qsr_ice_1d (jpij) ,     & 
    145146         &      fr1_i0_1d(jpij) , fr2_i0_1d(jpij) , qns_ice_1d(jpij) ,     & 
    146          &      t_bo_1d   (jpij) ,                                          & 
    147          &      hfx_sum_1d(jpij) , hfx_bom_1d(jpij) ,hfx_bog_1d(jpij) ,     &  
    148          &      hfx_dif_1d(jpij) ,hfx_opw_1d(jpij) , & 
    149          &      hfx_thd_1d(jpij) , hfx_spr_1d(jpij) , & 
    150          &      hfx_snw_1d(jpij) , hfx_sub_1d(jpij) , hfx_err_1d(jpij) , & 
    151          &      hfx_res_1d(jpij) , hfx_err_rem_1d(jpij),      STAT=ierr(1) ) 
     147         &      t_bo_1d   (jpij) ,                                         & 
     148         &      hfx_sum_1d(jpij) , hfx_bom_1d(jpij) ,hfx_bog_1d(jpij) ,    &  
     149         &      hfx_dif_1d(jpij) , hfx_opw_1d(jpij) ,                      & 
     150         &      hfx_thd_1d(jpij) , hfx_spr_1d(jpij) ,                      & 
     151         &      hfx_snw_1d(jpij) , hfx_sub_1d(jpij) , hfx_err_1d(jpij) ,   & 
     152         &      hfx_res_1d(jpij) , hfx_err_rem_1d(jpij) , hfx_err_dif_1d(jpij) , STAT=ierr(1) ) 
    152153      ! 
    153154      ALLOCATE( sprecip_1d (jpij) , frld_1d    (jpij) , at_i_1d     (jpij) ,     & 
  • trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90

    r5123 r5146  
    11991199            ENDDO 
    12001200         ELSE 
     1201            qns_tot(:,:   ) = qns_tot(:,:) + zicefr(:,:) * frcv(jpr_qnsice)%z3(:,:,1) 
    12011202            DO jl=1,jpl 
    1202                qns_tot(:,:   ) = qns_tot(:,:) + zicefr(:,:) * frcv(jpr_qnsice)%z3(:,:,1) 
    12031203               qns_ice(:,:,jl) = frcv(jpr_qnsice)%z3(:,:,1) 
    12041204            ENDDO 
     
    12581258            ENDDO 
    12591259         ELSE 
     1260            qsr_tot(:,:   ) = qsr_tot(:,:) + zicefr(:,:) * frcv(jpr_qsrice)%z3(:,:,1) 
    12601261            DO jl=1,jpl 
    1261                qsr_tot(:,:   ) = qsr_tot(:,:) + zicefr(:,:) * frcv(jpr_qsrice)%z3(:,:,1) 
    12621262               qsr_ice(:,:,jl) = frcv(jpr_qsrice)%z3(:,:,1) 
    12631263            ENDDO 
  • trunk/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90

    r5128 r5146  
    602602      hfx_spr(:,:) = 0._wp   ;   hfx_dif(:,:) = 0._wp  
    603603      hfx_err(:,:) = 0._wp   ;   hfx_err_rem(:,:) = 0._wp 
     604      hfx_err_dif(:,:) = 0._wp 
    604605 
    605606      afx_tot(:,:) = 0._wp   ; 
Note: See TracChangeset for help on using the changeset viewer.