/[lmdze]/trunk/Sources/phylmd/Interface_surf/alboc.f
ViewVC logotype

Contents of /trunk/Sources/phylmd/Interface_surf/alboc.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 208 - (show annotations)
Wed Dec 7 16:44:53 2016 UTC (7 years, 5 months ago) by guez
File size: 1973 byte(s)
Module academic was not used.

Useful values for iflag_phys were only 0 and 1 so changed type to logical.

Definition of fmagic was duplicated in procedures alboc and alboc_cd
so moved it up to interfsurf_hq and also moved multiplication by
fmagic (following LMDZ).

1 module alboc_m
2
3 IMPLICIT NONE
4
5 contains
6
7 pure function alboc(jour, rlat)
8
9 ! From LMDZ4/libf/phylmd/albedo.F, version 1.2, 2005/02/07 15:00:52
10
11 ! Author: Z. X. Li (LMD/CNRS)
12 ! Date : 16 mars 1995
13 ! Objet : Calculer l'alb\'edo sur l'oc\'ean
14 ! M\'ethode: int\'egrer num\'eriquement l'alb\'edo pendant une journ\'ee
15
16 use nr_util, only: pi
17 USE orbite_m, ONLY: orbite
18 USE yomcst, only: r_incl
19
20 integer, intent(in):: jour ! jour dans l'annee (a compter du 1 janvier)
21 REAL, intent(in):: rlat(:) ! latitude en degre
22 real alboc(size(rlat)) ! albedo obtenu (de 0 a 1)
23
24 ! Local:
25
26 INTEGER, PARAMETER:: npts =120
27 ! Contr\^ole la pr\'ecision de l'int\'egration. 120 correspond \`a
28 ! l'intervalle 6 minutes.
29
30 REAL lonsun, declin
31 REAL rmu, srmu, salb, aa, bb
32 INTEGER i, k
33
34 !----------------------------------------------------------------------
35
36 ! Calculer la longitude vraie de l'orbite terrestre:
37 CALL orbite(real(jour), lonsun)
38
39 ! Calculer la declinaison du soleil (qui varie entre + R_incl et - R_incl) :
40 declin = asin(sin(lonsun * pi / 180.) * sin(r_incl * pi / 180.))
41
42 DO i = 1, size(rlat)
43 aa = sin(rlat(i) * pi / 180.) * sin(declin)
44 bb = cos(rlat(i) * pi / 180.) * cos(declin)
45
46 ! Midi local (angle du temps = 0.):
47 rmu = max(0., aa + bb)
48 srmu = rmu
49 salb = 0.058 / (rmu + 0.30) * 1.2 * rmu
50
51 ! Faire l'integration numerique de midi a minuit (le facteur 2
52 ! prend en compte l'autre moitie de la journee):
53 DO k = 1, npts
54 rmu = max(0., aa + bb * cos(real(k) / real(npts) * pi))
55 srmu = srmu + rmu * 2.
56 salb = salb + 0.058 / (rmu + 0.30) * 1.2 * rmu * 2.
57 END DO
58 IF (srmu /= 0.) THEN
59 alboc(i) = salb / srmu
60 ELSE
61 ! nuit polaire (on peut prendre une valeur quelconque)
62 alboc(i) = 1.
63 END IF
64 END DO
65
66 END function alboc
67
68 end module alboc_m

  ViewVC Help
Powered by ViewVC 1.1.21