Changeset 157


Ignore:
Timestamp:
Nov 10, 2000, 11:49:09 AM (24 years ago)
Author:
lmdzadmin
Message:

Passage de rugos pour l'affectation de z0_new pour l'ocean et la glace
Initialisations de variables locales
correction d'un bug sur alb_neig
correction d'un bug sur le test a la negativite des pourcentages de surfaces
ocean lues (pctsrf_sav) et rajout d'un test pour rattraper des erreurs d'arrondis
LF

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ.3.3/branches/rel-LF/libf/phylmd/interface_surf.F90

    r147 r157  
    5454      & tq_cdrag, petAcoef, peqAcoef, petBcoef, peqBcoef, &
    5555      & precip_rain, precip_snow, lwdown, swnet, swdown, &
    56       & fder, taux, tauy, &
     56      & fder, taux, tauy, rugos, &
    5757      & albedo, snow, qsol, &
    5858      & tsurf, p1lay, ps, radsol, &
     
    113113!   fder         derivee des flux (pour le couplage)
    114114!   taux, tauy   tension de vents
     115!   rugos        rugosite
    115116!   zmasq        masque terre/ocean
    116117!
     
    151152  real, dimension(klon), intent(IN) :: radsol
    152153  real, dimension(klon), intent(IN) :: zmasq
    153   real, dimension(klon), intent(IN) :: fder, taux, tauy
     154  real, dimension(klon), intent(IN) :: fder, taux, tauy, rugos
    154155  character (len = 6)  :: ocean
    155156  integer              :: npas, nexca ! nombre et pas de temps couplage
     
    175176  real, dimension(klon):: alb_ice
    176177  real, dimension(klon):: tsurf_temp
    177   real, dimension(klon):: alb_neig_grid, alb_eau
    178   real, dimension(klon):: alb_neig
     178  real, allocatable, dimension(:), save :: alb_neig_grid
     179  real, dimension(klon):: alb_neig, alb_eau
    179180  real, DIMENSION(klon):: zfra
    180181
     
    206207      call abort_gcm(modname,abort_message,1)
    207208    endif
     209    allocate(alb_neig_grid(klon), stat = error)
     210    if (error /= 0) then
     211      abort_message='Pb allocation alb_neig_grid'
     212      call abort_gcm(modname,abort_message,1)
     213    endif
    208214  endif
    209215  first_call = .false.
    210216 
     217! Initialisations diverses
     218!
     219  cal=0.; beta=1.; dif_grnd=0.; capsol=0.
     220  alb_new = 0.; z0_new = 0.; alb_neig = 0.0
     221
    211222! Aiguillage vers les differents schemas de surface
    212223
     
    232243      endif
    233244    endif
     245    run_off = 0.
    234246!
    235247! Calcul age de la neige
     
    245257!
    246258      call calbeta(dtime, nisurf, knon, snow, qsol, beta, capsol, dif_grnd)
     259!      if (check) write(*,*)'Sortie calbeta'
     260!      if (check) write(*,*)'RCPD = ',RCPD,' capsol = '
     261!      if (check) write(*,*)capsol
    247262      cal = RCPD * capsol
    248263      call calcul_fluxs( klon, knon, nisurf, dtime, &
     
    340355      alb_new(ii) = alb_eau(knindex(ii))
    341356    enddo
     357
     358    z0_new = rugos
    342359!
    343360  else if (nisurf == is_sic) then
     
    388405! calcul albedo
    389406!
    390        zfra = MAX(0.0,MIN(1.0,snow/(snow+10.0)))
    391        DO ii = 1, knon
    392          alb_neig = alb_neig_grid(knindex(ii))
    393        enddo
    394        alb_new = alb_neig*zfra + 0.6 * (1.0-zfra)
     407    zfra = MAX(0.0,MIN(1.0,snow/(snow+10.0)))
     408    DO ii = 1, knon
     409      alb_neig(ii) = alb_neig_grid(knindex(ii))
     410    enddo
     411    alb_new = alb_neig*zfra + 0.6 * (1.0-zfra)
     412
     413    z0_new = rugos
    395414
    396415  else if (nisurf == is_lic) then
     
    418437! calcul albedo
    419438!
    420        zfra = MAX(0.0,MIN(1.0,snow/(snow+10.0)))
    421        DO ii =1, knon
    422          alb_neig = alb_neig_grid(knindex(ii))
    423        enddo
    424        alb_new = alb_neig*zfra + 0.6 * (1.0-zfra)
     439    zfra = MAX(0.0,MIN(1.0,snow/(snow+10.0)))
     440    DO ii = 1, knon
     441      alb_neig(ii) = alb_neig_grid(knindex(ii))
     442    enddo
     443    alb_new = alb_neig*zfra + 0.6 * (1.0-zfra)
     444!
     445! Rugosite
     446!
     447    z0_new = rugos
    425448!
    426449! Remplissage des pourcentages de surface
     
    839862  endif ! fin if (first_appel)
    840863
    841 ! fichier restart et fichiers histoires
     864! Initialisations
     865  alb_ice= 0.0
    842866
    843867! calcul des fluxs a passer
     
    902926! transformer read_sic en pctsrf_sav
    903927!
    904     call cpl2gath(read_sic, tamp_sic , klon, klon,iim,jjm, unity)
    905     do ig = 1, klon
    906       IF (pctsrf(ig,is_oce) > epsfra .OR.            &
     928      call cpl2gath(read_sic, tamp_sic , klon, klon,iim,jjm, unity)
     929      do ig = 1, klon
     930        IF (pctsrf(ig,is_oce) > epsfra .OR.            &
    907931     &             pctsrf(ig,is_sic) > epsfra) THEN
    908932          pctsrf_sav(ig,is_sic) = (pctsrf(ig,is_oce) + pctsrf(ig,is_sic)) &
     
    912936        endif
    913937      enddo
     938!
     939! Pour rattraper des erreurs d'arrondis
     940!
     941      where (abs(pctsrf_sav(:,is_sic)) .le. epsilon(pctsrf_sav(1,is_sic)))
     942        pctsrf_sav(:,is_sic) = 0.
     943        pctsrf_sav(:,is_oce) = pctsrf(:,is_oce) + pctsrf(:,is_sic)
     944      endwhere
     945      where (abs(pctsrf_sav(:,is_oce)) .le. epsilon(pctsrf_sav(1,is_sic)))
     946        pctsrf_sav(:,is_sic) = pctsrf(:,is_oce) + pctsrf(:,is_sic)
     947        pctsrf_sav(:,is_oce) = 0.
     948      endwhere
    914949      if (check) then
    915950        write(46,*)'pct_srf_sav_ice = '
    916951        write(46,'(72f8.3)')pctsrf_sav(:,is_sic)
    917952      endif
    918       if (minval(pctsrf_new(:,is_oce)) < 0.) then
     953      if (minval(pctsrf_sav(:,is_oce)) < 0.) then
    919954        write(*,*)'Pb fraction ocean inferieure a 0'
    920         write(*,*)'au point ',minloc(pctsrf_new(:,is_oce))
    921         write(*,*)'valeur = ',minval(pctsrf_new(:,is_oce))
     955        write(*,*)'au point ',minloc(pctsrf_sav(:,is_oce))
     956        write(*,*)'valeur = ',minval(pctsrf_sav(:,is_oce))
    922957        abort_message = 'voir ci-dessus'
    923958        call abort_gcm(modname,abort_message,1)
    924959      endif
    925       if (minval(pctsrf_new(:,is_sic)) < 0.) then
     960      if (minval(pctsrf_sav(:,is_sic)) < 0.) then
    926961        write(*,*)'Pb fraction glace inferieure a 0'
    927         write(*,*)'au point ',minloc(pctsrf_new(:,is_sic))
    928         write(*,*)'valeur = ',minval(pctsrf_new(:,is_sic))
     962        write(*,*)'au point ',minloc(pctsrf_sav(:,is_sic))
     963        write(*,*)'valeur = ',minval(pctsrf_sav(:,is_sic))
    929964        abort_message = 'voir ci-dessus'
    930965        call abort_gcm(modname,abort_message,1)
     
    15351570  real, dimension(klon) :: zx_mq, zx_nq, zx_oq
    15361571  real, dimension(klon) :: zx_pkh, zx_dq_s_dt, zx_qsat, zx_coef
    1537   real, dimension(klon) :: zx_sl, zx_k1,  zx_dq,  zx_cq,  zx_dh, zx_ch
     1572  real, dimension(klon) :: zx_sl, zx_k1
    15381573  real, dimension(klon) :: zx_h_ts, zx_q_0 , d_ts
    15391574  real                  :: zdelta, zcvm5, zx_qs, zcor, zx_dq_s_dh
    15401575  real                  :: bilan_f, fq_fonte
    15411576  real, parameter :: t_grnd = 271.35, t_coup = 273.15
    1542   logical         :: check = .false.
     1577  logical         :: check = .true.
    15431578  character (len = 20)  :: modname = 'calcul_fluxs'
    15441579  logical         :: fonte_neige = .false.
Note: See TracChangeset for help on using the changeset viewer.