Ignore:
Timestamp:
Jan 24, 2023, 2:16:46 PM (17 months ago)
Author:
evignon
Message:

Attention les yeux, commission qui enterine la premiere version
operationnelle des downdrafts dans LMDZ. Speciale dedicace a Fleur

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/thermcell_down.F90

    r4383 r4396  
    1    SUBROUTINE thermcell_updown_dq(ngrid,nlay,ptimestep,lmax,eup,dup,edn,ddn,masse,trac)
     1   SUBROUTINE thermcell_updown_dq(ngrid,nlay,ptimestep,lmax,eup,dup,edn,ddn,masse,trac,dtrac)
    22
    33!-----------------------------------------------------------------
     
    2525   real,intent(in), dimension(ngrid,nlay) :: ddn ! detrainment from downdrafts * dz [same unit as flux]
    2626   real,intent(in), dimension(ngrid,nlay) :: masse ! mass of layers = rho dz
    27    real,intent(inout), dimension(ngrid,nlay) :: trac ! tracer
     27   real,intent(in), dimension(ngrid,nlay) :: trac ! tracer
    2828   integer, intent(in), dimension(ngrid) :: lmax ! max level index at which downdraft are present
     29   real,intent(out),dimension(ngrid,nlay) ::dtrac ! tendance du traceur
    2930
    3031   
     
    3233
    3334   real, dimension(ngrid,nlay+1) :: fup,fdn,fthu,fthd,fthe,fthtot
    34    real, dimension(ngrid,nlay) :: tracu,tracd,dtrac
     35   real, dimension(ngrid,nlay) :: tracu,tracd
    3536   real :: www
    3637   integer ig,ilay
     
    6869   do ilay=1,nlay,1
    6970      do ig=1,ngrid
    70          if (ilay.le.lmax(ig) .and. lmax(ig)>1) then
     71         if (ilay.lt.lmax(ig) .and. lmax(ig)>1) then
    7172            fup(ig,ilay+1)=fup(ig,ilay)+eup(ig,ilay)-dup(ig,ilay)
    7273            if (ilay == 1 ) then
     
    8384      enddo
    8485   enddo
    85    !Boucle pour calculer le flux up
     86   !Boucle pour calculer le flux du traceur flux updraft, flux downdraft, flux compensatoire
    8687   do ilay=2,nlay,1
    8788     do ig=1,ngrid
     
    9596       endif
    9697       fthe(ig,ilay)=-(fup(ig,ilay)-fdn(ig,ilay))*trac(ig,ilay)
     98       !! si on voulait le prendre en compte on
     99       !fthe(ig,ilay)=-(fup(ig,ilay)-fdn(ig,ilay))*trac(ig,ilay-1)
    97100       fthtot(ig,ilay)=fthu(ig,ilay)+fthd(ig,ilay)+fthe(ig,ilay)
    98101     enddo
     
    101104   do ilay=1,nlay,1
    102105     do ig=1,ngrid
    103        dtrac(ig,ilay)=(fthtot(ig,ilay)-fthtot(ig,ilay+1))*(ptimestep/masse(ig,ilay))
     106       dtrac(ig,ilay)=(fthtot(ig,ilay)-fthtot(ig,ilay+1))*(1./masse(ig,ilay))
    104107!       trac(ig,ilay)=trac(ig,ilay) + (fthtot(ig,ilay)-fthtot(ig,ilay+1))*(ptimestep/masse(ig,ilay))
    105108     enddo
    106109   enddo
    107    if (1==0) then
    108     do ilay=1,nlay,1
    109      do ig=1,ngrid
    110        trac(ig,ilay)=trac(ig,ilay) + (fup(ig,ilay)*tracu(ig,ilay-1)-fup(ig,ilay+1)*tracu(ig,ilay) + &
    111        & (fup(ig,ilay+1)+fdn(ig,ilay+1))*trac(ig,ilay+1) - (fup(ig,ilay)+fdn(ig,ilay))*trac(ig,ilay) + &
    112        & fdn(ig,ilay+1)*tracd(ig,ilay+1)-fdn(ig,ilay)*tracd(ig,ilay))*(ptimestep/masse(ig,ilay))
    113      enddo
    114     enddo
    115    endif
    116110! Il reste a coder :
    117111! d(rho trac)/dt = - d/dz(rho w'trac')
Note: See TracChangeset for help on using the changeset viewer.