- Timestamp:
- 01/31/24 09:13:31 (4 months ago)
- Location:
- branches/GRISLIv3/SOURCES
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/GRISLIv3/SOURCES/3D-physique-gen_mod.f90
r469 r470 234 234 logical,dimension(nx,ny) :: FLGZMX !< points stream ou shelf ou ile (equ. ellpt) ">" 235 235 logical,dimension(nx,ny) :: FLGZMY !< points stream ou shelf ou ile (equ ellipt) "^" 236 logical,dimension(nx,ny) :: ILEMX !< points ile ">"237 logical,dimension(nx,ny) :: ILEMY !< points ile "^"238 236 logical,dimension(nx,ny) :: fleuvemx !< actual grounded stream 239 237 logical,dimension(nx,ny) :: fleuvemy !< actual grounded stream -
branches/GRISLIv3/SOURCES/Draggings_modules/dragging_param_beta_mod.f90
r405 r470 42 42 real,dimension(nx,ny) :: hwatmy ! hauteur d'eau staggered grille - afq 43 43 44 real :: coef_ile ! coef frottement zones iles (0.1)45 46 44 real :: neffmin = 1.e5 ! as in neffect, but this should be the exact same variable 47 45 … … 66 64 implicit none 67 65 68 namelist/drag_param_beta/beta_slope,beta_expo,betamax,betamin ,coef_ile66 namelist/drag_param_beta/beta_slope,beta_expo,betamax,betamin 69 67 70 68 if (itracebug.eq.1) call tracebug(' dragging avec neff et slope') … … 101 99 betamax_2d(:,:) = betamax 102 100 103 !afq -- toblim = 0. !0.7e5 ! afq -- pour les iles, mais est-ce vraiment utile?104 105 101 niter_nolin = 1 106 102 … … 115 111 subroutine dragging ! defini le frottement basal 116 112 117 use module3d_phy, only:neffmx,neffmy,hwater,betamx,betamy, ilemx,ilemy,betamax,flot,&113 use module3d_phy, only:neffmx,neffmy,hwater,betamx,betamy,betamax,flot,& 118 114 beta_centre 119 115 120 116 !$ USE OMP_LIB 121 117 122 ! les iles n'ont pas de condition neff mais ont la condition toblim123 ! (ce bloc etait avant dans flottab)124 125 126 127 ! -- !$OMP DO128 ! -- do j=2,ny129 ! -- do i=2,nx130 ! -- ilemx(i,j)=ilemx(i,j).and.(abs(rog*Hmx(i,j)*sdx(i,j)).lt.toblim)131 ! -- ilemy(i,j)=ilemy(i,j).and.(abs(rog*Hmy(i,j)*sdy(i,j)).lt.toblim)132 ! -- end do133 ! -- end do134 ! -- !$OMP END DO135 118 136 119 implicit none … … 173 156 betamx(:,:)= beta_slope*(neffmx(:,:)**beta_expo) 174 157 betamy(:,:)= beta_slope*(neffmy(:,:)**beta_expo) 175 176 where (ilemx(:,:)) betamx(:,:) = betamx(:,:) * coef_ile177 where (ilemy(:,:)) betamy(:,:) = betamy(:,:) * coef_ile178 158 179 159 betamx(:,:)=max(betamx(:,:),betamin) -
branches/GRISLIv3/SOURCES/Draggings_modules/dragging_param_beta_sedim_mod.f90
r408 r470 42 42 real,dimension(nx,ny) :: hwatmy ! hauteur d'eau staggered grille - afq 43 43 44 real :: coef_ile ! coef frottement zones iles (0.1)45 46 44 real,dimension(nx,ny) :: h_sedimmx ! sediment thickness (or rebounded bedrock) 47 45 real,dimension(nx,ny) :: h_sedimmy ! sediment thickness (or rebounded bedrock) … … 77 75 character(len=150) :: file_ncdf ! fichier netcdf issue des fichiers .dat 78 76 79 namelist/drag_param_beta_sedim/beta_slope,beta_expo,betamax,betamin, coef_ile,file_sedim,seuil_sedim,coef_sedim77 namelist/drag_param_beta_sedim/beta_slope,beta_expo,betamax,betamin,file_sedim,seuil_sedim,coef_sedim 80 78 81 79 if (itracebug.eq.1) call tracebug(' dragging param avec sedim') … … 144 142 subroutine dragging ! defini le frottement basal 145 143 146 use module3d_phy, only:neffmx,neffmy,hwater,betamx,betamy, ilemx,ilemy,betamax,flot,&144 use module3d_phy, only:neffmx,neffmy,hwater,betamx,betamy,betamax,flot,& 147 145 beta_centre 148 146 149 147 !$ USE OMP_LIB 150 148 151 ! les iles n'ont pas de condition neff mais ont la condition toblim152 ! (ce bloc etait avant dans flottab)153 154 155 156 ! -- !$OMP DO157 ! -- do j=2,ny158 ! -- do i=2,nx159 ! -- ilemx(i,j)=ilemx(i,j).and.(abs(rog*Hmx(i,j)*sdx(i,j)).lt.toblim)160 ! -- ilemy(i,j)=ilemy(i,j).and.(abs(rog*Hmy(i,j)*sdy(i,j)).lt.toblim)161 ! -- end do162 ! -- end do163 ! -- !$OMP END DO164 149 165 150 implicit none … … 210 195 betamy(:,:)= beta_slope*(neffmy(:,:)**beta_expo) * coef_sedim 211 196 endwhere 212 213 where (ilemx(:,:)) betamx(:,:) = betamx(:,:) * coef_ile214 where (ilemy(:,:)) betamy(:,:) = betamy(:,:) * coef_ile215 197 216 198 betamx(:,:)=max(betamx(:,:),betamin) -
branches/GRISLIv3/SOURCES/MISMIP3D_files/dragging_mismip3d_mod.f90
r4 r470 87 87 88 88 89 ! initialisation de certains tableaux90 ilemx(:,:) = .false.91 ilemy(:,:) = .false.92 93 94 89 ! initialisation des vitesses de glissement : lues dans lect_mismip_mod 95 90 … … 118 113 119 114 call drag_non_lin_stag (nx,ny,Uxflgz,Uyflgz,betamx,betamy) 120 121 122 ! pas d'iles123 ilemx(:,:) = .false.124 ilemy(:,:) = .false.125 115 126 116 -
branches/GRISLIv3/SOURCES/Netcdf-routines/sortie_netcdf_GRISLI_mod.0.2-hassine.f90
r467 r470 669 669 taushelf,epsxx,epsyy,epsxy,eps,abar,pvi,pvm,betamx,betamy,beta_centre, & 670 670 ablbord_dtt,ice,front,gr_line_schoof,hwater,hdotwater,bsoc,bm, & 671 flot_marais,neffmx,neffmy,gzmx,gzmy, ilemx,ilemy,&671 flot_marais,neffmx,neffmy,gzmx,gzmy, & 672 672 fleuvemx,fleuvemy,flotmx,flotmy,hmx,hmy,sux,suy, & 673 673 tpmp,ux,uy,uzr,debug_3d,xlong,ylat,time,dtt … … 970 970 end if 971 971 972 if (itab.eq.70) then ! posx : grounded -> 0, , grzone ->1 ilemx->2flot->3972 if (itab.eq.70) then ! posx : grounded -> 0, , grzone ->1 flot->3 973 973 do j=1,ny 974 974 do i=1,nx 975 975 if (gzmx(i,j)) then 976 if (ilemx(i,j)) then ! ile 977 tab(i,j)=2 978 else if (fleuvemx(i,j)) then 976 if (fleuvemx(i,j)) then 979 977 tab(i,j)=5 ! actual grounded streams 980 978 else … … 989 987 else ! pose 990 988 tab(i,j)=0 991 en dif989 enf 992 990 end do 993 991 end do 994 992 end if 995 if (itab.eq.71) then ! posy : grounded -> 0, , grzone ->1 ilemx->2flot->3993 if (itab.eq.71) then ! posy : grounded -> 0, , grzone ->1 flot->3 996 994 do j=1,ny 997 995 do i=1,nx 998 996 if (gzmy(i,j)) then 999 if (ilemy(i,j)) then 1000 tab(i,j)=2 1001 else if (fleuvemy(i,j)) then 997 if (fleuvemy(i,j)) then 1002 998 tab(i,j)=5 ! actual grounded streams 1003 999 else -
branches/GRISLIv3/SOURCES/New-remplimat/diagno-L2_mod.f90
r467 r470 136 136 ! pvi(:,:)=0. 137 137 Taushelf(:,:)=0. 138 139 ! attention le bloc suivant est pour debug140 !!$gzmx(:,:)=.false.141 !!$gzmy(:,:)=.false.142 !!$ilemx(:,:)=.false.143 !!$ilemy(:,:)=.false.144 !!$flgzmx(:,:)=flotmx(:,:)145 !!$flgzmy(:,:)=flotmy(:,:)146 138 147 139 call dragging ! doit etre appele avant imx_imy … … 366 358 !$OMP END WORKSHARE 367 359 !$OMP END PARALLEL 368 !i=92369 !j=152370 !write(6,*) 'time',time, uxbar(92,152),gzmx(92,152),ilemx(92,152),flotmx(92,152), flgzmx(92,152)371 360 372 361 end do ! afq -- sur itour_nolin … … 380 369 381 370 use module3d_phy, only: pvi,abar,flot,gzmx,gzmy, & 382 ilemx,ilemy,eps,taushelf,h,debug_3d,pvm371 ,eps,taushelf,h,debug_3d,pvm 383 372 use runparam, only: itracebug 384 373 use geography, only: nx,ny,nz … … 441 430 sf1=sf01 442 431 sf3=max(sf03,0.01) ! pour les fleuves de glace, un peu de Glen 443 444 else if (ilemx(i,j).or.ilemx(iplus1,j).or.ilemy(i,j).or.ilemy(i,jplus1)) then445 sf1=sf01446 sf3=max(sf03,0.01) ! pour les iles aussi447 448 432 else 449 ! sf1=1450 ! sf3=1451 433 sf1=sf01 ! pour la viscosite anisotrope (ici en longitudinal) 452 434 sf3=sf03 -
branches/GRISLIv3/SOURCES/flottab2-0.7.f90
r468 r470 21 21 implicit none 22 22 23 real :: surnet !< surnet hauteur de glace au dessus de la mer 24 real :: archim !< test de flottaison 25 ! real, parameter :: Hmin=1.001 !< Hmin pour être considere comme point ice 26 27 integer:: itestf 28 29 logical,dimension(nx,ny) :: gz1mx,gz1my 30 logical,dimension(nx,ny) :: fl1mx,fl1my 31 32 33 real,dimension(nx,ny) :: uxs1 !< uxbar a l'entree de flottab 34 real,dimension(nx,ny) :: uys1 !< uybar a l'entree de flottab 35 36 37 integer pmx,pmy !pm=plus-moins -1 ou 1 pour x et y 38 39 40 ! Variables pour la determination des differents shelfs/stream 41 ! (representés comme des taches ou l'on resoud l'eq elliptique) 42 !________________________________________________________________ 43 integer,parameter :: n_ta_max=2000!< nombre de tache max 44 integer,dimension(nx,ny) :: table_out !< pour les numeros des taches 45 integer,dimension(nx,ny) :: tablebis !< pour les numeros des taches 46 integer,dimension(0:n_ta_max) :: compt !< contient les equivalence entre les taches 47 integer,dimension(0:n_ta_max) :: nb_pts_tache !< indique le nombre de points par tache 48 logical,dimension(0:n_ta_max) :: iceberg1D !< T si iceberg, F si calotte posee 49 50 logical,dimension(nx,ny) :: mask_tache_ij !< masque de travail 51 !< vrai pour toute la tache de i,j 52 integer,dimension(2) :: smax_coord !< pour le maxloc des iles 23 24 25 53 26 54 27 ! Variables pour determiner le point le plus haut (surf) … … 56 29 !_________________________________________________________ 57 30 58 ! icetrim : T si ice stream, F si calotte posee(vertical shear) 59 logical,dimension(n_ta_max) :: icetrim 60 61 integer :: ii,jj 62 integer :: smax_i 63 integer :: smax_j 64 real :: smax_ 65 integer :: numtache 66 integer :: nb_pt 67 real :: petit_H=0.001 ! pour test ice sur zone flottante 31 68 32 contains 69 33 ! ----------------------------------------------------------------------------------- … … 74 38 !! @note - Pose 75 39 ! @note - Grounding zone et streams gzmx et gzmy 76 ! @note - Iles ilemx, ilemy77 40 ! @note - flottant flot sur le noeud majeur, flotmx sur le noeud mineur 78 41 !> … … 96 59 ! Pose 97 60 ! Grounding zone et streams gzmx et gzmy 98 ! Iles ilemx, ilemy99 61 ! flottant flot sur le noeud majeur, flotmx sur le noeud mineur 100 62 … … 106 68 use module3D_phy, only:igrdline,mk_init,flot,H,sealevel_2d,Bsoc,S,H,B,& 107 69 ice,front,& 108 iceberg,uxbar,uybar,mk,gzmx,gzmy,flotmx,flotmy,hmx,hmy,isynchro, ilemx,ilemy,&70 iceberg,uxbar,uybar,mk,gzmx,gzmy,flotmx,flotmy,hmx,hmy,isynchro,& 109 71 flgzmx,flgzmy,fbm,bm,bmelt,debug_3D,dt 110 72 use param_phy_mod, only:row,ro … … 113 75 implicit none 114 76 115 logical,dimension(nx,ny) :: new_flot_point !< pour signaler les points qui se mettent a flotter entre 2 pas de temps dtt 116 logical,dimension(nx,ny) :: new_flotmx !< pour signaler les points qui deviennent flottantmx entre 2 dtt 117 logical,dimension(nx,ny) :: new_flotmy !< pour signaler les points qui deviennent flottantmy entre 2 dtt 118 119 integer :: i,j 77 real :: archim !< test de flottaison 78 real :: surnet !< surnet hauteur de glace au dessus de la mer 79 80 logical,dimension(nx,ny) :: gz1mx,gz1my 81 logical,dimension(nx,ny) :: fl1mx,fl1my 82 real,dimension(nx,ny) :: uxs1 !< uxbar a l'entree de flottab 83 real,dimension(nx,ny) :: uys1 !< uybar a l'entree de flottab 84 85 integer :: nb_pt 86 real :: petit_H=0.001 ! pour test ice sur zone flottante 87 88 integer :: i,j,ii,jj 120 89 121 90 if (itracebug.eq.1) call tracebug(' Entree dans routine flottab') … … 137 106 end if 138 107 139 140 ! 1-INITIALISATION141 ! ----------------142 ! initialisation des variables pour detecter les points qui se mettent143 ! a flotter entre 2 dtt144 145 !$OMP DO146 do j=1,ny147 do i=1,nx148 new_flot_point(i,j)=.false.149 new_flotmx(i,j)=.false.150 new_flotmy(i,j)=.false.151 enddo152 enddo153 !$OMP END DO154 155 ! ICE(:,:)=(H(:,:).gt.1) ! ice=.true. si epaisseur > 1m156 157 108 !$OMP WORKSHARE 158 109 ICE(:,:)=0 … … 175 126 176 127 archim = Bsoc(i,j)+H(i,j)*ro/row -sealevel_2d(i,j) 177 ! if ((i.eq.132).and.(j.eq.183)) print*,'archim=',archim178 128 179 129 … … 182 132 183 133 184 ex_pose: if ((.not.FLOT(I,J)).and.(isynchro.eq.1)) then ! il ne flottait pas avant 185 FLOT(I,J)=.true. 134 if (.not.FLOT(I,J)) then ! il ne flottait pas 135 136 ! au pas de temps precedent 137 flot(i,j)=.true. 186 138 187 139 if (igrdline.eq.1) then ! en cas de grounding line prescrite 188 140 flot(i,j)=.false. 189 141 H(i,j)=(10.+sealevel_2d(i,j)-Bsoc(i,j))*row/ro ! pour avoir archim=10 190 new_flot_point(i,j)=.false.191 142 endif 192 143 193 else ! isynchro=0 ou il flottait déja 194 195 if (.not.FLOT(I,J)) then ! il ne flottait pas (isynchro=0) 196 new_flot_point(i,j)=.true. ! signale un point qui ne flottait pas 197 ! au pas de temps precedent 198 flot(i,j)=.true. 199 200 if (igrdline.eq.1) then ! en cas de grounding line prescrite 201 flot(i,j)=.false. 202 H(i,j)=(10.+sealevel_2d(i,j)-Bsoc(i,j))*row/ro ! pour avoir archim=10 203 new_flot_point(i,j)=.false. 204 endif 205 206 endif 207 endif ex_pose 144 endif 208 145 209 146 … … 214 151 FLOT(I,J)=.false. 215 152 endif 216 !cdc correction topo pour suivre variations sealevel217 !cdd S(i,j)=Bsoc(i,j)+H(i,j)218 153 S(i,j)=Bsoc(i,j)+H(i,j) 219 154 B(i,j)=Bsoc(i,j) 220 155 221 156 else if ((H(i,j).LE.0.).and.(archim.LT.0.)) then ! terre deglace qui devient ocean 222 !cdc ice(i,j)=0223 !cdc H(i,j)=1.224 !cdc 1m H(i,j)=min(1.,max(0.,(sealevel - Bsoc(i,j))*row/ro-0.01))225 157 flot(i,j)=.true. !cdc points ocean sont flot meme sans glace 226 158 H(i,j)=0. … … 242 174 !$OMP END DO 243 175 244 !!$ do i=1,nx245 !!$ do j=1,ny246 !!$ if (flot(i,j)) then247 !!$ mk(i,j)=1248 !!$ else249 !!$ mk(i,j)=0250 !!$ endif251 !!$ end do252 !!$ end do253 254 176 255 177 … … 268 190 269 191 flotmx(i,j)=flot(i,j).and.flot(i-1,j) 270 271 ! test pour detecter les nouveaux flotmx entre 2 dtt :272 273 if (flotmx(i,j).and.(new_flot_point(i,j).or. &274 new_flot_point(i-1,j))) then275 new_flotmx(i,j)=.true.276 endif277 192 278 193 … … 294 209 end do domain_x 295 210 !$OMP END DO 296 !if (itracebug.eq.1) call tracebug(' routine flottab apres domain_x') 211 297 212 298 213 ! 3_y B- NOUVELLE DEFINITION DE FLOTMY … … 307 222 flotmy(i,j)=flot(i,j).and.flot(i,j-1) 308 223 309 ! test pour detecter les nouveaux flotmy entre 2 dtt :310 311 if (flotmy(i,j).and.(new_flot_point(i,j).or. &312 new_flot_point(i,j-1))) then313 new_flotmy(i,j)=.true.314 endif315 316 224 ! premiere determination de gzmy 317 225 !__________________________________________________________________________ … … 331 239 end do domain_y 332 240 !$OMP END DO 333 334 !!$335 !!$336 !!$! 4- Condition sur les bords337 !!$338 !!$339 !!$ do i=2,nx340 !!$ flotmx(i,1) = (flot(i,1).or.flot(i-1,1))341 !!$ flotmy(i,1) = .false.342 !!$ end do343 !!$344 !!$ do j=2,ny345 !!$ flotmy(1,j) = (flot(1,j).or.flot(1,j-1))346 !!$ flotmx(1,j) = .false.347 !!$ end do348 !!$349 !!$ flotmx(1,1) = .false.350 !!$ flotmy(1,1) = .false.351 !!$352 353 354 ! 4- determination des iles355 ! -------------------------356 !$OMP WORKSHARE357 ilemx(:,:)=.false.358 ilemy(:,:)=.false.359 !$OMP END WORKSHARE360 361 ! afq -- 17/01/19: on supprime les iles.362 ! ! selon x363 ! !$OMP DO364 ! ilesx: do j=2,ny-1365 ! do i=3,nx-2366 ! ! F G F367 ! ! x368 ! ! modif tof 26/08/02 limite sur la pente (si diff S > 400 m)369 ! if ((flot(i-1,j).and..not.flot(i,j).and.flot(i+1,j)).and. &370 ! (sdx(i,j).LT.1.E-02)) then371 ! ilemx(i,j)=.true.372 ! ilemx(i+1,j)=.true.373 374 ! ! F G G F375 ! ! x376 ! ! modif tof 26/08/02 limite sur la pente (si diff S > 400 m)377 ! else if ((flot(i-1,j).and..not.flot(i,j) &378 ! .and..not.flot(i+1,j)).and.flot(i+2,j).and. &379 ! (sdx(i,j).LT.1.E-02.and.sdx(i+1,j).LT.1.E-02)) then380 ! ilemx(i,j)=.true.381 ! ilemx(i+1,j)=.true.382 ! ilemx(i+2,j)=.true.383 384 ! ! F G G F385 ! ! x386 ! ! modif tof 26/08/02 limite sur la pente (si diff S > 400 m)387 ! else if ((flot(i-2,j).and..not.flot(i-1,j) &388 ! .and..not.flot(i,j)).and.flot(i+1,j).and. &389 ! (sdx(i,j).LT.1.E-02.and.sdx(i-1,j).LT.1.E-02)) then390 ! ilemx(i-1,j)=.true.391 ! ilemx(i,j)=.true.392 ! ilemx(i+1,j)=.true.393 394 ! ! F G G G F395 ! ! x396 ! ! modif tof 26/08/02 limite sur la pente (si diff S > 400 m)397 ! else if ((i.lt.nx-2) &398 ! .and.(flot(i-2,j).and..not.flot(i-1,j) &399 ! .and..not.flot(i,j)).and..not.flot(i+1,j) &400 ! .and.flot(i+2,j).and. &401 ! (sdx(i,j).LT.1.E-02.and.sdx(i-1,j).LT.1.E-02 &402 ! .and.sdx(i+1,j).LT.1.E-02)) then403 ! ilemx(i-1,j)=.true.404 ! ilemx(i,j)=.true.405 ! ilemx(i+1,j)=.true.406 ! ilemx(i+2,j)=.true.407 408 ! endif409 410 ! end do411 ! end do ilesx412 ! !$OMP END DO413 414 ! ! selon y415 ! !$OMP DO416 ! ilesy: do j=3,ny-2417 ! do i=2,nx-1418 ! ! F G F419 ! ! x420 ! ! modif tof 26/08/02 limite sur la pente (si diff S > 400 m)421 ! if ((flot(i,j-1).and..not.flot(i,j).and.flot(i,j+1)).and. &422 ! (sdy(i,j).LT.1.E-02)) then423 ! ilemy(i,j)=.true.424 ! ilemy(i,j+1)=.true.425 426 ! ! F G G F427 ! ! x428 ! ! modif tof 26/08/02 limite sur la pente (si diff S > 400 m)429 ! else if ((flot(i,j-1).and..not.flot(i,j) &430 ! .and..not.flot(i,j+1)).and.flot(i,j+2).and. &431 ! (sdy(i,j).LT.1.E-02.and.sdy(i,j+1).LT.1.E-02)) then432 ! ilemy(i,j)=.true.433 ! ilemy(i,j+1)=.true.434 ! ilemy(i,j+2)=.true.435 436 ! ! F G G F437 ! ! x438 ! ! modif tof 26/08/02 limite sur la pente (si diff S > 400 m)439 ! else if ((flot(i,j-2).and..not.flot(i,j-1) &440 ! .and..not.flot(i,j)).and.flot(i,j+1).and. &441 ! (sdy(i,j).LT.1.E-02.and.sdy(i,j-1).LT.1.E-02)) then442 ! ilemy(i,j-1)=.true.443 ! ilemy(i,j)=.true.444 ! ilemy(i,j+1)=.true.445 446 ! ! F G G G F447 ! ! x448 ! ! modif tof 26/08/02 limite sur la pente (si diff S > 400 m)449 ! else if ((j.lt.ny-2) &450 ! .and.(flot(i,j-2).and..not.flot(i,j-1) &451 ! .and..not.flot(i,j)).and..not.flot(i,j+1) &452 ! .and.flot(i,j+2).and. &453 ! (sdy(i,j).LT.1.E-02.and.sdy(i,j-1).LT.1.E-02 &454 ! .and.sdy(i,j+1).LT.1.E-02)) then455 ! ilemy(i,j-1)=.true.456 ! ilemy(i,j)=.true.457 ! ilemy(i,j+1)=.true.458 ! ilemy(i,j+2)=.true.459 ! endif460 ! end do461 ! end do ilesy462 ! !$OMP END DO463 ! ! fin des iles464 465 !$OMP END PARALLEL466 241 467 242 … … 471 246 472 247 if (itracebug.eq.1) call tracebug(' routine flottab apres call dragging') 473 !!$call detect_assym(nx,ny,0,41,1,0,1,0,H,itestf)474 !!$if (itestf.gt.0) then475 !!$ write(6,*) 'dans flottab apres dragging asymetrie sur H pour time=',time476 !!$ stop477 !!$else478 !!$ write(6,*) 'dans flottab aapres dragging pas d asymetrie sur H pour time=',time479 !!$480 !!$end if481 248 482 249 ! 6- calcule les vitesses des points qui sont devenus gzm … … 523 290 524 291 !$OMP WORKSHARE 525 flgzmx(:,:)=(flotmx(:,:).or.gzmx(:,:) .or.ilemx(:,:))292 flgzmx(:,:)=(flotmx(:,:).or.gzmx(:,:)) 526 293 where (hmx(:,:).eq.0.) 527 294 flgzmx(:,:) = .false. 528 295 endwhere 529 flgzmy(:,:)=(flotmy(:,:).or.gzmy(:,:) .or.ilemy(:,:))296 flgzmy(:,:)=(flotmy(:,:).or.gzmy(:,:)) 530 297 where (hmy(:,:).eq.0.) 531 298 flgzmy(:,:) = .false. … … 541 308 do j=2,ny-1 542 309 do i=2,nx-1 543 544 ! if (i.gt.2.AND.i.lt.nx) then545 310 fbm(i,j)=flot(i,j).and. & 546 311 ((.not.flot(i+1,j)).or.(.not.flot(i,j+1)) & 547 312 .or.(.not.flot(i-1,j)).or.(.not.flot(i,j-1))) 548 ! endif549 313 end do 550 314 end do … … 558 322 559 323 560 561 !!$do i=3,nx-2562 !!$ do j=3,ny-2563 !!$ if (h(i,j).gt.1.1) ice(i,j)=1564 !!$ end do565 !!$end do566 ! print*, 'flolottab debug', H(71,25),flot(71,25),bm(71,25),ice(71,25),time567 !print*,'H(90,179) flottab 2',H(90,179),ice(90,179),flot(90,179)568 324 !$OMP WORKSHARE 569 325 where (flot(:,:)) 570 !cdc 1m where (H(:,:).gt.max(Hmin,Hmin+BM(:,:)-Bmelt(:,:)))571 326 where (H(:,:).gt.max(BM(:,:)-Bmelt(:,:)+petit_H,0.)*dt) 572 !cdc where (H(:,:).gt.0.)573 327 ice(:,:)=1 574 328 elsewhere … … 587 341 !$OMP END WORKSHARE 588 342 !$OMP END PARALLEL 589 ! print*,'flottab',time,H(191,81),bm(191,81),bmelt(191,81),(BM(191,81)-Bmelt(191,81)+petit_H)*dt,ice(191,81) 590 !print*,'H(90,179) flottab 3',H(90,179),ice(90,179),flot(90,179),Bsoc(90,179)+H(90,179)*ro/row -sealevel 591 592 !call determin_front ! cette version ne conserve pas la masse !!! 593 call determin_front_tof ! version simplifiee 343 344 call determin_front_tof 594 345 595 346 ! pour sorties initMIP: … … 613 364 614 365 implicit none 366 367 ! Variables pour la determination des differents shelfs/stream 368 ! (representés comme des taches ou l'on resoud l'eq elliptique) 369 !________________________________________________________________ 370 integer,parameter :: n_ta_max=2000!< nombre de tache max 371 integer,dimension(nx,ny) :: table_out !< pour les numeros des taches 372 integer,dimension(0:n_ta_max) :: compt !< contient les equivalence entre les taches 373 integer,dimension(0:n_ta_max) :: nb_pts_tache !< indique le nombre de points par tache 374 logical,dimension(0:n_ta_max) :: iceberg1D !< T si iceberg, F si calotte posee 375 logical,dimension(n_ta_max) :: icetrim !< icetrim : T si ice stream, F si calotte posee(vertical shear) 376 377 logical,dimension(nx,ny) :: mask_tache_ij !< masque de travail 378 integer,dimension(2) :: smax_coord !< pour le maxloc des iles 379 integer :: smax_i 380 integer :: smax_j 381 real :: smax_ 382 615 383 integer :: i,j 616 384 integer :: indice … … 619 387 ! integer :: mask_nb = 4 620 388 integer,parameter :: mask_nb = 2 ! version ou on ne compte pas les diagonales 621 ! integer,dimension(mask_nb) :: mask622 389 integer,dimension(mask_nb) :: mask 623 390 … … 630 397 compt(i)=i 631 398 enddo 632 ! table_in = .false.633 399 !$OMP PARALLEL 634 400 !$OMP WORKSHARE … … 639 405 !$OMP END WORKSHARE 640 406 !$OMP END PARALLEL 641 ! open(unit=100,file="tache.data",status='replace')642 407 643 408 ! 2-reperage des taches … … 659 424 if (mask(indice).gt.0) label=min(label,mask(indice)) 660 425 enddo 661 !cdc label=min(label,minval(mask(:), mask=mask > 0))662 426 663 427 !on fixe la valeur de la tache voisine minimun au point etudie (via label) … … 774 538 !cdc transfere dans calving : 775 539 else ! on est sur un iceberg ! test1 776 iceberg(i,j)=iceberg1D(table_out(i,j)) 777 !~ ice(i,j)=0 778 !~ h(i,j)=0. !1. afq, we should put everything in calving! 779 !~ surnet=H(i,j)*(1.-ro/row) 780 !~ S(i,j)=surnet+sealevel 781 !~ B(i,j)=S(i,j)-H(i,j) 540 iceberg(i,j)=iceberg1D(table_out(i,j)) 782 541 endif test1 783 542 end do … … 801 560 implicit none 802 561 562 integer :: pmx,pmy !pm=plus-moins -1 ou 1 pour x et y 803 563 integer :: i,j,k 804 564 integer :: i_moins1,i_plus1,i_plus2 … … 863 623 !$OMP ENd PARALLEL 864 624 865 !!$call detect_assym(nx,ny,0,41,1,0,1,0,H,itestf)866 !!$if (itestf.gt.0) then867 !!$ write(6,*) 'dans front avant remplissage baies asymetrie sur H pour time=',time868 !!$ stop869 !!$else870 !!$ write(6,*) 'dans front avant remplissage baies pas d asymetrie sur H pour time=',time871 !!$872 !!$end if873 874 875 ! print*,'dans remplissage baies',time876 625 877 626 baies: do k=1,2 … … 916 665 end do baies 917 666 918 !!$call detect_assym(nx,ny,0,41,1,0,1,0,H,itestf)919 !!$if (itestf.gt.0) then920 !!$ write(6,*) 'dans front apres remplissage baies asymetrie sur H pour time=',time921 !!$ stop922 !!$else923 !!$ write(6,*) 'dans front apres remplissage baies pas d asymetrie sur H pour time=',time924 !!$925 !!$end if926 667 927 668 !$OMP PARALLEL … … 970 711 front(nx,ny)=ice(nx,ny-1)+ice(nx-1,ny) 971 712 972 !!$call detect_assym(nx,ny,0,41,1,0,1,0,H,itestf)973 !!$if (itestf.gt.0) then974 !!$ write(6,*) 'dans front apres front asymetrie sur H pour time=',time975 !!$ stop976 !!$else977 !!$ write(6,*) 'dans front apres front pas d asymetrie sur H pour time=',time978 !!$979 !!$end if980 713 981 714 ! on ne compte pas les taches de glace de 2 cases (horizontales ou verticales) … … 1111 844 1112 845 implicit none 846 847 integer,parameter :: n_ta_max=2000!< nombre de tache max 1113 848 1114 849 integer :: i,j -
branches/GRISLIv3/SOURCES/furst_schoof_mod.f90
r446 r470 144 144 !flux ! in out G out in 145 145 146 147 !afq -- if (.not.(ilemx(i,j)).and..not.(ilemx(i-1,j))) then148 146 149 147 ! extrapolation pour avoir uxbar(i-1,j) qui sera ensuite prescrit dans call rempli_L2 … … 178 176 !flux ! in in out G out in 179 177 180 !afq -- if (.not.(ilemx(i,j)).and..not.(ilemx(i+1,j))) then181 182 178 ! extrapolation pour avoir uxbar(i,j) qui sera ensuite prescrit dans call rempli_L2 183 179 … … 236 232 !flux ! in out G out in 237 233 238 !afq -- if (.not.(ilemx(i,j)).and..not.(ilemx(i+1,j))) then239 240 234 ! extrapolation pour avoir uxbar(i,j) qui sera ensuite prescrit dans call rempli_L2 241 235 … … 263 257 ! ! i-1 i i+1 i+2 i+3 264 258 !flux ! in out G out in 265 266 !afq -- if (.not.(ilemx(i+1,j)).and..not.(ilemx(i+2,j))) then267 259 268 260 ! extrapolation pour avoir uxbar(i,j) qui sera ensuite prescrit dans call rempli_L2 … … 328 320 !flux ! in out G out in 329 321 330 !afq -- if (.not.(ilemy(i,j)).and..not.(ilemy(i,j-1))) then331 332 322 ! extrapolation pour avoir uybar(i,j-1) qui sera ensuite prescrit dans call rempli_L2 333 323 … … 356 346 ! j-2 j-1 j j+1 j+2 357 347 !flux ! in in out G out in 358 359 !afq -- if (.not.(ilemy(i,j)).and..not.(ilemy(i,j+1))) then360 348 361 349 ! extrapolation pour avoir uybar(i,j) qui sera ensuite prescrit dans call rempli_L2 … … 415 403 !flux ! in out G out in 416 404 417 !afq -- if (.not.(ilemy(i,j)).and..not.(ilemy(i,j+1))) then418 419 405 ! extrapolation pour avoir uybar(i,j) qui sera ensuite prescrit dans call rempli_L2 420 406 … … 442 428 ! ! j-1 j j+1 j+2 j+3 443 429 !flux ! in out G out in 444 445 !afq -- if (.not.(ilemy(i,j+1)).and..not.(ilemy(i,j+2))) then446 430 447 431 ! extrapolation pour avoir uybar(i,j) qui sera ensuite prescrit dans call rempli_L2 -
branches/GRISLIv3/SOURCES/initial2-0.4.f90
r467 r470 20 20 slope,taub,ubx,uby,uzk,uxbar,uybar,ibase,tpmp,mk,mk0,h,front, & 21 21 bsoc,flot,sealevel_2D,flotmx,flotmy,gzmx, & 22 gzmy,flgzmx,flgzmy, ilemx,ilemy,sdx,sdy,ux,uy,uzr,t,s22 gzmy,flgzmx,flgzmy,sdx,sdy,ux,uy,uzr,t,s 23 23 use geography, only: nx,ny,nz,nzm,dx 24 24 USE param_phy_mod,only: ro,row … … 84 84 FLGZMX(:,:)=.FALSE. 85 85 FLGZMY(:,:)=.FALSE. 86 ILEMX(:,:)=.FALSE.87 ILEMY(:,:)=.FALSE.88 86 89 87 -
branches/GRISLIv3/SOURCES/printdebug.f90
r426 r470 21 21 22 22 use module3D_phy, only: num_debug,ndebug,time,dt,H,S,sdx,sdy,Bsoc,Hdot,uxbar,uybar,& 23 gzmx,gzmy, ilemx,ilemy,flotmx,flotmy,hmx,hmy23 gzmx,gzmy,flotmx,flotmy,hmx,hmy 24 24 use runparam, only: runname 25 25 use geography, only: nx,ny … … 141 141 !______________________________________ 142 142 143 ! grounded -> 0, , grzone ->1 ilemx->2flot->3143 ! grounded -> 0, , grzone ->1 flot->3 144 144 145 145 do j=jj-2,jj+2 … … 147 147 148 148 if (gzmx(i,j)) then 149 if (ilemx(i,j)) then ! ile 150 posx(i,j)=2 151 else 152 posx(i,j)=1 ! grounded zone 153 endif 149 posx(i,j)=1 ! grounded zone 154 150 else if (flotmx(i,j)) then ! flottant 155 151 if (HMX(i,j).gt.1.) then … … 164 160 end do 165 161 166 write(num_debug,*)'Posx grounded -> 0, , grzone ->1 ilemx->2flot->3'162 write(num_debug,*)'Posx grounded -> 0, , grzone ->1 flot->3' 167 163 write(num_debug,fmt='(4(i7,8x))') Posx(ii-1:ii+2,jj+2:jj-2:-1) 168 164 write(num_debug,*)'-----------------------------------------------------------' 169 165 ! write(num_debug,*) 'apres posx', ii,jj 170 171 !!$! pour changer de page172 !!$ write(num_debug,*)173 !!$ write(num_debug,*)174 !!$ write(num_debug,*)175 !!$ write(num_debug,*)176 !!$ write(num_debug,*)177 !!$ write(num_debug,*)178 166 179 167 !________________________________________________________ selon y … … 199 187 200 188 if (gzmy(i,j)) then 201 if (ilemy(i,j)) then 202 posy(i,j)=2 203 else 204 posy(i,j)=1 205 endif 189 posy(i,j)=1 206 190 else if (flotmy(i,j)) then 207 191 if (HMY(i,j).gt.1.) then … … 224 208 write(num_debug,*)'-----------------------------------------------------------' 225 209 226 ! write(num_debug,*) 'apres posy', ii,jj227 210 228 211 close(num_debug) 229 ! write(num_debug,*) 'apres Sdx', ii,jj230 212 231 213 return
Note: See TracChangeset
for help on using the changeset viewer.