source: trunk/SOURCES/Hemin40_files/bmelt-hemin40-depth_mod.f90 @ 237

Last change on this file since 237 was 237, checked in by aquiquet, 6 years ago

Sealevel is now treated as a 2D variable (sealevel_2d while sealevel remains the eustatic sea level), results should remain identical as sealevel_2d is equal to sealevel in this revision.

File size: 4.9 KB
Line 
1!> \file bmelt-hemin40-depth_mod.f90
2!! Module qui calcule la fusion basale (grounded ou ice shelves)
3!<
4
5!> \namespace  BMELT_NOR_DEPTH
6!! Calcule la fusion basale (grounded ou ice shelves)
7!! @note Pour les ice shelves Antarctique, tient compte des différentes régions
8!! @note A choisir dans le module_choix
9!! \author Catherine RITZ
10!! \date Juillet 2005
11!! @note Used module
12!! @note   - use module3D_phy
13!<
14
15
16MODULE  BMELT_NOR_DEPTH       ! cat juillet 2005
17
18! calcule la fusion basale (grounded ou ice shelves)
19! pour les ice shelves Antarctique, tient compte des différentes régions
20! A choisir dans le module_choix
21
22       USE module3D_phy
23
24implicit none
25
26
27REAL,dimension(nx,ny) ::  bmgrz       !< fusion basale a la grounding zone
28real,dimension(nx,ny) ::  bmshelf     !< fusion basale sous shelf
29
30!REAL,dimension(nx,ny) :: dist_talu    ! distance du point au talu continental
31!REAL,dimension(nx,ny) :: typeshelf    ! Type de shelf Ronne->1 Ross ->2 ....
32                                      ! utilises pour moduler la fusion sous le shelf
33!integer, dimension(10) :: region     ! pour écrire dans le fichier param
34!character(len=30),dimension(10) :: regname ! nom des régions
35real :: bsupshelf
36
37CONTAINS
38!-------------------------------------------------------------------------------
39
40!> SUBROUTINE: init_bmelt
41!! Routine qui fait l'initialisation pour la fusion basale.
42!<
43subroutine init_bmelt
44
45
46
47! Cette routine fait l'initialisation pour la fusion basale.
48! Elle est appelée par inputfile-vec-0.5.f90
49
50!    ecriture dans le fichier parametres
51     write(42,*)'fusion basale sous les ice shelves : bmelt-constant_mod'
52     write(42,*)'-------------------------------------------------------'
53
54! lecture du fichier contenant les distances au talu continental (m)
55!      open(88,file=TRIM(DIRNAMEINP)//'distance_talu-40km.xy')
56!      do j=1,ny
57!         do i=1,nx
58!            read(88,'(i3,1x,i3,1x,f10.2)') k,k,dist_talu(i,j)
59!         enddo
60!      enddo
61!      close(88)
62
63! lecture du fichier contenant les types de shelves
64!  Ronne-Flichner ->1, Ross -> 2 , Amery -> 3,
65!  PIG-> 4, les petits shelves au dessus de PIG -> 5
66
67!      open(88,file=TRIM(DIRNAMEINP)//'numer-ice-shelves-av05')
68!      typeshelf(:,:)=100
69!      do k=1,nx*ny
70!        read(88,*,end=36) i,j,typeshelf(i,j)
71!      end do
72!36      close(88)
73
74
75! region(:)=0
76! regname(1)='Ronne-Fichner'
77! regname(2)='Ross'
78! regname(3)='Amery'
79! regname(4)='Pig'
80! regname(5)='Petits ice shelves peninsule'
81! regname(6)='autres ice shelves'
82! regname(7)='Au dela du talus continental'
83 
84bms_init:    do j=1,ny
85         do i=1,nx
86
87            if ((sealevel_2d(i,j)-bsoc(i,j)).lt.600) then
88                    bmshelf(i,j)=0.2 ! 0.45!   0.65 
89                    bmgrz(i,j)=0.2 ! 0.45 !  0.65
90!                   if (i.lt.141.and. j.lt.121) then
91!                   bmshelf(i,j)=0.55!   0.65 
92!                   bmgrz(i,j)=0.55 !  0.65
93!                   endif       
94            else   
95                   
96                    bmshelf(i,j)= 2.45!   0.65 
97                    bmgrz(i,j)= 2.45 !  0.65
98            endif 
99
100         enddo
101      enddo bms_init
102
103
104 
105      bsupshelf=.2
106      write(32,*)
107
108
109      return
110      end subroutine init_bmelt
111
112!________________________________________________________________________________
113
114!> SUBROUTINE: bmeltshelf
115!! Cette routine calcule la fusion basale proprement dite
116!<
117subroutine bmeltshelf
118
119
120! cette routine calcule la fusion basale proprement dite
121
122integer :: ngr           ! nombre de voisins flottants
123
124
125    do j=2,ny-1
126      do i=2,nx-1
127 
128
129shelf:    if (flot(i,j)) then    ! partie flottante
130
131            if ((sealevel_2d(i,j)-bsoc(i,j)).lt.600) then
132                    if ((j.lt.75).and.(i.lt.145) ) then  !Atlantique
133                    bmelt(i,j)=(.6+.4*coefbmshelf)*bmshelf(i,j)
134                    else
135                    bmelt(i,j)=coefbmshelf*bmshelf(i,j)
136                    endif
137            else
138            bmelt(i,j)=bmshelf(i,j)
139            endif
140
141            if (fbm(i,j))  bmelt(i,j)=coefbmshelf*bmgrz(i,j)
142
143
144!                  if (time.gt.5000.) then
145!                     bmelt(i,j)=bmelt(i,j)+bsupshelf
146!                  endif   
147
148! ATTENTION LE BLOC SUIVANT SERT A FAIRE DES ICE SHELVES STATIONNAIRES
149! igrdline est défini dans itnitial1
150
151  if (igrdline.eq.1) then
152      corrbmelt(i,j)=corrbmelt(i,j)+hdot(i,j)*0.8
153      bmelt(i,j)=bmelt(i,j)+corrbmelt(i,j)
154  endif
155
156
157        else                   ! point posé, on compte le nombre de voisins flottants
158           ngr=0
159           if (flot(i+1,j)) ngr=ngr+1
160           if (flot(i-1,j)) ngr=ngr+1
161           if (flot(i,j+1)) ngr=ngr+1
162           if (flot(i,j-1)) ngr=ngr+1
163
164!   la fusion des points limites est une combinaison entre valeur posée et valeur flottante
165!   en fonction du nombre de points flottants
166
167           bmelt(i,j)= ngr/4.*bmgrz(i,j)*coefbmshelf+(1.-ngr/4.)*bmelt(i,j)
168
169           
170
171        endif shelf
172
173      end do
174    end do
175
176
177    return
178    end subroutine  bmeltshelf
179
180
181
182END MODULE  BMELT_NOR_DEPTH
Note: See TracBrowser for help on using the repository browser.