Changeset 243


Ignore:
Timestamp:
01/16/19 12:21:03 (5 years ago)
Author:
aquiquet
Message:

Possibility to modulate bmelt following an index in climat_forcage + addition of a forcing file with a glacial index constructed from NGRIP d18O and an oceanic perturbation (sealevel and bmelt) as in the GMD2018 paper

Location:
trunk
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SOURCES/climat_forcage_mod.f90

    r237 r243  
    66! possibilite d'utiliser autant de snapshots que l'on veut (ntr) 
    77! fichiers de forcage, Snapshot et valeurs de lapse rate definis dans fichier param 
    8   use module3d_phy,only:nx,ny,sealevel,sealevel_2d,S,S0,Tmois,Tann,Tjuly,acc,num_forc,num_param,num_rep_42,coefbmshelf,PI,ro,time,dirforcage,dirnameinp 
     8  use module3d_phy,only:nx,ny,sealevel,sealevel_2d,S,S0,Tmois,Tann,Tjuly,acc,num_forc,num_param,num_rep_42,tafor,coefbmshelf,PI,ro,time,dirforcage,dirnameinp 
    99  use netcdf 
    1010  use io_netcdf_grisli 
     
    1212 
    1313  implicit none 
    14   character(len=80) :: filin 
     14  character(len=100) :: filin 
    1515  integer :: nft             !   nft est le nombre de lignes a lire dans le fichier  
    1616                           ! contenant le forcage climatique 
    1717  real,dimension(:),allocatable :: tdate          ! time for climate forcing 
    18   real,dimension(:),allocatable :: alphat 
    19   real,dimension(:),allocatable :: alphap 
     18  real,dimension(:),allocatable :: tpert 
    2019  real,dimension(:),allocatable :: spert 
    21  
    22  
    23   real :: mincoefbmelt               ! butoirs mini  
    24   real :: maxcoefbmelt               ! butoirs maxi de coefbmshelf 
     20  real,dimension(:),allocatable :: bpert 
     21 
    2522  character(len=100) :: clim_ref_file ! climat de reference 
    2623  character(len=100) :: forcage_file1 ! fichier de forcage 1 (climat+topo) 
    2724  character(len=100) :: forcage_file2 ! fichier de forcage 2 (climat+topo) 
    2825 
    29   character(len=80) :: filforc       ! nom du fichier forcage 
     26  character(len=100) :: filforc       ! nom du fichier forcage 
     27  real :: coefT                    !< pour modifier l'amplitude de la perturb. T 
     28  integer :: pertbmb               !< boolean: do we modify the bmelt under ice shelves? 
     29  real    :: coefbmb               !< if we modify the bmelt, we read a perturbation (based on dD, insolation, etc.) and apply this coefficient 
    3030 
    3131 
     
    153153  end if 
    154154 
    155   if (.not.allocated(alphat)) THEN 
    156      allocate(alphat(nft),stat=err) 
     155  if (.not.allocated(tpert)) THEN 
     156     allocate(tpert(nft),stat=err) 
    157157     if (err/=0) then 
    158158        print *,"erreur à l'allocation du tableau tpert",err 
     
    161161  end if 
    162162 
    163   if (.not.allocated(alphap)) THEN 
    164      allocate(alphap(nft),stat=err) 
     163  if (.not.allocated(bpert)) THEN 
     164     allocate(bpert(nft),stat=err) 
    165165     if (err/=0) then 
    166166        print *,"erreur à l'allocation du tableau tpert",err 
     
    178178 
    179179  do i=1,nft 
    180      read(num_forc,*) tdate(i),alphat(i),alphap(i),spert(i) 
     180     if (pertbmb==1) then 
     181        read(num_forc,*) tdate(i),spert(i),tpert(i),bpert(i) 
     182     else 
     183        read(num_forc,*) tdate(i),spert(i),tpert(i) 
     184        bpert(i)=0. 
     185     endif 
    181186  end do 
    182187 
    183188  close(num_forc) 
     189 
     190! Warning: when using climat_forcage we should in principle use a tpert which is a glacial index (ranging from about 0 to 1) 
     191!          here we can still use a coefT to scale the signal if needed 
     192!          the coefbmb now is copy and paste from what we have done for Antarctica in Quiquet et al. GMD 2018 
     193 
     194  tpert(:)=tpert(:)*coefT 
     195  bpert(:)=max(1.+bpert(:)*coefbmb,0.01) !freezing is not allowed 
     196 
    184197 
    185198 
     
    191204 
    192205 
    193   namelist/clim_forcage/clim_ref_file,ttr,forcage_file1,forcage_file2,typerun,rappact,mincoefbmelt,maxcoefbmelt,filforc,lapserate 
     206  namelist/clim_forcage/clim_ref_file,ttr,forcage_file1,forcage_file2,typerun,lapserate,rappact,filforc,pertbmb,coeft,coefbmb 
    194207 
    195208  rewind(num_param)        ! pour revenir au debut du fichier param_list.dat 
     
    204217  write(num_rep_42,'(A,A,A)') 'forcage_file2 = "',trim(forcage_file2),'"' 
    205218  write(num_rep_42,*) 'typerun = ', typerun 
     219  write(num_rep_42,*) 'lapserate = ', lapserate 
    206220  write(num_rep_42,*) 'rappact = ', rappact 
    207   write(num_rep_42,*) 'mincoefbmelt = ', mincoefbmelt 
    208   write(num_rep_42,*) 'maxcoefbmelt = ', maxcoefbmelt 
    209221  write(num_rep_42,'(A,A,A)') ' filforc      = "',trim(filforc),'"' 
    210   write(num_rep_42,*) 'lapserate = ', lapserate 
     222  write(num_rep_42,*) 'pertbmb = ', pertbmb 
     223  write(num_rep_42,*) 'coefT   = ', coefT 
     224  write(num_rep_42,*) 'coefbmb = ', coefbmb 
    211225  write(num_rep_42,*)'/'                             
    212226  write(num_rep_42,*) 
     
    225239 
    226240  implicit none 
    227   real :: coeft,coefp,coeftime       !< coeftime is not used 
     241  real :: coeftime       !< coeftime is not used 
     242  real :: tafor 
    228243  integer :: l                       !< dumm index for loops on snapsots files  l=itr,ntr-1 
    229244  integer :: itr                     !< nb of the current snapshot file (change with time) 
     
    247262  if(timeloc.le.tdate(1)) then   ! time avant le debut du fichier forcage 
    248263     sealevel=spert(1) 
    249      coeft=alphat(1) 
    250      coefp=alphap(1) 
     264     tafor=tpert(1) 
     265     coefbmshelf=bpert(1) 
    251266     ift=1 
    252267 
    253268  else if (timeloc.ge.tdate(nft)) then     ! time apres la fin du fichier forcage 
    254269     sealevel=spert(nft) 
    255      coeft=alphat(nft) 
    256      coefp=alphap(nft) 
     270     tafor=tpert(nft) 
     271     coefbmshelf=bpert(nft) 
    257272     ift=nft 
    258273 
     
    266281                (timeloc-tdate(i))/(tdate(i+1)-tdate(i)) 
    267282 
    268            coeft=alphat(i)+(alphat(i+1)-alphat(i))*      & 
     283           tafor=tpert(i)+(tpert(i+1)-tpert(i))*      & 
    269284                (timeloc-tdate(i))/(tdate(i+1)-tdate(i)) 
    270285 
    271            coefp=alphap(i)+(alphap(i+1)-alphap(i))*      & 
     286           coefbmshelf=bpert(i)+(bpert(i+1)-bpert(i))*      & 
    272287                (timeloc-tdate(i))/(tdate(i+1)-tdate(i)) 
    273288                 
     
    279294100 continue 
    280295 
     296 
     297!same as for the GMD2018 paper: 
     298!afq -- as in Pollard and Deconto, melt is more efficient at high temperature... -> 
     299  if (coefbmshelf.gt.1.) then 
     300     coefbmshelf = 1. + ( coefbmshelf - 1. ) * 1.5 !afq.... tuning for the degla?... 
     301  end if 
     302        
    281303  sealevel_2d(:,:)=sealevel 
    282304 
     
    322344 
    323345 
    324 ! test avec coefbmshelf fonction de coeft (1 a l'actuel et proche de 0 en glaciaire) 
    325   coefbmshelf=coeft 
    326 !coefbmshelf=1. ! modif pour test de sensibilite (tof 20 avril 01) 
    327   coefbmshelf=max(coefbmshelf,mincoefbmelt) 
    328   coefbmshelf=min(coefbmshelf,maxcoefbmelt) 
    329  
    330346!if (geoplace(1:5).eq.'hemin') then 
    331347 
Note: See TracChangeset for help on using the changeset viewer.