source: LMDZ6/trunk/libf/phylmd/moyglo_aire.f90 @ 5278

Last change on this file since 5278 was 5274, checked in by abarral, 13 months ago

Replace yomcst.h by existing module

  • 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: 5.5 KB
Line 
1
2! $Header$
3
4SUBROUTINE moyglo_pondaire(nhori, champ, aire, ok_msk, msk, moyglo)
5
6  USE yomcst_mod_h, ONLY: RPI, RCLUM, RHPLA, RKBOL, RNAVO                   &
7          , RDAY, REA, REPSM, RSIYEA, RSIDAY, ROMEGA                  &
8          , R_ecc, R_peri, R_incl                                      &
9          , RA, RG, R1SA                                         &
10          , RSIGMA                                                     &
11          , R, RMD, RMV, RD, RV, RCPD                    &
12          , RMO3, RMCO2, RMC, RMCH4, RMN2O, RMCFC11, RMCFC12        &
13          , RCPV, RCVD, RCVV, RKAPPA, RETV, eps_w                    &
14          , RCW, RCS                                                 &
15          , RLVTT, RLSTT, RLMLT, RTT, RATM                           &
16          , RESTT, RALPW, RBETW, RGAMW, RALPS, RBETS, RGAMS            &
17          , RALPD, RBETD, RGAMD
18  USE dimphy
19  IMPLICIT NONE
20
21  ! ==================================================================
22  ! I. Musat, 07.2004
23
24  ! Calcul moyenne globale ponderee par l'aire totale, avec ou sans masque
25
26  ! moyenne = Somme_(champ* aire)/Somme_aire
27
28  ! ==================================================================
29
30  INTEGER i, nhori
31  REAL champ(klon), aire(klon), msk(klon)
32  LOGICAL ok_msk
33  REAL moyglo
34
35  ! var locale
36  REAL airetot
37
38  ! PRINT*,'moyglo_pondaire nhori',nhori
39
40  airetot = 0.
41  moyglo = 0.
42
43  IF (ok_msk) THEN
44    DO i = 1, nhori
45      ! IF(msk(i).EQ.1.) THEN
46      IF (msk(i)>0.) THEN
47
48        ! aire totale
49        airetot = airetot + aire(i)*msk(i)
50
51        ! ponderation par la masse
52        moyglo = moyglo + champ(i)*aire(i)*msk(i)
53      END IF
54    END DO
55
56  ELSE !ok_msk
57    DO i = 1, nhori
58
59      ! aire totale
60      airetot = airetot + aire(i)
61
62      ! ponderation par la masse
63      moyglo = moyglo + champ(i)*aire(i)
64    END DO
65
66  END IF
67
68  ! moyenne ponderee par l'aire
69  moyglo = moyglo/airetot
70
71  RETURN
72END SUBROUTINE moyglo_pondaire
73
74SUBROUTINE moyglo_pondaima(nhori, nvert, champ, aire, pbord, moyglo)
75  USE dimphy
76  USE yomcst_mod_h, ONLY: RPI, RCLUM, RHPLA, RKBOL, RNAVO                   &
77        , RDAY, REA, REPSM, RSIYEA, RSIDAY, ROMEGA                  &
78        , R_ecc, R_peri, R_incl                                      &
79        , RA, RG, R1SA                                         &
80        , RSIGMA                                                     &
81        , R, RMD, RMV, RD, RV, RCPD                    &
82        , RMO3, RMCO2, RMC, RMCH4, RMN2O, RMCFC11, RMCFC12        &
83        , RCPV, RCVD, RCVV, RKAPPA, RETV, eps_w                    &
84        , RCW, RCS                                                 &
85        , RLVTT, RLSTT, RLMLT, RTT, RATM                           &
86        , RESTT, RALPW, RBETW, RGAMW, RALPS, RBETS, RGAMS            &
87        , RALPD, RBETD, RGAMD
88  IMPLICIT NONE
89  ! ==================================================================
90  ! I. Musat, 07.2004
91
92  ! Calcul moyenne globale ponderee par la masse d'air, divisee par l'aire
93  ! totale avec ou sans masque
94
95  ! moyenne = Somme_(champ* masse_dair)/Somme_aire
96
97  ! ==================================================================
98  INTEGER i, k, nhori, nvert
99  REAL champ(klon, klev), aire(klon)
100  REAL pbord(klon, klev+1)
101  REAL moyglo
102
103  ! var locale
104  REAL airetot
105
106  ! PRINT*,'moyglo_pondaima RG, nhori, nvert',RG,nhori,nvert
107
108  ! ponderation par la masse
109  moyglo = 0.
110  DO k = 1, nvert
111    DO i = 1, nhori
112      moyglo = moyglo + champ(i, k)*(pbord(i,k)-pbord(i,k+1))/rg*aire(i)
113    END DO
114  END DO
115
116  ! aire totale
117  airetot = 0.
118  DO i = 1, nhori
119    airetot = airetot + aire(i)
120  END DO
121
122  ! moyenne par mettre carre avec ponderation par la masse
123  moyglo = moyglo/airetot
124
125  RETURN
126END SUBROUTINE moyglo_pondaima
127
128SUBROUTINE moyglo_pondmass(nhori, nvert, champ, aire, pbord, moyglo)
129  USE dimphy
130  USE yomcst_mod_h, ONLY: RPI, RCLUM, RHPLA, RKBOL, RNAVO                   &
131        , RDAY, REA, REPSM, RSIYEA, RSIDAY, ROMEGA                  &
132        , R_ecc, R_peri, R_incl                                      &
133        , RA, RG, R1SA                                         &
134        , RSIGMA                                                     &
135        , R, RMD, RMV, RD, RV, RCPD                    &
136        , RMO3, RMCO2, RMC, RMCH4, RMN2O, RMCFC11, RMCFC12        &
137        , RCPV, RCVD, RCVV, RKAPPA, RETV, eps_w                    &
138        , RCW, RCS                                                 &
139        , RLVTT, RLSTT, RLMLT, RTT, RATM                           &
140        , RESTT, RALPW, RBETW, RGAMW, RALPS, RBETS, RGAMS            &
141        , RALPD, RBETD, RGAMD
142  IMPLICIT NONE
143  ! ==================================================================
144  ! I. Musat, 07.2004
145
146  ! Calcul moyenne globale ponderee par la masse d'air, divisee par la
147  ! masse totale d'air, avec ou sans masque
148
149  ! moyenne = Somme_(champ* masse_dair)/Somme_(masse_dair)
150
151  ! ==================================================================
152  INTEGER i, k, nhori, nvert
153  REAL champ(klon, klev), aire(klon)
154  REAL pbord(klon, klev+1)
155  REAL moyglo
156
157  ! var locale
158  REAL massetot
159
160  ! PRINT*,'moyglo_pondmass RG, nhori, nvert',RG,nhori,nvert
161
162  ! ponderation par la masse
163  moyglo = 0.
164  DO k = 1, nvert
165    DO i = 1, nhori
166      moyglo = moyglo + champ(i, k)*(pbord(i,k)-pbord(i,k+1))/rg*aire(i)
167    END DO
168  END DO
169
170  ! masse totale
171  massetot = 0.
172  DO k = 1, nvert
173    DO i = 1, nhori
174      massetot = massetot + (pbord(i,k)-pbord(i,k+1))/rg*aire(i)
175    END DO
176  END DO
177
178  ! moyenne par mettre carre avec ponderation par la masse
179  moyglo = moyglo/massetot
180
181  RETURN
182END SUBROUTINE moyglo_pondmass
183
Note: See TracBrowser for help on using the repository browser.