Changeset 288


Ignore:
Timestamp:
11/15/19 17:32:31 (5 years ago)
Author:
dumas
Message:

ISMIP forcing : smb and Tann without interpolation between years

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SOURCES/Ant16_files/climat_InitMIP_years_perturb_mod.f90

    r283 r288  
    6262integer                              :: nb_snap           !> nombre de snapshots 
    6363 
     64real,dimension(nx,ny)                :: smb_anom_last20years  !> anomalie de smb des 20 dernieres annees du forcage 
     65real,dimension(nx,ny)                :: tann_anom_last20years !> anomalie de Tann des 20 dernieres annees du forcage 
    6466 
    6567contains 
     
    7981 
    8082  integer            :: err                ! recuperation d'erreur 
    81   integer            :: i 
     83  integer            :: i,k 
    8284 
    8385  !aurel for Tafor: 
     
    281283          
    282284      endif 
    283        
     285! calcul de la moyenne des 20 dernieres annees du forcage 
     286    do k=nb_snap,nb_snap-19,-1 
     287      smb_anom_last20years(:,:) = smb_anom_last20years(:,:) + smb_anom(:,:,k) 
     288      tann_anom_last20years(:,:) = tann_anom_last20years(:,:) + tann_anom(:,:,k) 
     289    enddo 
     290      smb_anom_last20years(:,:) = smb_anom_last20years(:,:)/20. 
     291      tann_anom_last20years(:,:) = tann_anom_last20years(:,:)/20. 
    284292  endif      
    285293 
     
    331339 
    332340  implicit none 
    333   integer             :: k, k_snap               ! pour calculer les indices de temps 
    334   real :: time_prec 
     341  integer             :: k                ! pour calculer les indices de temps 
    335342  real,dimension(nx,ny) :: bm_time, tann_time ! pour calcul Bm et Tann 
    336343  real,dimension(nx,ny) :: grad_smb_time, grad_tann_time ! pour calcul Bm et Tann avec correction verticale 
     
    346353     bm_time(:,:) = bm_0(:,:) 
    347354     tann_time(:,:) = ta0(:,:) 
    348      k_snap       = 1 
    349 !     S_ref(:,:)   = S(:,:)                   ! du coup sera la surface de reference avant le forcage 
    350      time_prec    = time 
     355  else if (time.ge.time_snap(nb_snap)) then  ! time apres le forcage : constant = derniere année nb_snap 
     356     bm_time(:,:) =  bm_0(:,:) + smb_anom (:,:,nb_snap) 
     357     tann_time(:,:) = ta0(:,:) + tann_anom(:,:,nb_snap) 
    351358     if (massb_time == 3 ) then 
    352359        grad_smb_time(:,:) =   grad_smb (:,:,1) 
    353360        grad_tann_time(:,:) = grad_tann(:,:,1) 
    354361     endif 
    355   else if (time.ge.time_snap(nb_snap)) then  ! time apres le forcage 
    356      bm_time(:,:) =  bm_0(:,:) + smb_anom (:,:,nb_snap) 
    357      tann_time(:,:) = ta0(:,:) + tann_anom(:,:,nb_snap) 
    358      if (abs(time-time_prec-1.).lt.dt) then   !  
    359         time_prec = time_prec + 1 
    360      endif 
    361      if (massb_time == 3 ) then 
    362         grad_smb_time(:,:) =   grad_smb (:,:,nb_snap) 
    363         grad_tann_time(:,:) = grad_tann(:,:,nb_snap) 
    364      endif 
     362!~   else if (time.ge.time_snap(nb_snap)) then  ! time apres le forcage : constant moy 20 dernieres années  
     363!~      bm_time(:,:) =  bm_0(:,:) + smb_anom_last20years(:,:) 
     364!~      tann_time(:,:) = ta0(:,:) + tann_anom_last20years(:,:) 
    365365  else                                       ! cas general 
    366366     do k = 1 , nb_snap-1 
    367367        if((time.ge.time_snap(k)).and.(time.lt.time_snap(k+1))) then ! entre k et k+1  
    368            bm_time(:,:) = bm_0(:,:) + smb_anom(:,:,k) + (smb_anom(:,:,k+1)-smb_anom(:,:,k)) *   & 
    369                 (time-time_snap(k))/(time_snap(k+1)-time_snap(k)) 
    370            tann_time(:,:) = ta0(:,:) + tann_anom(:,:,k) + (tann_anom(:,:,k+1)-tann_anom(:,:,k)) *   & 
    371                 (time-time_snap(k))/(time_snap(k+1)-time_snap(k)) 
    372 ! exactement sur le snapshot et avec un ecart 1 an par rapport au precedent stockage 
    373 !           write(6,*) 'time,tests',k,time,time-time_snap(k),time-time_prec-1. 
    374            if ((abs(time-time_snap(k)).le.dt).and.(abs(time-time_prec-1.).lt.dt)) then     
    375               k_snap    = k 
    376               time_prec = time_snap(k)     ! time_prec est le temps du precedent 
    377            endif 
     368!cdc version avec interpolation lineaire entre 2 années         
     369!~            bm_time(:,:) = bm_0(:,:) + smb_anom(:,:,k) + (smb_anom(:,:,k+1)-smb_anom(:,:,k)) *   & 
     370!~                 (time-time_snap(k))/(time_snap(k+1)-time_snap(k)) 
     371!~            tann_time(:,:) = ta0(:,:) + tann_anom(:,:,k) + (tann_anom(:,:,k+1)-tann_anom(:,:,k)) *   & 
     372!~                 (time-time_snap(k))/(time_snap(k+1)-time_snap(k)) 
     373!cdc version ISMIP : forcage annee n pendant un an sans interpolation. 
     374           bm_time(:,:) = bm_0(:,:) + smb_anom(:,:,k) 
     375           tann_time(:,:) = ta0(:,:) + tann_anom(:,:,k) 
    378376           if (massb_time == 3 ) then 
    379377              grad_smb_time(:,:) =   grad_smb(:,:,k) + (grad_smb(:,:,k+1)-grad_smb(:,:,k)) *   & 
     
    396394  endif 
    397395 
    398 !~ ! garde les 10 dernieres annees et calcule la moyenne 
    399 !~   if (icum.eq.1) then                           ! stockage dans le tableau bm_ref_10 
    400 !~      do k = 9,1,-1 
    401 !~         bm_ref_10(:,:,k+1) = bm_ref_10(:,:,k)   ! on decale tous les elements 
    402 !~      end do 
    403 !~      bm_ref_10(:,:,k+1) = bm(:,:)               ! le plus recent est en position 1 
    404 !~      i_moy              = i_moy +1              ! compte combien il y en a pour la moyenne 
    405 !~      i_moy              = min(i_moy,10) 
    406 !~      bm_ref_t(:,:)   = 0. 
    407 !~      do k = 1,i_moy 
    408 !~         bm_ref_t(:,:) = bm_ref_t(:,:) + bm_ref_10(:,:,k) 
    409 !~      end do 
    410 !~      bm_ref_t(:,:)    = bm_ref_t(:,:)/i_moy 
    411 !~      write(6,898) time, time_prec, icum, i_moy 
    412 !~ 898  format('cumul pour gradient  ',2(f0.3,1x),2(i0,1x)) 
    413 !~   end if 
    414396end subroutine massb_ISMIP_RCM 
    415397 
Note: See TracChangeset for help on using the changeset viewer.