source: trunk/SOURCES/Hudson_files/bmelt_hudson_mod.f90 @ 4

Last change on this file since 4 was 4, checked in by dumas, 10 years ago

initial import GRISLI trunk

File size: 4.6 KB
Line 
1!> \file bmelt_hudson_mod.f90
2!! Module qui calcule la fusion basale (grounded ou ice shelves).
3!<
4
5!> \namespace bmelt_hudson
6!! Module qui calcule la fusion basale (grounded ou ice shelves)
7!! \author CatRitz
8!! \date juillet 2005
9!! @note pour les ice shelves Antarctique, tient compte des différentes régions
10!! A choisir dans le module_choix
11!! @note Used module
12!! @note   - use module3D_phy
13!! @note   - USE output_hudson
14!<
15
16MODULE  bmelt_hudson    ! 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!jalv pour acceder a deltavolshelf pour la fusion basale
24  USE output_hudson
25  implicit none
26
27
28  REAL,dimension(nx,ny) ::  bmgrz       !< fusion basale a la grounding zone
29  real,dimension(nx,ny) ::  bmshelf     !< fusion basale sous shelf
30  real :: bsupshelf  !< fusion basale en plus tous les x ans (oscillation de la fusion basale dans le temps)
31
32CONTAINS
33
34!> SUBROUTINE: init_bmelt
35!! Cette routine fait l'initialisation pour la fusion basale.
36!<
37
38  subroutine init_bmelt
39! Cette routine fait l'initialisation pour la fusion basale.
40
41!    ecriture dans le fichier parametres
42    write(42,*)'fusion basale sous les ice shelves : bmelt-hudson'
43    write(42,*)'-------------------------------------------------------'
44 
45    bms_init: do j=1,ny
46       do i=1,nx
47!          if ((sealevel-BSOC(i,j)).lt.600) then
48!             bmshelf(i,j)=0.2 ! 0.45!   0.65 
49!             bmgrz(i,j)=0.2 ! 0.45 !  0.65
50!          else     
51!             bmshelf(i,j)= 10. 
52!             bmgrz(i,j)= 10.
53
54          bmshelf(i,j)=(sealevel-BSOC(i,j))/200  ! jalv: eq lineaire en fonction de la profondeur de la mer
55          bmgrz(i,j)=bmshelf(i,j)
56!          endif
57       enddo
58    enddo bms_init
59
60    bsupshelf=1.
61
62print*, 'sealevel', sealevel
63
64
65    return
66  end subroutine init_bmelt
67
68!> SUBROUTINE: bmeltshelf
69!! Cette routine calcule la fusion basale proprement dite
70!<
71  subroutine bmeltshelf
72
73! cette routine calcule la fusion basale proprement dite
74
75    integer :: ngr           ! nombre de voisins flottants
76
77    call shortoutput 
78    do j=2,ny-1
79       do i=2,nx-1
80 
81          shelf: if (flot(i,j)) then    ! partie flottante
82   
83             bmelt(i,j)=bmshelf(i,j)
84
85             if (fbm(i,j))  bmelt(i,j)=bmgrz(i,j)
86
87
88!jalv: parametrisation de la fusion basale en fonction de
89!      la derive du volume de la partie flottante par rapport
90!      au temps. La variable est deltavolshelfdt, calculé dans
91!      output_hudson...
92
93
94!jalv: parametrisation de la fusion basale en fonction de la dervie du volume flottant par rapport au temps:
95
96!             IF (time.GT.1000.) THEN
97             IF (time.GT.30000.) THEN 
98!                if (deltaVOLshelfdt.gt.0.) then
99                if (((memdeltaVOLshelf(1)+memdeltaVOLshelf(500)+memdeltaVOLshelf(1000)+memdeltaVOLshelf(1500))/4).gt.0.) then
100!                   bmshelf(i,j)=bmshelf(i,j)+20.
101!                   bmgrz(i,j)=bmgrz(i,j)+20.
102!                   bmelt(i,j)=bmshelf(i,j)
103                   bsupshelf=50.
104                end if
105               
106!                if (deltaVOLshelfdt.le.0.) then
107                if (((memdeltaVOLshelf(1)+memdeltaVOLshelf(500)+memdeltaVOLshelf(1000)+memdeltaVOLshelf(1500))/4).le.0.) then
108!                   bmshelf(i,j)=bmshelf(i,j)-20.
109!                   bmgrz(i,j)=bmgrz(i,j)-20.
110!                   bmelt(i,j)=bmshelf(i,j)   
111                   bsupshelf=-14.
112                end if
113       
114!                print*,'bmelt(134,76)',  bmelt(134,76)     
115             ENDIF
116
117
118! a modifier si on veut faire varier la fusion basale dans le temps :
119             if (time.gt.30000.) then
120                bmelt(i,j)=bmelt(i,j)+bsupshelf
121             endif
122
123! ATTENTION LE BLOC SUIVANT SERT A FAIRE DES ICE SHELVES STATIONNAIRES
124! igrdline est défini dans itnitial1
125
126             if (igrdline.eq.1) then
127                corrbmelt(i,j)=corrbmelt(i,j)+hdot(i,j)*0.8
128                bmelt(i,j)=bmelt(i,j)+corrbmelt(i,j)
129             endif
130
131
132          else         ! point posé, on compte le nombre de voisins flottants
133             ngr=0
134             if (flot(i+1,j)) ngr=ngr+1
135             if (flot(i-1,j)) ngr=ngr+1
136             if (flot(i,j+1)) ngr=ngr+1
137             if (flot(i,j-1)) ngr=ngr+1
138
139!   la fusion des points limites est une combinaison entre valeur posée et valeur flottante
140!   en fonction du nombre de points flottants
141             bmelt(i,j)= ngr/4.*bmgrz(i,j)*coefbmshelf+(1.-ngr/4.)*bmelt(i,j)
142
143          endif shelf
144       end do
145    end do
146
147    return
148  end subroutine  bmeltshelf
149
150
151
152END MODULE  bmelt_hudson
Note: See TracBrowser for help on using the repository browser.