Ignore:
Timestamp:
Jun 19, 2008, 12:24:22 PM (16 years ago)
Author:
lmdzadmin
Message:

Version thermique FH/CRio
Ajout tests cas physiques non pris en comptes et ajout/enleve prints
Nouvelle routine thermcell_flux2.F90
IM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/trunk/libf/phylmd/thermcell_dq.F90

    r938 r972  
    2323      real qa(ngrid,nlay),detr(ngrid,nlay),wqd(ngrid,nlay+1)
    2424
     25      real zzm
     26
    2527      integer ig,k
     28      real cfl
     29
     30      real qold(ngrid,nlay)
     31      real ztimestep
     32      integer niter,iter
     33
     34
     35
     36! Calcul du critere CFL pour l'advection dans la subsidence
     37      do k=1,nlay
     38         do ig=1,ngrid
     39            zzm=masse(ig,k)/ptimestep
     40            cfl=max(cfl,fm(ig,k)/zzm)
     41            if (entr(ig,k).gt.zzm) then
     42               print*,'entr dt > m ',entr(ig,k)*ptimestep,masse(ig,k)
     43               stop
     44            endif
     45         enddo
     46      enddo
     47
     48!IM 090508     print*,'CFL CFL CFL CFL ',cfl
     49
     50#undef CFL
     51#ifdef CFL
     52! On subdivise le calcul en niter pas de temps.
     53      niter=int(cfl)+1
     54#else
     55      niter=1
     56#endif
     57
     58      ztimestep=ptimestep/niter
     59      qold=q
     60
     61
     62do iter=1,niter
     63      if (prt_level.ge.1) print*,'Q2 THERMCEL_DQ 0'
    2664
    2765!   calcul du detrainement
    28 
    29       if (prt_level.ge.1) print*,'Q2 THERMCEL_DQ 0'
    30 
    3166      do k=1,nlay
    3267         do ig=1,ngrid
     
    5691      do k=2,nlay
    5792         do ig=1,ngrid
    58             if ((fm(ig,k+1)+detr(ig,k))*ptimestep.gt.  &
     93            if ((fm(ig,k+1)+detr(ig,k))*ztimestep.gt.  &
    5994     &         1.e-5*masse(ig,k)) then
    6095         qa(ig,k)=(fm(ig,k)*qa(ig,k-1)+entr(ig,k)*q(ig,k))  &
     
    72107      enddo
    73108
     109! Calcul du flux subsident
     110
    74111      do k=2,nlay
    75112         do ig=1,ngrid
    76 !             wqd(ig,k)=fm(ig,k)*0.5*(q(ig,k-1)+q(ig,k))
     113#undef centre
     114#ifdef centre
     115             wqd(ig,k)=fm(ig,k)*0.5*(q(ig,k-1)+q(ig,k))
     116#else
     117
     118#define plusqueun
     119#ifdef plusqueun
     120! Schema avec advection sur plus qu'une maille.
     121            zzm=masse(ig,k)/ztimestep
     122            if (fm(ig,k)>zzm) then
     123               wqd(ig,k)=zzm*q(ig,k)+(fm(ig,k)-zzm)*q(ig,k+1)
     124            else
     125               wqd(ig,k)=fm(ig,k)*q(ig,k)
     126            endif
     127#else
    77128            wqd(ig,k)=fm(ig,k)*q(ig,k)
     129#endif
     130#endif
     131
    78132            if (wqd(ig,k).lt.0.) then
    79133!               print*,'wqd<0!!!'
     
    86140      enddo
    87141     
     142
     143! Calcul des tendances
    88144      do k=1,nlay
    89145         do ig=1,ngrid
    90             dq(ig,k)=(detr(ig,k)*qa(ig,k)-entr(ig,k)*q(ig,k)  &
     146            q(ig,k)=q(ig,k)+(detr(ig,k)*qa(ig,k)-entr(ig,k)*q(ig,k)  &
    91147     &               -wqd(ig,k)+wqd(ig,k+1))  &
    92      &               /masse(ig,k)
     148     &               *ztimestep/masse(ig,k)
    93149!            if (dq(ig,k).lt.0.) then
    94150!               print*,'dq<0!!!'
     
    97153      enddo
    98154
     155
     156enddo
     157
     158
     159! Calcul des tendances
     160      do k=1,nlay
     161         do ig=1,ngrid
     162            dq(ig,k)=(q(ig,k)-qold(ig,k))/ptimestep
     163            q(ig,k)=qold(ig,k)
     164         enddo
     165      enddo
     166
    99167      return
    100168      end
Note: See TracChangeset for help on using the changeset viewer.