Changeset 329


Ignore:
Timestamp:
01/26/21 11:47:38 (3 years ago)
Author:
dumas
Message:

hi-resolution lake update in lake_rsl_mod.f90

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/SOURCES/lake_rsl_mod.f90

    r327 r329  
    172172!~ write(*,*) "Start Initialization step" 
    173173 
    174 !* The routing code (i=1, j=2) 
    175 inc(1,1) = 0 
    176 inc(1,2) = 1 
    177 inc(2,1) = 1 
    178 inc(2,2) = 1 
    179 inc(3,1) = 1 
    180 inc(3,2) = 0 
    181 inc(4,1) = 1 
    182 inc(4,2) = -1 
    183 inc(5,1) = 0 
    184 inc(5,2) = -1 
    185 inc(6,1) = -1 
    186 inc(6,2) = -1 
    187 inc(7,1) = -1 
    188 inc(7,2) = 0 
    189 inc(8,1) = -1 
    190 inc(8,2) = 1 
     174!* The routing code (1er indice : k=1,8, 2eme indice i=1, j=2) 
     175inc(1,1) = 0   ! indice i N 
     176inc(1,2) = 1   ! indice j N 
     177inc(2,1) = 1   ! indice i NE 
     178inc(2,2) = 1   ! indice j NE 
     179inc(3,1) = 1   ! indice i E 
     180inc(3,2) = 0   ! indice j E 
     181inc(4,1) = 1   ! indice i SE 
     182inc(4,2) = -1  ! indice j SE 
     183inc(5,1) = 0   ! indice i S 
     184inc(5,2) = -1  ! indice j S 
     185inc(6,1) = -1  ! indice i SW 
     186inc(6,2) = -1  ! indice j SW 
     187inc(7,1) = -1  ! indice i W 
     188inc(7,2) = 0   ! indice j W 
     189inc(8,1) = -1  ! indice i NW 
     190inc(8,2) = 1   ! indice j NW 
     191 
     192!~ print* 
     193!~ print*,'rtm directions :' 
     194!~ print*,'1 :  N' 
     195!~ print*,'2 : NE' 
     196!~ print*,'3 :  E' 
     197!~ print*,'4 : SE' 
     198!~ print*,'5 :  S' 
     199!~ print*,'6 : SW' 
     200!~ print*,'7 :  W' 
     201!~ print*,'8 : NW' 
     202!~ print* 
    191203 
    192204 
     
    230242 
    231243! calcul de la matrice de passage de 40km => hi_res (10km) 
    232 !do j=5,ny-4 
    233 !  do i=5,nx-4 
    234244  do j=1,nyhi 
    235245    do i=1,nxhi 
    236 !j=5 
    237 !i=5 
    238 !    do k=1,ninterpo 
    239 !      low_2_hi(i,j,k) = nint((i-1)/4) 
    240 !    enddo 
    241246      low_2_hi_i(i,j,1) = max(nint((i-1)/4.),1) 
    242247      low_2_hi_i(i,j,2) = min(low_2_hi_i(i,j,1) + 1,nx) 
     
    280285endif 
    281286 
    282 !~ print*,'Input RSL' 
    283 !~ print*,'65,166 S0 H0 Bsoc0 ',S0(65,166), H0(65,166), Bsoc0(65,166) 
    284 !~ print*,'260,664 S0 H0 Bsoc0 ',S0_hi(260,664), H0_hi(260,664), Bsoc0_hi(260,664) 
    285 !~ print*,'65,166 S H Bsoc ',S(65,166), H(65,166), Bsoc(65,166) 
    286 !~ print*,'260,664 Shi Hhi Bsochi ',S_hi(260,664), H_hi(260,664), Bsoc_hi(260,664) 
    287 !~ print*,'260,664 anom Shi Hhi Bsochi ',anom_S_hi(260,664), anom_H_hi(260,664), anom_Bsoc_hi(260,664) 
    288  
    289  
    290 !print*, 'input_rsl poids', poids(5,5,:) 
    291 !print*,low_2_hi_i(i,j,:) 
    292 !print*,low_2_hi_j(i,j,:) 
    293 !print*,dist_i(:) 
    294 !print*,dist_j(:) 
    295 !print*,dist_ij(:) 
    296 !print*,sum(dist_ij(:)) 
    297 !print*,xcc(1,1),xcc(2,2),ycc(1,1),ycc(2,2),xcc(nx,ny),ycc(nx,ny) 
    298 !print*,xcc_hi(1,1),ycc_hi(1,1) 
    299 !print*,xcc_hi(5,5),xcc_hi(6,6),ycc_hi(5,5),ycc_hi(6,6),xcc_hi(nxhi,nyhi),ycc_hi(nxhi,nyhi) 
    300 !print*, xcc(low_2_hi_i(i,j,1),low_2_hi_j(i,j,1))-xcc_hi(i,j) 
    301 !~ print*,'Fin input_rsl' 
    302  
    303287end subroutine input_rsl 
    304288 
     
    318302character(len=100) :: ncfilecont, ncfilernff, ncfiletopoout,ncfilecmsk    ! nom fichier netcdf de sortie 
    319303character(len=1),dimension(2) :: dimname ! nom des dimensions du fichier netcdf de sortie 
    320 integer :: ncid, xdimid, ydimid, S_hivarid, H_hivarid, Bsoc_hivarid, rtm_hivarid, cont_hivarid, ocean_hivarid, cmsk_hivarid, orog_lake_hivarid 
     304integer :: ncid, xdimid, ydimid, S_hivarid, H_hivarid, Bsoc_hivarid, rtm_hivarid, cont_hivarid, ocean_hivarid, cmsk_hivarid, orog_lake_hivarid, lake_hivarid 
    321305integer :: status ! erreur operations netcdf 
    322306 
     
    370354  enddo 
    371355   
    372   Bsoc_hi(:,:) = Bsoc_hi(:,:) + anom_Bsoc_hi(:,:) 
    373   where ((Bsoc_hi(:,:).GT.S_interp_hi(:,:)).and.(H_interp_hi(:,:).GT.1.)) 
    374     S_hi(:,:) = Bsoc_hi(:,:) 
     356  Bsoc_hi(:,:) = Bsoc0_hi(:,:) + anom_Bsoc_hi(:,:) 
     357   
     358  where (H_interp_hi(:,:).GT.1.) ! zones englacees 
     359    where (Bsoc_hi(:,:).GT.S_interp_hi(:,:)) ! socle qui sort de la glace 
     360      S_hi(:,:) = Bsoc_hi(:,:) 
     361      H_hi(:,:) = 0. 
     362    elsewhere ! socle sous la glace 
     363      S_hi(:,:) = S_interp_hi(:,:) 
     364      H_hi(:,:) = S_interp_hi(:,:) - Bsoc_hi(:,:) 
     365    endwhere 
     366  elsewhere ! zones non englacees 
     367    S_hi(:,:) = max(Bsoc_hi(:,:),sealevel) 
    375368    H_hi(:,:) = 0. 
    376   elsewhere ((Bsoc_hi(:,:) + H_interp_hi(:,:)).GT.S_interp_hi(:,:)) 
    377     S_hi(:,:) = S_interp_hi(:,:) 
    378     H_hi(:,:) = S_interp_hi(:,:) - Bsoc_hi(:,:) 
    379   elsewhere (H_interp_hi(:,:).GT.1.) 
    380     S_hi(:,:) = S_interp_hi(:,:) 
    381     H_hi(:,:) = max(0., S_interp_hi(:,:) - Bsoc_hi(:,:)) 
    382369  endwhere 
    383    
    384    
    385    
    386 !~   where ((H_interp_hi(:,:).GT.10.).and.(Bsoc_hi(:,:)+) ! zone englacee => topo S_interp_hi (pas en anomalie pour eviter topo bruitee) 
    387 !~     S_hi(:,:) = S_interp_hi(:,:) 
    388 !~     H_hi(:,:) = max(0., S_interp_hi(:,:) - Bsoc_hi(:,:)) 
    389 !~   elsewhere 
    390 !~     S_hi(:,:) = S_hi(:,:) + anom_S_hi(:,:) 
    391 !~     H_hi(:,:) = 0. 
    392 !~   endwhere 
    393  
    394370   
    395371! orography sur grille hi_res : 
     
    407383    omsk_hi(:,:) = 0 
    408384  endwhere 
    409  
    410 !~ print*,'RSL Hi_res' 
    411 !~ print*,'65,166 S0 H0 Bsoc0 ',S0(65,166), H0(65,166), Bsoc0(65,166) 
    412 !~ print*,'260,664 S0 H0 Bsoc0 ',S0_hi(260,664), H0_hi(260,664), Bsoc0_hi(260,664) 
    413 !~ print*,'65,166 S H Bsoc ',S(65,166), H(65,166), Bsoc(65,166) 
    414 !~ print*,'260,664 Shi Hhi Bsochi ',S_hi(260,664), H_hi(260,664), Bsoc_hi(260,664) 
    415 !~ print*,'260,664 anom Shi Hhi Bsochi ',anom_S_hi(260,664), anom_H_hi(260,664), anom_Bsoc_hi(260,664) 
    416 !~ print*,'low_2_hi_i', low_2_hi_i(260,664,:) 
    417 !~ print*,'low_2_hi_i', low_2_hi_j(260,664,:) 
    418 !~ print*, 'poids',poids(260,664,:) 
    419 !~ print*,'low_2_hi_i', low_2_hi_i(1,1,:) 
    420 !~ print*,'low_2_hi_i', low_2_hi_j(1,1,:) 
    421 !~ print*, 'poids',poids(1,1,:) 
    422 !~ print*,'low_2_hi_i', low_2_hi_i(964,964,:) 
    423 !~ print*,'low_2_hi_i', low_2_hi_j(964,964,:) 
    424 !~ print*, 'poids',poids(964,964,:) 
    425385 
    426386endif 
     
    458418!~   print*,'4/ rsl' 
    459419 
    460 !print*, '39,63 pot_lake',lake_level(39,63),orog_lake(39,63),pot_lake(39,63) 
    461  
    462  
    463 !~ print* 
    464 !~ print*,'rtm directions :' 
    465 !~ print*,'1 :  N' 
    466 !~ print*,'2 : NE' 
    467 !~ print*,'3 :  E' 
    468 !~ print*,'4 : SE' 
    469 !~ print*,'5 :  S' 
    470 !~ print*,'6 : SW' 
    471 !~ print*,'7 :  W' 
    472 !~ print*,'8 : NW' 
    473 !~ print* 
     420  sealevel_2D_loc(:,:) = sealevel_2D(:,:) ! pour debug : A SUPPRIMER QUAND ON REPASSERA SUR SEALEVEL_2D 
     421  where (lake(:,:).eq.1) 
     422    sealevel_2D_loc(:,:)=orog_lake(:,:) 
     423  elsewhere 
     424    sealevel_2D_loc(:,:)=sealevel 
     425  endwhere 
     426 
     427  where ((mask_extlake.LT.9999).AND.(ice.EQ.1).AND.(mk.EQ.0).AND.(lake.EQ.0).AND.(BSOC.LT.orog_extlake)) 
     428    sealevel_2D_loc(:,:) = orog_extlake(:,:) 
     429  endwhere 
     430 
    474431  if (hi_res_runoff.eq.1) then 
    475 !~   print*,'AVANT SAVE NETCDF' 
    476 !~   print*,'S_hi',S_hi(1,1),S_hi(65,166) 
    477432 
    478433!* Save mode 
     
    489444    status = nf90_def_var(ncid, "cmsk_hi", nf90_float, (/ xdimid, ydimid /), cmsk_hivarid) 
    490445    status = nf90_def_var(ncid, "orog_lake_hi", nf90_float, (/ xdimid, ydimid /), orog_lake_hivarid) 
     446    status = nf90_def_var(ncid, "lake_hi", nf90_float, (/ xdimid, ydimid /), lake_hivarid) 
    491447   
    492448    status = nf90_enddef(ncid) 
     
    500456    status = nf90_put_var(ncid, cmsk_hivarid, cmsk_hi) 
    501457    status = nf90_put_var(ncid, orog_lake_hivarid, orog_lake_hi) 
     458    status = nf90_put_var(ncid, lake_hivarid, lake_hi) 
    502459   
    503460    status = nf90_close(ncid) 
    504461  endif 
    505 !  call write_ncdf_dim('x',trim(ncfilecont),nxhi) 
    506 !  call write_ncdf_dim('y',trim(ncfilecont),nyhi) 
    507 !  tab(:,:)=S_hi(:,:) 
    508 !  call Write_Ncdf_var('S_hi',dimname,TRIM(ncfilecont),tab,1,0,'double') 
    509 !~   tab(:,:)=H_hi(:,:) 
    510 !~   call Write_Ncdf_var('H_hi',dimname,TRIM(ncfilecont),tab,'double') 
    511 !~   tab(:,:)=Bsoc_hi(:,:) 
    512 !~   call Write_Ncdf_var('Bsoc_hi',dimname,TRIM(ncfilecont),tab,'double') 
    513 !~   tab(:,:)=rtm(:,:) 
    514 !~   call Write_Ncdf_var('rtm',dimname,TRIM(ncfilecont),tab,'double') 
    515 !~   tab(:,:)=orog(:,:) 
    516 !~   call Write_Ncdf_var('cont',dimname,TRIM(ncfilecont),tab,'double') 
    517 !~   tab(:,:)=cmsk(:,:) 
    518 !~   call Write_Ncdf_var('cmsk',dimname,TRIM(ncfilecont),tab,'double') 
    519 !~   tab(:,:)=orog_lake(:,:) 
    520 !~   call Write_Ncdf_var('orog_lake',dimname,TRIM(ncfilecont),tab,'double') 
    521  
    522 !~   status = nf90_create(trim(ncfilecont),and(nf90_write,nf90_64bit_offset),ncid) 
    523 !~   status = nf90_close(ncid) 
    524 !~   call write_ncdf_dim('x',trim(ncfilecont),nx) 
    525 !~   call write_ncdf_dim('y',trim(ncfilecont),ny) 
    526 !~   tab(:,:)=S(:,:) 
    527 !~   call Write_Ncdf_var('S',dimname,TRIM(ncfilecont),tab,'double') 
    528  
    529  
    530 !~   print*, '50,138 lake,sealevel_2D,ice,mk,clake,mask_extlake,orog_extlake ' 
    531 !~   print*,S(50,138),H(50,138),BSOC(50,138) 
    532 !~   print*,lake(50,138),sealevel_2D(50,138),ice(50,138),mk(50,138),mask_extlake(50,138),orog_extlake(50,138) 
    533 !~   print*,'65,166' 
    534 !~   print*,S(65,166),H(65,166),BSOC(65,166) 
    535 !~   print*,lake(65,166),sealevel_2D(65,166),ice(65,166),mk(65,166),mask_extlake(65,166),orog_extlake(65,166) 
    536  
    537  
    538 !~ print*,'153,41' 
    539 !~ print*,S(153,41),H(153,41),BSOC(153,41) 
    540 !~ print*,lake(153,41),sealevel_2D(153,41),ice(153,41),mk(153,41),clake(153,41),mask_extlake(153,41),orog_extlake(153,41) 
    541  
    542 !where (orog_lake(:,:).gt.orog(:,:))  ! pose pb lorsque topo evolue => test devient faux 
    543   sealevel_2D_loc(:,:) = sealevel_2D(:,:) ! pour debug : A SUPPRIMER QUAND ON REPASSERA SUR SEALEVEL_2D 
    544   where (lake(:,:).eq.1) 
    545     sealevel_2D_loc(:,:)=orog_lake(:,:) 
    546   elsewhere 
    547     sealevel_2D_loc(:,:)=sealevel 
    548   endwhere 
    549  
    550 !where ((mask_extlake.EQ.1).AND.(ice.EQ.1).AND.(mk.EQ.0).AND.(lake.EQ.0).AND.(BSOC.LT.orog_extlake)) 
    551   where ((mask_extlake.LT.9999).AND.(ice.EQ.1).AND.(mk.EQ.0).AND.(lake.EQ.0).AND.(BSOC.LT.orog_extlake)) 
    552     sealevel_2D_loc(:,:) = orog_extlake(:,:) 
    553 !  sealevel_2D(:,:) = sealevel  + (orog_extlake(:,:)-sealevel) / mask_extlake(:,:)  
    554   endwhere 
     462 
    555463 
    556464endif 
    557465 
    558466sealevel_2D(:,:) = sealevel_2D_loc(:,:) 
    559  
    560  
    561  
    562 !~ print*,'56,125',S(56,125),H(56,125),BSOC(56,125),MK(56,125),ice(56,125),omsk(56,125),orog(56,125),orog_lake(56,125) 
    563467 
    564468debug_3d(:,:,126)=sealevel_2D_loc(:,:) 
    565469debug_3d(:,:,127)=cont(:,:) 
    566470debug_3d(:,:,128)=lake(:,:) 
    567  
    568 !print*,'lake_rsl   print*,'Debut rsl time = ', time59,119', time, sealevel_2D_loc(59,119),orog_lake(59,119),orog(59,119),sealevel,orog_extlake(59,119) 
    569   
    570 !print*,'lake_rsl 6,112' 
    571 !print('(6(f8.1,1x),5(i4,1x),1(f8.1))'),time, sealevel_2D_loc(6,112),orog_lake(6,112),orog(6,112),sealevel,orog_extlake(6,112),cont(6,112),lake(6,112),mask_extlake(6,112),ice(6,112),mk(6,112),bsoc(6,112) 
    572471 
    573472!~ print*,'Fin rsl' 
     
    621520cmsk_loc = 0 
    622521!~ print*,'1/ mask_orog_ocean' 
    623 !~ print*,'mask_orog_ocean inc = ', inc(1,1), inc(1,2) 
    624 !~ print*,'RSL : update lakes and runoff routing', time 
    625  
    626 !print*,'2/ Point (182,110) orog, omsk, cmsk, cont', orog(182,110), omsk(182,110), cmsk(182,110), cont(182,110) 
     522 
    627523!* Discriminate continents 
    628524!~ write(*,*) "Number the different continents" 
     
    653549        sumcont = sumcont + cont_loc(ipinctab(k),jpinctab(k)) 
    654550      enddo 
    655       !print*,'ii jj loccont',ii,jj,loccont 
    656       !print*,'sumcont',sumcont   
     551  
    657552      if (sumcont.GT.0) then 
    658553        cont_loc(ii,jj)=minval(loccont,mask=loccont>0) 
    659554        do while (maxval(loccont,mask=loccont>0).GT.cont_loc(ii,jj).and.maxloop.lt.8) ! test si dans les 8 voisins certains ont un loccont > minval 
    660555          maxcont=maxval(loccont,mask=loccont>0) 
    661 !          print*,'ii,jj maxval,cont,maxcont,minval', ii,jj, maxval(loccont,mask=loccont>0), cont(ii,jj),maxcont 
    662 !          write(6,*),'loccont',loccont 
    663 !          where (cont(:,:).EQ.maxval(loccont,mask=loccont>0)) 
    664556          where (cont_loc(:,:).EQ.maxcont) cont_loc(:,:) = cont_loc(ii,jj) 
    665557          where (loccont(:).EQ.maxcont) loccont(:) = cont_loc(ii,jj) 
    666 !          print*,'cont voisin(358,10) :',cont(358,10) 
    667558          maxloop = maxloop + 1 
    668559        enddo 
     
    675566  enddo 
    676567enddo 
    677 !~ print*,'2/ mask_orog_ocean' 
    678 !print*,'3/ Point (182,110) orog, omsk, cmsk, cont', orog(182,110), omsk(182,110), cmsk(182,110), cont(182,110) 
    679  
    680  
    681    
    682       
     568!~ print*,'2/ mask_orog_ocean'    
    683569 
    684570!* Reordering to get an incremental list 
     
    705591do j = 1, ny_loc 
    706592  do i = 1, nx_loc 
    707 !do j = 110,111 
    708 !  do i = 182,183  
    709  
    710593    !* Locate current grid point 
    711594    ii = i; jj = j 
     
    725608        sumocean = sumocean + ocean_loc(ipinctab(k),jpinctab(k)) 
    726609      enddo 
    727       !print*,'ii jj loccont',ii,jj,loccont 
    728       !print*,'sumcont',sumcont   
     610 
    729611      if (sumocean.GT.0) then 
    730612        ocean_loc(ii,jj)=minval(lococean,mask=lococean>0) 
    731613        do while (maxval(lococean,mask=lococean>0).GT.ocean_loc(ii,jj).and.maxloop.lt.8) ! test si dans les 8 voisins certains ont un lococean > minval 
    732614          maxocean=maxval(lococean,mask=lococean>0) 
    733 !          print*,'ii,jj maxval,cont,maxcont,minval', ii,jj, maxval(loccont,mask=loccont>0), cont(ii,jj),maxcont 
    734 !          write(6,*),'loccont',loccont 
    735 !          where (cont(:,:).EQ.maxval(loccont,mask=loccont>0)) 
    736615          where (ocean_loc(:,:).EQ.maxocean) ocean_loc(:,:) = ocean_loc(ii,jj) 
    737616          where (lococean(:).EQ.maxocean) lococean(:) = ocean_loc(ii,jj) 
    738 !          print*,'cont voisin(358,10) :',cont(358,10) 
    739617          maxloop = maxloop + 1 
    740618        enddo 
     
    795673  stop_lake = .true. 
    796674  ij_lake=minloc(pot_lake_loc(:,:),mask=(pot_lake_loc.EQ.l)) 
    797 !  print*,'lake, i, j : ',l, ij_lake(:) 
    798675  do while (stop_lake) 
    799676    do k=1,8 
     
    808685    enddo 
    809686    if (maxval(loccont).GT.0) then ! voisin point terre 
    810 !      print*,'maxval(loccont)',maxval(loccont) 
    811687      ! le lac appartient a ce continent 
    812688      kloc=maxloc(loccont,dim=1) 
     
    815691        omsk_loc(:,:)=1 
    816692      endwhere 
    817 !      print*,'lake => cont ',l, cont(ij_lake(1),ij_lake(2)) 
    818693      stop_lake=.false. 
    819694    else 
     
    906781  do while (minval(runoff_msk(:,:),mask=mask_search(:,:).EQ.1).EQ.0) ! test si il reste des points a scanner 
    907782    ijcoord(:)=minloc(orog_lake_loc,mask=(mask_search(:,:).EQ.1))   ! position du point le plus bas etudié 
    908 !debug 
    909 !    if (ijcoord(1).EQ.286.and.ijcoord(2).eq.26) then 
    910 !      print*,'POINT 286 26',  ijcoord, orog_lake(ijcoord(1),ijcoord(2)) 
    911 !      do j=1,ny 
    912 !        do i=1,nx 
    913 !          if (mask_search(i,j).EQ.1) then 
    914 !            print*,'POINT 286 26 mask_search', i,j,mask_search(i,j),orog_lake(i,j) 
    915 !          endif 
    916 !        enddo 
    917 !      enddo 
    918 !    endif 
    919 !fin debug 
    920783     
    921784    if (count(mask=((mask_search.eq.1).and.(cmsk_loc.eq.1))).GT.0) then! il reste des points cotiers non traités 
     
    924787      ! si altitude egale entre 2 points on traite en priorité le point cotier 
    925788      if (orog_lake_loc(ijcoord(1),ijcoord(2)).EQ.orog_lake_loc(ijcoord_cmsk(1),ijcoord_cmsk(2))) then 
    926 !        print*,'point cotier prio : ',ijcoord_cmsk, orog_lake(ijcoord_cmsk(1),ijcoord_cmsk(2)) 
    927 !        print*,'point ijcoord remplace : ',ijcoord, orog_lake(ijcoord(1),ijcoord(2)) 
    928789        ijcoord(:) = ijcoord_cmsk(:) 
    929 !        pause 
    930790      endif 
    931791    endif 
    932 !    print*,'ijcoord, orog ',ijcoord(:), orog(ijcoord(1),ijcoord(2)) 
    933     ! orog des 8 points voisins => locorog 
    934792    contexut = 0 
    935793    do k=1,8 
     
    944802      if ((omsk_loc(ipinctab(k),jpinctab(k)).EQ.1).AND.(mask_search(ipinctab(k),jpinctab(k)).EQ.0)) then 
    945803        mask_search(ipinctab(k),jpinctab(k))=1 
    946 !      mask_search(ipinctab(k),jpinctab(k))=min(omsk(ipinctab(k),jpinctab(k)),1) ! => si on est sur un point ocean omsk=0 
    947804! cas des depressions : 
    948805! si l'un des points est plus bas que le point de base et n'est pas cotier => on remonte son orog => orog_lake_loc 
     
    952809          lake_loc(ipinctab(k),jpinctab(k)) = 1 
    953810          contexut= contexut + 1 
    954 !          print*, '!!!!! LAKE !!!!! ', orog(ipinctab(k),jpinctab(k)), orog_lake_loc(ipinctab(k),jpinctab(k)) 
    955811        endif 
    956812      endif 
    957813      locorog(k) = orog_lake_loc(ipinctab(k),jpinctab(k)) 
    958 !      locmsk(k) = runoff_msk(ipinctab(k),jpinctab(k)) 
    959 !      loclake(k) = lake(ipinctab(k),jpinctab(k)) 
    960 !      locmsk_search = mask_search(ipinctab(k),jpinctab(k)) 
    961814      locexut(k) = exut(ipinctab(k),jpinctab(k)) 
    962815    enddo 
     
    966819    if (lake_loc(ijcoord(1),ijcoord(2)).eq.1) then 
    967820      exut(ijcoord(1),ijcoord(2)) = maxval(locexut) + 1 
    968 !      print*,'1/ lake ij', ijcoord(1),ijcoord(2), orog_lake_loc(ijcoord(1),ijcoord(2)) 
    969 !      print*,'2/ locorog ',locorog 
    970 !      print*,'3/ locexut ',locexut 
    971821    ! ecoulement vers l'exutoire du lac 
    972822      if (maxval(locexut).GT.0) then 
    973823        rtm_loc(ijcoord(1),ijcoord(2))=minloc(locexut,dim=1,mask=(locexut.ge.1)) ! ecoulement vers l'exutoire 
    974      
    975 !      if (maxval(locexut).EQ.1) then 
    976 !        rtm(ijcoord(1),ijcoord(2))=maxloc(locexut,dim=1) ! ecoulement vers l'exutoire 
    977 !      else ! pas de voisin exutoire 
    978       ! ecoulement idem que voisin lac : 
    979 !        rtm(ijcoord(1),ijcoord(2))=maxloc(locmsk,mask=loclake.EQ.1,dim=1) ! localisation du voisin deja traite (locmsk=1) qui est lac (loclake=1) 
    980824      endif 
    981 !      print*,'4/ rtm ',rtm(ijcoord(1),ijcoord(2)) 
    982 !      print*,'5/ locmsk ',locmsk 
    983 !    else 
    984 !      print*,'point std traite: ',ijcoord, orog_lake_loc(ijcoord(1),ijcoord(2)) 
    985 !      print*,'rtm ', rtm(ijcoord(1),ijcoord(2)) 
    986 !      print*,'locorog ', locorog 
    987 !      print*,'cmsk ', cmsk(ijcoord(1),ijcoord(2)) 
    988 !      print*,'lake ', lake(ijcoord(1),ijcoord(2)) 
    989 !      print* 
    990        
    991825    endif 
    992826    ! on supprime le point attribué de mask_search : 
     
    994828    ! le point a ete traité : 
    995829    runoff_msk(ijcoord(1),ijcoord(2))=1 
    996 !    minloc(locorog,mask=((locorog.gt.0).and.(locmsk.eq.0))) 
    997 !    print*, rtm(ijcoord(1),ijcoord(2)) 
    998 !    contprint = contprint + 1 
    999 !    if (contprint.eq.20) goto 2020 
    1000830  enddo 
    1001831enddo 
     
    1004834lake_level_loc(:,:)=-9999. ! initialisation 
    1005835do l=1,countpot_lake 
    1006 !print*, 'pot_lake :',l 
    1007836  where (pot_lake_loc(:,:).EQ.l) 
    1008837    lake_level_loc(:,:)=orog_lake_loc(:,:) 
     
    1010839enddo 
    1011840 
    1012  
    1013  
    1014841end subroutine runoff 
    1015842 
     
    1020847subroutine extlake(nx_loc,ny_loc,lake_loc,ice_loc,mk_loc,orog_lake_loc,inclake_loc,mask_extlake_loc,orog_extlake_loc) 
    1021848 
    1022 implicit none 
    1023  
    1024 integer, intent(in) :: nx_loc, ny_loc 
    1025 integer,dimension(nx_loc,ny_loc), intent(in) :: lake_loc ! 1 si lac, 0 sinon 
    1026 integer,dimension(nx_loc,ny_loc), intent(in) :: ice_loc ! 1 si glace, 0 sinon 
    1027 integer,dimension(nx_loc,ny_loc), intent(in) :: mk_loc ! 0 si terre, 1 sinon 
    1028 real,dimension(nx_loc,ny_loc), intent(in) :: orog_lake_loc ! orographie a la surface des lacs 
    1029 integer,dimension(80,2),intent(in) :: inclake_loc ! 80 voisins (+4 -4) en i,j 
    1030 integer, dimension(nx_loc,ny_loc),intent(out) :: mask_extlake_loc ! extension du lac sous la glace 
    1031 real, dimension(nx_loc,ny_loc),intent(out) :: orog_extlake_loc ! niveau du lac sur les zones glace a proximité (rayon de 4 pts de grille) 
    1032  
    1033 integer, dimension(8) :: ipinctab,jpinctab ! indice des points a scanner autour du point ii jj 
    1034 integer, dimension(nx_loc,ny_loc) :: clake ! point lac avec voisin point englace 
    1035 integer :: i,j,k 
     849  implicit none 
     850 
     851  integer, intent(in) :: nx_loc, ny_loc 
     852  integer,dimension(nx_loc,ny_loc), intent(in) :: lake_loc ! 1 si lac, 0 sinon 
     853  integer,dimension(nx_loc,ny_loc), intent(in) :: ice_loc ! 1 si glace, 0 sinon 
     854  integer,dimension(nx_loc,ny_loc), intent(in) :: mk_loc ! 0 si terre, 1 sinon 
     855  real,dimension(nx_loc,ny_loc), intent(in) :: orog_lake_loc ! orographie a la surface des lacs 
     856  integer,dimension(80,2),intent(in) :: inclake_loc ! 80 voisins (+4 -4) en i,j 
     857  integer, dimension(nx_loc,ny_loc),intent(out) :: mask_extlake_loc ! extension du lac sous la glace 
     858  real, dimension(nx_loc,ny_loc),intent(out) :: orog_extlake_loc ! niveau du lac sur les zones glace a proximité (rayon de 4 pts de grille) 
     859 
     860  integer, dimension(8) :: ipinctab,jpinctab ! indice des points a scanner autour du point ii jj 
     861  integer, dimension(nx_loc,ny_loc) :: clake ! point lac avec voisin point englace 
     862  integer :: i,j,k 
    1036863 
    1037864! initialisation 
    1038 clake(:,:)=0 
    1039 orog_extlake_loc(:,:)=0. 
    1040 mask_extlake_loc(:,:)=9999 
     865  clake(:,:)=0 
     866  orog_extlake_loc(:,:)=0. 
     867  mask_extlake_loc(:,:)=9999 
    1041868 
    1042869! recherche des points lacs en bordure de calotte => voisin pas lac englace et terre 
    1043 where ((lake_loc(:,:).EQ.1).AND.(((eoshift(lake_loc,shift=-1,dim=1).EQ.0).AND.(eoshift(ice_loc,shift=-1,dim=1).EQ.1).AND.(eoshift(mk_loc,shift=-1,dim=1).EQ.0)) .OR. & 
    1044   ((eoshift(lake_loc,shift=1,dim=1).EQ.0).AND.(eoshift(ice_loc,shift=1,dim=1).EQ.1).AND.(eoshift(mk_loc,shift=1,dim=1).EQ.0)) .OR. & 
    1045   ((eoshift(lake_loc,shift=-1,dim=2).EQ.0).AND.(eoshift(ice_loc,shift=-1,dim=2).EQ.1).AND.(eoshift(mk_loc,shift=-1,dim=2).EQ.0)) .OR. & 
    1046   ((eoshift(lake_loc,shift=1,dim=2).EQ.0).AND.(eoshift(ice_loc,shift=1,dim=2).EQ.1).AND.(eoshift(mk_loc,shift=1,dim=2).EQ.0)))) 
    1047   clake(:,:) = 1 
    1048 endwhere 
     870  where ((lake_loc(:,:).EQ.1).AND.(((eoshift(lake_loc,shift=-1,dim=1).EQ.0).AND.(eoshift(ice_loc,shift=-1,dim=1).EQ.1).AND.(eoshift(mk_loc,shift=-1,dim=1).EQ.0)) .OR. & 
     871    ((eoshift(lake_loc,shift=1,dim=1).EQ.0).AND.(eoshift(ice_loc,shift=1,dim=1).EQ.1).AND.(eoshift(mk_loc,shift=1,dim=1).EQ.0)) .OR. & 
     872    ((eoshift(lake_loc,shift=-1,dim=2).EQ.0).AND.(eoshift(ice_loc,shift=-1,dim=2).EQ.1).AND.(eoshift(mk_loc,shift=-1,dim=2).EQ.0)) .OR. & 
     873    ((eoshift(lake_loc,shift=1,dim=2).EQ.0).AND.(eoshift(ice_loc,shift=1,dim=2).EQ.1).AND.(eoshift(mk_loc,shift=1,dim=2).EQ.0)))) 
     874    clake(:,:) = 1 
     875  endwhere 
    1049876 
    1050877 
    1051878 
    1052879! point terre et englace : mk=0 et H>0 
    1053 do j=1,ny 
    1054   do i=1,nx 
    1055     if (clake(i,j).EQ.1) then 
    1056       do k=1,80 
    1057         ipinctab(k) = max(1,min(nx,i + inclake_loc(k,1))) 
    1058         jpinctab(k) = max(1,min(ny,j + inclake_loc(k,2))) 
    1059         mask_extlake_loc(ipinctab(k),jpinctab(k)) = 1 
    1060 !        mask_extlake(ipinctab(k),jpinctab(k))=min(abs(inclake(k,1)),abs(inclake(k,2)),mask_extlake(ipinctab(k),jpinctab(k))) 
    1061 !        mask_extlake(ipinctab(k),jpinctab(k))=min(minval(abs(inclake(k,:),mask=inclake(k,:).GT.0)),mask_extlake(ipinctab(k),jpinctab(k))) 
    1062         orog_extlake_loc(ipinctab(k),jpinctab(k))=orog_lake_loc(i,j) 
    1063       enddo 
    1064     endif 
    1065   enddo 
    1066 enddo 
    1067  
    1068 !~ print*,'!!!!!!! extlake !!!!!!' 
    1069 !~ print*, '50,138 lake,sealevel_2D,ice,mk,clake,mask_extlake,orog_extlake ' 
    1070 !~ print*,lake_loc(50,138),ice_loc(50,138),mk_loc(50,138),mask_extlake_loc(50,138),orog_extlake_loc(50,138),clake(50,138) 
    1071 !~ print*,'65,166' 
    1072 !~ print*,lake_loc(65,166),ice_loc(65,166),mk_loc(65,166),mask_extlake_loc(65,166),orog_extlake_loc(65,166),clake(65,166) 
    1073 !~ print*,'64,166' 
    1074 !~ print*,lake_loc(64,166),ice_loc(64,166),mk_loc(64,166),mask_extlake_loc(64,166),orog_extlake_loc(64,166),clake(64,166) 
    1075 !~ print*,'66,166' 
    1076 !~ print*,lake_loc(66,166),ice_loc(66,166),mk_loc(66,166),mask_extlake_loc(66,166),orog_extlake_loc(66,166),clake(66,166) 
    1077 !~ print*,'65,165' 
    1078 !~ print*,lake_loc(65,165),ice_loc(65,165),mk_loc(65,165),mask_extlake_loc(65,165),orog_extlake_loc(65,165),clake(65,165) 
    1079 !~ print*,'65,167' 
    1080 !~ print*,lake_loc(65,167),ice_loc(65,167),mk_loc(65,167),mask_extlake_loc(65,167),orog_extlake_loc(65,167),clake(65,167) 
     880  do j=1,ny 
     881    do i=1,nx 
     882      if (clake(i,j).EQ.1) then 
     883        do k=1,80 
     884          ipinctab(k) = max(1,min(nx,i + inclake_loc(k,1))) 
     885          jpinctab(k) = max(1,min(ny,j + inclake_loc(k,2))) 
     886          mask_extlake_loc(ipinctab(k),jpinctab(k)) = 1 
     887          orog_extlake_loc(ipinctab(k),jpinctab(k))=orog_lake_loc(i,j) 
     888        enddo 
     889      endif 
     890    enddo 
     891  enddo 
     892 
    1081893end subroutine extlake 
    1082894 
Note: See TracChangeset for help on using the changeset viewer.