source: LMDZ.3.3/trunk/libf/dyn3d/lectfluxnc.F @ 185

Last change on this file since 185 was 185, checked in by lmdzadmin, 23 years ago

Creation lecture des flux pour le offline en netcdf. Idelkadi
LF

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.8 KB
Line 
1      SUBROUTINE lectfluxnc0(irec,massem,pbarun,pbarvn,wn,tetan,phin,
2     s     nrec,avant,airefi,phisfi,
3     s     t,zmfu, zmfd, zen_u, zde_u,zen_d, zde_d, coefkz,
4     s     yu1,yv1,ftsol,pctsrf,
5     s     frac_impa,frac_nucl,phis)
6
7      IMPLICIT NONE
8
9#include "dimensions.h"
10#include "paramet.h"
11#include "logic.h"
12#include "comvert.h"
13#include "comconst.h"
14#include "comgeom2.h"
15
16#include "tracstoke.h"
17
18      integer irec,nrec,i,j
19
20      integer klon,ig,l
21      parameter (klon=iim*(jjm-1)+2)
22      INTEGER nbsrf
23      PARAMETER (nbsrf=4) ! nombre de sous-fractions pour une maille
24
25c Convection
26      real*4 zmfd(klon,llm),zde_d(klon,llm),zen_d(klon,llm)
27      real*4 zmfu(klon,llm),zde_u(klon,llm),zen_u(klon,llm)
28      real*4 mfd(klon,llm),de_d(klon,llm),en_d(klon,llm)
29      real*4 mfu(klon,llm),de_u(klon,llm),en_u(klon,llm)
30        real*4 t(klon,llm)
31      real zdtvr
32       
33        real*4 airedy(iip1,jjp1)
34      real*4 rlonu_dy(iip1,jjp1),rlonv_dy(iip1,jjm),
35     . rlatu_dy(iip1,jjp1),rlatv_dy(iip1,jjm)
36
37      real*4 coefkz(klon,llm)
38      real*4 frac_impa(klon,llm),frac_nucl(klon,llm)
39      real*4 yu1(klon), yv1(klon)
40      real*4 ftsol(klon,nbsrf),pctsrf(klon,nbsrf)
41
42      logical avant
43
44      real massefi(klon,llm)
45
46c   Flux masse
47      real*4 massem(iip1,jjp1,llm),tetan(iip1,jjp1,llm)
48      real*4 pbarun(iip1,jjp1,llm),pbarvn(iip1,jjm,llm)
49      real*4 pbarvst(iip1,jjp1,llm)
50      real*4 wn(iip1,jjp1,llm),phin(iip1,jjp1,llm)
51      real*4 phis(iip1,jjp1)
52
53      real*4 airefi(klon),phisfi(klon)
54
55      real zcontrole(klon),zmass,tmpdyn(iip1,jjp1),zflux
56
57      real ziadvtrac,ziadvtrac2,zrec2
58      integer zim,zjm,zlm,zklon,zklev,zrec
59
60      real zpi
61
62      zpi=2.*asin(1.)
63
64
65c==================================================================
66c   Si le numero du record est 0 alors: INITIALISATION
67c==================================================================
68c
69      print*,'ENTREE DANS LECTFLUXNC'
70        print*,'IREC=',IREC
71
72      if(irec.eq.0) then
73
74        print*,'IREC==',0
75
76C test         call inigeom
77
78c==================================================================
79c   ouverture des fichiers
80c==================================================================
81       
82        CALL read_dstoke(0,zdtvr,ziadvtrac,ziadvtrac2)
83       
84        CALL read_fstoke0(0,
85     .  zrec,zim,zjm,zlm,
86     .   rlonu_dy,rlonv_dy,rlatu_dy,rlatv_dy,airedy,phis,
87     .   massem,pbarun,pbarvn,wn,tetan,phin)
88c
89        if(physic)then 
90        CALL read_pstoke0(0,
91     .   zrec,zklon,zklev,airefi,phisfi,
92     .   t,mfu,mfd,en_u,de_u,en_d,de_d,coefkz,
93     .   frac_impa,frac_nucl,yu1,yv1,ftsol,pctsrf)
94        endif
95       
96        dtvr=zdtvr     
97        nrec=zrec
98        print*,'nrec=',nrec
99       
100        print*, 'Lecture de defstoke.nc'
101        print*, 'Ds lectfluxnc dtvr = ', dtvr
102        print*, 'Ds lectfluxnc istdyn= ',ziadvtrac
103        print*, 'Ds lectfluxnc istphy= ',ziadvtrac2
104
105      istdyn=ziadvtrac
106      istphy=ziadvtrac2
107       
108c       pause
109
110c==================================================================
111c   Fin des initialisations
112      else ! irec=0
113c==================================================================
114
115
116c-----------------------------------------------------------------------
117c   Lecture des fichiers fluxmass et  physique:
118c   -----------------------------------------------------
119
120         CALL read_fstoke0(irec,
121     .   zrec,zim,zjm,zlm,
122     .   rlonu_dy,rlonv_dy,rlatu_dy,rlatv_dy,airedy,phis,
123     .   massem,pbarun,pbarvn,wn,tetan,phin)
124       
125        write(*,*) 'lectfluxnc aps read_fstoke irec',irec
126        if(physic)then
127        CALL read_pstoke0(irec,
128     .   zrec,zklon,zklev,airefi,phisfi,
129     .   t,mfu,mfd,en_u,de_u,en_d,de_d,coefkz,
130     .   frac_impa,frac_nucl,yu1,yv1,ftsol,pctsrf)
131       
132        write(*,*) 'lectfluxnc aps read_pstoke irec',irec
133       
134        if (avant) then
135c Simu directe
136       do l=1,llm
137          do ig=1,klon
138             zmfu(ig,l)=mfu(ig,l)
139             zmfd(ig,l)=mfd(ig,l)
140             zde_u(ig,l)=de_u(ig,l)
141             zen_u(ig,l)=en_u(ig,l)
142             zde_d(ig,l)=de_d(ig,l)
143             zen_d(ig,l)=en_d(ig,l)
144          enddo
145       enddo
146      else
147c   Simu retro
148       do l=1,llm
149          do ig=1,klon
150             zmfd(ig,l)=-mfu(ig,l)
151             zmfu(ig,l)=-mfd(ig,l)
152             zen_d(ig,l)=de_u(ig,l)
153             zde_d(ig,l)=en_u(ig,l)
154             zen_u(ig,l)=de_d(ig,l)
155             zde_u(ig,l)=en_d(ig,l)
156          enddo
157       enddo
158      endif
159
160c-----------------------------------------------------------------------
161c   PETIT CONTROLE SUR LES FLUX CONVECTIFS...
162c-----------------------------------------------------------------------
163
164      print*,'Ap redec irec'
165        write(*,*) 'dtphys = ', dtphys
166
167         call gr_dyn_fi(llm,iip1,jjp1,klon,massem,massefi)
168
169         do ig=1,klon
170            zcontrole(ig)=1.
171         enddo
172c   zmass=(max(massem(ig,l),massem(ig,l-1))/airefi(ig)
173         do l=2,llm
174            do ig=1,klon
175               zmass=max(massefi(ig,l),massefi(ig,l-1))/airefi(ig)
176               zflux=max(abs(zmfu(ig,l)),abs(zmfd(ig,l)))*dtphys
177               if(zflux.gt.0.9*zmass) then
178                 zcontrole(ig)=min(zcontrole(ig),0.9*zmass/zflux)
179               endif
180            enddo
181         enddo
182
183         do ig=1,klon
184            if(zcontrole(ig).lt.0.99999) then
185               print*,'ATTENTION !!! on reduit les flux de masse '
186               print*,'convectifs au point ig=',ig
187            endif
188         enddo
189       
190        write(*,*) 'lectfluxnc avt gr_fi_dyn'
191
192         call gr_fi_dyn(1,klon,iip1,jjp1,zcontrole,tmpdyn)
193       
194        write(*,*) 'lectfluxnc aps gr_fi_dyn'
195       
196         do l=1,llm
197            do ig=1,klon
198               zmfu(ig,l)=zmfu(ig,l)*zcontrole(ig)
199               zmfd(ig,l)=zmfd(ig,l)*zcontrole(ig)
200               zen_u(ig,l)=zen_u(ig,l)*zcontrole(ig)
201               zde_u(ig,l)=zde_u(ig,l)*zcontrole(ig)
202               zen_d(ig,l)=zen_d(ig,l)*zcontrole(ig)
203               zde_d(ig,l)=zde_d(ig,l)*zcontrole(ig)
204            enddo
205         enddo
206         endif
207       
208        write(*,*) 'lectfluxnc fin de boucle if'
209
210      endif ! irec=0
211
212      RETURN
213      END
214
215
Note: See TracBrowser for help on using the repository browser.