source: LMDZ4/trunk/libf/phylmd/calwake.F @ 953

Last change on this file since 953 was 953, checked in by lmdzadmin, 16 years ago

On supprime variables pbase, ibas qui servent pas ; print sous clef JYG/FH
IM

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.7 KB
Line 
1      SUBROUTINE CALWAKE(paprs,pplay,dtime
2     :             ,t,q,omgb
3     :             ,dt_dwn,dq_dwn,M_dwn,M_up
4     :             ,dt_a,dq_a,sigd
5     :             ,wdt_PBL,wdq_PBL
6     :             ,udt_PBL,udq_PBL
7     o             ,wake_deltat,wake_deltaq,wake_dth
8     o             ,wake_h,wake_s,wake_dens
9     o             ,wake_pe,wake_fip,wake_gfl
10     o             ,dt_wake,dq_wake
11     o             ,wake_k
12     o             ,undi_t,undi_q
13     o             ,wake_omgbdth,wake_dp_omgb
14     o             ,wake_dtKE,wake_dqKE
15     o             ,wake_dtPBL,wake_dqPBL
16     o             ,wake_omg,wake_dp_deltomg
17     o             ,wake_spread,wake_Cstar,wake_d_deltat_gw
18     o             ,wake_ddeltat,wake_ddeltaq)
19***************************************************************
20*                                                             *
21* CALWAKE                                                     *
22*           interface avec le schema de calcul de la poche    *
23*           froide                                            *
24*                                                             *
25* written by   : CHERUY Frederique, 13/03/2000, 10.31.05      *
26* modified by :  ROEHRIG Romain,    01/30/2007                *
27***************************************************************
28*
29      USE dimphy
30      IMPLICIT none
31c======================================================================
32
33#include "dimensions.h"
34cccc#include "dimphy.h"
35#include "YOMCST.h"
36
37c Arguments
38c----------
39
40      INTEGER  i,l,ktopw
41      REAL   dtime
42
43      REAL paprs(klon,klev+1),pplay(klon,klev)
44      REAL t(klon,klev), q(klon,klev), omgb(klon,klev)
45      REAL dt_dwn(klon,klev), dq_dwn(klon,klev),M_dwn(klon,klev)
46      REAL M_up(klon,klev)
47      REAL dt_a(klon,klev), dq_a(klon,klev)
48      REAL wdt_PBL(klon,klev), wdq_PBL(klon,klev)
49      REAL udt_PBL(klon,klev), udq_PBL(klon,klev)
50      REAL wake_deltat(klon,klev),wake_deltaq(klon,klev)
51      REAL dt_wake(klon,klev),dq_wake(klon,klev)
52      REAL wake_d_deltat_gw(klon,klev)
53      REAL wake_h(klon),wake_s(klon)
54      REAL wake_dth(klon,klev)
55      REAL wake_pe(klon),wake_fip(klon),wake_gfl(klon)
56      REAL undi_t(klon,klev),undi_q(klon,klev)
57      REAL wake_omgbdth(klon,klev),wake_dp_omgb(klon,klev)
58      REAL wake_dtKE(klon,klev),wake_dqKE(klon,klev)
59      REAL wake_dtPBL(klon,klev),wake_dqPBL(klon,klev)
60      REAL wake_omg(klon,klev+1),wake_dp_deltomg(klon,klev)
61      REAL wake_spread(klon,klev),wake_Cstar(klon)
62      REAL wake_ddeltat(klon,klev),wake_ddeltaq(klon,klev)
63      REAL d_deltatw(klev), d_deltaqw(klev)
64      INTEGER wake_k(klon)
65      REAL sigd(klon)
66      REAL wake_dens(klon)
67
68C  Variable internes
69C  -----------------
70
71      REAL aire
72      REAL p(klev),ph(klev+1),pi(klev)
73      REAL te(klev),qe(klev),omgbe(klev),dtdwn(klev),dqdwn(klev)
74      REAL dta(klev),dqa(klev)
75      REAL wdtPBL(klev),wdqPBL(klev)
76      REAL udtPBL(klev),udqPBL(klev)
77      REAL amdwn(klev),amup(klev)
78      REAL dtw(klev),dqw(klev),dth(klev),d_deltat_gw(klev)
79      REAL dtls(klev),dqls(klev)
80      REAL tu(klev),qu(klev)
81      REAL hw,sigmaw,wape,fip,gfl
82      REAL omgbdth(klev),dp_omgb(klev)
83      REAL dtKE(klev),dqKE(klev)
84      REAL dtPBL(klev),dqPBL(klev)
85      REAL omg(klev+1),dp_deltomg(klev),spread(klev),Cstar
86      REAL sigd0,wdens
87
88      REAL RDCP
89
90c      print *, '-> calwake, wake_s ', wake_s(1)
91
92      RDCP=1./3.5
93
94c-----------------------------------------------------------
95      DO 999 i=1,klon   ! a vectoriser
96c----------------------------------------------------------
97
98
99      DO l=1,klev
100        p(l)= pplay(i,l)
101        ph(l)= paprs(i,l)
102        pi(l) = (pplay(i,l)/100000.)**RDCP
103
104        te(l) = t(i,l)
105        qe(l) = q(i,l)
106        omgbe(l) = omgb(i,l)
107
108        dtdwn(l)= dt_dwn(i,l)
109        dqdwn(l)= dq_dwn(i,l)
110        dta(l)= dt_a(i,l)
111        dqa(l)= dq_a(i,l)
112        wdtPBL(l)= wdt_PBL(i,l)
113        wdqPBL(l)= wdq_PBL(i,l)
114        udtPBL(l)= udt_PBL(i,l)
115        udqPBL(l)= udq_PBL(i,l)
116      ENDDO
117     
118      sigd0=sigd(i)
119c      print*, 'sigd0,sigd', sigd0, sigd(i)
120      ph(klev+1)=0.
121
122      ktopw = wake_k(i)
123
124      DO l=1,klev
125        dtw(l) = wake_deltat(i,l)
126        dqw(l) = wake_deltaq(i,l)
127      ENDDO
128
129      DO l=1,klev
130        dtls(l)=dt_wake(i,l)
131        dqls(l)=dq_wake(i,l)
132      ENDDO
133
134      hw = wake_h(i)
135      sigmaw = wake_s(i)
136
137cfkc les flux de masses sont evalues aux niveaux et valent 0 a la surface
138cfkc  on veut le flux de masse au milieu des couches
139
140      DO l=1,klev-1
141        amdwn(l)= 0.5*(M_dwn(i,l)+M_dwn(i,l+1))
142        amdwn(l)= (M_dwn(i,l+1))
143      ENDDO
144
145c au sommet le flux de masse est nul
146
147      amdwn(klev)=0.5*M_dwn(i,klev)
148c
149      DO l = 1,klev
150        amup(l)=M_up(i,l)
151      ENDDO
152
153      call WAKE(p,ph,pi,dtime,sigd0
154     $                ,te,qe,omgbe
155     $                ,dtdwn,dqdwn,amdwn,amup,dta,dqa
156     $                ,wdtPBL,wdqPBL,udtPBL,udqPBL
157     $                ,dtw,dqw,dth,hw,sigmaw,wape,fip,gfl
158     $                ,dtls,dqls,ktopw
159     $                ,omgbdth,dp_omgb,wdens
160     $                ,tu,qu
161     $                ,dtKE,dqKE
162     $                ,dtPBL,dqPBL
163     $                ,omg,dp_deltomg,spread
164     $                ,Cstar,d_deltat_gw
165     $                ,d_deltatw,d_deltaqw)
166
167       IF (ktopw .GT. 0) THEN
168         DO l=1,klev
169           wake_deltat(i,l)= dtw(l)
170           wake_deltaq(i,l)= dqw(l)
171           wake_d_deltat_gw(i,l)= d_deltat_gw(l)
172           wake_omgbdth(i,l) = omgbdth(l)
173           wake_dp_omgb(i,l) = dp_omgb(l)
174           wake_dtKE(i,l) = dtKE(l)
175           wake_dqKE(i,l) = dqKE(l)
176           wake_dtPBL(i,l) = dtPBL(l)
177           wake_dqPBL(i,l) = dqPBL(l)
178           wake_omg(i,l) = omg(l)
179           wake_dp_deltomg(i,l) = dp_deltomg(l)
180           wake_spread(i,l) = spread(l)
181           wake_dth(i,l) = dth(l)
182           dt_wake(i,l) = dtls(l)
183           dq_wake(i,l) = dqls(l)
184           undi_t(i,l) = tu(l)
185           undi_q(i,l) = qu(l)
186           wake_ddeltat(i,l) = d_deltatw(l)
187           wake_ddeltaq(i,l) = d_deltaqw(l)
188         ENDDO
189       ELSE
190         DO l = 1,klev
191           wake_deltat(i,l)= 0.
192           wake_deltaq(i,l)= 0.
193           wake_d_deltat_gw(i,l)= 0.
194           wake_omgbdth(i,l) = 0.
195           wake_dp_omgb(i,l) = 0.
196           wake_dtKE(i,l) = 0.
197           wake_dqKE(i,l) = 0.
198           wake_omg(i,l) = 0.
199           wake_dp_deltomg(i,l) = 0.
200           wake_spread(i,l) = 0.
201           wake_dth(i,l)=0.
202           dt_wake(i,l)=0.
203           dq_wake(i,l)=0.
204           undi_t(i,l)=te(l)
205           undi_q(i,l)=qe(l)
206         ENDDO
207       ENDIF
208
209       wake_h(i)= hw
210       wake_s(i)= sigmaw
211       wake_pe(i)= wape
212       wake_fip(i)= fip
213       wake_gfl(i) = gfl
214       wake_k(i) =ktopw
215       wake_Cstar(i) = Cstar
216       wake_dens(i) = wdens
217c
218 999  CONTINUE
219c
220      RETURN
221      END
Note: See TracBrowser for help on using the repository browser.