source: LMDZ5/branches/testing/libf/phylmd/cv3a_uncompress.F90 @ 2408

Last change on this file since 2408 was 2408, checked in by Laurent Fairhead, 9 years ago

Merged trunk changes r2298:2396 into testing branch

  • 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: 13.5 KB
Line 
1SUBROUTINE cv3a_uncompress(nloc, len, ncum, nd, ntra, idcum, compress, &
2                           iflag, kbas, ktop, &
3                           precip, cbmf, plcl, plfc, wbeff, sig, w0, ptop2, &
4                           ft, fq, fu, fv, ftra,  &
5                           sigd, ma, mip, vprecip, vprecipi, upwd, dnwd, dnwd0, &
6                           qcondc, wd, cape, cin, &
7                           tvp, &
8                           ftd, fqd, &
9                           plim1, plim2, asupmax, supmax0, &
10                           asupmaxmin, &
11                           da, phi, mp, phi2, d1a, dam, sigij, &                ! RomP+AC+jyg
12                           clw, elij, evap, ep, epmlmMm, eplaMm, &              ! RomP
13                           wdtrainA, wdtrainM, &                                ! RomP
14                           qtc, sigt,          &
15                         
16                           iflag1, kbas1, ktop1, &
17                           precip1, cbmf1, plcl1, plfc1, wbeff1, sig1, w01, ptop21, &
18                           ft1, fq1, fu1, fv1, ftra1, &
19                           sigd1, ma1, mip1, vprecip1, vprecipi1, upwd1, dnwd1, dnwd01, &
20                           qcondc1, wd1, cape1, cin1, &
21                           tvp1, &
22                           ftd1, fqd1, &
23                           plim11, plim21, asupmax1, supmax01, &
24                           asupmaxmin1, &
25                           da1, phi1, mp1, phi21, d1a1, dam1, sigij1, &         ! RomP+AC+jyg
26                           clw1, elij1, evap1, ep1, epmlmMm1, eplaMm1, &        ! RomP
27                           wdtrainA1, wdtrainM1, &                              ! RomP
28                           qtc1, sigt1)
29
30  ! **************************************************************
31  ! *
32  ! CV3A_UNCOMPRESS                                             *
33  ! *
34  ! *
35  ! written by   : Sandrine Bony-Lena , 17/05/2003, 11.22.15    *
36  ! modified by  : Jean-Yves Grandpeix, 23/06/2003, 10.36.17    *
37  ! **************************************************************
38
39  IMPLICIT NONE
40
41  include "cv3param.h"
42
43  ! inputs:
44  INTEGER, INTENT (IN)                               :: nloc, len, ncum, nd, ntra
45  INTEGER, DIMENSION (nloc), INTENT (IN)             :: idcum(nloc)
46!jyg<
47  LOGICAL, INTENT (IN)                               :: compress
48!>jyg
49  INTEGER, DIMENSION (nloc), INTENT (IN)             ::iflag, kbas, ktop
50  REAL, DIMENSION (nloc), INTENT (IN)                :: precip, cbmf, plcl, plfc
51  REAL, DIMENSION (nloc), INTENT (IN)                :: wbeff
52  REAL, DIMENSION (nloc, nd), INTENT (IN)            :: sig, w0
53  REAL, DIMENSION (nloc), INTENT (IN)                :: ptop2
54  REAL, DIMENSION (nloc, nd), INTENT (IN)            :: ft, fq, fu, fv
55  REAL, DIMENSION (nloc, nd, ntra), INTENT (IN)      :: ftra
56  REAL, DIMENSION (nloc), INTENT (IN)                :: sigd
57  REAL, DIMENSION (nloc, nd), INTENT (IN)            :: ma, mip
58  REAL, DIMENSION (nloc, nd+1), INTENT (IN)          :: vprecip
59  REAL, DIMENSION (nloc, nd+1), INTENT (IN)          :: vprecipi
60  REAL, DIMENSION (nloc, nd), INTENT (IN)            :: upwd, dnwd, dnwd0
61  REAL, DIMENSION (nloc, nd), INTENT (IN)            :: qcondc
62  REAL, DIMENSION (nloc), INTENT (IN)                :: wd, cape, cin
63  REAL, DIMENSION (nloc, nd), INTENT (IN)            :: tvp
64  REAL, DIMENSION (nloc, nd), INTENT (IN)            :: ftd, fqd
65  REAL, DIMENSION (nloc), INTENT (IN)                :: plim1, plim2
66  REAL, DIMENSION (nloc, nd), INTENT (IN)            :: asupmax
67  REAL, DIMENSION (nloc), INTENT (IN)                :: supmax0, asupmaxmin
68
69  REAL, DIMENSION (nloc, nd), INTENT (IN)            :: da
70  REAL, DIMENSION (nloc, nd, nd), INTENT (IN)        :: phi                    !AC!
71  REAL, DIMENSION (nloc, nd), INTENT (IN)            :: mp                     !RomP
72  REAL, DIMENSION (nloc, nd, nd), INTENT (IN)        :: phi2                   !RomP
73  REAL, DIMENSION (nloc, nd), INTENT (IN)            :: d1a, dam               !RomP
74  REAL, DIMENSION (nloc, nd, nd), INTENT (IN)        :: sigij                  !RomP
75  REAL, DIMENSION (nloc, nd), INTENT (IN)            :: clw                    !RomP
76  REAL, DIMENSION (nloc, nd, nd), INTENT (IN)        :: elij                   !RomP
77  REAL, DIMENSION (nloc, nd), INTENT (IN)            :: evap, ep               !RomP
78  REAL, DIMENSION (nloc, nd, nd), INTENT (IN)        :: epmlmMm                !RomP+jyg
79  REAL, DIMENSION (nloc, nd), INTENT (IN)            :: eplamM                 !RomP+jyg
80  REAL, DIMENSION (nloc, nd), INTENT (IN)            :: qtc, sigt              !RomP
81  REAL, DIMENSION (nloc, nd), INTENT (IN)            :: wdtrainA, wdtrainM     !RomP
82
83  ! outputs:
84  INTEGER, DIMENSION (len), INTENT (OUT)             :: iflag1, kbas1, ktop1
85  REAL, DIMENSION (len), INTENT (OUT)                :: precip1, cbmf1, plcl1, plfc1
86  REAL, DIMENSION (len), INTENT (OUT)                :: wbeff1
87  REAL, DIMENSION (len, nd), INTENT (OUT)            :: sig1, w01
88  REAL, DIMENSION (len), INTENT (OUT)                :: ptop21
89  REAL, DIMENSION (len, nd), INTENT (OUT)            :: ft1, fq1, fu1, fv1
90  REAL, DIMENSION (len, nd, ntra), INTENT (OUT)      :: ftra1
91  REAL, DIMENSION (len), INTENT (OUT)                :: sigd1
92  REAL, DIMENSION (len, nd), INTENT (OUT)            :: ma1, mip1
93  REAL, DIMENSION (len, nd+1), INTENT (OUT)          :: vprecip1
94  REAL, DIMENSION (len, nd+1), INTENT (OUT)          :: vprecipi1
95  REAL, DIMENSION (len, nd), INTENT (OUT)            :: upwd1, dnwd1, dnwd01
96  REAL, DIMENSION (len, nd), INTENT (OUT)            :: qcondc1
97  REAL, DIMENSION (len), INTENT (OUT)                :: wd1, cape1, cin1
98  REAL, DIMENSION (len, nd), INTENT (OUT)            :: tvp1
99  REAL, DIMENSION (len, nd), INTENT (OUT)            :: ftd1, fqd1
100  REAL, DIMENSION (len), INTENT (OUT)                :: plim11, plim21
101  REAL, DIMENSION (len, nd), INTENT (OUT)            :: asupmax1
102  REAL, DIMENSION (len), INTENT (OUT)                :: supmax01, asupmaxmin1
103                                                   
104  REAL, DIMENSION (len, nd), INTENT (OUT)            :: da1
105  REAL, DIMENSION (len, nd, nd), INTENT (OUT)        :: phi1                   !AC!
106  REAL, DIMENSION (len, nd), INTENT (OUT)            :: mp1                    !RomP
107  REAL, DIMENSION (len, nd, nd), INTENT (OUT)        :: phi21                  !RomP
108  REAL, DIMENSION (len, nd), INTENT (OUT)            :: d1a1, dam1 !RomP       !RomP
109  REAL, DIMENSION (len, nd, nd), INTENT (OUT)        :: sigij1                 !RomP
110  REAL, DIMENSION (len, nd), INTENT (OUT)            :: clw1                   !RomP
111  REAL, DIMENSION (len, nd, nd), INTENT (OUT)        :: elij1                  !RomP
112  REAL, DIMENSION (len, nd), INTENT (OUT)            :: evap1, ep1             !RomP
113  REAL, DIMENSION (len, nd, nd), INTENT (OUT)        :: epmlmMm1               !RomP+jyg
114  REAL, DIMENSION (len, nd), INTENT (OUT)            :: eplamM1                !RomP+jyg
115  REAL, DIMENSION (len, nd), INTENT (OUT)            :: qtc1, sigt1            !RomP
116  REAL, DIMENSION (len, nd), INTENT (OUT)            :: wdtrainA1, wdtrainM1   !RomP
117
118
119  ! local variables:
120  INTEGER i, k, j
121  INTEGER jdcum
122  ! c    integer k1,k2
123
124!jyg<
125  IF (compress) THEN
126!>jyg
127    DO i = 1, ncum
128      sig1(idcum(i), nd) = sig(i, nd)
129      ptop21(idcum(i)) = ptop2(i)
130      sigd1(idcum(i)) = sigd(i)
131      precip1(idcum(i)) = precip(i)
132      cbmf1(idcum(i)) = cbmf(i)
133      plcl1(idcum(i)) = plcl(i)
134      plfc1(idcum(i)) = plfc(i)
135      wbeff1(idcum(i)) = wbeff(i)
136      iflag1(idcum(i)) = iflag(i)
137      kbas1(idcum(i)) = kbas(i)
138      ktop1(idcum(i)) = ktop(i)
139      wd1(idcum(i)) = wd(i)
140      cape1(idcum(i)) = cape(i)
141      cin1(idcum(i)) = cin(i)
142      plim11(idcum(i)) = plim1(i)
143      plim21(idcum(i)) = plim2(i)
144      supmax01(idcum(i)) = supmax0(i)
145      asupmaxmin1(idcum(i)) = asupmaxmin(i)
146    END DO
147   
148    DO k = 1, nl
149      DO i = 1, ncum
150        sig1(idcum(i), k) = sig(i, k)
151        w01(idcum(i), k) = w0(i, k)
152        ft1(idcum(i), k) = ft(i, k)
153        fq1(idcum(i), k) = fq(i, k)
154        fu1(idcum(i), k) = fu(i, k)
155        fv1(idcum(i), k) = fv(i, k)
156        ma1(idcum(i), k) = ma(i, k)
157        mip1(idcum(i), k) = mip(i, k)
158        vprecip1(idcum(i), k) = vprecip(i, k)
159        vprecipi1(idcum(i), k) = vprecipi(i, k)
160        upwd1(idcum(i), k) = upwd(i, k)
161        dnwd1(idcum(i), k) = dnwd(i, k)
162        dnwd01(idcum(i), k) = dnwd0(i, k)
163        qcondc1(idcum(i), k) = qcondc(i, k)
164        tvp1(idcum(i), k) = tvp(i, k)
165        ftd1(idcum(i), k) = ftd(i, k)
166        fqd1(idcum(i), k) = fqd(i, k)
167        asupmax1(idcum(i), k) = asupmax(i, k)
168   
169        da1(idcum(i), k) = da(i, k) !AC!
170        mp1(idcum(i), k) = mp(i, k) !RomP
171        d1a1(idcum(i), k) = d1a(i, k) !RomP
172        dam1(idcum(i), k) = dam(i, k) !RomP
173        clw1(idcum(i), k) = clw(i, k) !RomP
174        evap1(idcum(i), k) = evap(i, k) !RomP
175        ep1(idcum(i), k) = ep(i, k) !RomP
176        eplamM1(idcum(i), k) = eplamM(i, k) !RomP+jyg
177        wdtrainA1(idcum(i), k) = wdtrainA(i, k) !RomP
178        wdtrainM1(idcum(i), k) = wdtrainM(i, k) !RomP
179        qtc1(idcum(i), k) = qtc(i, k)
180        sigt1(idcum(i), k) = sigt(i, k)
181   
182      END DO
183    END DO
184
185! Fluxes are defined on a staggered grid and extend up to nl+1
186    DO i = 1, ncum
187      ma1(idcum(i), nlp) = 0.
188      vprecip1(idcum(i), nlp) = 0.
189      vprecipi1(idcum(i), nlp) = 0.
190      upwd1(idcum(i), nlp) = 0.
191      dnwd1(idcum(i), nlp) = 0.
192      dnwd01(idcum(i), nlp) = 0.
193    END DO
194   
195    ! AC!        do 2100 j=1,ntra
196    ! AC!c oct3         do 2110 k=1,nl
197    ! AC!         do 2110 k=1,nd ! oct3
198    ! AC!          do 2120 i=1,ncum
199    ! AC!            ftra1(idcum(i),k,j)=ftra(i,k,j)
200    ! AC! 2120     continue
201    ! AC! 2110    continue
202    ! AC! 2100   continue
203   
204    ! AC!
205!jyg<
206!  Essais pour gagner du temps en diminuant l'adressage indirect
207!!    DO j = 1, nd
208!!      DO k = 1, nd
209!!        DO i = 1, ncum
210!!          phi1(idcum(i), k, j) = phi(i, k, j) !AC!
211!!          phi21(idcum(i), k, j) = phi2(i, k, j) !RomP
212!!          sigij1(idcum(i), k, j) = sigij(i, k, j) !RomP
213!!          elij1(idcum(i), k, j) = elij(i, k, j) !RomP
214!!          epmlmMm(idcum(i), k, j) = epmlmMm(i, k, j) !RomP+jyg
215!!        END DO
216!!      END DO
217!!    END DO
218
219!!      DO i = 1, ncum
220!!        jdcum=idcum(i)
221!!        phi1    (jdcum, 1:nl+1, 1:nl+1) = phi    (i, 1:nl+1, 1:nl+1)          !AC!
222!!        phi21   (jdcum, 1:nl+1, 1:nl+1) = phi2   (i, 1:nl+1, 1:nl+1)          !RomP
223!!        sigij1  (jdcum, 1:nl+1, 1:nl+1) = sigij  (i, 1:nl+1, 1:nl+1)          !RomP
224!!        elij1   (jdcum, 1:nl+1, 1:nl+1) = elij   (i, 1:nl+1, 1:nl+1)          !RomP
225!!        epmlmMm1(jdcum, 1:nl+1, 1:nl+1) = epmlmMm(i, 1:nl+1, 1:nl+1)          !RomP+jyg
226!!      END DO
227!  These tracer associated arrays are defined up to nl, not nl+1
228  DO i = 1, ncum
229    jdcum=idcum(i)
230    DO k = 1,nl
231      DO j = 1,nl
232        phi1    (jdcum, j, k) = phi    (i, j, k)          !AC!
233        phi21   (jdcum, j, k) = phi2   (i, j, k)          !RomP
234        sigij1  (jdcum, j, k) = sigij  (i, j, k)          !RomP
235        elij1   (jdcum, j, k) = elij   (i, j, k)          !RomP
236        epmlmMm1(jdcum, j, k) = epmlmMm(i, j, k)          !RomP+jyg
237      END DO
238    ENDDO
239  ENDDO
240!>jyg
241    ! AC!
242   
243   
244    ! do 2220 k2=1,nd
245    ! do 2210 k1=1,nd
246    ! do 2200 i=1,ncum
247    ! ment1(idcum(i),k1,k2) = ment(i,k1,k2)
248    ! sigij1(idcum(i),k1,k2) = sigij(i,k1,k2)
249    ! 2200      enddo
250    ! 2210     enddo
251    ! 2220    enddo
252!
253!jyg<
254  ELSE  !(compress)
255!
256      sig1(:,nd) = sig(:,nd)
257      ptop21(:) = ptop2(:)
258      sigd1(:) = sigd(:)
259      precip1(:) = precip(:)
260      cbmf1(:) = cbmf(:)
261      plcl1(:) = plcl(:)
262      plfc1(:) = plfc(:)
263      wbeff1(:) = wbeff(:)
264      iflag1(:) = iflag(:)
265      kbas1(:) = kbas(:)
266      ktop1(:) = ktop(:)
267      wd1(:) = wd(:)
268      cape1(:) = cape(:)
269      cin1(:) = cin(:)
270      plim11(:) = plim1(:)
271      plim21(:) = plim2(:)
272      supmax01(:) = supmax0(:)
273      asupmaxmin1(:) = asupmaxmin(:)
274!
275      sig1(:, 1:nl) = sig(:, 1:nl)
276      w01(:, 1:nl) = w0(:, 1:nl)
277      ft1(:, 1:nl) = ft(:, 1:nl)
278      fq1(:, 1:nl) = fq(:, 1:nl)
279      fu1(:, 1:nl) = fu(:, 1:nl)
280      fv1(:, 1:nl) = fv(:, 1:nl)
281      ma1(:, 1:nl) = ma(:, 1:nl)
282      mip1(:, 1:nl) = mip(:, 1:nl)
283      vprecip1(:, 1:nl) = vprecip(:, 1:nl)
284      vprecipi1(:, 1:nl) = vprecipi(:, 1:nl)
285      upwd1(:, 1:nl) = upwd(:, 1:nl)
286      dnwd1(:, 1:nl) = dnwd(:, 1:nl)
287      dnwd01(:, 1:nl) = dnwd0(:, 1:nl)
288      qcondc1(:, 1:nl) = qcondc(:, 1:nl)
289      tvp1(:, 1:nl) = tvp(:, 1:nl)
290      ftd1(:, 1:nl) = ftd(:, 1:nl)
291      fqd1(:, 1:nl) = fqd(:, 1:nl)
292      asupmax1(:, 1:nl) = asupmax(:, 1:nl)
293
294      da1(:, 1:nl) = da(:, 1:nl)              !AC!
295      mp1(:, 1:nl) = mp(:, 1:nl)              !RomP
296      d1a1(:, 1:nl) = d1a(:, 1:nl)            !RomP
297      dam1(:, 1:nl) = dam(:, 1:nl)            !RomP
298      clw1(:, 1:nl) = clw(:, 1:nl)            !RomP
299      evap1(:, 1:nl) = evap(:, 1:nl)          !RomP
300      ep1(:, 1:nl) = ep(:, 1:nl)              !RomP
301      eplamM1(:, 1:nl) = eplamM(:, 1:nl)       !RomP+jyg
302      wdtrainA1(:, 1:nl) = wdtrainA(:, 1:nl)  !RomP
303      wdtrainM1(:, 1:nl) = wdtrainM(:, 1:nl)  !RomP
304      qtc1(:, 1:nl) = qtc(:, 1:nl)
305      sigt1(:, 1:nl) = sigt(:, 1:nl)
306!
307      ma1(:, nlp) = 0.
308      vprecip1(:, nlp) = 0.
309      vprecipi1(:, nlp) = 0.
310      upwd1(:, nlp) = 0.
311      dnwd1(:, nlp) = 0.
312      dnwd01(:, nlp) = 0.
313
314!
315      phi1    (:, 1:nl, 1:nl) = phi    (:, 1:nl, 1:nl)  !AC!
316      phi21   (:, 1:nl, 1:nl) = phi2   (:, 1:nl, 1:nl)  !RomP
317      sigij1  (:, 1:nl, 1:nl) = sigij  (:, 1:nl, 1:nl)  !RomP
318      elij1   (:, 1:nl, 1:nl) = elij   (:, 1:nl, 1:nl)  !RomP
319      epmlmMm1(:, 1:nl, 1:nl) = epmlmMm(:, 1:nl, 1:nl)  !RomP+jyg
320  ENDIF !(compress)
321!>jyg
322
323  RETURN
324END SUBROUTINE cv3a_uncompress
325
Note: See TracBrowser for help on using the repository browser.