Changeset 404 for branches/GRISLIv3
- Timestamp:
- 03/31/23 10:50:31 (16 months ago)
- Location:
- branches/GRISLIv3
- Files:
-
- 1 added
- 9 edited
- 3 moved
Legend:
- Unmodified
- Added
- Removed
-
branches/GRISLIv3/SOURCES/Draggings_modules/beta_iter_vitbil_mod.f90
r257 r404 13 13 module beta_iter_vitbil_mod 14 14 15 use module3d_phy 16 use interface_input 15 use geography, only: nx,ny 17 16 use netcdf 18 use io_netcdf_grisli 17 19 18 20 19 implicit none … … 65 64 subroutine init_beta_iter_vitbil 66 65 66 use io_netcdf_grisli,only: read_ncdf_var 67 use geography, only: dirnameinp 68 use module3D_phy, only: num_param,num_rep_42,time,tbegin,debug_3d 69 67 70 implicit none 68 71 … … 113 116 subroutine beta_min_value(val_betamin) 114 117 115 real :: val_betamin ! valeur mini que peut avoir beta (en Pa an m-1) 118 use module3d_phy, only: drag_mx,drag_my,flot 119 120 implicit none 121 122 real,intent(in) :: val_betamin ! valeur mini que peut avoir beta (en Pa an m-1) 116 123 117 124 drag_centre(:,:) = max(drag_centre(:,:),val_betamin) … … 131 138 132 139 implicit none 133 integer :: nxx,nyy ! dimension des tableaux 140 141 integer, intent(in) :: nxx,nyy ! dimension des tableaux 134 142 real, dimension(nxx,nyy), intent(out) :: R_mx ! valeur du beta sur maille mx 135 143 real, dimension(nxx,nyy), intent(out) :: R_my ! valeur du beta sur maille my 136 144 real, dimension(nxx,nyy), intent(in) :: R_centre ! valeur du beta sur maille centree 145 146 integer :: i,j ! loop integers 137 147 138 148 do j=2,nyy … … 152 162 subroutine beta_iter_vitbil(m_iter) 153 163 154 implicit none 155 integer :: m_iter ! indice bloucle iteration 156 164 use geography, only: nz 165 use param_phy_mod, only: rog 166 use module3D_phy, only: h,h0,ux,uy,uxbar,uybar,dtmin,time,flot,slope,beta_centre,betamx,betamy, & 167 drag_mx,drag_my,debug_3d 168 169 implicit none 170 171 integer :: m_iter ! indice bloucle iteration 172 integer :: i,j ! loop integers 157 173 158 174 ! calcul des vitesses cibles : 159 175 !if ((time.eq.time_iter).and.(time.gt.time_reiter).and.(m_iter.eq.1)) then 160 176 ! Si time > time_reiter => recalcul des vitesses de bilan (methode inspiree de Pollard) 161 if ((abs(time-time_iter).lt.dtmin).and.(time.gt.time_reiter).and.(m_iter.eq.1)) then 177 if ((abs(time-time_iter).lt.dtmin).and.(time.gt.time_reiter).and.(m_iter.eq.1)) then 178 Umag_direct(:,:) = (((uxbar(:,:)+eoshift(uxbar(:,:),shift=1,boundary=0.,dim=1))**2+ & ! moyenne 179 (uybar(:,:)+eoshift(uybar(:,:),shift=1,boundary=0.,dim=2))**2)**0.5)*0.5 180 Umag_vitbil(:,:)= min(Umag_direct(:,:) * min(1.e3,H(:,:)/H0(:,:)), 5000.) 181 print*,'*****debug beta_iter_vitbil calcul de Umag_vitbil',time,m_iter 182 do j=1,ny 183 do i=1,nx 184 write(266,*) Umag_vitbil(i,j) 185 enddo 186 enddo 187 endif 188 189 ! calcule la vitesse centree venant du calcul direct 190 162 191 Umag_direct(:,:) = (((uxbar(:,:)+eoshift(uxbar(:,:),shift=1,boundary=0.,dim=1))**2+ & ! moyenne 163 192 (uybar(:,:)+eoshift(uybar(:,:),shift=1,boundary=0.,dim=2))**2)**0.5)*0.5 164 Umag_vitbil(:,:)= min(Umag_direct(:,:) * min(1.e3,H(:,:)/H0(:,:)), 5000.)165 print*,'*****debug beta_iter_vitbil calcul de Umag_vitbil',time,m_iter166 do j=1,ny167 do i=1,nx168 write(266,*) Umag_vitbil(i,j)169 enddo170 enddo171 endif172 173 ! calcule la vitesse centree venant du calcul direct174 175 Umag_direct(:,:) = (((uxbar(:,:)+eoshift(uxbar(:,:),shift=1,boundary=0.,dim=1))**2+ & ! moyenne176 (uybar(:,:)+eoshift(uybar(:,:),shift=1,boundary=0.,dim=2))**2)**0.5)*0.5177 193 178 194 Uslmag_direct(:,:) = (((ux(:,:,nz)+eoshift(ux(:,:,nz),shift=1,boundary=0.,dim=1))**2+ & ! glissement … … 193 209 ! Pas de glissement dans GRISLI 194 210 195 where ((Uslmag_direct(:,:).le.0.).and.(Uslid_vitbil(:,:).gt.1.e-3)) ! pas de glissement dans GRISLI196 beta_centre(:,:) = driving_stress(:,:) / Uslid_vitbil(:,:) ! mais du glissement "bilan"197 end where198 199 200 where ((Uslmag_direct(:,:).le.0.).and.(Uslid_vitbil(:,:).le.1.e-3)) ! ni l'un ni l'autre201 Uslid_vitbil(:,:) = 0.202 beta_centre(:,:) = beta_limgz203 end where211 where ((Uslmag_direct(:,:).le.0.).and.(Uslid_vitbil(:,:).gt.1.e-3)) ! pas de glissement dans GRISLI 212 beta_centre(:,:) = driving_stress(:,:) / Uslid_vitbil(:,:) ! mais du glissement "bilan" 213 end where 214 215 216 where ((Uslmag_direct(:,:).le.0.).and.(Uslid_vitbil(:,:).le.1.e-3)) ! ni l'un ni l'autre 217 Uslid_vitbil(:,:) = 0. 218 beta_centre(:,:) = beta_limgz 219 end where 204 220 205 221 … … 223 239 beta_centre(:,:) = min(beta_centre(:,:),beta_limgz) 224 240 225 226 241 call beta_c2stag(nx,ny,betamx,betamy,beta_centre) ! redistribue sur les mailles alternees 242 call beta_min_value(beta_min) ! valeur mini que peut avoir beta (en Pa an m-1) 227 243 228 244 229 debug_3D(:,:,59) = betamx(:,:)230 debug_3D(:,:,60) = beta_centre(:,:)245 debug_3D(:,:,59) = betamx(:,:) 246 debug_3D(:,:,60) = beta_centre(:,:) 231 247 232 248 ! estimateurs 233 J_Umag = 0.234 J_Udef = 0.235 nb_umag = 0236 nb_udef = 0237 238 do j=2,ny-1239 do i=2,nx-1249 J_Umag = 0. 250 J_Udef = 0. 251 nb_umag = 0 252 nb_udef = 0 253 254 do j=2,ny-1 255 do i=2,nx-1 240 256 241 257 if (.not.flot(i,j)) then ! calcul sur les points poses … … 249 265 end if 250 266 251 end do252 end do253 254 255 256 257 drag_centre(:,:) = beta_centre(:,:)258 drag_mx(:,:) = betamx(:,:)259 drag_my(:,:) = betamy(:,:)267 end do 268 end do 269 J_Umag = (J_Umag**0.5) / nb_umag 270 J_Udef = (J_Udef**0.5) / nb_udef 271 272 273 drag_centre(:,:) = beta_centre(:,:) 274 drag_mx(:,:) = betamx(:,:) 275 drag_my(:,:) = betamy(:,:) 260 276 261 277 -
branches/GRISLIv3/SOURCES/Draggings_modules/dragging_beta_iter_vitbil_mod.f90
r333 r404 7 7 module dragging_beta_iter_vitbil_mod 8 8 9 use module3d_phy10 use interface_input11 9 use netcdf 12 use io_netcdf_grisli 13 use beta_iter_vitbil_mod 10 ! pour compilation de steps_time_loop : 11 use beta_iter_vitbil_mod, only:time_iter,time_iter_end,nb_iter_vitbil,beta_iter_vitbil 12 13 14 14 15 15 implicit none 16 17 18 !~ real, dimension(nx,ny) :: Vcol_x !< uniquement pour compatibilite19 !~ real, dimension(nx,ny) :: Vcol_y !<20 !~ real, dimension(nx,ny) :: Vsl_x !<21 !~ real, dimension(nx,ny) :: Vsl_y !<22 23 24 !~ real, dimension(nx,ny) :: drag_centre !< beta on major node (average)25 !~ real :: beta_limgz !< when beta gt beta_limgz -> not gzmx26 !~ real :: beta_min !< minimum value of beta27 !~ real :: beta_mult !< coefficient of beta field28 !~ integer :: ill,jll,nmoy29 30 !~ real :: maxi !< calcul correction dS a la grounding line31 !~ real :: mini32 33 !~ logical :: corr_def = .False. !< for deformation correction (compatibility)34 35 36 !~ real, dimension(nx,ny) :: Umag_vitbil !< vitesse de bilan37 !~ real, dimension(nx,ny) :: Uslid_vitbil !< vitesse de bilan partie glissement38 !~ real, dimension(nx,ny) :: Umag_direct !< vitesse moyenne centree calculee par GRISLI39 !~ real, dimension(nx,ny) :: Uslmag_direct !< vitesse glissement centree calculee par GRISLI40 !~ real, dimension(nx,ny) :: Udefmag_direct !< vitesse deformation centree calculee par GRISLI41 !~ real, dimension(nx,ny) :: driving_stress !< driving stress42 43 !~ character(len=100) :: Umag_bil_file !< fichier qui contient les donnees44 !~ real :: time_iter !< temps de debut des iterations45 !~ real :: time_iter_end !< temps de fin des iterations46 !~ real :: time_reiter !< nbr annees entre 2 iterations calcul beta47 !~ integer :: nb_iter_vitbil !< nombre d'iteratiosn avant de changer de pas de temps48 !~ real :: coef_iter_vitbil !< coefficient <= 1 (rapport vitesses)49 !~ real :: J_Umag !< estimateur ecart entre vitesses50 !~ real :: J_Udef !< estimateur vitesse regions sans glissement51 !~ integer :: nb_umag !< nombre de points calcul J_Umag52 !~ integer :: nb_Udef !< nombre de points calcul J_Umag53 54 16 55 17 contains … … 60 22 !< 61 23 subroutine init_dragging ! Cette routine fait l'initialisation du dragging. 24 25 use io_netcdf_grisli, only: read_ncdf_var 26 use runparam, only: itracebug,num_tracebug 27 use geography, only: dirnameinp,nx,ny 28 use module3D_phy, only: num_param,num_rep_42,inv_beta,betamax,betamax_2d,mk_init,flot,beta_centre, & 29 drag_mx,drag_my,betamx,betamy,mstream_mx,mstream_my,niter_nolin 30 use beta_iter_vitbil_mod, only: beta_limgz,beta_min,beta_mult,drag_centre,init_beta_iter_vitbil, & 31 beta_min_value,beta_c2stag 32 62 33 ! nouvelle version : lit les fichiers nc 63 34 implicit none … … 193 164 subroutine dragging ! defini la localisation des streams et le frottement basal 194 165 166 use module3D_phy, only: time,dtmin,itracebug,betamx,betamy,drag_mx,drag_my 167 use beta_iter_vitbil_mod, only: time_iter,time_iter_end,time_reiter 168 195 169 implicit none 196 170 … … 226 200 227 201 subroutine gzm_beta_prescr ! attribue flgzmx et gzmx (et my) 228 202 203 use geography, only: nx,ny 204 use module3D_phy, only: gzmx,gzmy,fleuvemx,fleuvemy,flgzmx,flgzmy,flot,flotmx,flotmy, & 205 betamx,betamy,itracebug,num_tracebug,ibase 206 use beta_iter_vitbil_mod, only: beta_limgz,drag_centre 207 208 implicit none 209 229 210 logical :: test_Tx ! test if there is a basal melting point in the surrounding 230 211 logical :: test_Ty ! test if there is a basal melting point in the surrounding … … 233 214 234 215 real :: beta_forc_fleuve ! below this value -> ice stream 216 217 integer :: i,j ! loop integers 235 218 236 219 ! beta_forc_fleuve = 5.e3 … … 313 296 end where 314 297 315 316 298 fleuvemx(:,:)=gzmx(:,:) 299 fleuvemy(:,:)=gzmy(:,:) 317 300 318 301 end subroutine gzm_beta_prescr -
branches/GRISLIv3/SOURCES/Draggings_modules/dragging_prescr_beta_mod.f90
r333 r404 14 14 module dragging_prescr_beta 15 15 16 17 use module3d_phy18 use interface_input19 use fake_beta_iter_vitbil_mod 16 use geography, only: nx,ny 17 ! pour compilation de steps_time_loop : 18 use fake_beta_iter_vitbil_mod, only:time_iter,time_iter_end,nb_iter_vitbil,beta_iter_vitbil 19 20 20 21 21 implicit none … … 51 51 subroutine init_dragging ! Cette routine fait l'initialisation du dragging. 52 52 ! nouvelle version : lit les fichiers nc 53 implicit none 53 54 use runparam, only: itracebug,num_tracebug 55 use geography, only: dirnameinp 56 use module3d_phy, only: num_param,num_rep_42,inv_beta,betamax,betamax_2d,mk_init,h,bsoc, & 57 drag_mx,drag_my,beta_centre,betamx,betamy,mstream_mx,mstream_my, & 58 niter_nolin 59 60 implicit none 61 54 62 character(len=100) :: beta_c_file ! beta on centered grid 55 63 character(len=100) :: betamx_file ! beta on staggered grid mx … … 209 217 subroutine dragging ! defini la localisation des streams et le frottement basal 210 218 219 use runparam, only: itracebug 220 use module3d_phy, only: mstream_mx,mstream_my,betamx,betamy,drag_mx,drag_my 221 211 222 implicit none 212 223 … … 261 272 262 273 subroutine gzm_beta_prescr ! attribue flgzmx et gzmx (et my) 274 275 use runparam, only: itracebug,num_tracebug 276 use module3d_phy, only: gzmx,gzmy,flgzmx,flgzmy,flot,flotmx,flotmy,betamx,betamy,ibase, & 277 fleuvemx,fleuvemy 263 278 264 279 logical :: test_Tx ! test if there is a basal melting point in the surrounding … … 268 283 269 284 real :: beta_forc_fleuve ! below this value -> ice stream 285 286 integer :: i,j ! loop integers 270 287 271 288 ! beta_forc_fleuve = 5.e3 … … 348 365 end where 349 366 350 351 367 fleuvemx(:,:)=gzmx(:,:) 368 fleuvemy(:,:)=gzmy(:,:) 352 369 353 370 end subroutine gzm_beta_prescr … … 365 382 subroutine beta_plateau_slope ! give value beta_limgz to places where slope is >1.e-2 366 383 384 use module3d_phy, only: sdx,sdy,drag_mx,drag_my 385 386 implicit none 387 367 388 call slope_surf 368 389 … … 380 401 !< 381 402 subroutine beta_plateau_S ! give value beta_limgz to places where S > 2500 m 403 404 use module3d_phy, only: S,drag_mx,drag_my 405 406 implicit none 382 407 383 408 where (S(:,:).gt.2500.) ! moyen simple de nettoyer l'interieur. WAIS pas touche … … 394 419 subroutine beta_min_value(val_betamin) 395 420 396 real :: val_betamin ! valeur mini que peut avoir beta (en Pa an m-1) 421 use module3d_phy, only: drag_mx,drag_my,flot 422 423 implicit none 424 425 real :: val_betamin ! valeur mini que peut avoir beta (en Pa an m-1) 397 426 398 427 drag_centre(:,:) = max(drag_centre(:,:),val_betamin) … … 412 441 413 442 implicit none 443 414 444 integer :: nxx,nyy ! dimension des tableaux 415 445 real, dimension(nxx,nyy), intent(in) :: R_mx ! valeur du beta sur maille mx 416 446 real, dimension(nxx,nyy), intent(in) :: R_my ! valeur du beta sur maille my 417 447 real, dimension(nxx,nyy), intent(out) :: R_centre ! valeur du beta sur maille centree 448 449 integer :: i,j ! loop integers 418 450 419 451 R_centre(:,:)=0. … … 433 465 434 466 implicit none 467 435 468 integer :: nxx,nyy ! dimension des tableaux 436 469 real, dimension(nxx,nyy), intent(out) :: R_mx ! valeur du beta sur maille mx … … 438 471 real, dimension(nxx,nyy), intent(in) :: R_centre ! valeur du beta sur maille centree 439 472 473 integer :: i,j ! loop integers 474 440 475 do j=2,nyy 441 476 do i=2,nxx … … 454 489 455 490 implicit none 491 456 492 integer :: nxx,nyy ! dimension des tableaux 457 493 real, dimension(nxx,nyy), intent(inout):: R_mx ! valeur du beta sur maille mx … … 459 495 real, dimension(nxx,nyy), intent(in) :: R_centre ! valeur du beta sur maille centree 460 496 497 integer :: i,j ! loop integers 498 461 499 do j=2,nyy 462 500 do i=2,nxx … … 475 513 476 514 implicit none 515 477 516 integer,intent(in) :: n ! demi taille du tableau gaussienne 478 517 real, intent(in) :: sigma ! sigma gaussienne exprime en dx … … 484 523 real :: som ! pour calibration 485 524 real :: sigma2 ! pour gaussienne 525 526 integer :: i,j ! loop integers 486 527 487 528 som = 0. … … 509 550 subroutine iter_gauss(n,nxx,nyy,M,coef,beta_in,beta_out,Ecart) 510 551 552 implicit none 553 511 554 integer, intent(in) :: n ! taille matrice gaussienne 512 555 integer, intent(in) :: nxx,nyy ! taille du domaine … … 519 562 ! variables locales 520 563 integer :: ii,jj 564 integer :: i,j 521 565 522 566 do j= 1 + n, nyy - n -
branches/GRISLIv3/SOURCES/Draggings_modules/fake_beta_iter_vitbil_mod.f90
r168 r404 6 6 7 7 module fake_beta_iter_vitbil_mod 8 9 use module3d_phy10 8 11 9 implicit none … … 18 16 19 17 subroutine beta_iter_vitbil(m_iter) 20 integer :: m_iter ! indice bloucle iteration 18 19 use runparam, only: itracebug 20 21 implicit none 22 23 integer,intent(in) :: m_iter ! indice bloucle iteration 24 21 25 if (itracebug.eq.1) call tracebug(' Entree dans routine fake_beta_iter_vitbil') 26 22 27 end subroutine beta_iter_vitbil 23 28 -
branches/GRISLIv3/SOURCES/Makefile.grisli.inc
r371 r404 153 153 output_Grice2sea_mod.o \ 154 154 fake-routines_Grice2sea_mod.o \ 155 dragging_prescr_beta_mod.o dragging_prescr_beta_perturb_mod.o\155 dragging_prescr_beta_mod.o \ 156 156 beta_iter_vitbil_mod.o \ 157 157 dragging_beta_iter_vitbil_mod.o \ … … 159 159 160 160 Liste_grismip6 = output_anta40_mod-0.4.o \ 161 dragging_prescr_beta_mod.o dragging_prescr_beta_perturb_mod.o\161 dragging_prescr_beta_mod.o \ 162 162 dragging_prescr_beta_nolin_mod.o \ 163 163 lect-grismip6_mod.o \ … … 169 169 170 170 Liste_ANT16 = output_anta40_mod-0.4.o \ 171 dragging_prescr_beta_mod.o dragging_prescr_beta_perturb_mod.o\171 dragging_prescr_beta_mod.o \ 172 172 dragging_prescr_beta_nolin_mod.o \ 173 173 lect-anteis_mod.o \ … … 187 187 bmelt-hemin40-regions_mod.o bmelt-hemin40-depth_mod.o \ 188 188 fake-routines-hemin40_mod.o \ 189 dragging_prescr_beta_mod.o dragging_prescr_beta_perturb_mod.o\189 dragging_prescr_beta_mod.o \ 190 190 beta_iter_vitbil_mod.o \ 191 191 dragging_beta_iter_vitbil_mod.o \ … … 202 202 dragging_neem_mod.o \ 203 203 fake-routines-greeneem_mod.o \ 204 dragging_prescr_beta_mod.o dragging_prescr_beta_perturb_mod.o\204 dragging_prescr_beta_mod.o \ 205 205 beta_iter_vitbil_mod.o \ 206 206 dragging_beta_iter_vitbil_mod.o \ … … 214 214 bmelt-ant-regions-initmip_mod.o \ 215 215 fake-routines-ant_mod.o \ 216 dragging_prescr_beta_mod.o dragging_prescr_beta_perturb_mod.o\216 dragging_prescr_beta_mod.o \ 217 217 beta_iter_vitbil_mod.o \ 218 218 dragging_beta_iter_vitbil_mod.o \ -
branches/GRISLIv3/SOURCES/dragging_coulomb_friction_mod.f90
r348 r404 44 44 45 45 46 use module3d_phy, only: nx,ny 47 use fake_beta_iter_vitbil_mod 46 use geography, only: nx,ny 47 ! pour compilation de steps_time_loop : 48 use fake_beta_iter_vitbil_mod, only:time_iter,time_iter_end,nb_iter_vitbil,beta_iter_vitbil 48 49 49 50 implicit none … … 71 72 subroutine init_dragging ! Cette routine fait l'initialisation du dragging. 72 73 73 use module3d_phy, only: niter_nolin,betamax,betamax_2d,inv_beta,mstream_mx,mstream_my,drag_mx,drag_my,num_rep_4274 use geography, only: dirnameinp 74 75 use runparam, only: itracebug 75 76 use interface_input !for sediments 77 use io_netcdf_grisli !for sediments 76 use module3d_phy, only: niter_nolin,betamax,betamax_2d,inv_beta,mstream_mx,mstream_my,drag_mx,drag_my, & 77 num_rep_42,num_param 78 78 79 79 implicit none … … 128 128 mstream_my(:,:)=1 129 129 130 131 130 ! coefficient permettant de modifier le basal drag. 132 131 drag_mx(:,:)=1. … … 184 183 !$ USE OMP_LIB 185 184 186 use module3d_phy, only: nx,ny,betamax,beta_centre,betamx,betamy,neffmx,neffmy,hwater,flot,ux,uy 185 use geography, only: nx,ny 186 use module3d_phy, only: betamax,beta_centre,betamx,betamy,neffmx,neffmy,hwater,flot,ux,uy, & 187 uxbar,uybar 187 188 188 189 implicit none … … 196 197 197 198 real,parameter :: u0 = 100d0 ! threshold sliding speed 199 200 integer :: i,j ! loop integers 198 201 199 202 !$OMP PARALLEL … … 294 297 subroutine mstream_dragging ! defini la localisation des streams 295 298 296 297 use module3d_phy, only: nx,ny,betamax,betamx,betamy,fleuvemx,fleuvemy,gzmx,gzmy,flgzmx,flgzmy,flot,flotmx,flotmy299 use geography, only: nx,ny 300 use module3d_phy, only: betamax,betamx,betamy,fleuvemx,fleuvemy,gzmx,gzmy,flgzmx,flgzmy,flot,flotmx,flotmy 298 301 299 302 implicit none 303 304 integer :: i,j ! loop integers 300 305 301 306 !$OMP PARALLEL -
branches/GRISLIv3/SOURCES/dragging_coulomb_friction_simplhydro_mod.f90
r357 r404 47 47 48 48 49 use module3d_phy, only: nx,ny 50 use fake_beta_iter_vitbil_mod 49 use geography, only: nx,ny 50 ! pour compilation de steps_time_loop : 51 use fake_beta_iter_vitbil_mod, only:time_iter,time_iter_end,nb_iter_vitbil,beta_iter_vitbil 51 52 52 53 implicit none … … 70 71 logical :: corr_def = .false. !< for deformation correction, pour compatibilite beta 71 72 72 73 73 contains 74 74 !------------------------------------------------------------------------------- … … 79 79 subroutine init_dragging ! Cette routine fait l'initialisation du dragging. 80 80 81 use module3d_phy, only: niter_nolin,betamax,betamax_2d,inv_beta,mstream_mx,mstream_my,drag_mx,drag_my,num_rep_4281 use geography, only: dirnameinp 82 82 use runparam, only: itracebug 83 84 use interface_input !for sediments 85 use io_netcdf_grisli !for sediments 83 use module3d_phy, only: niter_nolin,betamax,betamax_2d,inv_beta,mstream_mx,mstream_my,drag_mx,drag_my, & 84 num_rep_42,num_param 86 85 87 86 implicit none … … 97 96 98 97 namelist/drag_coulomb_friction_simplhydro/till_c0, TFA_min, TFA_max, bed_crit, Ob_coeff,m_nolin,niter_nolin,betamax,betamin,bool_sedim,file_sedim,seuil_sedim,coef_sedim 99 100 98 101 99 if (itracebug.eq.1) call tracebug(' dragging avec neff et slope') … … 199 197 !$ USE OMP_LIB 200 198 201 use module3d_phy, only: nx,ny,betamax,beta_centre,betamx,betamy,hwater,flot,ux,uy,H,B,sealevel_2d 202 use param_phy_mod, only: G,RO,ROFRESH 199 use geography, only: nx,ny 200 use module3d_phy, only: betamax,beta_centre,betamx,betamy,hwater,flot,ux,uy,H,B,bsoc,sealevel_2d, & 201 uxbar,uybar 202 use param_phy_mod,only: G,RO,ROFRESH 203 203 204 204 implicit none … … 220 220 221 221 real,parameter :: u0 = 100d0 ! threshold sliding speed 222 223 integer :: i,j ! loop integers 222 224 223 225 !$OMP PARALLEL … … 320 322 subroutine mstream_dragging ! defini la localisation des streams 321 323 322 323 use module3d_phy, only: nx,ny,betamax,betamx,betamy,fleuvemx,fleuvemy,gzmx,gzmy,flgzmx,flgzmy,flot,flotmx,flotmy324 use geography, only: nx,ny 325 use module3d_phy, only: betamax,betamx,betamy,fleuvemx,fleuvemy,gzmx,gzmy,flgzmx,flgzmy,flot,flotmx,flotmy 324 326 325 327 implicit none 328 329 integer :: i,j ! loop integers 326 330 327 331 !$OMP PARALLEL -
branches/GRISLIv3/SOURCES/dragging_param_beta_mod.f90
r394 r404 23 23 ! * un critere sur la courbure du socle (si negatif, vallees) 24 24 25 use module3d_phy, only:nx,ny 26 use io_netcdf_grisli 25 use geography, only: nx,ny 27 26 ! pour compilation de steps_time_loop : 28 27 use fake_beta_iter_vitbil_mod, only:time_iter,time_iter_end,nb_iter_vitbil,beta_iter_vitbil … … 44 43 45 44 real :: coef_ile ! coef frottement zones iles (0.1) 45 46 real :: neffmin = 1.e5 ! as in neffect, but this should be the exact same variable 46 47 47 48 real, dimension(nx,ny) :: Vcol_x !< uniquement pour compatibilite avec spinup cat … … 70 71 71 72 72 ! formats pour les ecritures dans 4273 428 format(A)74 73 75 74 ! lecture des parametres du run block drag neff … … 79 78 read(num_param,drag_param_beta) 80 79 81 write(num_rep_42, 428)'!___________________________________________________________'82 write(num_rep_42, 428) '&drag_param_beta ! nom du bloc dragging param beta'80 write(num_rep_42,'(A)')'!___________________________________________________________' 81 write(num_rep_42,'(A)') '&drag_param_beta ! nom du bloc dragging param beta' 83 82 write(num_rep_42,*) 84 83 write(num_rep_42,*) 'beta_slope = ', beta_slope … … 87 86 write(num_rep_42,*) 'betamin = ', betamin 88 87 write(num_rep_42,*)'/' 89 write(num_rep_42, 428) '! Slope & expo of beta = - slope x Neff ** expo'90 88 write(num_rep_42,'(A)') '! Slope & expo of beta = - slope x Neff ** expo' 89 91 90 inv_beta=0 92 91 !------------------------------------------------------------------- … … 124 123 ! (ce bloc etait avant dans flottab) 125 124 126 125 127 126 128 127 ! -- !$OMP DO … … 134 133 ! -- end do 135 134 ! -- !$OMP END DO 136 135 137 136 implicit none 138 137 integer :: i,j … … 152 151 !aurel, for the borders: 153 152 !$OMP WORKSHARE 154 neff(:,ny)= 1.e5155 neff(nx,:)= 1.e5153 neff(:,ny)=neffmin 154 neff(nx,:)=neffmin 156 155 ! calcul de hwat (staggered) 157 156 hwatmx(:,:)=0. … … 177 176 where (ilemx(:,:)) betamx(:,:) = betamx(:,:) * coef_ile 178 177 where (ilemy(:,:)) betamy(:,:) = betamy(:,:) * coef_ile 179 180 178 181 179 betamx(:,:)=max(betamx(:,:),betamin) … … 189 187 !$OMP END WORKSHARE 190 188 191 ! points flottants 189 ! points flottants 192 190 !$OMP DO 193 191 do j=2,ny … … 202 200 end do 203 201 !$OMP END DO 204 205 202 206 203 !$OMP DO … … 230 227 implicit none 231 228 integer :: i,j 232 229 233 230 !$OMP PARALLEL 234 231 … … 245 242 ! detection des cotes 246 243 !$OMP DO 247 do j=2,ny-1 248 do i=2,nx-1 249 if ((.not.flot(i,j)).and. & 244 do j=2,ny-1 245 do i=2,nx-1 246 if ((.not.flot(i,j)).and. & 250 247 ((flot(i+1,j)).or.(flot(i,j+1)).or.(flot(i-1,j)).or.(flot(i,j-1)))) then 251 248 cote(i,j)=.true. -
branches/GRISLIv3/SOURCES/dragging_param_beta_sedim_mod.f90
r394 r404 23 23 ! * un critere sur la courbure du socle (si negatif, vallees) 24 24 25 use module3d_phy, only:nx,ny26 use io_netcdf_grisli25 use geography, only:nx,ny 26 ! pour compilation de steps_time_loop : 27 27 use fake_beta_iter_vitbil_mod, only:time_iter,time_iter_end,nb_iter_vitbil,beta_iter_vitbil 28 28 … … 63 63 !> 64 64 subroutine init_dragging ! Cette routine fait l'initialisation du dragging. 65 65 66 use geography, only:dirnameinp 66 67 use module3d_phy, only:betamax,num_param,num_rep_42,inv_beta,mstream_mx,mstream_my,& 67 drag_mx,drag_my,betamax_2d,niter_nolin ,dirnameinp68 drag_mx,drag_my,betamax_2d,niter_nolin 68 69 use runparam, only:itracebug 69 70 70 71 implicit none 71 72 … … 78 79 79 80 if (itracebug.eq.1) call tracebug(' dragging param avec sedim') 81 80 82 81 83 … … 114 116 115 117 ! modification of basal drag depends on where we have sediments 116 ! for Antarctica, we assume that what is present-day below sea level has sediment118 ! for Antarctica, we can assume that what is present-day below sea level has sediment 117 119 file_sedim=trim(dirnameinp)//trim(file_sedim) 118 120 call lect_input(1,'h_sedim',1,h_sedim(:,:),file_sedim,file_ncdf) … … 163 165 integer :: i,j 164 166 165 166 167 !$OMP PARALLEL 167 168 ! calcul de neff (pression effective sur noeuds majeurs) … … 208 209 betamy(:,:)= beta_slope*(neffmy(:,:)**beta_expo) * coef_sedim 209 210 endwhere 210 !where (h_sedimmx(:,:).gt.seuil_sedim) betamx(:,:) = beta_slope*(neffmin**beta_expo)/neffmin211 !where (h_sedimmy(:,:).gt.seuil_sedim) betamy(:,:) = beta_slope*(neffmin**beta_expo)/neffmin212 211 213 212 where (ilemx(:,:)) betamx(:,:) = betamx(:,:) * coef_ile … … 223 222 224 223 !$OMP END WORKSHARE 225 226 227 ! calcul de gzmx228 224 229 225 ! points flottants … … 260 256 !------------------------------------------------------------------------- 261 257 subroutine mstream_dragging ! defini la localisation des streams 262 258 263 259 use module3d_phy, only:fleuvemx,fleuvemy,gzmx,gzmy,flgzmx,flgzmy,flotmx,flotmy,flot,& 264 260 betamx,betamy,betamax … … 267 263 implicit none 268 264 integer :: i,j 265 269 266 !$OMP PARALLEL 270 267
Note: See TracChangeset
for help on using the changeset viewer.