LMDZ
radozc.F90
Go to the documentation of this file.
1 SUBROUTINE radozc ( KIDIA , KFDIA , KLON , KTDIA , KLEV &
2  &, krint , kdlon , kshift &
3  &, paprs , pgemu &
4  &, pozon )
5 
6 !***********************************************************************
7 ! CAUTION: THIS ROUTINE WORKS ONLY ON A NON-ROTATED, UNSTRETCHED GRID
8 !***********************************************************************
9 
10 !**** *RADOZC* - COMPUTES DISTRIBUTION OF OZONE FROM CLIMATOLOGY
11 
12 ! PURPOSE.
13 ! --------
14 
15 !** INTERFACE.
16 ! ----------
17 ! CALL *RADOZC* FROM *RADINT*
18 
19 ! EXPLICIT ARGUMENTS :
20 ! --------------------
21 ! ==== INPUTS ===
22 ! ==== OUTPUTS ===
23 
24 ! IMPLICIT ARGUMENTS : NONE
25 ! --------------------
26 
27 ! METHOD.
28 ! -------
29 
30 
31 ! EXTERNALS.
32 ! ----------
33 
34 ! NONE
35 
36 ! REFERENCE.
37 ! ----------
38 
39 ! SEE RADIATION'S PART OF THE MODEL'S DOCUMENTATION AND
40 ! ECMWF RESEARCH DEPARTMENT DOCUMENTATION OF THE "I.F.S"
41 
42 ! AUTHOR.
43 ! -------
44 ! J.-J. MORCRETTE E.C.M.W.F. 95/01/25
45 
46 ! MODIFICATIONS.
47 ! --------------
48 ! D.SALMOND ECMWF 99-06-14 Optimisation
49 
50 !-----------------------------------------------------------------------
51 
52 #include "tsmbkind.h"
53 
54 USE yomcst , ONLY : r
55 USE yoeozoc , ONLY : rsinc ,rozt ,rproc
56 
57 
58 IMPLICIT NONE
59 
60 
61 ! DUMMY INTEGER SCALARS
62 integer_m :: kdlon
63 integer_m :: kfdia
64 integer_m :: kidia
65 integer_m :: klev
66 integer_m :: klon
67 integer_m :: krint
68 integer_m :: kshift
69 integer_m :: ktdia
70 
71 
72 
73 
74 ! -----------------------------------------------------------------
75 
76 !* 0.1 ARGUMENTS.
77 ! ----------
78 
79 real_b :: paprs(klon,klev+1),pgemu(klon)
80 
81 real_b :: pozon(kdlon,klev)
82 
83 ! -----------------------------------------------------------------
84 
85 !* 0.2 LOCAL ARRAYS.
86 ! -------------
87 
88 real_b :: zozlt(0:35) , zozon(kdlon,klev+1)
89 real_b :: zrrr(0:34)
90 
91 ! LOCAL INTEGER SCALARS
92 integer_m :: il, inla, jc, jk, jl
93 
94 ! LOCAL REAL SCALARS
95 real_b :: zpmr, zsilat, zsin
96 
97 ! ------------------------------------------------------------------
98 ! ------------------------------------------------------------------
99 ! ------------------------------------------------------------------
100 
101 !* 1. LATITUDE INDEX WITHIN OZONE CLIMATOLOGY
102 ! ---------------------------------------
103 
104 
105 
106 zsin=pgemu(kidia)
107 inla=0
108 zsilat=-9999._jprb
109 DO jl=18,1,-1
110  IF (zsin <= rsinc(jl+1).AND.zsin >= rsinc(jl)) THEN
111  inla=jl
112  ENDIF
113 ENDDO
114 IF (inla == 0) THEN
115 ! CALL ABOR1(' Problem with lat. interpolation in radozc!')
116  print *,' Problem with lat. interpolation in radozc!'
117 ENDIF
118 zsilat=(zsin-rsinc(inla))/(rsinc(inla+1)-rsinc(inla))
119 
120 ! ------------------------------------------------------------------
121 
122 
123 !* 2. LATITUDE INTERPOLATED FIELD
124 ! ---------------------------
125 
126 
127 IF(inla == 18.OR.inla == 1) THEN
128  DO jc=0,35
129  zozlt(jc)=rozt(inla,jc)
130  ENDDO
131 ELSE
132  DO jc=0,35
133  zozlt(jc)=rozt(inla,jc)+zsilat*(rozt(inla+1,jc)-rozt(inla,jc))
134  ENDDO
135 ENDIF
136 
137 
138 ! ------------------------------------------------------------------
139 
140 !* 3. VERTICAL INTERPOLATION
141 ! ----------------------
142 
143 DO jc=0,34
144  zrrr(jc)=(_one_/(rproc(jc)-rproc(jc+1)))*(zozlt(jc)-zozlt(jc+1))
145 ENDDO
146 
147 
148 il=kshift
149 DO jl=kidia,kfdia,krint
150  il=il+1
151  DO jc=0,34
152  DO jk=1,klev+1
153  zpmr=paprs(jl,jk)
154  IF(zpmr >= rproc(jc).AND.zpmr < rproc(jc+1)) &
155 & zozon(il,jk)=zozlt(jc+1)+(zpmr-rproc(jc+1))*zrrr(jc)
156  ENDDO
157  ENDDO
158 ENDDO
159 
160 il=kshift
161 DO jl=kidia,kfdia,krint
162  il=il+1
163  DO jk=1,klev+1
164  zpmr=paprs(jl,jk)
165  zpmr=paprs(jl,jk)
166  IF(zpmr >= rproc(35)) zozon(il,jk)=zozlt(35)
167  ENDDO
168 ENDDO
169 
170 ! INTEGRATION IN THE VERTICAL:
171 il=kshift
172 DO jl=kidia,kfdia,krint
173  il=il+1
174  DO jk=1,klev
175  pozon(il,jk)=(paprs(jl,jk+1)-paprs(jl,jk))&
176  &*(zozon(il,jk)+zozon(il,jk+1))*_half_
177  ENDDO
178 ENDDO
179 
180 ! -----------------------------------------------------------
181 
182 RETURN
183 END SUBROUTINE radozc
!$Id mode_top_bound COMMON comconstr r
Definition: comconst.h:7
integer, save kidia
Definition: dimphy.F90:6
integer, save klon
Definition: dimphy.F90:3
integer, save klev
Definition: dimphy.F90:7
integer, save kfdia
Definition: dimphy.F90:5
integer, save kdlon
Definition: dimphy.F90:4
subroutine radozc(KIDIA, KFDIA, KLON, KTDIA, KLEV, KRINT, KDLON, KSHIFT, PAPRS, PGEMU, POZON)
Definition: radozc.F90:5
!$Id itapm1 ENDIF!IM on interpole les champs sur les niveaux STD de pression!IM a chaque pas de temps de la physique c!positionnement de l argument logique a false c!pour ne pas recalculer deux fois la meme chose!c!a cet effet un appel a plevel_new a ete deplace c!a la fin de la serie d appels c!la boucle DO nlevSTD a ete internalisee c!dans d ou la creation de cette routine c c!CALL ulevSTD CALL &zphi philevSTD CALL &zx_rh rhlevSTD!DO klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon klev DO klon du jour ou toutes les read_climoz CALL &zphi geo500!IM on interpole a chaque pas de temps le paprs
Definition: yomcst.F90:1