91 integer(kind=jpim),
intent(in) :: N
92 integer(kind=jpim) :: n_collars,j
93 real(kind=jprb),
allocatable :: r_regions(:)
94 real(kind=jprb) :: c_polar
96 pi=2.0_jprb*asin(1.0_jprb)
130 allocate(r_regions(n_collars+2))
142 deallocate(r_regions)
144 write(*,
'("eq_regions: N=",I10," sum(n_regions(:))=",I10)')n,sum(
n_regions(:))
145 call abor1(
'eq_regions: N /= sum(n_regions)')
151 write(*,
'("eq_regions: N=",I6," n_regions_ns=",I4)') n,
n_regions_ns
153 write(*,
'("eq_regions: n_regions(",I4,")=",I4)') j,
n_regions(j)
161 function num_collars(N,c_polar,a_ideal) result(num_c)
168 integer(kind=jpim),
intent(in) :: N
169 real(kind=jprb),
intent(in) :: a_ideal,c_polar
170 integer(kind=jpim) :: num_c
172 enough = (n > 2) .and. (a_ideal > 0)
174 num_c = max(1,nint((
pi-2.*c_polar)/a_ideal))
194 integer(kind=jpim),
intent(in) :: N,n_collars
195 real(kind=jprb),
intent(in) :: c_polar
196 real(kind=jprb),
intent(out) :: r_regions(n_collars+2)
197 integer(kind=jpim) :: collar_n
198 real(kind=jprb) :: ideal_region_area,ideal_collar_area
199 real(kind=jprb) :: a_fitting
200 r_regions(:)=0.0_jprb
201 r_regions(1) = 1.0_jprb
202 if( n_collars > 0 )
then
207 a_fitting = (
pi-2.0_jprb*c_polar)/float(n_collars)
209 do collar_n=1,n_collars
210 ideal_collar_area =
area_of_collar(c_polar+(collar_n-1)*a_fitting, &
211 & c_polar+collar_n*a_fitting)
212 r_regions(1+collar_n) = ideal_collar_area / ideal_region_area
215 r_regions(2+n_collars) = 1.
226 integer(kind=jpim),
intent(in) :: N
227 real(kind=jprb) :: ideal
244 integer(kind=jpim),
intent(in) :: N,n_collars
245 real(kind=jprb),
intent(in) :: r_regions(n_collars+2)
246 integer(kind=jpim) :: zone_n
247 real(kind=jprb) :: discrepancy
249 discrepancy = 0.0_jprb
250 do zone_n = 1,n_collars+2
251 n_regions(zone_n) = nint(r_regions(zone_n)+discrepancy);
252 discrepancy = discrepancy+r_regions(zone_n)-float(
n_regions(zone_n));
261 integer(kind=jpim),
intent(in) :: N
262 real(kind=jprb) :: area
263 real(kind=jprb) :: polar_c
264 if( n == 1 ) polar_c=
pi
265 if( n == 2 ) polar_c=
pi/2.0_jprb
278 integer(kind=jpim),
intent(in) :: N
279 real(kind=jprb) :: area_of_sphere
280 real(kind=jprb) :: area
281 area_of_sphere = (2.0_jprb*
pi**1.5_jprb/
gamma(1.5_jprb))
282 area = area_of_sphere/float(n)
291 real(kind=jprb),
intent(in) :: area
292 real(kind=jprb) :: sradius
293 sradius = 2.0_jprb*asin(sqrt(area/
pi)/2.0_jprb)
305 real(kind=jprb),
intent(in) :: a_top,a_bot
318 real(kind=jprb),
intent(in) :: s_cap
320 area = 4.0_jprb*
pi * sin(s_cap/2.0_jprb)**2
324 function gamma(x) result(gamma_res)
325 real(kind=jprb),
intent(in) :: x
326 real(kind=jprb) :: gamma_res
327 real(kind=jprb) :: p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13
328 real(kind=jprb) :: w,y
329 integer(kind=jpim) :: k,n
331 & p0 = 0.999999999999999990e+00_jprb,&
332 & p1 = -0.422784335098466784e+00_jprb,&
333 & p2 = -0.233093736421782878e+00_jprb,&
334 & p3 = 0.191091101387638410e+00_jprb,&
335 & p4 = -0.024552490005641278e+00_jprb,&
336 & p5 = -0.017645244547851414e+00_jprb,&
337 & p6 = 0.008023273027855346e+00_jprb)
339 & p7 = -0.000804329819255744e+00_jprb,&
340 & p8 = -0.000360837876648255e+00_jprb,&
341 & p9 = 0.000145596568617526e+00_jprb,&
342 & p10 = -0.000017545539395205e+00_jprb,&
343 & p11 = -0.000002591225267689e+00_jprb,&
344 & p12 = 0.000001337767384067e+00_jprb,&
345 & p13 = -0.000000199542863674e+00_jprb)
348 y = ((((((((((((p13 * w + p12) * w + p11) * w + p10) *&
349 & w + p9) * w + p8) * w + p7) * w + p6) * w + p5) *&
350 & w + p4) * w + p3) * w + p2) * w + p1) * w + p0
real(kind=jprb) function area_of_ideal_region(N)
subroutine, public eq_regions(N)
integer(kind=jpim), public n_regions_ns
!$Id mode_top_bound COMMON comconstr && pi
real(kind=jprb) function ideal_collar_angle(N)
real(kind=jprb) function polar_colat(N)
integer(kind=jpim), public my_region_ns
!$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
integer(kind=jpim), public my_region_ew
!$Header!integer nvarmx parameter(nfmx=10, imx=200, jmx=150, lmx=200, nvarmx=1000) real xd(imx
real(kind=jprb) function sradius_of_cap(area)
real(kind=jprb) function area_of_cap(s_cap)
integer(kind=jpim), public n_regions_ew
logical, public l_regions_debug
real(kind=jprb) function area_of_collar(a_top, a_bot)
subroutine round_to_naturals(N, n_collars, r_regions)
integer(kind=jpim), dimension(:), allocatable, public n_regions
integer(kind=jpim) function num_collars(N, c_polar, a_ideal)
subroutine ideal_region_list(N, c_polar, n_collars, r_regions)
real(kind=jprb) function gamma(x)