Changeset 102
- Timestamp:
- 05/05/17 16:44:01 (7 years ago)
- Location:
- trunk/SOURCES
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/SOURCES/3D-physique-gen_mod.f90
r99 r102 222 222 real :: diff_H 223 223 224 real,dimension(nx,ny) :: H_beau_old,diff_H_2D,diff_H_water_bilan 224 225 225 226 ! ************* common des tableaux a deux dimensions ****** -
trunk/SOURCES/Greeneem_files/output_greeneem_mod-0.4.f90
r99 r102 48 48 mask_cal(:,:,:)=.false. 49 49 mask_cal(:,:,1)=.true. 50 sum_H_old = sum(H(:,:),mask=ice(:,:)==1) 50 51 do j=1,ny 51 52 do i=1,nx … … 167 168 enddo 168 169 170 171 169 172 170 173 ! write(num_ritz,905) time,((isvol(kk),inp(kk),isvolf(kk),isvol_shelf(kk),inf(kk),isacc(kk),isabl(kk), & 171 174 ! isablbord(kk),ablatot(kk),iscalv(kk),isbm(kk),Tjulymean(kk),Hmean(kk),Hmax(kk),nabl(kk),nacc(kk)),kk=1,nbregion) 172 175 173 write(num_ritz,906) time,diff_H,water_bilan,sum(calv_dtt( :,:))/dtt, &174 sum(ablbord_dtt( :,:))/dtt, &175 sum(Bm_dtt( :,:))/dtt,sum(bmelt_dtt(:,:))/dtt176 write(num_ritz,906) time,diff_H,water_bilan,sum(calv_dtt(2:nx-1,2:ny-1))/dtt, & 177 sum(ablbord_dtt(2:nx-1,2:ny-1))/dtt, & 178 sum(Bm_dtt(2:nx-1,2:ny-1))/dtt,sum(bmelt_dtt(2:nx-1,2:ny-1))/dtt,sum(ice(2:nx-1,2:ny-1),mask=ice(2:nx-1,2:ny-1)==1) 176 179 177 180 905 format(f10.1,1x,2(e11.4, 1x, i5, 1x, e11.4, 1x, e11.4, 1x, i5, 9(1x, e12.5),2(1x,i5))) 178 906 format (f0.2,6(1x,e15.8) )181 906 format (f0.2,6(1x,e15.8),1x,i7) 179 182 180 183 ! pour verifier la zone groenland sur carte -
trunk/SOURCES/Temperature-routines/icetemp_mod.f90
r73 r102 189 189 Call temp_col(Nz,Nzm,Nn,T3d_new(i,j,:),Ct(i,j,:),& 190 190 flot(i,j),H(i,j),Tbmer(i,j),Ibase(i,j),T(i,j,:),Tpmp(i,j,:),Aa,Bb,Cc,Rr,Hh,Ncond,Dee,Cm,& 191 Dzm,Phid(i,j),Ghf(i,j),Ifail1,Tbdot(i,j),DTT,Dou,Ts(i,j) ,Bmelt(i,j))191 Dzm,Phid(i,j),Ghf(i,j),Ifail1,Tbdot(i,j),DTT,Dou,Ts(i,j)) 192 192 193 193 ! Test Permettant D'Ecrire Les Variables Quand Il Y A Une Erreur -
trunk/SOURCES/Temperature-routines/temp_col.f90
r73 r102 15 15 16 16 Subroutine Temp_col(Nz,Nzm,Nn,Newtempcol,Ctij,Flotij,Hij,Tbmerij,Ibase,Tij,Tpmpij,Aa,Bb,Cc,Rr,Hh,Ncond,Dee,Cm, & 17 Dzm,Phidij,Ghfij,Ifail1,Tbdotij,DTT,Dou,Tsij ,Bmeltij)17 Dzm,Phidij,Ghfij,Ifail1,Tbdotij,DTT,Dou,Tsij) 18 18 19 19 ! Use Icetemp_declar … … 47 47 Real, intent(inout) :: Dou 48 48 real, intent(in) :: Tsij !< surface ice temperature 'o' 49 real, intent(out) :: Bmeltij !< fonte basale50 49 51 50 … … 220 219 221 220 Tbdotij=(Newtempcol(Nz)-Tij(Nz))/Dtt 222 Bmeltij=0.223 221 Ibase=5 224 222 Phidij=0. -
trunk/SOURCES/ablation_bord.f90
r99 r102 32 32 ! mise a jour du masque "ice" 33 33 where (flot(:,:)) ! points flottants, sera éventuellement réévalué dans flottab 34 where(H(:,:).gt.max(Hmin,Hmin+BM(:,:)-Bmelt(:,:))) 34 !cdc 1m where(H(:,:).gt.max(Hmin,Hmin+BM(:,:)-Bmelt(:,:))) 35 where(H(:,:).gt.0.) 35 36 ice(:,:)=1 36 37 elsewhere 37 38 ice(:,:)=0 38 H(:,:)=max(1.,min(0.,(sealevel - Bsoc(:,:))*row/ro-0.01)) 39 !cdc 1m H(:,:)=max(1.,min(0.,(sealevel - Bsoc(:,:))*row/ro-0.01)) 40 H(:,:)=0. 39 41 endwhere 40 42 elsewhere ! points posés … … 47 49 48 50 51 52 53 49 54 where (ice(:,:).eq.1) ! quand glace : abl=bm-acc 50 55 ablbord(:,:)=0. 51 56 endwhere 57 !~ where (calv(:,:).LT.0.) ! il ne peut pas y avoir calving et ablbord sur un meme point 58 !~ ablbord(:,:)=0. 59 !~ endwhere 52 60 53 61 ! pour être au bord, il suffit que la somme des ice voisins soit > 0 … … 62 70 somm=ice(ip1,j)+ice(im1,j)+ice(i,jp1)+ice(i,jm1) 63 71 if (somm.gt.0.and.(ablbord(i,j).LT.0.)) then ! voisins englaces 64 ! if (somm.gt.0.and.((ablbord(i,j).LT.0.).OR.(flot(ip1,j).OR.flot(im1,j).OR.flot(i,jp1).OR.flot(i,jm1)))) then ! voisins englaces 65 ! ablbord(i,j)= ablbord(i,j) - (Acc(i,j) * dt) ! Ablvrai=bmpdd-Acc-Hcalc/dt 66 ablbord(i,j)= ablbord(i,j) + ((Bmelt(i,j) - Bm(i,j)) * dt) ! version Tof : ablbord = Hcons_mass - Bm - Bmelt 72 !~ ! if (somm.gt.0.and.((ablbord(i,j).LT.0.).OR.(flot(ip1,j).OR.flot(im1,j).OR.flot(i,jp1).OR.flot(i,jm1)))) then ! voisins englaces 73 !~ ! ablbord(i,j)= ablbord(i,j) - (Acc(i,j) * dt) ! Ablvrai=bmpdd-Acc-Hcalc/dt 74 !~ if (ablbord(i,j).LT.0..and.front(i,j).LE.4.and.front(i,j).GE.0) then 75 ablbord(i,j)= max(0.,ablbord(i,j) + ((Bmelt(i,j) - Bm(i,j)) * dt)) ! version Tof : ablbord = Hcons_mass - Bm - Bmelt 67 76 68 else 69 ! version cat ablbord(i,j)=hdot(i,j)-acc(i,j) ! on ne fond que ce qui est tombe + existant 70 ablbord(i,j)=0. 71 endif 72 77 else 78 !~ ! version cat ablbord(i,j)=hdot(i,j)-acc(i,j) ! on ne fond que ce qui est tombe + existant 79 ablbord(i,j)=0. 80 endif 81 else 82 ablbord(i,j)=0. 73 83 end if 74 84 end do -
trunk/SOURCES/bilan_eau.f90
r99 r102 25 25 real :: sum_H 26 26 27 real,dimension(nx,ny) :: bm_dt,bmelt_dt 27 28 28 29 tot_water(:,:)=0. 29 30 31 bm_dt(:,:)=0. 32 bmelt_dt(:,:)=0. 33 34 bm_dt(2:nx-1,2:ny-1)=bm(2:nx-1,2:ny-1)*dt 35 bmelt_dt(2:nx-1,2:ny-1)=bmelt(2:nx-1,2:ny-1)*dt 36 !~ where (Bm(:,:).lt.0.) 37 !~ bm_dt(:,:)=max(Bm(:,:)*dt,-H(:,:)) 38 !~ elsewhere 39 !~ bm_dt(:,:)=bm(:,:)*dt 40 !~ endwhere 41 42 !~ where (Bmelt(:,:).lt.0.) 43 !~ bmelt_dt(:,:)=max(Bmelt(:,:)*dt,-H(:,:)) 44 !~ elsewhere 45 !~ bmelt_dt(:,:)=bmelt(:,:)*dt 46 !~ endwhere 30 47 31 48 32 sum_H = sum(H(:,:),mask=ice(:,:)==1) 49 ! on fait la somme sur la grille en excluant les bords : 50 51 sum_H = sum(H(2:nx-1,2:ny-1),mask=ice(2:nx-1,2:ny-1)==1) 33 52 diff_H = diff_H + (sum_H - sum_H_old) ! on calcul la variation de volume à chaque dt 34 53 35 where (ice(:,:).eq.1) 36 Bm_dtt(:,:) = Bm_dtt(:,:) + Bm(:,:) * dt ! somme Bm sur dt 37 bmelt_dtt(:,:) = bmelt_dtt(:,:) + bmelt(:,:) * dt ! somme bmelt sur dt 54 diff_H_2D(2:nx-1,2:ny-1)=H(2:nx-1,2:ny-1)-H_beau_old(2:nx-1,2:ny-1) 55 56 where (ice(2:nx-1,2:ny-1).eq.1) 57 Bm_dtt(2:nx-1,2:ny-1) = Bm_dtt(2:nx-1,2:ny-1) + Bm_dt(2:nx-1,2:ny-1) !* dt ! somme Bm sur dt 58 bmelt_dtt(2:nx-1,2:ny-1) = bmelt_dtt(2:nx-1,2:ny-1) + bmelt_dt(2:nx-1,2:ny-1) ! * dt ! somme bmelt sur dt 38 59 endwhere 39 60 40 61 if (isynchro.eq.1) then 41 62 ! on raisonne en bilan annuel pour simplifier : 42 where (ice(:,:).eq.1) 43 tot_water(:,:) = (Bm_dtt(:,:) - Bmelt_dtt(:,:) + calv_dtt(:,:) - ablbord_dtt(:,:)) / dtt 44 elsewhere 45 tot_water(:,:) = (calv_dtt(:,:) - ablbord_dtt(:,:)) / dtt 46 endwhere 47 63 !~ where (ice(2:nx-1,2:ny-1).eq.1) 64 !~ tot_water(2:nx-1,2:ny-1) = (Bm_dtt(2:nx-1,2:ny-1) - Bmelt_dtt(2:nx-1,2:ny-1) + calv_dtt(2:nx-1,2:ny-1) - ablbord_dtt(2:nx-1,2:ny-1)) / dtt 65 !~ elsewhere 66 !~ tot_water(2:nx-1,2:ny-1) = (calv_dtt(2:nx-1,2:ny-1) - ablbord_dtt(2:nx-1,2:ny-1)) / dtt 67 !~ endwhere 68 !cdc pas besoin du test sur ice ici, il a ete fait avant (et le masque ice varie a chaque dt) 69 tot_water(2:nx-1,2:ny-1) = (Bm_dtt(2:nx-1,2:ny-1) - Bmelt_dtt(2:nx-1,2:ny-1) + calv_dtt(2:nx-1,2:ny-1) - ablbord_dtt(2:nx-1,2:ny-1)) / dtt 70 48 71 ! bilan d'eau sur la grille : 49 water_bilan=sum(tot_water(:,:))50 diff_H = diff_H/dtt72 water_bilan=sum(tot_water(:,:)) 73 diff_H = diff_H/dtt 51 74 52 75 !999 format(f0.2,1x,e15.8,1x,i10,8(1x,e15.8)) 53 76 ! write(6,999),time,sum_H,count(ice(:,:)==1),diff_H,water_bilan,sum(calv_dtt(:,:))/dtt,sum(ablbord_dtt(:,:))/dtt,sum(bmelt_dtt(:,:),mask=ice(:,:)==1)/dtt,sum(bm(:,:),mask=ice(:,:)==1),sum(Bm_dtt(:,:))/dtt,sum(bmelt_dtt(:,:))/dtt 77 diff_H_water_bilan(2:nx-1,2:ny-1)=tot_water(2:nx-1,2:ny-1)-diff_H_2D(2:nx-1,2:ny-1) 54 78 55 79 endif 56 80 sum_H_old=sum_H 57 81 82 H_beau_old(:,:)=H(:,:) 83 58 84 end subroutine bilan_eau -
trunk/SOURCES/calving_frange.f90
r100 r102 397 397 calv(i,j)=-h(i,j) 398 398 !cdc H(i,j)=1. 399 H(i,j)=min(1.,max(0.,(sealevel - Bsoc(i,j))*row/ro-0.01)) 399 !cdc 1m H(i,j)=min(1.,max(0.,(sealevel - Bsoc(i,j))*row/ro-0.01)) 400 H(i,j)=0. 400 401 endif 401 402 -
trunk/SOURCES/conserv-mass-adv-diff_sept2009_mod.f90
r99 r102 153 153 dt = dtmax 154 154 end if 155 155 !~ print*,'testdiag/Maxdia, ',time, dt 156 156 ! next_time ajuste le pas de temps pour faciliter la synchronisation 157 157 ! avec le pas de temps long (dtt) … … 354 354 if (testdiag/aux.lt.dt) then 355 355 time=time-dt 356 dt=testdiag/aux*4. 357 if (itracebug.eq.1) call tracebug("aux tres petit,deuxieme appel a next_time dt*4") 356 dt=min(testdiag/aux,dtmax) !cdc *4. 357 !~ print*,'aux*4, ',time, dt, aux, testdiag/aux 358 if (itracebug.eq.1) call tracebug("aux tres petit,deuxieme appel a next_time dt*4") 358 359 call next_time(time,dt,dtt,dtmax,dtmin,isynchro,itracebug,num_tracebug) 360 else 361 !~ print*,'testdiag/Maxdia, ',time, dt 359 362 end if 360 363 end if … … 462 465 !!$endwhere 463 466 464 467 !$OMP WORKSHARE 468 !cdc where (flot(:,:)) 469 !cdc 1m where (H(:,:).gt.max(Hmin,Hmin+BM(:,:)-Bmelt(:,:))) 470 !cdc where (H(:,:).gt.0.) 471 !cdc ice(:,:)=1 472 !cdc elsewhere 473 !cdc ice(:,:)=0 474 !cdc end where 475 !cdc elsewhere 476 where (H(:,:).gt.0.) 477 ice(:,:)=1 478 elsewhere 479 ice(:,:)=0 480 end where 481 !cdc end where 482 !$OMP END WORKSHARE 483 465 484 ! Appel a la routine de resolution resol_adv_diff_2D_vect 466 485 !------------------------------------------------------------ … … 484 503 ! on met à 0 l'épaisseur sur les bords si nécessaire 485 504 do i=1,nx 486 if (H(i,1).gt.max(Hmin,Hmin+BM(i,1)-Bmelt(i,1))) then 505 !cdc 1m if (H(i,1).gt.max(Hmin,Hmin+BM(i,1)-Bmelt(i,1))) then 506 if (H(i,1).gt.0.) then 487 507 ice(i,1)=1 488 508 else … … 490 510 H(i,1)=0. 491 511 endif 492 if (H(i,ny).gt.max(Hmin,Hmin+BM(i,ny)-Bmelt(i,ny))) then 512 !cdc 1m if (H(i,ny).gt.max(Hmin,Hmin+BM(i,ny)-Bmelt(i,ny))) then 513 if (H(i,ny).gt.0.) then 493 514 ice(i,ny)=1 494 515 else … … 500 521 !$OMP DO 501 522 do j=1,ny 502 if (H(1,j).gt.max(Hmin,Hmin+BM(1,j)-Bmelt(1,j))) then 523 !cdc 1m if (H(1,j).gt.max(Hmin,Hmin+BM(1,j)-Bmelt(1,j))) then 524 if (H(1,j).gt.0.) then 503 525 ice(1,j)=1 504 526 else … … 506 528 H(1,j)=0. 507 529 endif 508 if (H(nx,j).gt.max(Hmin,Hmin+BM(nx,j)-Bmelt(nx,j))) then 530 !cdc 1m if (H(nx,j).gt.max(Hmin,Hmin+BM(nx,j)-Bmelt(nx,j))) then 531 if (H(nx,j).gt.0.) then 509 532 ice(nx,j)=1 510 533 else … … 549 572 !$OMP END WORKSHARE 550 573 551 if (igrdline.ne.3) then552 !$OMP WORKSHARE553 Hdot(:,:)=min(Hdot(:,:),10.)554 Hdot(:,:)=max(Hdot(:,:),-10.)555 !$OMP END WORKSHARE556 endif574 !~ if (igrdline.ne.3) then 575 !~ !$OMP WORKSHARE 576 !~ Hdot(:,:)=min(Hdot(:,:),10.) 577 !~ Hdot(:,:)=max(Hdot(:,:),-10.) 578 !~ !$OMP END WORKSHARE 579 !~ endif 557 580 558 581 !$OMP WORKSHARE … … 566 589 ! en attendant un masque plus propre 567 590 568 where(mk0(:,:).eq.-1)569 H(:,:)=vieuxH(:,:)570 Hdot(:,:)=0.571 end where591 !~ where(mk0(:,:).eq.-1) 592 !~ H(:,:)=vieuxH(:,:) 593 !~ Hdot(:,:)=0. 594 !~ end where 572 595 !$OMP END WORKSHARE 573 596 !$OMP END PARALLEL -
trunk/SOURCES/flottab2-0.7.f90
r99 r102 224 224 !cdc ice(i,j)=0 225 225 !cdc H(i,j)=1. 226 H(i,j)=min(1.,max(0.,(sealevel - Bsoc(i,j))*row/ro-0.01)) 226 !cdc 1m H(i,j)=min(1.,max(0.,(sealevel - Bsoc(i,j))*row/ro-0.01)) 227 H(i,j)=0. 227 228 surnet=H(i,j)*(1.-ro/row) 228 229 S(i,j)=surnet+sealevel … … 257 258 !!$ end do 258 259 !!$ end do 259 260 260 261 261 … … 592 592 !$OMP WORKSHARE 593 593 where (flot(:,:)) 594 where (H(:,:).gt.max(Hmin,Hmin+BM(:,:)-Bmelt(:,:))) 594 !cdc 1m where (H(:,:).gt.max(Hmin,Hmin+BM(:,:)-Bmelt(:,:))) 595 where (H(:,:).gt.0.) 595 596 ice(:,:)=1 596 597 elsewhere … … 598 599 end where 599 600 elsewhere 600 where (H(:,:).gt. (0.))601 where (H(:,:).gt.0.) 601 602 ice(:,:)=1 602 603 elsewhere -
trunk/SOURCES/steps_time_loop.f90
r99 r102 55 55 56 56 call icethick3 57 57 58 58 call flottab 59 59 60 60 call calving 61 61 62 62 call ablation_bord 63 63 64 64 call bilan_eau 65 65 … … 112 112 113 113 call shortoutput() 114 !cdc initialisation des variables bilan eau115 diff_H = 0.116 Bm_dtt(:,:) = 0.117 bmelt_dtt(:,:) = 0.118 114 119 115 endif … … 171 167 172 168 ! end of outputs 173 !===================================================================174 ! remise a 0 de ablbord_dtt et calving_dtt 175 176 if (isynchro.eq.1) then 177 178 ablbord_dtt(:,:)=0.179 endif180 169 if (isynchro.eq.1) then 170 diff_H = 0. 171 Bm_dtt(:,:) = 0. 172 bmelt_dtt(:,:) = 0. 173 calv_dtt(:,:)=0. 174 ablbord_dtt(:,:)=0. 175 diff_H_2D(:,:)=0. 176 endif 181 177 !==================================================================== 182 178 ! … … 245 241 !------------------------------------------- 246 242 call masque() 247 call flottab() 243 248 244 if (iter_beta.gt.0) call init_dragging 249 245 … … 256 252 257 253 isync_1: if (ISYNCHRO.eq.1) then ! debut bloc appels tous les dtt 258 259 254 260 255 ! climatic forcing … … 461 456 call mix_SIA_L1 462 457 call strain_rate() 463 call flottab() ! pour iteration dragging : flottab appelle dragging 464 ! write(444,*) time,test_iter_diag,m 465 ! if (test_iter_diag.lt.1.e-4) exit 466 ! write(555,*) time,test_iter_diag,m 467 ! write(222,*) time,test_iter_diag,m 458 if (iter_beta.eq.0) then 459 call dragging 460 endif 468 461 if (test_iter_diag.lt.1.e-2) exit 469 ! write(333,*) time,test_iter_diag,m470 ! if (test_iter_diag.lt.1.e-3) exit471 472 462 end do 473 463 endif isync_2 474 464 475 476 465 call mix_SIA_L1 477 466
Note: See TracChangeset
for help on using the changeset viewer.