Ignore:
Timestamp:
Jan 14, 2010, 3:35:30 PM (14 years ago)
Author:
Laurent Fairhead
Message:

Modifications pour la nouvelle version des thermiques (2009/2010) CR et FH

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/branches/LMDZ4V5.0-dev/libf/phylmd/thermcell_closure.F90

    r1146 r1294  
     1!
     2! $Header$
     3!
    14      SUBROUTINE thermcell_closure(ngrid,nlay,r_aspect,ptimestep,rho,  &
    2      &   zlev,lalim,alim_star,alim_star_tot,zmax_sec,wmax_sec,zmax,wmax,f,lev_out)
     5     &   zlev,lalim,alim_star,f_star,zmax,wmax,f,lev_out)
    36
    47!-------------------------------------------------------------------------
    58!thermcell_closure: fermeture, determination de f
     9!
     10! Modification 7 septembre 2009
     11! 1. On enleve alim_star_tot des arguments pour le recalculer et etre ainis
     12! coherent avec l'integrale au numerateur.
     13! 2. On ne garde qu'une version des couples wmax,zmax et wmax_sec,zmax_sec
     14! l'idee etant que le choix se fasse a l'appel de thermcell_closure
     15! 3. Vectorisation en mettant les boucles en l l'exterieur avec des if
    616!-------------------------------------------------------------------------
    717      IMPLICIT NONE
     
    919#include "iniprint.h"
    1020#include "thermcell.h"
    11       INTEGER ngrid,nlay
    12       INTEGER ig,k       
    13       REAL r_aspect,ptimestep
    14       integer lev_out                           ! niveau pour les print
     21INTEGER ngrid,nlay
     22INTEGER ig,k       
     23REAL r_aspect,ptimestep
     24integer lev_out                           ! niveau pour les print
    1525
    16       INTEGER lalim(ngrid)
    17       REAL alim_star(ngrid,nlay)
    18       REAL alim_star_tot(ngrid)
    19       REAL rho(ngrid,nlay)
    20       REAL zlev(ngrid,nlay)
    21       REAL zmax(ngrid),zmax_sec(ngrid)
    22       REAL wmax(ngrid),wmax_sec(ngrid)
    23       real zdenom
     26INTEGER lalim(ngrid)
     27REAL alim_star(ngrid,nlay)
     28REAL f_star(ngrid,nlay+1)
     29REAL rho(ngrid,nlay)
     30REAL zlev(ngrid,nlay)
     31REAL zmax(ngrid)
     32REAL wmax(ngrid)
     33REAL zdenom(ngrid)
     34REAL alim_star2(ngrid)
     35REAL f(ngrid)
    2436
    25       REAL alim_star2(ngrid)
     37REAL alim_star_tot(ngrid)
     38INTEGER llmax
    2639
    27       REAL f(ngrid)
     40!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     41print*,'THERMCELL CLOSURE 26E'
    2842
    29       do ig=1,ngrid
    30          alim_star2(ig)=0.
    31       enddo
    32       do ig=1,ngrid
    33          if (alim_star(ig,1).LT.1.e-10) then
    34             f(ig)=0.
    35          else   
    36              do k=1,lalim(ig)
    37                 alim_star2(ig)=alim_star2(ig)+alim_star(ig,k)**2  &
    38      &                    /(rho(ig,k)*(zlev(ig,k+1)-zlev(ig,k)))
    39              enddo
    40              zdenom=max(500.,zmax(ig))*r_aspect*alim_star2(ig)
    41              if (zdenom<1.e-14) then
    42                 print*,'ig=',ig
    43                 print*,'alim_star2',alim_star2(ig)
    44                 print*,'zmax',zmax(ig)
    45                 print*,'r_aspect',r_aspect
    46                 print*,'zdenom',zdenom
    47                 print*,'alim_star',alim_star(ig,:)
    48                 print*,'zmax_sec',zmax_sec(ig)
    49                 print*,'wmax_sec',wmax_sec(ig)
    50                 stop
    51              endif
    52              if ((zmax_sec(ig).gt.1.e-10).and.(iflag_thermals_ed.eq.0)) then
    53              f(ig)=wmax_sec(ig)*alim_star_tot(ig)/(max(500.,zmax_sec(ig))*r_aspect  &
    54      &             *alim_star2(ig))
    55 !            f(ig)=f(ig)+(f0(ig)-f(ig))*exp((-ptimestep/  &
    56 !    &                     zmax_sec(ig))*wmax_sec(ig))
    57              if(prt_level.GE.10) write(lunout,*)'closure dry',f(ig),wmax_sec(ig),alim_star_tot(ig),zmax_sec(ig)
    58              else
    59              f(ig)=wmax(ig)*alim_star_tot(ig)/zdenom
    60 !            f(ig)=f(ig)+(f0(ig)-f(ig))*exp((-ptimestep/  &
    61 !     &                     zmax(ig))*wmax(ig))
    62              if(prt_level.GE.10) print*,'closure moist',f(ig),wmax(ig),alim_star_tot(ig),zmax(ig)
    63              endif
    64          endif
    65 !         f0(ig)=f(ig)
    66       enddo
    67       if (prt_level.ge.1) print*,'apres fermeture'
     43alim_star2(:)=0.
     44alim_star_tot(:)=0.
     45f(:)=0.
    6846
    69 !
     47! Indice vertical max (max de lalim) atteint par les thermiques sur le domaine
     48llmax=1
     49do ig=1,ngrid
     50   if (lalim(ig)>llmax) llmax=lalim(ig)
     51enddo
     52
     53
     54! Calcul des integrales sur la verticale de alim_star et de
     55!   alim_star^2/(rho dz)
     56do k=1,llmax-1
     57   do ig=1,ngrid
     58      if (k<lalim(ig)) then
     59         alim_star2(ig)=alim_star2(ig)+alim_star(ig,k)**2  &
     60&                    /(rho(ig,k)*(zlev(ig,k+1)-zlev(ig,k)))
     61         alim_star_tot(ig)=alim_star_tot(ig)+alim_star(ig,k)
     62      endif
     63   enddo
     64enddo
     65
     66
     67do ig=1,ngrid
     68   if (alim_star2(ig)>1.e-10) then
     69      f(ig)=wmax(ig)*alim_star_tot(ig)/  &
     70&     (max(500.,zmax(ig))*r_aspect*alim_star2(ig))
     71   endif
     72enddo
     73
     74
     75!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     76! TESTS POUR UNE NOUVELLE FERMETURE DANS LAQUELLE ALIM_STAR NE SERAIT
     77! PAS NORMALISE
     78!           f(ig)=f(ig)*f_star(ig,2)/(f_star(ig,lalim(ig)))
     79!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     80
    7081      return
    7182      end
Note: See TracChangeset for help on using the changeset viewer.