source: LMDZ6/trunk/libf/phylmd/lmdz_thermcell_env.f90 @ 5353

Last change on this file since 5353 was 5268, checked in by abarral, 7 weeks ago

.f90 <-> .F90 depending on cpp key use

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 2.7 KB
RevLine 
[4590]1MODULE lmdz_thermcell_env
2CONTAINS
3
[4089]4   SUBROUTINE thermcell_env(ngrid,nlay,po,pt,pu,pv,pplay,  &
[4843]5     &           pplev,zo,zh,zl,ztv,zthl,zu,zv,zpspsk,pqsat,lcong,lintercong,lev_out)
[878]6
7!--------------------------------------------------------------
8!thermcell_env: calcule les caracteristiques de l environnement
9!necessaires au calcul des proprietes dans le thermique
10!--------------------------------------------------------------
11
12
[4590]13   USE lmdz_thermcell_ini, ONLY : prt_level,RLvCp,RKAPPA,RETV
14   USE lmdz_thermcell_qsat, ONLY : thermcell_qsat
[4089]15   IMPLICIT NONE
[878]16
[4089]17! arguments
[878]18
[4089]19   integer,intent(in) :: ngrid,nlay,lev_out
20   real,intent(in), dimension(ngrid,nlay) :: po,pt,pu,pv,pplay
21   real,intent(in), dimension(ngrid,nlay+1) :: pplev
22   real,intent(out), dimension(ngrid,nlay) :: zo,zl,zh,ztv,zthl
23   real,intent(out), dimension(ngrid,nlay) :: zpspsk,zu,zv,pqsat
[4843]24   real, intent(out), dimension(ngrid) :: lintercong
25   integer, intent(out), dimension(ngrid) :: lcong   
[4089]26! Local
[878]27
[4089]28   integer ig,ll
29   real dqsat_dT
30   logical mask(ngrid,nlay)
[878]31
32
[1403]33!^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
34! Initialisations :
35!------------------
36
[4089]37   mask(:,:)=.true.
[1403]38
[878]39!
40! calcul des caracteristiques de l environnement
[4089]41   DO  ll=1,nlay
42     DO ig=1,ngrid
43        zo(ig,ll)=po(ig,ll)
44        zl(ig,ll)=0.
45        zh(ig,ll)=pt(ig,ll)
46     enddo
47   enddo
48
[1403]49! Condensation :
50!---------------
51! Calcul de l'humidite a saturation et de la condensation
52
[4089]53   call thermcell_qsat(ngrid*nlay,mask,pplev,pt,po,pqsat)
54   do ll=1,nlay
55      do ig=1,ngrid
56         zl(ig,ll) = max(0.,po(ig,ll)-pqsat(ig,ll))
57         zh(ig,ll) = pt(ig,ll)+RLvCp*zl(ig,ll)         !   T = Tl + Lv/Cp ql
58         zo(ig,ll) = po(ig,ll)-zl(ig,ll)
59      enddo
60   enddo
61
[878]62!-----------------------------------------------------------------------
[4089]63   if (prt_level.ge.1) print*,'0 OK convect8'
[878]64
[4089]65   do ll=1,nlay
66      do ig=1,ngrid
67          zpspsk(ig,ll)=(pplay(ig,ll)/100000.)**RKAPPA
68          zu(ig,ll)=pu(ig,ll)
69          zv(ig,ll)=pv(ig,ll)
[878]70!attention zh est maintenant le profil de T et plus le profil de theta !
[1403]71! Quelle horreur ! A eviter.
[878]72!   T-> Theta
[1403]73            ztv(ig,ll)=zh(ig,ll)/zpspsk(ig,ll)
[878]74!Theta_v
[1403]75            ztv(ig,ll)=ztv(ig,ll)*(1.+RETV*(zo(ig,ll))-zl(ig,ll))
[878]76!Thetal
[1403]77            zthl(ig,ll)=pt(ig,ll)/zpspsk(ig,ll)
[878]78!           
[4089]79      enddo
80   enddo
[4843]81!CR: Calcul du niveau de congelation
82   do ig=1,ngrid
83      lcong(ig)=1
[4844]84      lintercong(ig)=0.
[4843]85   enddo
86   do ig=1,ngrid
87      do ll=1,nlay-1
88         if ((zh(ig,ll).gt.273.15).and.(zh(ig,ll+1).le.273.15)) then
89            lcong(ig)=ll+1
90            lintercong(ig)=(ll*(zh(ig,ll+1)-zh(ig,ll))  &
91     &               -zh(ig,ll)+273.15)/(zh(ig,ll+1)-zh(ig,ll))
92         endif
93      enddo
94   enddo
[878]95 
[4094]96 RETURN
[4089]97   END
[4590]98END MODULE lmdz_thermcell_env
Note: See TracBrowser for help on using the repository browser.