source: LMDZ6/trunk/libf/phylmd/moy_undefSTD.f90 @ 5452

Last change on this file since 5452 was 5310, checked in by abarral, 2 months ago

unify abort_gcm
rename wxios -> wxios_mod

  • 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: 4.8 KB
Line 
1
2! $Id: moy_undefSTD.f90 5310 2024-11-01 12:05:47Z aborella $
3
4SUBROUTINE moy_undefstd(itap, itapm1)
5  USE clesphys_mod_h
6  USE netcdf
7  USE dimphy
8  USE phys_state_var_mod
9  use wxios_mod, ONLY: missing_val_xios => missing_val, using_xios
10
11  USE phys_cal_mod, ONLY: mth_len
12  IMPLICIT NONE
13  REAL :: missing_val
14
15  ! ====================================================================
16
17  ! I. Musat : 09.2004
18
19  ! Moyenne - a des frequences differentes - des valeurs bien definies
20  ! (.NE.missing_val) des variables interpolees a un niveau de
21  ! pression.
22  ! 1) les variables de type "day" (nout=1) ou "mth" (nout=2) sont sommees
23  ! tous les pas de temps de la physique
24
25  ! 2) les variables de type "NMC" (nout=3) sont calculees a partir
26  ! des valeurs instantannees toutes les 6 heures
27
28
29  ! NB: mettre "inst(X)" dans le write_hist*NMC.h !
30  ! ====================================================================
31
32
33  ! variables Input
34  ! INTEGER nlevSTD, klevSTD, itap
35  ! PARAMETER(klevSTD=17)
36  INTEGER itap, itapm1
37
38  ! variables locales
39  ! INTEGER i, k, nout, n
40  ! PARAMETER(nout=3) !nout=1 day/nout=2 mth/nout=3 NMC
41  INTEGER i, k, n
42  ! REAL dtime, freq_outNMC(nout), freq_moyNMC(nout)
43  ! REAL freq_outNMC(nout), freq_calNMC(nout)
44  REAL freq_moynmc(nout)
45
46  ! variables Output
47  ! REAL tnondef(klon,klevSTD,nout)
48  ! REAL tsumSTD(klon,klevSTD,nout)
49
50  REAL un_jour
51  PARAMETER (un_jour=86400.)
52! REAL missing_val
53
54! missing_val = nf90_fill_real
55  IF (using_xios) THEN
56    missing_val = missing_val_xios
57  ELSE
58    missing_val=missing_val_nf90
59  ENDIF
60
61  DO n = 1, nout
62    IF (freq_outnmc(n)<0) THEN
63      freq_moynmc(n) = (mth_len*un_jour)/freq_calnmc(n)
64      ! print*,'moy_undefSTD n freq_out freq_moy =',
65      ! $n,freq_moyNMC(n)
66    ELSE
67      freq_moynmc(n) = freq_outnmc(n)/freq_calnmc(n)
68    END IF
69
70    ! calcul 1 fois pas mois, 1 fois par jour ou toutes les 6h
71
72    IF (n==1 .AND. itap==itapm1 .OR. n>1 .AND. mod(itap,nint(freq_outnmc(n)/ &
73        phys_tstep))==0) THEN
74
75      ! print*,'moy_undefSTD n itap itapm1',n,itap,itapm1
76
77      DO k = 1, nlevstd
78        DO i = 1, klon
79          IF (tnondef(i,k,n)/=(freq_moynmc(n))) THEN
80            tsumstd(i, k, n) = tsumstd(i, k, n)/(freq_moynmc(n)-tnondef(i,k,n &
81              ))
82            usumstd(i, k, n) = usumstd(i, k, n)/(freq_moynmc(n)-tnondef(i,k,n &
83              ))
84            vsumstd(i, k, n) = vsumstd(i, k, n)/(freq_moynmc(n)-tnondef(i,k,n &
85              ))
86            wsumstd(i, k, n) = wsumstd(i, k, n)/(freq_moynmc(n)-tnondef(i,k,n &
87              ))
88            phisumstd(i, k, n) = phisumstd(i, k, n)/ &
89              (freq_moynmc(n)-tnondef(i,k,n))
90            qsumstd(i, k, n) = qsumstd(i, k, n)/(freq_moynmc(n)-tnondef(i,k,n &
91              ))
92            rhsumstd(i, k, n) = rhsumstd(i, k, n)/(freq_moynmc(n)-tnondef(i,k &
93              ,n))
94            uvsumstd(i, k, n) = uvsumstd(i, k, n)/(freq_moynmc(n)-tnondef(i,k &
95              ,n))
96            vqsumstd(i, k, n) = vqsumstd(i, k, n)/(freq_moynmc(n)-tnondef(i,k &
97              ,n))
98            vtsumstd(i, k, n) = vtsumstd(i, k, n)/(freq_moynmc(n)-tnondef(i,k &
99              ,n))
100            wqsumstd(i, k, n) = wqsumstd(i, k, n)/(freq_moynmc(n)-tnondef(i,k &
101              ,n))
102            vphisumstd(i, k, n) = vphisumstd(i, k, n)/ &
103              (freq_moynmc(n)-tnondef(i,k,n))
104            wtsumstd(i, k, n) = wtsumstd(i, k, n)/(freq_moynmc(n)-tnondef(i,k &
105              ,n))
106            u2sumstd(i, k, n) = u2sumstd(i, k, n)/(freq_moynmc(n)-tnondef(i,k &
107              ,n))
108            v2sumstd(i, k, n) = v2sumstd(i, k, n)/(freq_moynmc(n)-tnondef(i,k &
109              ,n))
110            t2sumstd(i, k, n) = t2sumstd(i, k, n)/(freq_moynmc(n)-tnondef(i,k &
111              ,n))
112            o3sumstd(i, k, n) = o3sumstd(i, k, n)/(freq_moynmc(n)-tnondef(i,k &
113              ,n))
114            o3daysumstd(i, k, n) = o3daysumstd(i, k, n)/ &
115              (freq_moynmc(n)-tnondef(i,k,n))
116          ELSE
117            tsumstd(i, k, n) = missing_val
118            usumstd(i, k, n) = missing_val
119            vsumstd(i, k, n) = missing_val
120            wsumstd(i, k, n) = missing_val
121            phisumstd(i, k, n) = missing_val
122            qsumstd(i, k, n) = missing_val
123            rhsumstd(i, k, n) = missing_val
124            uvsumstd(i, k, n) = missing_val
125            vqsumstd(i, k, n) = missing_val
126            vtsumstd(i, k, n) = missing_val
127            wqsumstd(i, k, n) = missing_val
128            vphisumstd(i, k, n) = missing_val
129            wtsumstd(i, k, n) = missing_val
130            u2sumstd(i, k, n) = missing_val
131            v2sumstd(i, k, n) = missing_val
132            t2sumstd(i, k, n) = missing_val
133            o3sumstd(i, k, n) = missing_val
134            o3daysumstd(i, k, n) = missing_val
135          END IF !tnondef(i,k,n).NE.(freq_moyNMC(n))
136        END DO !i
137      END DO !k
138    END IF !MOD(itap,NINT(freq_outNMC(n)/phys_tstep)).EQ.0
139
140  END DO !n
141
142  RETURN
143END SUBROUTINE moy_undefstd
Note: See TracBrowser for help on using the repository browser.