Changeset 213
- Timestamp:
- 10/02/18 18:18:58 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SOURCES/bmelt-seuil-profondeur_mod.f90
r207 r213 22 22 23 23 use module3d_phy 24 use netcdf 25 use io_netcdf_grisli 24 26 25 27 26 implicit none … … 34 33 real :: depth_talus !< profondeur de transition 35 34 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 49 36 50 37 contains … … 61 48 ! Cette routine fait l'initialisation pour la fusion basale. 62 49 ! 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 72 52 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_dist077 53 78 54 if (itracebug.eq.1) call tracebug('entree dans init_bmelt de bmelt_seuil_prof') … … 111 87 112 88 debug_3D(:,:,34)=bmshelf(:,:) 113 114 ! Si on fait l'inversion on doit connaitre les regions pour calculer le taux de fonte par region115 if (ibmelt_inv.eq.1) then116 rewind(num_param) ! pour revenir au debut du fichier param_list.dat117 read(num_param,bmelt_ant_reg_initmip)118 ! formats pour les ecritures dans 42119 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_talus125 write(num_rep_42,*) 'bmgrz_talus = ', bmgrz_talus126 write(num_rep_42,*) 'bmelt_coef = ', bmelt_coef127 write(num_rep_42,*) 'file_numer_shelves = ', file_number_shelves128 write(num_rep_42,*) 'flag_dist = ', flag_dist129 write(num_rep_42,*) 'file_dist_talus = ', file_dist_talus130 write(num_rep_42,*) 'bmelt_dist0 = ', bmelt_dist0131 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 shelves142 ! 18 regions sur la base des bassins fournis par le projet ISMIP6-initmip antarctica143 typeshelf(:,:)=100144 file_number_shelves=TRIM(DIRNAMEINP)//trim(file_number_shelves)145 call Read_Ncdf_var('z',file_number_shelves,tab)146 typeshelf(:,:) = tab(:,:)147 endif148 bmelt_regions(:)=0.149 bmgrz_regions(:)=0.150 i_bmelt(:)=0151 i_bmgrz(:)=0152 153 89 return 154 90 end subroutine init_bmelt … … 169 105 integer :: ngr ! nombre de voisins flottants 170 106 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-shelf173 integer,dimension(nb_reg) :: nbr_pts_shelf, nbr_pts_grz ! nombre de points shelf et grz par zone174 real,dimension(nb_reg) :: bmelt_regions_time, bmgrz_regions_time ! Pour le caclul du bemlt/bmgrz par zone175 integer :: nregion ! pour calcul du bmelt sur toutes les regions176 107 177 108 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 184 110 where (Bsoc0(:,:).lt.depth_talus) 185 111 bmshelf(:,:)=bmshelf_abysses … … 206 132 207 133 if (fbm(i,j)) then 208 bmelt(i,j)=coef_talus*bmgrz(i,j)134 bmelt(i,j)=coef_talus*bmgrz(i,j) 209 135 endif 136 137 210 138 211 139 ! ATTENTION le bloc suivant sert a determiner la fusion basale d'equilibre … … 216 144 ! bmelt(i,j)=corrbmelt(i,j) 217 145 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) 228 147 endif 148 229 149 230 150 else ! point posé, on compte le nombre de voisins flottants … … 237 157 end if 238 158 159 239 160 ! la fusion des points limites est une combinaison entre valeur posée et valeur flottante 240 161 ! en fonction du nombre de points flottants … … 243 164 244 165 if ((igrdline.eq.1).and.(ibmelt_inv.eq.1)) then 245 corrbmelt(i,j)=corrbmelt(i,j)+hdot(i,j) *0.85166 corrbmelt(i,j)=corrbmelt(i,j)+hdot(i,j) !*0.85 246 167 bmelt(i,j)=bmelt(i,j)+corrbmelt(i,j) 247 168 endif … … 250 171 end do 251 172 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) 173 if ((igrdline.eq.1).and.(ibmelt_inv.eq.0)) then 174 where (i_Hp(:,:).eq.1) 296 175 bmelt(:,:)=0. ! hdot donne alors le -bmelt 297 298 299 176 endwhere 177 endif 178 300 179 return 301 180 end subroutine bmeltshelf
Note: See TracChangeset
for help on using the changeset viewer.