Changeset 59
- Timestamp:
- 04/29/16 15:25:33 (8 years ago)
- Location:
- trunk/SOURCES
- Files:
-
- 12 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/SOURCES/3D-physique-gen_mod.f90
r37 r59 253 253 real, dimension(nx,ny) :: coef_drag !< coefficient de la loi de friction non lineaire : depend de la valeur de alpha_drag 254 254 !< si alpha_drag = 1, coef_drag = drag_centre 255 real, dimension(nx,ny) :: betamax_2d !< (Pa) frottement maxi sous les streams 255 256 ! 256 257 real,dimension(nx,ny) :: BM !< mass balance 'o' -
trunk/SOURCES/Draggings_modules/beta_iter_vitbil_mod.f90
r8 r59 99 99 betamy_file = trim(dirnameinp)//trim(betamy_file) 100 100 betamax = beta_limgz 101 101 betamax_2d(:,:) = betamax 102 102 103 103 ! call lect_input(1,'beta_c',1,drag_centre,beta_c_file,'') -
trunk/SOURCES/Draggings_modules/dragging_prescr_beta_buoyency_mod.f90
r4 r59 100 100 betamy_file = trim(dirnameinp)//trim(betamy_file) 101 101 betamax = beta_limgz 102 betamax_2d(:,:) = betamax 102 103 103 104 ! read the beta value on centered and staggered grids -
trunk/SOURCES/Draggings_modules/dragging_prescr_beta_mod.f90
r4 r59 82 82 betamy_file = trim(dirnameinp)//trim(betamy_file) 83 83 betamax = beta_limgz 84 betamax_2d(:,:) = betamax 84 85 85 86 ! read the beta value on centered and staggered grids -
trunk/SOURCES/Draggings_modules/dragging_prescr_beta_nolin_mod.f90
r4 r59 169 169 betamy_file = trim(dirnameinp)//trim(betamy_file) 170 170 betamax = beta_limgz 171 betamax2d(:,:) = betamax 171 172 172 173 -
trunk/SOURCES/GrIce2sea_files/climat_GrIce2sea_years_perturb_mod.f90
r55 r59 126 126 bm(:,:) = tab(:,:) * coef_smb_unit 127 127 128 ! where ((H(:,:).lt.1.).and.(Bsoc(:,:).gt.0.)) 129 ! bm(:,:) = bm(:,:) - 5. ! pour faire un masque a l'exterieur du Groenland actuel 130 ! end where 131 128 !where ((H(:,:).lt.1.).and.(Bsoc(:,:).gt.0.)) 129 ! bm(:,:) = bm(:,:) - 5. ! pour faire un masque a l'exterieur du Groenland actuel 130 !end where 131 where ((H(:,:).lt.1.).and.(Bsoc(:,:).gt.0.).and.(bm(:,:).gt.0.)) 132 bm(:,:) = -0.01 133 end where 132 134 !cdc test debug Hemin15 et Greeneem15 133 135 ! where (bm(:,:).lt.-1000) bm(:,:)=0. 134 where (bm(:,:).eq.0) bm(:,:)=- 10. !afq136 where (bm(:,:).eq.0) bm(:,:)=-5. !afq 135 137 136 138 acc(:,:) = 0. … … 413 415 ! aurel marion dufresne: we might want to decrease the SMB during glacials..? 414 416 if (pertsmb.eq.1) then 415 !bm(:,:) = bm_0(:,:) * exp( rapsmb *(Tann(:,:)-Ta0(:,:))) 416 ! afq, to match present day smb, I don't want to take S-elev feedb. into account 417 bm(:,:) = bm_0(:,:) * exp( rapsmb * Tafor ) 417 bm(:,:) = bm_0(:,:) * exp( rapsmb *(Tann(:,:)-Ta0(:,:))) 418 if (Tafor.lt.0.) then 419 where(bm(:,:).lt.0.) bm(:,:)=min(bm(:,:)-Tafor*0.05,1.) !10 degrees less give 0.5 meter more ? 420 end if 418 421 end if 419 422 -
trunk/SOURCES/Makefile.grisli-gfortran.inc
r57 r59 73 73 dragging_hwatermax_0.2_mod.o dragging_calc_beta_mod.o \ 74 74 dragging_hwat-contigu_mod.o dragging_hwat_contmaj_mod.o \ 75 dragging_hwat_sedim_mod.o dragging_neff_ contmaj_mod.o \75 dragging_hwat_sedim_mod.o dragging_neff_slope_mod.o \ 76 76 calving_frange.o no_calving.o no_lakes.o \ 77 77 out_profile_mod.o printtable_mod.o mix-SIA-L1_mod.o \ … … 714 714 $(FT) dragging_hwat_sedim_mod.f90 715 715 716 dragging_neff_ contmaj_mod.o : dragging_neff_contmaj_mod.f90717 $(FT) dragging_neff_ contmaj_mod.f90716 dragging_neff_slope_mod.o : dragging_neff_slope_mod.f90 717 $(FT) dragging_neff_slope_mod.f90 718 718 719 719 dragging_calc_beta_mod.o : Antarctique_general_files/dragging_calc_beta_mod.f90 -
trunk/SOURCES/Makefile.grisli.inc
r57 r59 73 73 dragging_hwatermax_0.2_mod.o dragging_calc_beta_mod.o \ 74 74 dragging_hwat-contigu_mod.o dragging_hwat_contmaj_mod.o \ 75 dragging_hwat_sedim_mod.o dragging_neff_ contmaj_mod.o \75 dragging_hwat_sedim_mod.o dragging_neff_slope_mod.o \ 76 76 calving_frange.o no_calving.o no_lakes.o \ 77 77 out_profile_mod.o printtable_mod.o mix-SIA-L1_mod.o \ … … 718 718 $(FT) dragging_hwat_sedim_mod.f90 719 719 720 dragging_neff_ contmaj_mod.o : dragging_neff_contmaj_mod.f90721 $(FT) dragging_neff_ contmaj_mod.f90720 dragging_neff_slope_mod.o : dragging_neff_slope_mod.f90 721 $(FT) dragging_neff_slope_mod.f90 722 722 723 723 dragging_calc_beta_mod.o : Antarctique_general_files/dragging_calc_beta_mod.f90 … … 1719 1719 $(mod_communs) \ 1720 1720 $(mod_clim_tof) \ 1721 $(mod_ no_tracers) \1721 $(mod_tracers) \ 1722 1722 $(mod_ell) $(Liste_greeneem15) \ 1723 1723 $(diagnoshelf) \ -
trunk/SOURCES/New-remplimat/remplimat-shelves-tabTu.f90
r4 r59 412 412 413 413 where (flgzmx(:,:)) 414 frotmx(:,:)=min(abs(betamx(:,:)),betamax )414 frotmx(:,:)=min(abs(betamx(:,:)),betamax_2d(:,:)) 415 415 elsewhere 416 416 frotmx(:,:)=0 … … 418 418 419 419 where (flgzmy(:,:)) 420 frotmy(:,:)=min(abs(betamy(:,:)),betamax )420 frotmy(:,:)=min(abs(betamy(:,:)),betamax_2d(:,:)) 421 421 elsewhere 422 422 frotmy(:,:)=0 -
trunk/SOURCES/branche-Cat-spinup-dec2011/dragging_prescr_beta_mod.f90
r4 r59 99 99 betamy_file = trim(dirnameinp)//trim(betamy_file) 100 100 betamax = beta_limgz 101 betamax_2d(:,:) = betamax 101 102 102 103 ! read the beta value on centered and staggered grids -
trunk/SOURCES/diffusiv-polyn-0.6.f90
r4 r59 68 68 call slope_surf 69 69 70 call sliding ! au sens vitesse de glissement 70 !call sliding ! au sens vitesse de glissement, afq, commented 21 apr 16 71 71 72 72 ! le glissement est maintenant dans un module a part choisi dans le module choix -
trunk/SOURCES/dragging_neff_slope_mod.f90
r58 r59 16 16 !< 17 17 18 module dragging_neff_ contmaj18 module dragging_neff_slope 19 19 20 20 ! Defini les zones de stream avec : … … 25 25 use module3d_phy 26 26 use param_phy_mod 27 use interface_input 28 use io_netcdf_grisli 27 29 28 30 implicit none … … 31 33 logical,dimension(nx,ny) :: fleuve 32 34 logical,dimension(nx,ny) :: cote 33 35 logical,dimension(nx,ny) :: slowssa ! not actual stream, but ssa used as Ub 36 logical,dimension(nx,ny) :: slowssamx 37 logical,dimension(nx,ny) :: slowssamy 38 39 real,dimension(nx,ny) :: hires_slope ! slope comupted on a high resolution topography 40 character(len=100) :: slope_fich ! fichier grille 41 character(len=100) :: file_ncdf !< fichier netcdf issue des fichiers .dat 34 42 35 43 real :: valmax … … 66 74 implicit none 67 75 68 namelist/drag_neff_ cont/hwatstream,cf,betamax,betamin,toblim,seuil_neff,coef_gz,coef_ile76 namelist/drag_neff_slope/hwatstream,cf,betamax,betamin,toblim,tostick,seuil_neff,coef_gz,coef_ile,slope_fich 69 77 70 78 if (itracebug.eq.1) call tracebug(' dragging avec hwatermax') … … 78 86 79 87 rewind(num_param) ! pour revenir au debut du fichier param_list.dat 80 read(num_param,drag_neff_ cont)88 read(num_param,drag_neff_slope) 81 89 82 90 write(num_rep_42,428)'!___________________________________________________________' … … 88 96 write(num_rep_42,*) 'betamin = ', betamin 89 97 write(num_rep_42,*) 'toblim = ', toblim 98 write(num_rep_42,*) 'tostick = ', tostick 90 99 write(num_rep_42,*) 'seuil_neff = ', seuil_neff 91 100 write(num_rep_42,*) 'coef_gz = ', coef_gz 92 101 write(num_rep_42,*) 'coef_ile = ', coef_ile 102 write(num_rep_42,'(A,A)') 'slope_fich = ', slope_fich 93 103 write(num_rep_42,*)'/' 94 104 write(num_rep_42,428) '! hwatstream (m) : critere de passage en stream en partant de la cote' … … 98 108 write(num_rep_42,428) '! betamin : (Pa) frottement mini sous les streams ' 99 109 write(num_rep_42,428) '! toblim : (Pa) pour les iles ' 110 write(num_rep_42,428) '! tostick : (Pa) pour les points non flgzmx ' 100 111 write(num_rep_42,428) '! seuil_neff (Pa) seuil sur la pression effective pour avoir glissement' 101 112 write(num_rep_42,428) '! coef_gz : coef frottement zones stream std' … … 103 114 write(num_rep_42,*) 104 115 105 tostick=1.e5 ! valeurs pour les points non flgzmx116 !tostick=1.e5 ! valeurs pour les points non flgzmx 106 117 tob_ile=betamax/2. 107 118 moteurmax=toblim 108 119 120 ! betamax_2d depends on sub-grid slopes. 121 slope_fich=trim(dirnameinp)//trim(slope_fich) 122 call lect_input(1,'slope',1,hires_slope(:,:),slope_fich,file_ncdf) 123 124 write (*,*) slope_fich 125 write (*,*) hires_slope(:,:) 126 write (*,*) "fin test" 127 ! from slopes, we create an index between 0 & 1 128 ! 1 is very mountainous, 0 is flat 129 hires_slope(:,:)=(max(min(hires_slope(:,:),2000.),500.)-500.)/1500. 130 ! now we compute the actual betamax used by the remplimat routines 131 ! /!\ the slope is used to modify the beta where we have a temperate base, 132 ! but NO ice stream... -> Slow SSA zone (SSA used to compute Ub) 133 betamax_2d(:,:)=max ( tostick * (1. - (1 - betamax / tostick ) * hires_slope(:,:)) , betamax ) 134 do j=1,ny 135 do i=1,nx 136 write(18745,*) betamax_2d (i,j) 137 enddo 138 enddo 139 109 140 !------------------------------------------------------------------- 110 141 ! masque stream 111 112 142 mstream_mx(:,:)=1 113 143 mstream_my(:,:)=1 … … 185 215 neff(nx,:)=1.e5 186 216 187 188 fleuve_maj: do j=2,ny-1189 ifleuve: do i=2,nx-1190 191 cote_detect : if (cote(i,j)) then192 idep=i193 jdep=j194 195 if (socle_cry(i,j).lt.0.) then ! dans une vallee196 fleuve(i,j)=.true.197 else198 cote(i,j)=.false.199 cycle ifleuve200 endif201 202 suit : do l=1,lmax ! debut de la boucle de suivi, lmax longueur maxi des fleuves203 i_moins1=max(idep-1,2)204 j_moins1=max(jdep-1,1)205 i_plus1=min(idep+1,nx)206 j_plus1=min(jdep+1,ny)207 208 ! recherche du max en suivant le socle le plus profond209 ! * en excluant les points flottants210 ! * et ceux qui sont deja tagges fleuves211 212 valmax=1000.213 214 do jloc=j_moins1,j_plus1215 do iloc=i_moins1,i_plus1216 217 if ((B(iloc,jloc).lt.valmax) &218 .and.(.not.flot(iloc,jloc)) &219 .and.(.not.fleuve(iloc,jloc)).and.(socle_cry(iloc,jloc).lt.cry_lim)) then220 imax=iloc221 jmax=jloc222 valmax=B(iloc,jloc)223 endif224 end do225 end do226 227 if ((hwater(imax,jmax).gt.hwatstream).and.(socle_cry(i,j).lt.cry_lim)) then228 fleuve(imax,jmax)=.true.229 idep=imax230 jdep=jmax231 else232 fleuve(imax,jmax)=.false.233 exit suit234 end if235 236 end do suit237 238 end if cote_detect239 240 end do ifleuve241 end do fleuve_maj217 !!$ 218 !!$fleuve_maj: do j=2,ny-1 219 !!$ifleuve: do i=2,nx-1 220 !!$ 221 !!$cote_detect : if (cote(i,j)) then 222 !!$ idep=i 223 !!$ jdep=j 224 !!$ 225 !!$ if (socle_cry(i,j).lt.0.) then ! dans une vallee 226 !!$ fleuve(i,j)=.true. 227 !!$ else 228 !!$ cote(i,j)=.false. 229 !!$ cycle ifleuve 230 !!$ endif 231 !!$ 232 !!$suit : do l=1,lmax ! debut de la boucle de suivi, lmax longueur maxi des fleuves 233 !!$ i_moins1=max(idep-1,2) 234 !!$ j_moins1=max(jdep-1,1) 235 !!$ i_plus1=min(idep+1,nx) 236 !!$ j_plus1=min(jdep+1,ny) 237 !!$ 238 !!$! recherche du max en suivant le socle le plus profond 239 !!$! * en excluant les points flottants 240 !!$! * et ceux qui sont deja tagges fleuves 241 !!$ 242 !!$ valmax=1000. 243 !!$ 244 !!$ do jloc=j_moins1,j_plus1 245 !!$ do iloc=i_moins1,i_plus1 246 !!$ 247 !!$ if ((B(iloc,jloc).lt.valmax) & 248 !!$ .and.(.not.flot(iloc,jloc)) & 249 !!$ .and.(.not.fleuve(iloc,jloc)).and.(socle_cry(iloc,jloc).lt.cry_lim)) then 250 !!$ imax=iloc 251 !!$ jmax=jloc 252 !!$ valmax=B(iloc,jloc) 253 !!$ endif 254 !!$ end do 255 !!$ end do 256 !!$ 257 !!$ if ((hwater(imax,jmax).gt.hwatstream).and.(socle_cry(i,j).lt.cry_lim)) then 258 !!$ fleuve(imax,jmax)=.true. 259 !!$ idep=imax 260 !!$ jdep=jmax 261 !!$ else 262 !!$ fleuve(imax,jmax)=.false. 263 !!$ exit suit 264 !!$ end if 265 !!$ 266 !!$ end do suit 267 !!$ 268 !!$ end if cote_detect 269 !!$ 270 !!$end do ifleuve 271 !!$end do fleuve_maj 242 272 243 273 ! aurel, we add the neff threshold: … … 255 285 end do 256 286 257 ! pas de fleuve dans les endroits trop en pente 258 259 !fleuvemx(:,:)=fleuvemx(:,:).and.(abs(rog*Hmx(:,:)*sdx(:,:)).lt.toblim) 260 !fleuvemy(:,:)=fleuvemy(:,:).and.(abs(rog*Hmy(:,:)*sdy(:,:)).lt.toblim) 287 ! we look for the warm based points that will not be treated as stream (ub from SSA): 288 slowssa(:,:)=.false. 289 slowssamx(:,:)=.false. 290 slowssamy(:,:)=.false. 291 do j=1,ny 292 do i=1,nx 293 !if ((not(flot(i,j))).and.(hwater(i,j).gt.0.1)) slowssa(i,j)=.true. 294 if ((not(flot(i,j))).and.(ibase(i,j).ne.1).and.(H(i,j).gt.1.)) slowssa(i,j)=.true. 295 end do 296 end do 297 do j=1,ny-1 298 do i=1,nx-1 299 if (slowssa(i,j)) then 300 slowssamx(i,j)=.true. 301 slowssamx(i+1,j)=.true. 302 slowssamy(i,j)=.true. 303 slowssamy(i,j+1)=.true. 304 end if 305 end do 306 end do 261 307 262 308 do j=1,ny 263 309 do i=1,nx 264 if ((.not.ilemx(i,j)).and.(fleuvemx(i,j))) gzmx(i,j)=.true. 265 310 311 ! the actual streams and the warm based points are gzmx now: 312 if ( ((.not.ilemx(i,j)).and.(fleuvemx(i,j))) .or. ((.not.ilemx(i,j)).and.(slowssamx(i,j))) ) gzmx(i,j)=.true. 313 314 266 315 ! calcul du frottement basal (ce bloc etait avant dans neffect) 267 316 … … 269 318 betamx(i,j)=cf*neffmx(i,j) 270 319 betamx(i,j)=min(betamx(i,j),betamax) 271 else if ((gzmx(i,j)).and.(.not.cotemx(i,j))) then ! stream 272 betamx(i,j)=cf*neffmx(i,j)*coef_gz 273 betamx(i,j)=min(betamx(i,j),betamax) 274 betamx(i,j)=max(betamx(i,j),betamin) 275 276 !aurel, function of betamax and not 1500 as before: 277 if (cf*neffmx(i,j).gt.betamax*2.) then 278 gzmx(i,j)=.false. 279 betamx(i,j)=tostick 320 321 else if ((gzmx(i,j)).and.(.not.cotemx(i,j))) then ! tous les points SSA 322 323 if (fleuvemx(i,j)) then ! the actual streams 324 betamx(i,j)=cf*neffmx(i,j)*coef_gz 325 betamx(i,j)=min(betamx(i,j),betamax) 326 betamx(i,j)=max(betamx(i,j),betamin) 327 328 if (cf*neffmx(i,j).gt.betamax*2.) then ! a stream that's becoming grounded... 329 if (slowssamx(i,j)) then 330 331 else 332 gzmx(i,j)=.false. 333 betamx(i,j)=betamax_2d(i,j) !tostick 334 endif 335 endif 336 337 else ! not an actual stream, SSA is used to compute Ub 338 betamx(i,j)=betamax_2d(i,j) 280 339 endif 281 340 282 341 else if (ilemx(i,j)) then 283 342 betamx(i,j)=cf*neffmx(i,j)*coef_ile … … 286 345 betamx(i,j)=0. 287 346 else ! grounded, SIA 288 betamx(i,j)= tostick ! frottement glace posee (1 bar)347 betamx(i,j)=betamax_2d(i,j) !tostick ! frottement glace posee (1 bar) 289 348 endif 290 349 … … 292 351 end do 293 352 294 295 do j=1,ny ! le noeud 1 n'est pas attribue 296 do i=1,nx 297 298 if ( (.not.ilemy(i,j)).and.(fleuvemy(i,j))) gzmy(i,j)=.true.299 300 301 353 do j=1,ny 354 do i=1,nx 355 356 ! the actual streams and the warm based points are gzmx now: 357 if ( ((.not.ilemy(i,j)).and.(fleuvemy(i,j))) .or. ((.not.ilemy(i,j)).and.(slowssamy(i,j))) ) gzmy(i,j)=.true. 358 359 360 ! calcul du frottement basal (ce bloc etait avant dans neffect) 302 361 303 362 if (cotemy(i,j)) then ! point cotier 304 363 betamy(i,j)=cf*neffmy(i,j) 305 364 betamy(i,j)=min(betamy(i,j),betamax) 306 else if ((gzmy(i,j)).and.(.not.cotemy(i,j))) then ! stream 307 betamy(i,j)=cf*neffmy(i,j)*coef_gz 308 betamy(i,j)=min(betamy(i,j),betamax) 309 betamy(i,j)=max(betamy(i,j),betamin) 310 311 !aurel, function of betamax and not 1500 as before: 312 if (cf*neffmy(i,j).gt.betamax*2.) then 313 gzmy(i,j)=.false. 314 betamy(i,j)=tostick 365 366 else if ((gzmy(i,j)).and.(.not.cotemy(i,j))) then ! tous les points SSA 367 368 if (fleuvemy(i,j)) then ! the actual streams 369 betamy(i,j)=cf*neffmy(i,j)*coef_gz 370 betamy(i,j)=min(betamy(i,j),betamax) 371 betamy(i,j)=max(betamy(i,j),betamin) 372 373 if (cf*neffmy(i,j).gt.betamax*2.) then ! a stream that's becoming grounded... 374 if (slowssamy(i,j)) then 375 376 else 377 gzmy(i,j)=.false. 378 betamy(i,j)=betamax_2d(i,j) !tostick 379 endif 380 endif 381 382 else ! not an actual stream, SSA is used to compute Ub 383 betamy(i,j)=betamax_2d(i,j) 315 384 endif 316 385 317 386 else if (ilemy(i,j)) then 318 betamy(i,j)=cf*neffmy(i,j)*coef_ile 319 betamy(i,j)=min(betamy(i,j),tob_ile) 387 betamy(i,j)=cf*neffmy(i,j)*coef_ile 388 betamy(i,j)=min(betamy(i,j),tob_ile) 320 389 else if (flotmy(i,j)) then ! flottant ou ile 321 390 betamy(i,j)=0. 322 else ! grounded, SIA323 betamy(i,j)= tostick ! frottement glace posee391 else ! grounded, SIA 392 betamy(i,j)=betamax_2d(i,j) !tostick ! frottement glace posee (1 bar) 324 393 endif 325 394 395 end do 396 end do 397 398 399 do j=2,ny-1 400 do i=2,nx-1 401 beta_centre(i,j) = ((betamx(i,j)+betamx(i+1,j)) & 402 + (betamy(i,j)+betamy(i,j+1)))*0.25 326 403 end do 327 404 end do … … 371 448 end subroutine dragging 372 449 373 end module dragging_neff_ contmaj374 450 end module dragging_neff_slope 451 -
trunk/SOURCES/initial-0.3.f90
r34 r59 121 121 call init_diagno ! initialisation de la resolution equation elliptique vitesses 122 122 123 call init_sliding ! initialisation du glissement123 !call init_sliding ! initialisation du glissement, afq, commented 21 apr 16 124 124 125 125 call init_spinup ! initialisation du spinup
Note: See TracChangeset
for help on using the changeset viewer.