source: trunk/LMDZ.MARS/libf/phymars/thermcell_dqup.F90 @ 357

Last change on this file since 357 was 342, checked in by acolaitis, 13 years ago

M 341 libf/phymars/calltherm_interface.F90
D 341 libf/phymars/calltherm_mars.F90
---------------- Merged calltherm_mars with calltherm_interface for simplicity.

Cleaned up variables and code

M 341 libf/phymars/thermcell_dqup.F90
---------------- dqup now output derivatives and not tendancies

  • Property svn:executable set to *
File size: 3.1 KB
Line 
1      subroutine thermcell_dqup(ngrid,nlayer,ptimestep,fm0,entr0,  &
2     &    detr0,masse0,q_therm,dq_therm,charvar,zdz)
3      implicit none
4
5! #include "iniprint.h"
6!=======================================================================
7!
8!   Calcul du transport verticale dans la couche limite en presence
9!   de "thermiques" explicitement representes
10!   calcul du dq/dt une fois qu'on connait les ascendances
11!   Version modifiee pour prendre les downdrafts a la place de la
12!   subsidence compensatoire
13!=======================================================================
14
15#include "dimensions.h"
16#include "dimphys.h"
17
18! ============================ INPUTS ============================
19
20      INTEGER, INTENT(IN) :: ngrid,nlayer
21      REAL, INTENT(IN) :: ptimestep
22      REAL, INTENT(IN) :: fm0(ngridmx,nlayermx+1)
23      REAL, INTENT(IN) ::entr0(ngridmx,nlayermx),detr0(ngridmx,nlayermx)
24      REAL, INTENT(IN) :: q_therm(ngridmx,nlayermx)
25      CHARACTER (LEN=20), INTENT(IN) :: charvar
26      REAL, INTENT(IN) :: masse0(ngridmx,nlayermx)
27      REAL, INTENT(IN) :: zdz(ngridmx,nlayermx)
28
29! ============================ OUTPUTS ===========================
30
31      REAL, INTENT(OUT) :: dq_therm(ngridmx,nlayermx)  ! dq/dt -> derivative
32
33! ============================ LOCAL =============================
34
35      REAL q(ngridmx,nlayermx)
36      REAL qa(ngridmx,nlayermx)
37      REAL qd(ngridmx,nlayermx)
38      INTEGER ig,k
39      REAL gammaf(ngridmx,nlayermx)
40
41! =========== Init ==============================================
42
43      qa(:,:)=q_therm(:,:)
44      q(:,:)=q_therm(:,:)
45
46      do ig=1,ngridmx
47         do k=1, nlayermx
48            if (fm0(ig,k)+entr0(ig,k) .gt. 0.) then
49              gammaf(ig,k)=fm0(ig,k)/(fm0(ig,k)+entr0(ig,k))
50            else
51              gammaf(ig,k)=0.
52            endif
53         enddo
54      enddo
55
56
57! =========== Updraft ============================================
58
59!      qa(:,1)=q(:,1)
60
61      do ig=1,ngridmx
62         do k=2, nlayermx
63 
64             qa(ig,k)=gammaf(ig,k)*qa(ig,k-1) +(1.-gammaf(ig,k))*q(ig,k)
65
66         enddo
67      enddo
68
69
70
71! ====== dq ======================================================
72
73!      do ig=1,ngridmx
74!         dq_therm(ig,1)=(detr0(ig,1)*qa(ig,1)+fm0(ig,2)*q(ig,2) &
75!      &               -entr0(ig,1)*q(ig,1)) &
76!      &               *ptimestep/masse0(ig,1)
77!       enddo
78!       do k=2,nlayermx-1
79!         do ig=1, ngridmx
80!         dq_therm(ig,k)=(detr0(ig,k)*qa(ig,k)+fm0(ig,k+1)*q(ig,k+1) &
81!      &               -entr0(ig,k)*q(ig,k)-fm0(ig,k)*q(ig,k))  &
82!      &               *ptimestep/masse0(ig,k)
83!         enddo
84!      enddo
85!
86!         do ig=1, ngridmx
87!         dq_therm(ig,nlayermx)=(detr0(ig,nlayermx)*qa(ig,nlayermx) &
88!      &             -entr0(ig,nlayermx)*q(ig,nlayermx)  &
89!      &               -fm0(ig,nlayermx)*q(ig,nlayermx)) &
90!      &               *ptimestep/masse0(ig,nlayermx)
91!         
92!         enddo
93
94        do ig=1, ngridmx
95           do k=1,nlayermx-1
96              dq_therm(ig,k)=-(1./masse0(ig,k))*(  &
97     &           fm0(ig,k+1)*(qa(ig,k+1)-q(ig,k+1)) -   &
98     &           fm0(ig,k)*(qa(ig,k)-q(ig,k))          ) &
99     &       /zdz(ig,k)
100
101           enddo
102        enddo
103
104      return
105      end
Note: See TracBrowser for help on using the repository browser.