Changeset 71
- Timestamp:
- 06/15/16 17:13:33 (8 years ago)
- Location:
- trunk/SOURCES
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SOURCES/Fichiers-parametres/Makefile.tof-lsce3130.inc
r65 r71 42 42 # (normalement reproductible) 43 43 ifeq ($(debug), 1) 44 ARITHM = $(ARITHMi) -CB -g - traceback -warn all44 ARITHM = $(ARITHMi) -CB -g -p -traceback -warn all -openmp 45 45 else 46 46 ARITHM = $(ARITHMi) -diag-disable warn -
trunk/SOURCES/New-remplimat/diagno-L2_mod.f90
r65 r71 1 1 !module diagno_L2_mod ! Nouvelle version, compatible remplimat 2008 Cat 2 2 module diagno_mod ! nom pendant les tests 3 3 !$ USE OMP_LIB 4 4 use module3D_phy 5 5 use module_choix … … 238 238 ! Pour les noeuds posés mais ayant un voisin stream ou flottant, on calcule 239 239 ! la viscosité avec stream/shelves 240 241 240 ! le calcul se fait sur les noeuds majeurs 241 242 !$ integer :: rang ,nb_taches 243 !$ logical :: paral 244 245 integer :: t1,t2,ir 246 real :: temps, t_cpu_0, t_cpu_1, t_cpu, norme 247 242 248 if (itracebug.eq.1) call tracebug(' Calc pvi') 249 250 !$OMP PARALLEL PRIVATE(rang,iplus1,jplus1,sf3,sf1,BT2,phiphi,ttau,d02,discr) 251 !$ paral = OMP_IN_PARALLEL() 252 !$ rang=OMP_GET_THREAD_NUM() 253 !$ nb_taches=OMP_GET_NUM_THREADS() 254 255 !$OMP WORKSHARE 243 256 pvi(:,:) = pvimin 244 257 Abar(:,:) = 0. 245 246 258 !$OMP END WORKSHARE 259 260 !$OMP DO 247 261 do j=1,ny 248 262 do i=1,nx … … 322 336 end do 323 337 end do 338 !$OMP END DO 324 339 325 340 ! cas des noeuds fictifs, si l'épaisseur est très petite 326 341 ! pvimin est très petit 327 342 !$OMP WORKSHARE 328 343 where (H(:,:).le.1.) 329 344 pvi(:,:) = pvimin … … 334 349 end where 335 350 351 336 352 debug_3D(:,:,27)=pvi(:,:) 337 353 !$OMP END WORKSHARE 338 354 ! attention run 35 339 355 !-------------------- … … 345 361 346 362 ! calcul de la viscosite integree au milieu des mailles (pvm) 347 363 !$OMP DO 348 364 do i=2,nx 349 365 do j=2,ny … … 355 371 end do 356 372 end do 373 !$OMP END DO 374 !$OMP END PARALLEL 375 357 376 end subroutine calc_pvi 358 377 !------------------------------------------------------------------ … … 379 398 ! -41 -1 Sud -12 380 399 381 382 400 !$OMP PARALLEL 401 !$OMP WORKSHARE 383 402 imx_diag(:,:)=0 384 403 imy_diag(:,:)=0 … … 432 451 imx_diag(1,:)=0 ! hors domaine a cause des mailles alternees 433 452 imy_diag(:,1)=0 ! hors domaine a cause des mailles alternees 453 !$OMP END WORKSHARE 454 !$OMP END PARALLEL 434 455 435 456 end subroutine imx_imy_nx_ny -
trunk/SOURCES/Temperature-routines/Qprod_icetemp.f90
r70 r71 17 17 18 18 use Icetemp_declar 19 !$ USE OMP_LIB 20 19 21 20 22 implicit none … … 41 43 real, dimension(Nx,Ny) :: Tox !< Contraintes Sur Maille Mx 42 44 real, dimension(Nx,Ny) :: Toy !< Contraintes Sur Maille Mx 45 real :: Chalk_1 !< Utilise Pour Le Calcul De Chalk : Glace Posée 46 real :: Chalk_2 !< Utilise Pour Le Calcul De Chalk : Ice Streams Et Ice 43 47 44 48 … … 52 56 ! Q_prod_demi(T_m%T,T_m%Tpmp,Deform_m%Tobmx,Deform_m%Tobmy,Geom_m%H,Geom_m%Hmx,Geom_m%Hmy,mask_flot_m%Flot,mask_flot_m%Flotmx,mask_flot_m%Flotmy,mask_flot_m%Flgzmx ,mask_flot_m%Flgzmy,Geom_m%Slop_x,Geom_m%Slop_y,Ice_flow_m%Ddx,Ice_flow_m%Ddy,& 53 57 ! Ice_flow_m%Ddbx,Ice_flow_m%Ddby,Deform_m%Epsxx,Deform_m%Epsyy,Deform_m%Epsxy,mask_flot_m%Gzmx,mask_flot_m%Gzmy,Deform_m%Btt,Ice_flow_m%Uxbar,Ice_flow_m%Uybar,therm_var_m%Phid,Deform_m%Glen,Deform_m%Visc) 54 55 do K=2,Nz 56 do J=2,Ny-1 57 do I=2,Nx-1 58 59 60 61 !$OMP PARALLEL PRIVATE(chalk_1,chalk_2) 62 !$OMP DO COLLAPSE(2) 63 do K=2,Nz 64 do J=2,Ny-1 65 do I=2,Nx-1 58 66 59 67 ! Calcul De La Chaleur De Deformation Selon Xx Yy Zz Et Xy … … 80 88 end do 81 89 end do 82 end do 90 ! !$ i_min=min(i_min,j) 91 ! !$ i_max=max(i_max,j) 92 end do 93 !$OMP END DO NOWAIT 94 ! !$ print*,'nb_taches = ', nb_taches 95 ! !$ print*,"Rang : ",rang," i_min : ",i_min," i_max : ",i_max 83 96 84 97 ! Partie Sia Calcul De La Chaleur Produite Sur Chaque Demi Maille 85 do L=1,size(Btt,4) !N1poly,N2poly 86 do J=2,Ny 98 !$OMP DO COLLAPSE(2) 99 do L=1,size(Btt,4) !N1poly,N2poly 100 do J=2,Ny 87 101 do I=2,Nx 88 102 ! Ffx A 3 Dimensions ! … … 92 106 end do 93 107 end do 94 95 do L=1,size(Btt,4)!N1poly,N2poly 96 do K=2,Nz 97 do J=2,Ny 98 do I=2,Nx 99 if ((.not.Flotmx(I,J)).and.(.not.fleuvemx(I,J))) then ! grounded et slowssa 100 Chalx(I,J,K,L)=(Btt(I-1,J,K,L)+Btt(I,J,K,L))*Ffx(I,J,L) !& 108 !$OMP END DO 109 110 !$OMP DO COLLAPSE(2) 111 do K=2,Nz 112 do J=2,Ny 113 do I=2,Nx 114 do L=1,size(Btt,4)!N1poly,N2poly 115 if ((.not.Flotmx(I,J)).and.(.not.fleuvemx(I,J))) then ! grounded et slowssa 116 Chalx(I,J,K,L)=(Btt(I-1,J,K,L)+Btt(I,J,K,L))*Ffx(I,J,L) !& 101 117 ! *Ro*G*Ee(K)**(Glen(L)+1)/Cp(I,J,K) 102 118 103 104 105 106 107 108 109 119 else if (fleuvemx(I,J)) then ! Ice Streams 120 Chalx(I,J,K,L)=0. 121 else ! Ice Shelves 122 Chalx(I,J,K,L)=0. 123 endif 124 if ((.not.Flotmy(I,J)).and.(.not.fleuvemy(I,J))) then ! grounded et slowssa 125 Chaly(I,J,K,L)=(Btt(I,J-1,K,L)+Btt(I,J,K,L))*Ffy(I,J,L) !& 110 126 ! *Ro*G*Ee(K)**(Glen(L)+1)/Cp(I,J,K) 111 else if (fleuvemy(I,J)) then ! Ice Streams 112 Chaly(I,J,K,L)=0. 113 else ! Ice Shelves 114 Chaly(I,J,K,L)=0. 115 endif 116 117 end do 118 end do 119 end do 120 end do 127 else if (fleuvemy(I,J)) then ! Ice Streams 128 Chaly(I,J,K,L)=0. 129 else ! Ice Shelves 130 Chaly(I,J,K,L)=0. 131 endif 132 133 end do 134 end do 135 end do 136 end do 137 !$OMP END DO 138 121 139 122 140 ! Nouvelle Formulation De Chaldef_maj(I,J,K), Le 4 Vient Des Moyennes … … 125 143 ! Ancienne Formulation Chal=(Ro*G*H(I,J))**4*(Sx2+Sy2)*(Sx*Sx+Sy*Sy) 126 144 127 do K=2,Nz128 do J=1,Ny-1129 do I=1,Nx-1130 145 !$OMP DO COLLAPSE(2) 146 do K=2,Nz 147 do J=1,Ny-1 148 do I=1,Nx-1 131 149 ! Modif Christophe Mars 2000 : Chalx Et Chaly Sont A 4 Dim 132 150 Chaldef_maj(I,J,K)= 0. … … 152 170 end do 153 171 end do 172 !$OMP END DO NOWAIT 173 154 174 ! Chaleur Produite A La Base Par Le Glissement 175 !$OMP DO 155 176 do J=2,Ny 156 177 do I=2,Nx … … 168 189 endif 169 190 170 end do 171 end do 172 191 end do 192 end do 193 !$OMP END DO 194 173 195 ! Boundary Condition Ice-Rock Interface 174 196 K=Nz 175 197 198 !$OMP DO 176 199 do J=2,Ny-1 177 200 do I=2,Nx-1 … … 227 250 end do 228 251 end do 229 252 !$OMP END DO 253 !$OMP END PARALLEL 254 230 255 231 256 case (2) ! Q_prod_centre : Calcul Avec La Somme Des Carres … … 904 929 905 930 end select 931 906 932 end subroutine Qprod_ice -
trunk/SOURCES/Temperature-routines/icetemp_declar_mod.f90
r29 r71 32 32 ! a la Base De L'Ice Shelf 33 33 Integer :: Ifail1 !< Permet De Detecter Les Erreurs 34 Real :: Chalk_1 !< Utilise Pour Le Calcul De Chalk : Glace Posée35 Real :: Chalk_2 !< Utilise Pour Le Calcul De Chalk : Ice Streams Et Ice Shelves36 34 Real :: Chalbed_1 !< Utilise Pour Le Calcul De Chalbed 37 35 Real :: Coefadv !< Pour Limiter Le Flux De Chaleur Horiz. -
trunk/SOURCES/deformation_mod_2lois.f90
r4 r71 179 179 subroutine flow_general 180 180 181 !$ USE OMP_LIB 181 182 implicit none 182 183 184 !$OMP PARALLEL 185 !$OMP WORKSHARE 183 186 teta(:,:,:) = t(:,:,1:nz)-tpmp(:,:,:) 184 185 187 !$OMP END WORKSHARE 188 189 !$OMP DO COLLAPSE(2) 186 190 do k=nz-1,1,-1 187 191 do i=2,nx-1 … … 192 196 end do 193 197 end do 198 !$OMP END DO 199 !$OMP END PARALLEL 194 200 195 201 end subroutine flow_general … … 197 203 subroutine flowlaw (iiglen) 198 204 205 !$ USE OMP_LIB 199 206 200 207 implicit none … … 216 223 ! real,dimension(nz) :: e ! vertical coordinate in ice, scaled to h zeta 217 224 real :: de= 1./(nz-1) 225 ! variables openmp : 226 !$ integer :: rang 227 !$ integer, dimension(:), allocatable :: tab_sync 228 !$ integer :: nb_taches 229 218 230 219 231 e(1)=0. 220 232 e(nz)=1. 233 234 !$OMP PARALLEL PRIVATE(bat,q,aat,ssec,zetat) 235 !$ nb_taches = OMP_GET_NUM_THREADS() 236 !$OMP DO 221 237 do k=1,nz 222 238 if ((k.ne.1).and.(k.ne.nz)) e(k)=(k-1.)/(nz-1.) 223 239 end do 240 !$OMP END DO NOWAIT 224 241 225 242 ! exposant de la loi de deformation utilisee : glen(iiglen) … … 230 247 ! boucle pour btt a k=1 231 248 ti1=273.15*273.15 249 !$OMP DO 232 250 do j=2,ny-1 233 251 do i=2,nx-1 … … 239 257 end do 240 258 end do 259 !$OMP END DO 241 260 242 261 ! boucle pour tous les autres btt 262 !$OMP DO COLLAPSE(2) 243 263 do k=nz-1,1,-1 244 do j=2,ny-1 264 do j=2,ny-1 245 265 do i=2,nx-1 246 266 if (h(i,j).gt.1.) then … … 361 381 end do 362 382 end do 363 383 !$OMP END DO NOWAIT 384 364 385 ! integration de sa et s2a 365 386 !$OMP DO 366 387 do j=1,ny 367 388 do i=1,nx … … 371 392 end do 372 393 end do 373 394 !$OMP END DO 395 !$OMP END PARALLEL 396 397 398 ! Allocation et initialisation du tableau tab_sync 399 ! qui gere la synchronisation entre les differents threads 400 !$ allocate(tab_sync(0:nb_taches-1)) 401 !$ tab_sync(0:nb_taches-1) = 1 402 !$OMP PARALLEL private(i,j,k,rang) shared(tab_sync) 403 !$ rang = OMP_GET_THREAD_NUM() 374 404 do k=nz-1,1,-1 405 ! Synchronisation des threads 406 !$ if (rang /= 0) then 407 !$ do 408 !$OMP FLUSH(tab_sync) 409 !$ if (tab_sync(rang-1)>=tab_sync(rang)+1) exit 410 !$ enddo 411 !$OMP FLUSH(sa) 412 !$OMP FLUSH(s2a) 413 !$ endif 414 !$OMP DO SCHEDULE(STATIC) 375 415 do j=1,ny 376 416 do i=1,nx … … 386 426 end do 387 427 end do 388 end do 389 428 !$OMP END DO NOWAIT 429 ! ! Mis a jour du tableau tab_sync 430 !$ tab_sync(rang) = tab_sync(rang) + 1 431 !$OMP FLUSH(tab_sync,sa,s2a) 432 end do 433 434 !$OMP WORKSHARE 390 435 ! cas particulier des bords 391 436 sa(:,1,:,iiglen)=sa(:,2,:,iiglen) … … 402 447 s2a(nx,:,:,iiglen)=s2a(nx-1,:,:,iiglen) 403 448 btt(nx,:,:,iiglen)=btt(nx-1,:,:,iiglen) 404 449 !$OMP END WORKSHARE 450 !$OMP END PARALLEL 451 405 452 ! calcul des moyennes sur les mailles staggered 406 407 453 do k=1,nz 408 454 tab2d=sa(:,:,k,iiglen) … … 417 463 s2a_my(:,:,k,iglen)=tab_my 418 464 end do 419 465 420 466 ! attribution de debug_3d pour les sorties s2a 421 467 ! loi 1 -> 190 dans description variable -> 90 dans debug_3d 422 debug_3d(:,:,90+iiglen-1) = s2a(:,:,1,iiglen) 468 !debug_3d(:,:,90+iiglen-1) = s2a(:,:,1,iiglen) 469 470 471 !~ ! Temps elapsed final 472 !~ call system_clock(count=t2, count_rate=ir) 473 !~ temps=real(t2 - t1,kind=4)/real(ir,kind=4) 474 !~ ! Temps CPU de calcul final 475 !~ call cpu_time(t_cpu_1) 476 !~ t_cpu = t_cpu_1 - t_cpu_0 477 478 !~ ! Impression du resultat. 479 !~ print '(//,3X,"Valeurs de nx et ny : ",I5,I5/, & 480 !~ & 3X,"Temps elapsed : ",1PE10.3," sec.",/, & 481 !~ & 3X,"Temps CPU : ",1PE10.3," sec.",/, & 482 !~ & 3X,"Norme (PB si /= 0) : ",1PE10.3,//)', & 483 !~ nx,ny,temps,t_cpu,norme 423 484 424 485 end subroutine flowlaw -
trunk/SOURCES/flottab2-0.7.f90
r58 r71 16 16 module flottab_mod 17 17 18 !$ USE OMP_LIB 18 19 USE module3D_phy 19 20 use module_choix … … 104 105 105 106 107 !~ integer :: t1,t2,ir 108 !~ real :: temps, t_cpu_0, t_cpu_1, t_cpu, norme 109 110 !~ ! Temps CPU de calcul initial. 111 !~ call cpu_time(t_cpu_0) 112 !~ ! Temps elapsed de reference. 113 !~ call system_clock(count=t1, count_rate=ir) 114 106 115 107 116 if (itracebug.eq.1) call tracebug(' Entree dans routine flottab') … … 112 121 ! cas particulier des runs paleo ou on impose un masque grounded 113 122 123 !$OMP PARALLEL PRIVATE(archim,surnet) 114 124 if (igrdline.eq.2) then 125 !$OMP WORKSHARE 115 126 where ( mk_init(:,:).eq.1) ! pose 116 127 flot(:,:) = .False. … … 120 131 flot(:,:) = .True. 121 132 end where 133 !$OMP END WORKSHARE 122 134 end if 123 135 … … 129 141 130 142 appel_new_flot=.false. 143 !$OMP DO 131 144 do j=1,ny 132 145 do i=1,nx … … 136 149 enddo 137 150 enddo 138 151 !$OMP END DO 152 139 153 ! ICE(:,:)=(H(:,:).gt.1) ! ice=.true. si epaisseur > 1m 140 154 155 !$OMP WORKSHARE 141 156 ICE(:,:)=0 142 157 front(:,:)=0 … … 148 163 cotemy(:,:)=.false. 149 164 boost=.false. 165 !$OMP END WORKSHARE 150 166 151 167 ! fin de l'initialisation … … 155 171 ! ------------------------------------- 156 172 157 173 !$OMP DO 158 174 do j=1,ny 159 175 do i=1,nx … … 223 239 end do 224 240 end do 225 241 !$OMP END DO 226 242 227 243 !!$ do i=1,nx … … 240 256 241 257 !----------------------------------------------------------------------- 242 258 !$OMP DO 243 259 domain_x: do j=1,ny 244 260 do i=2,nx … … 280 296 end do 281 297 end do domain_x 282 283 if (itracebug.eq.1) call tracebug(' routine flottab apres domain_x')298 !$OMP END DO 299 !if (itracebug.eq.1) call tracebug(' routine flottab apres domain_x') 284 300 285 301 ! 3_y B- NOUVELLE DEFINITION DE FLOTMY 286 302 ! -------------------------------- 303 !$OMP DO 287 304 domain_y: do j=2,ny 288 305 do i=1,nx … … 318 335 end do 319 336 end do domain_y 320 337 !$OMP END DO 321 338 322 339 … … 351 368 ! 4- determination des iles 352 369 ! ------------------------- 353 370 !$OMP WORKSHARE 354 371 ilemx(:,:)=.false. 355 372 ilemy(:,:)=.false. 356 357 ! selon x 373 !$OMP END WORKSHARE 374 375 ! selon x 376 !$OMP DO 358 377 ilesx: do j=2,ny-1 359 378 do i=3,nx-2 … … 404 423 end do 405 424 end do ilesx 406 407 ! selon y 425 !$OMP END DO 426 427 ! selon y 428 !$OMP DO 408 429 ilesy: do j=3,ny-2 409 430 do i=2,nx-1 … … 452 473 end do 453 474 end do ilesy 475 !$OMP END DO 476 !$OMP END PARALLEL 454 477 ! fin des iles 455 478 … … 479 502 480 503 ! 6- calcule les vitesses des points qui sont devenus gzm 481 504 !$OMP PARALLEL 505 !$OMP DO 482 506 do j=1,ny 483 507 do i=2,nx-1 … … 492 516 end do 493 517 end do 494 518 !$OMP END DO 519 520 !$OMP DO 495 521 do j=2,ny-1 496 522 do i=1,nx … … 504 530 end do 505 531 end do 506 532 !$OMP END DO 507 533 508 534 … … 511 537 512 538 if (nt.ge.2) then ! pour ne pas faire ce calcul lors du premier passage 539 !$OMP WORKSHARE 513 540 uxbar(:,:)=uxs1(:,:) 514 uybar(:,:)=uys1(:,:) 541 uybar(:,:)=uys1(:,:) 542 !$OMP END WORKSHARE 515 543 endif 516 544 545 !$OMP WORKSHARE 517 546 flgzmx(:,:)=(marine.and.(flotmx(:,:).or.gzmx(:,:).or.ilemx(:,:))) & 518 547 .or.(.not.marine.and.flotmx(:,:)) 519 548 flgzmy(:,:)=(marine.and.(flotmy(:,:).or.gzmy(:,:).or.ilemy(:,:))) & 520 549 .or.(.not.marine.and.flotmy(:,:)) 521 550 !$OMP END WORKSHARE 522 551 523 552 … … 526 555 ! fbm est vrai si le point est flottant mais un des voisins est pose 527 556 !_________________________________________________________________________ 557 !$OMP DO 528 558 do j=2,ny-1 529 559 do i=2,nx-1 … … 536 566 end do 537 567 end do 538 568 !$OMP END DO 539 569 540 570 … … 552 582 !!$end do 553 583 584 !$OMP WORKSHARE 554 585 where (flot(:,:)) 555 586 where (H(:,:).gt.(1.1)) … … 565 596 end where 566 597 end where 598 !$OMP END WORKSHARE 599 !$OMP END PARALLEL 567 600 568 601 call DETERMIN_TACHE … … 581 614 !----------------------------------------------! 582 615 !On determine les differents ice strean/shelf ! 583 call DETERMIN_TACHE !616 ! call DETERMIN_TACHE ! 584 617 !----------------------------------------------! 585 618 … … 597 630 598 631 !On compte comme englacé uniquement les calottes dont une partie est posée 599 632 !$OMP PARALLEL PRIVATE(smax_,smax_coord,smax_i,smax_j) 633 !$OMP DO 600 634 do i=3,nx-2 601 635 do j=3,ny-2 … … 666 700 end do 667 701 end do 668 702 !$OMP END DO 703 !$OMP END PARALLEL 669 704 670 705 !---------------------------------------------- … … 691 726 !print*, 'front',front(50,30),ice(50,30),flotmx(i,j),uxbar(i,j) 692 727 693 728 !~ ! Temps elapsed final 729 !~ call system_clock(count=t2, count_rate=ir) 730 !~ temps=real(t2 - t1,kind=4)/real(ir,kind=4) 731 !~ ! Temps CPU de calcul final 732 !~ call cpu_time(t_cpu_1) 733 !~ t_cpu = t_cpu_1 - t_cpu_0 734 735 !~ ! Impression du resultat. 736 !~ print '(//,3X,"Valeurs de nx et ny : ",I5,I5/, & 737 !~ & 3X,"Temps elapsed : ",1PE10.3," sec.",/, & 738 !~ & 3X,"Temps CPU : ",1PE10.3," sec.",/, & 739 !~ & 3X,"Norme (PB si /= 0) : ",1PE10.3,//)', & 740 !~ nx,ny,temps,t_cpu,norme 694 741 695 742 end subroutine flottab … … 700 747 !> 701 748 subroutine determin_tache 749 750 !!$ USE OMP_LIB 702 751 703 752 implicit none … … 720 769 enddo 721 770 ! table_in = .false. 722 771 !!$OMP PARALLEL 772 !!$OMP WORKSHARE 723 773 table_out(:,:) = 0 724 774 iceberg(:) = .true. 725 775 icetrim (:) = .true. 726 776 nb_pts_tache(:) = 0 727 777 !!$OMP END WORKSHARE 778 !!$OMP END PARALLEL 728 779 ! open(unit=100,file="tache.data",status='replace') 729 780 730 781 ! 2-reperage des taches 731 782 !---------------------- 783 !!$OMP PARALLEL PRIVATE(mask,label,indice) 784 !!$OMP DO 732 785 do i=2,nx-1 733 786 do j=2,ny-1 … … 736 789 737 790 IF (ice(i,j).ge.1) THEN ! on est sur la glace-----------------------------! 738 791 739 792 if ((ice(i-1,j).ge.1).or.(ice(i,j-1).ge.1)) then !masque de 2 cases adjacentes 740 793 ! un des voisins est deja en glace … … 747 800 if (mask(indice).gt.0) label=min(label,mask(indice)) 748 801 enddo 802 !cdc label=min(label,minval(mask(:), mask=mask > 0)) 749 803 750 804 !on fixe la valeur de la tache voisine minimun au point etudie (via label) … … 798 852 enddo 799 853 enddo 800 854 !!$OMP END DO 855 !!$OMP END PARALLEL 801 856 802 857 803 858 ! On reorganise compt en ecrivant le numero de la tache fondamentale 804 859 ! i.e. du plus petit numero present sur la tache (Sans utiliser de recursivité) 805 ! On indique aussi le nb de point que contient chaque taches (nb_pts_tache) 860 ! On indique aussi le nb de point que contient chaque taches (nb_pts_tache) 861 806 862 do indice=1,label_max 807 863 vartemp = compt(indice) … … 813 869 enddo 814 870 871 !!$OMP PARALLEL 872 !!$OMP DO REDUCTION(+:nb_pts_tache) 815 873 do i=1,nx 816 874 do j=1,ny … … 821 879 enddo 822 880 enddo 823 824 881 !!$OMP END DO 882 !!$OMP END PARALLEL 825 883 826 884 … … 853 911 !> 854 912 subroutine determin_front 855 913 !!$ USE OMP_LIB 856 914 integer :: i_moins1,i_plus1,i_plus2 857 915 integer :: j_moins1,j_plus1,j_plus2 858 916 859 do i=3,nx-2 860 do j=3,ny-2 917 !!$OMP PARALLEL 918 !!$OMP DO 919 do j=3,ny-2 920 do i=3,nx-2 861 921 862 922 surice:if (ice(i,j).eq.0) then … … 910 970 end do 911 971 end do 912 972 !!$OMP END DO 913 973 914 974 !!$call detect_assym(nx,ny,0,41,1,0,1,0,H,itestf) … … 923 983 924 984 ! print*,'dans remplissage baies',time 985 925 986 baies: do k=1,2 987 !!$OMP DO PRIVATE(i_moins1,j_moins1,i_plus1,j_plus1,i_plus2,j_plus2) 926 988 do j=1,ny 927 989 do i=1,nx … … 958 1020 end do 959 1021 end do 1022 !!$OMP END DO 960 1023 end do baies 961 1024 … … 969 1032 !!$end if 970 1033 971 972 do i=2,nx-1973 do j=2,ny-11034 !!$OMP DO 1035 do j=2,ny-1 1036 do i=2,nx-1 974 1037 975 1038 if (ice(i,j).eq.1) then ! test si ice=1 … … 983 1046 end do 984 1047 end do 1048 !!$OMP END DO 985 1049 986 1050 ! traitement des bords. On considere que l'exterieur n'a pas de glace 987 1051 ! attention ce n'est vrai que sur la grande grille 988 1052 989 1053 !!$OMP DO PRIVATE(i) 990 1054 do j=2,ny-1 991 1055 i=1 … … 994 1058 front(i,j)=(ice(i-1,j)+ice(i,j+1)+ice(i,j-1)) 995 1059 end do 996 1060 !!$OMP END DO 1061 1062 !!$OMP DO PRIVATE(j) 997 1063 do i=2,nx-1 998 1064 j=1 … … 1001 1067 front(i,j)=(ice(i-1,j)+ice(i+1,j)+ice(i,j-1)) 1002 1068 end do 1003 1069 !!$OMP END DO 1004 1070 ! traitement des coins 1005 1071 … … 1023 1089 ! si ces deux taches sont posées (ou une des deux), il n'y a pas assez de conditions aux limites 1024 1090 1025 1091 !!$OMP DO 1026 1092 do j=1,ny 1027 1093 do i=1,nx-1 … … 1036 1102 end do 1037 1103 end do 1038 1104 !!$OMP END DO 1105 1106 !!$OMP DO 1039 1107 do j=1,ny-1 1040 1108 do i=1,nx … … 1049 1117 end do 1050 1118 end do 1119 !!$OMP END DO 1051 1120 1052 1121 !isolx signifie pas de voisins en x … … 1056 1125 1057 1126 ! calcul de frontfacex et isolx 1127 !!$OMP DO 1058 1128 do j=1,ny 1059 1129 do i=2,nx-1 … … 1075 1145 end do 1076 1146 end do 1147 !!$OMP END DO 1077 1148 1078 1149 ! calcul de frontfacey et isoly 1150 !!$OMP DO 1079 1151 do j=2,ny-1 1080 1152 do i=1,nx … … 1096 1168 end do 1097 1169 end do 1098 1170 !!$OMP END DO 1099 1171 1100 1172 … … 1102 1174 ! attention ce n'est vrai que sur la grande grille 1103 1175 1104 1176 !!$OMP DO PRIVATE(i) 1105 1177 do j=2,ny-1 1106 1178 i=1 … … 1121 1193 end if 1122 1194 end do 1123 1195 !!$OMP END DO 1196 1197 !!$OMP DO PRIVATE(j) 1124 1198 do i=2,nx-1 1125 1199 j=1 … … 1140 1214 end if 1141 1215 end do 1142 1143 1216 !!$OMP END DO 1217 !!OMP END PARALLEL 1144 1218 1145 1219 return -
trunk/SOURCES/mix-SIA-L1_mod.f90
r4 r71 53 53 subroutine mix_SIA_L1 54 54 55 !$ USE OMP_LIB 56 ! variables parallelisation openMP 57 !!$ integer :: rang ,nb_taches 55 58 56 59 ! subroutine qui associe SIA et L1 … … 59 62 60 63 ! use module_choix 61 64 if (itracebug.eq.1) call tracebug(' routine mix_SIA_L1') 62 65 63 66 debug_3D(:,:,9)=0. … … 73 76 ! que celles du L1. On garde le L1 comme vitesse basale. 74 77 ! version utilisee pour les runs MIS11 de Cairns 75 78 !$OMP PARALLEL 79 !$OMP DO 76 80 do j=2,ny 77 81 do i=2,nx … … 95 99 end do 96 100 end do 101 !$OMP END DO 102 !$OMP END PARALLEL 97 103 98 104 else if (i_resolmeca.eq.2) then 99 105 100 106 ! addition systematique 101 107 ! !$OMP PARALLEL PRIVATE(rang,nb_taches) 108 ! !$ rang=OMP_GET_THREAD_NUM() 109 ! !$ nb_taches=OMP_GET_NUM_THREADS() 110 ! !$OMP DO SCHEDULE(STATIC,NY/nb_taches) 111 !$OMP PARALLEL 112 !$OMP DO 102 113 do j=2,ny 103 114 do i=2,nx 115 ! test sur tout le tableau : 104 116 if (flgzmx(i,j)) then 105 debug_3D(i,j,11)=uxflgz(i,j)117 ! debug_3D(i,j,11)=uxflgz(i,j) 106 118 uxbar(i,j)=uxflgz(i,j)+uxdef(i,j) ! on ajoute la deform. SIA 107 119 ubx(i,j) = uxflgz(i,j) 108 do k=1,nz 120 ! do k=1,nz 121 ! ux(i,j,k)=ux(i,j,k)-ux(i,j,nz)+uxflgz(i,j) ! remplace le glissement par uxflgz 122 ! end do 123 124 ! debug_3D(i,j,9)=uxdef(i,j) 125 endif 126 127 if (flgzmy(i,j)) then 128 ! debug_3D(i,j,12)=uyflgz(i,j) 129 uybar(i,j)=uyflgz(i,j)+uydef(i,j) ! on ajoute la deform. SIA 130 uby(i,j) = uyflgz(i,j) 131 ! do k=1,nz 132 ! uy(i,j,k)=uy(i,j,k)-uy(i,j,nz)+uyflgz(i,j) ! remplace le glissement par uyflgz 133 ! end do 134 135 ! debug_3D(i,j,10)=uydef(i,j) 136 endif 137 end do 138 end do 139 !$OMP END DO 140 !$OMP END PARALLEL 141 142 ! on ne recalcul ux que lorsque uxflgz est modifié soit tous les dtt 143 if (isynchro.eq.1) then 144 ! !$OMP PARALLEL PRIVATE(rang,nb_taches) 145 ! !$ rang=OMP_GET_THREAD_NUM() 146 ! !$ nb_taches=OMP_GET_NUM_THREADS() 147 ! !$OMP DO SCHEDULE(STATIC,NY/nb_taches) 148 !$OMP PARALLEL 149 !$OMP DO 150 do j=2,ny 151 do i=2,nx 152 if (flgzmx(i,j)) then 153 do k=1,nz 109 154 ux(i,j,k)=ux(i,j,k)-ux(i,j,nz)+uxflgz(i,j) ! remplace le glissement par uxflgz 110 155 end do 111 112 debug_3D(i,j,9)=uxdef(i,j) 113 end if 114 156 endif 115 157 if (flgzmy(i,j)) then 116 debug_3D(i,j,12)=uyflgz(i,j) 117 uybar(i,j)=uyflgz(i,j)+uydef(i,j) ! on ajoute la deform. SIA 118 uby(i,j) = uyflgz(i,j) 119 do k=1,nz 158 do k=1,nz 120 159 uy(i,j,k)=uy(i,j,k)-uy(i,j,nz)+uyflgz(i,j) ! remplace le glissement par uyflgz 121 160 end do 122 123 debug_3D(i,j,10)=uydef(i,j) 124 end if 125 end do 126 end do 127 128 161 endif 162 enddo 163 enddo 164 !$OMP END DO 165 !$OMP END PARALLEL 166 endif 129 167 130 168 else ! SIA et L1 en 2 zones separe : pas d'action (uxbar est deja remis a uxflgz dans diffusiv) -
trunk/SOURCES/moy_mxmy.f90
r4 r71 18 18 subroutine moy_mxmy(n1,n2,X2D,X_mx,X_my) 19 19 ! fait la moyenne ponderee d'un tableau X2D sur les mailles staggered 20 20 !$ USE OMP_LIB 21 21 implicit none 22 22 integer, intent(in) :: n1,n2 !< dimension des tableaux … … 29 29 30 30 31 !$OMP PARALLEL PRIVATE(i_moins1,j_moins1,i_plus1,j_plus1) 32 !$OMP DO 33 do j=1,n2 34 do i=1,n1 35 i_moins1=max(1,i-1) 36 j_moins1=max(1,j-1) 37 i_plus1=min(n1,i+1) 38 j_plus1=min(n2,j+1) 31 39 32 do j=1,n2 33 do i=1,n1 34 i_moins1=max(1,i-1) 35 j_moins1=max(1,j-1) 36 i_plus1=min(n1,i+1) 37 j_plus1=min(n2,j+1) 38 39 X_mx(i,j)=0.25*(X2D(i,j)+X2D(i_moins1,j)) & 40 X_mx(i,j)=0.25*(X2D(i,j)+X2D(i_moins1,j)) & 40 41 + 0.125*((X2D(i_moins1,j_plus1)+X2D(i,j_plus1)) & 41 42 + (X2D(i_moins1,j_moins1)+X2D(i,j_moins1))) 42 43 43 44 X_my(i,j)=0.25*(X2D(i,j)+X2D(i,j_moins1)) & 44 45 + 0.125*((X2D(i_plus1,j_moins1)+X2D(i_plus1,j)) & 45 46 + (X2D(i_moins1,j_moins1)+X2D(i_moins1,j))) 46 47 48 end do49 end do 47 end do 48 end do 49 !$OMP END DO 50 !$OMP END PARALLEL 50 51 51 52 return -
trunk/SOURCES/steps_time_loop.f90
r50 r71 340 340 if (itracebug.eq.1) call tracebug(' Dans spinup_3_bed') 341 341 342 if ((nbed.eq.1).and.nt.ne.1.and.isynchro.eq.1) then 343 call bedrock() ! bedrock adjustment 342 ! if ((nbed.eq.1).and.nt.ne.1.and.isynchro.eq.1) then 343 if ((nbed.eq.1).and.nt.ne.1.and.isynchro.eq.1.and.(mod(abs(TIME),50.).lt.dtmin)) then 344 call bedrock ! bedrock adjustment 344 345 endif 345 346
Note: See TracChangeset
for help on using the changeset viewer.