34 real*8,
intent(in) :: x
40 real*8 :: pi,ga,z,r,gr
56 if (abs(x) > 1.0)
then
67 data g/1.0,0.5772156649015329, &
68 -0.6558780715202538, -0.420026350340952d-1, &
69 0.1665386113822915,-.421977345555443d-1, &
70 -.96219715278770d-2, .72189432466630d-2, &
71 -.11651675918591d-2, -.2152416741149d-3, &
72 .1280502823882d-3, -.201348547807d-4, &
73 -.12504934821d-5, .11330272320d-5, &
74 -.2056338417d-6, .61160950d-8, &
75 .50020075d-8, -.11812746d-8, &
76 .1043427d-9, .77823d-11, &
77 -.36968d-11, .51d-12, &
78 -.206d-13, -.54d-14, .14d-14, .1d-15/
84 if (abs(x) > 1.0)
then
86 if (x < 0.0) ga=-pi/(x*ga*sin(pi*x))
124 real*8,
intent(in),
dimension(:) :: f,s
125 integer,
intent(in) :: i1, i2
128 real*8 :: path_integral
131 real*8 :: sumo, deltah, val
133 integer*4,
dimension(i2-i1+1) :: idx
134 real*8,
dimension(i2-i1+1) :: f_rev, s_rev
141 call avint(f_rev(i1:i2),s_rev(i1:i2),(i2-i1+1), &
142 s_rev(i1),s_rev(i2), val)
147 deltah = abs(s(i1+1)-s(i1))
148 sumo = sumo + f(j)*deltah
160 subroutine avint ( ftab, xtab, ntab, a_in, b_in, result )
227 integer,
intent(in) :: ntab
229 integer,
parameter :: KR8 = selected_real_kind(15,300)
230 real ( kind = KR8 ),
intent(in) :: a_in
231 real ( kind = KR8 ) a
232 real ( kind = KR8 ) atemp
233 real ( kind = KR8 ),
intent(in) :: b_in
234 real ( kind = KR8 ) b
235 real ( kind = KR8 ) btemp
236 real ( kind = KR8 ) ca
237 real ( kind = KR8 ) cb
238 real ( kind = KR8 ) cc
239 real ( kind = KR8 ) ctemp
240 real ( kind = KR8 ),
intent(in) :: ftab(ntab)
245 real ( kind = KR8 ),
intent(out) :: result
246 real ( kind = KR8 ) sum1
247 real ( kind = KR8 ) syl
248 real ( kind = KR8 ) term1
249 real ( kind = KR8 ) term2
250 real ( kind = KR8 ) term3
251 real ( kind = KR8 ) x1
252 real ( kind = KR8 ) x2
253 real ( kind = KR8 ) x3
254 real ( kind = KR8 ),
intent(in) :: xtab(ntab)
262 write ( *,
'(a)' )
' '
263 write ( *,
'(a)' )
'AVINT - Fatal error!'
264 write ( *,
'(a,i6)' )
' NTAB is less than 3. NTAB = ', ntab
269 if ( xtab(i) <= xtab(i-1) )
then
276 write ( *,
'(a)' )
' '
277 write ( *,
'(a)' )
'AVINT - Fatal error!'
278 write ( *,
'(a)' )
' XTAB(I) is not greater than XTAB(I-1).'
279 write ( *,
'(a,i6)' )
' Here, I = ', i
280 write ( *,
'(a,g14.6)' )
' XTAB(I-1) = ', xtab(i-1)
281 write ( *,
'(a,g14.6)' )
' XTAB(I) = ', xtab(i)
288 write ( *,
'(a)' )
' '
289 write ( *,
'(a)' )
'AVINT - Warning!'
290 write ( *,
'(a)' )
' A = B, integral=0.'
312 if ( a <= xtab(i) )
then
319 ilo = min( ilo, ntab - 1 )
322 if ( xtab(i) <= b )
then
328 ihi = min( ihi, ntab - 1 )
329 ihi = max( ilo, ihi - 1 )
341 term1 = ftab(i-1) / ( ( x1 - x2 ) * ( x1 - x3 ) )
342 term2 = ftab(i) / ( ( x2 - x1 ) * ( x2 - x3 ) )
343 term3 = ftab(i+1) / ( ( x3 - x1 ) * ( x3 - x2 ) )
345 atemp = term1 + term2 + term3
347 btemp = - ( x2 + x3 ) * term1 &
348 - ( x1 + x3 ) * term2 &
349 - ( x1 + x2 ) * term3
351 ctemp = x2 * x3 * term1 + x1 * x3 * term2 + x1 * x2 * term3
358 ca = 0.5d+00 * ( atemp + ca )
359 cb = 0.5d+00 * ( btemp + cb )
360 cc = 0.5d+00 * ( ctemp + cc )
364 + ca * ( x2**3 - syl**3 ) / 3.0d+00 &
365 + cb * 0.5d+00 * ( x2**2 - syl**2 ) &
377 + ca * ( b**3 - syl**3 ) / 3.0d+00 &
378 + cb * 0.5d+00 * ( b**2 - syl**2 ) &
real *8 function gamma(x)
subroutine avint(ftab, xtab, ntab, a_in, b_in, result)
!$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 false
real *8 function path_integral(f, s, i1, i2)
!$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 true