Changeset 213


Ignore:
Timestamp:
10/02/18 18:18:58 (6 years ago)
Author:
dumas
Message:

back to previous version of bmelt-seuil-profondeur_mod.f90

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SOURCES/bmelt-seuil-profondeur_mod.f90

    r207 r213  
    2222 
    2323  use module3d_phy 
    24   use netcdf 
    25   use io_netcdf_grisli 
     24 
    2625 
    2726  implicit none 
     
    3433  real :: depth_talus                   !< profondeur de transition  
    3534  real,dimension(nx,ny) ::  bmshelf     !< tableau fusion basale sous shelf 
    36    
    37    
    38 ! Pour le calcul du bmelt moyen par ice-shelf 
    39   integer,dimension(nx,ny) :: typeshelf !< Type de shelf Ronne->1 Ross ->2 .... 
    40   integer, parameter :: nb_reg = 18 
    41   real,dimension (nb_reg) :: bmelt_regions, bmgrz_regions 
    42   real :: bmelt_talus,bmgrz_talus       !< Au dela du talus continental 
    43   real :: bmelt_coef                    !< Coef pour corriger les valeurs std de bmelt (lu dans namelist mais pas utilisé ici) 
    44   integer,dimension(nb_reg):: i_bmelt   !< nbr de passage dans la boucle pour calcul de la moyenne du bmelt 
    45   integer,dimension(nb_reg):: i_bmgrz   !< nbr de passage dans la boucle pour calcul de la moyenne du bmgrz 
    46    
    47   integer :: flag_dist                  !< Pas utilise ici mais pour compatibilite lecture namelist 
    48    
     35 
    4936 
    5037contains 
     
    6148    ! Cette routine fait l'initialisation pour la fusion basale. 
    6249    ! Elle est appelée par inputfile-vec-0.5.f90 
    63      
    64     ! Pour le calcul du bmelt moyen par ice-shelf 
    65     real*8, dimension(:,:),   pointer    :: tab               !< tableau 2d real pointer 
    66     character(len=100) :: file_number_shelves ! fichier avec les zones ice-shelves 
    67     character(len=100) :: file_bmelt_anom 
    68     real,dimension(nx,ny) :: dist_talus   ! distance au talus 
    69     character(len=100) :: file_dist_talus ! pas utilise ici mais pour compatibilite lecture namelist 
    70     real :: bmelt_dist0                   ! pas utilise ici mais pour compatibilite lecture namelist 
    71      
     50 
     51 
    7252    namelist/bmelt_seuil/bm_grz,bmshelf_plateau,bmshelf_abysses,depth_talus 
    73      
    74     namelist/bmelt_ant_reg_initmip/bmelt_regions,bmgrz_regions,  & 
    75       bmelt_talus,bmgrz_talus,bmelt_coef,file_number_shelves,   & 
    76       flag_dist,file_dist_talus,bmelt_dist0 
    7753 
    7854    if (itracebug.eq.1)  call tracebug('entree dans init_bmelt de bmelt_seuil_prof') 
     
    11187 
    11288    debug_3D(:,:,34)=bmshelf(:,:) 
    113      
    114 ! Si on fait l'inversion on doit connaitre les regions pour calculer le taux de fonte par region     
    115     if (ibmelt_inv.eq.1) then 
    116       rewind(num_param)        ! pour revenir au debut du fichier param_list.dat 
    117       read(num_param,bmelt_ant_reg_initmip) 
    118       ! formats pour les ecritures dans 42 
    119       write(num_rep_42,428)'!___________________________________________________________' 
    120       write(num_rep_42,428) '&bmelt-ant-regions-initmip                                 ' 
    121       write(num_rep_42,*) 
    122       write(num_rep_42,'(A,18(f0.2,","))') 'bmelt_regions      = ', bmelt_regions(:) 
    123       write(num_rep_42,'(A,18(f0.2,","))') 'bmgrz_regions      = ', bmgrz_regions(:) 
    124       write(num_rep_42,*) 'bmelt_talus     = ', bmelt_talus 
    125       write(num_rep_42,*) 'bmgrz_talus     = ', bmgrz_talus 
    126       write(num_rep_42,*) 'bmelt_coef      = ', bmelt_coef 
    127       write(num_rep_42,*) 'file_numer_shelves = ', file_number_shelves 
    128       write(num_rep_42,*) 'flag_dist = ', flag_dist 
    129       write(num_rep_42,*) 'file_dist_talus = ', file_dist_talus 
    130       write(num_rep_42,*) 'bmelt_dist0 = ', bmelt_dist0 
    131       write(num_rep_42,*)'/' 
    132       write(num_rep_42,428) '! bmelt_regions    :  fonte basale sous shelves pour les 18 regions initMIP' 
    133       write(num_rep_42,428) '! bmgrz_regions    :  fonte basale grounding zone pour les 18 regions initMIP' 
    134       write(num_rep_42,428) '! bmelt_talus & bmgrz_talus  :  fonte basale apres talus cont' 
    135       write(num_rep_42,428) '! bmelt_coef                 :  coef fonte (1 pour conserver val)' 
    136       write(num_rep_42,428) '! file_numer_ice-shelves     : fichier zones ice shelves' 
    137 !~     write(num_rep_42,428) '! flag_dist : flag pour bmelt fnct distance talus' 
    138 !~     write(num_rep_42,428) '! file_dist_talus : fichier de distance talus' 
    139 !~     write(num_rep_42,428) '! bmelt_dist0 : coef de bmelt au talus' 
    140       write(num_rep_42,*) 
    141       ! lecture du fichier contenant les types de shelves 
    142       ! 18 regions sur la base des bassins fournis par le projet ISMIP6-initmip antarctica 
    143       typeshelf(:,:)=100 
    144       file_number_shelves=TRIM(DIRNAMEINP)//trim(file_number_shelves) 
    145       call Read_Ncdf_var('z',file_number_shelves,tab) 
    146       typeshelf(:,:)  = tab(:,:) 
    147     endif 
    148     bmelt_regions(:)=0. 
    149     bmgrz_regions(:)=0. 
    150     i_bmelt(:)=0 
    151     i_bmgrz(:)=0 
    152  
    15389    return 
    15490  end subroutine init_bmelt 
     
    169105    integer :: ngr           ! nombre de voisins flottants 
    170106    real    :: coef_talus    ! pour ne pas changer la fusion au dessus de l'ocean profond 
    171      
    172     ! Pour le calcul du bmelt moyen par ice-shelf 
    173     integer,dimension(nb_reg) :: nbr_pts_shelf, nbr_pts_grz ! nombre de points shelf et grz par zone 
    174     real,dimension(nb_reg) :: bmelt_regions_time, bmgrz_regions_time ! Pour le caclul du bemlt/bmgrz par zone 
    175     integer :: nregion ! pour calcul du bmelt sur toutes les regions 
    176107 
    177108    if (itracebug.eq.1)  call tracebug('entree dans bmeltshelf de bmelt_seuil_prof') 
    178      
    179     nbr_pts_shelf(:)=0 
    180     nbr_pts_grz(:)=0 
    181     bmelt_regions_time(:)=0. 
    182     bmgrz_regions_time(:)=0. 
    183      
     109 
    184110    where (Bsoc0(:,:).lt.depth_talus) 
    185111        bmshelf(:,:)=bmshelf_abysses 
     
    206132 
    207133            if (fbm(i,j)) then  
    208               bmelt(i,j)=coef_talus*bmgrz(i,j) 
     134                bmelt(i,j)=coef_talus*bmgrz(i,j) 
    209135            endif 
     136 
     137 
    210138 
    211139            ! ATTENTION le bloc suivant sert a determiner la fusion basale d'equilibre 
     
    216144                !     bmelt(i,j)=corrbmelt(i,j) 
    217145                corrbmelt(i,j)=corrbmelt(i,j)+hdot(i,j)*0.85 
    218                 bmelt(i,j)=bmelt(i,j)+corrbmelt(i,j) 
    219                 if (H(i,j).gt.50.) then ! on ne prend en compte que les points avec H > 50m 
    220                   if (fbm(i,j)) then ! points grounding line 
    221                     bmgrz_regions_time(typeshelf(i,j)) = bmgrz_regions_time(typeshelf(i,j)) + bmelt(i,j) 
    222                     nbr_pts_grz(typeshelf(i,j)) = nbr_pts_grz(typeshelf(i,j)) + 1 
    223                   else ! points shelf 
    224                     bmelt_regions_time(typeshelf(i,j)) = bmelt_regions_time(typeshelf(i,j)) + bmelt(i,j) 
    225                     nbr_pts_shelf(typeshelf(i,j)) = nbr_pts_shelf(typeshelf(i,j)) + 1 
    226                   endif 
    227                 endif 
     146                bmelt(i,j)=bmelt(i,j)+corrbmelt(i,j)      
    228147            endif 
     148 
    229149 
    230150        else                   ! point posé, on compte le nombre de voisins flottants 
     
    237157            end if 
    238158 
     159 
    239160            !   la fusion des points limites est une combinaison entre valeur posée et valeur flottante 
    240161            !   en fonction du nombre de points flottants 
     
    243164 
    244165            if ((igrdline.eq.1).and.(ibmelt_inv.eq.1)) then 
    245                 corrbmelt(i,j)=corrbmelt(i,j)+hdot(i,j)*0.85 
     166                corrbmelt(i,j)=corrbmelt(i,j)+hdot(i,j)  !*0.85 
    246167                bmelt(i,j)=bmelt(i,j)+corrbmelt(i,j) 
    247168            endif 
     
    250171    end do 
    251172 
    252     if ((ibmelt_inv.eq.1).and.(time.gt.10.)) then ! on ne prend pas en compte les 30 premiers pas de temps 
    253       do nregion=1,nb_reg 
    254         if (nbr_pts_shelf(nregion).gt.1) then 
    255           bmelt_regions(nregion) = bmelt_regions_time(nregion)/nbr_pts_shelf(nregion) + bmelt_regions(nregion) 
    256           i_bmelt(nregion) = i_bmelt(nregion)+1 
    257         endif 
    258         if (nbr_pts_grz(nregion).ge.1) then 
    259           bmgrz_regions(nregion) = bmgrz_regions_time(nregion)/nbr_pts_grz(nregion) + bmgrz_regions(nregion) 
    260           i_bmgrz(nregion) = i_bmgrz(nregion)+1 
    261         endif 
    262       enddo 
    263       print*,'time=',time 
    264       print*,'bmgrz des ',nb_reg,' regions' 
    265       print*,'Ross 15 16' 
    266       print*,bmgrz_regions_time(15)/nbr_pts_grz(15),nbr_pts_grz(15),bmgrz_regions_time(16)/nbr_pts_grz(16),nbr_pts_grz(16) 
    267       print*,'Ronny 14 18' 
    268       print*,bmgrz_regions_time(14)/nbr_pts_grz(14),nbr_pts_grz(14),bmgrz_regions_time(18)/nbr_pts_grz(18),nbr_pts_grz(18) 
    269       print*,'PIG 17 et Amery 5' 
    270       print*,bmgrz_regions_time(17)/nbr_pts_grz(17),nbr_pts_grz(17),bmgrz_regions_time(5)/nbr_pts_grz(5),nbr_pts_grz(5) 
    271        
    272       if (time.eq.tend) then ! a le fin du run : calcul du bmelt et bmgrz moyen par secteur 
    273         do nregion=1,nb_reg 
    274           if (i_bmelt(nregion).gt.0) then 
    275             bmelt_regions(nregion)=bmelt_regions(nregion)/i_bmelt(nregion) 
    276           else 
    277             bmelt_regions(nregion)=0. 
    278           endif 
    279           if (i_bmgrz(nregion).gt.0) then 
    280             bmgrz_regions(nregion)=bmgrz_regions(nregion)/i_bmgrz(nregion) 
    281           else 
    282             bmgrz_regions(nregion)=0. 
    283           endif 
    284         enddo 
    285         print*,'Fin de la simule, time=',time 
    286         print*,'calcul des bmelt et bmgrz par inversion :' 
    287         print*,'bmelt des ',nb_reg,' regions' 
    288         print*,bmelt_regions(:) 
    289         print*,'bmgrz des ',nb_reg,' regions' 
    290         print*,bmgrz_regions(:) 
    291       endif 
    292     endif 
    293            
    294     if ((igrdline.eq.1).and.(ibmelt_inv.eq.0)) then 
    295       where (i_Hp(:,:).eq.1) 
     173if ((igrdline.eq.1).and.(ibmelt_inv.eq.0)) then 
     174    where (i_Hp(:,:).eq.1) 
    296175        bmelt(:,:)=0.    ! hdot donne alors le -bmelt 
    297       endwhere 
    298     endif 
    299      
     176    endwhere 
     177endif 
     178 
    300179return 
    301180end subroutine  bmeltshelf 
Note: See TracChangeset for help on using the changeset viewer.