/[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 134 - (show annotations)
Wed Apr 29 15:47:56 2015 UTC (9 years, 1 month ago) by guez
File size: 4040 byte(s)
Sources inside, compilation outside.
1 module alboc_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE alboc(jour, rlat, albedo)
8
9 ! From LMDZ4/libf/phylmd/albedo.F, version 1.2 2005/02/07 15:00:52
10
11 ! Auteur(s): Z.X. Li (LMD/CNRS) (adaptation du GCM du LMD)
12 ! Date: le 16 mars 1995
13 ! Objet: Calculer l'albedo sur l'ocean
14 ! Methode: Integrer numeriquement l'albedo pendant une journee
15
16 USE dimphy, only: klon
17 USE yomcst, only: r_incl
18 USE orbite_m, ONLY: orbite
19
20 ! Arguments;
21 ! jour (in) : jour dans l'annee (a compter du 1 janvier)
22 ! rlat (in, R) : latitude en degre
23 ! albedo (out, R): albedo obtenu (de 0 a 1)
24
25 REAL fmagic ! un facteur magique pour regler l'albedo
26 ! cc PARAMETER (fmagic=0.7)
27 ! ccIM => a remplacer
28 ! PARAMETER (fmagic=1.32)
29 PARAMETER (fmagic=1.0)
30 ! PARAMETER (fmagic=0.7)
31 INTEGER npts ! il controle la precision de l'integration
32 PARAMETER (npts=120) ! 120 correspond a l'interval 6 minutes
33
34 integer jour
35 REAL rlat(klon), albedo(klon)
36 REAL zdist, zlonsun, zpi, zdeclin
37 REAL rmu, alb, srmu, salb, fauxo, aa, bb
38 INTEGER i, k
39 ! ccIM
40 LOGICAL ancien_albedo
41 PARAMETER (ancien_albedo=.FALSE.)
42 ! SAVE albedo
43
44 IF (ancien_albedo) THEN
45
46 zpi = 4.*atan(1.)
47
48 ! Calculer la longitude vraie de l'orbite terrestre:
49 CALL orbite(real(jour), zlonsun, zdist)
50
51 ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):
52 zdeclin = asin(sin(zlonsun*zpi/180.0)*sin(r_incl*zpi/180.0))
53
54 DO i = 1, klon
55 aa = sin(rlat(i)*zpi/180.0)*sin(zdeclin)
56 bb = cos(rlat(i)*zpi/180.0)*cos(zdeclin)
57
58 ! Midi local (angle du temps = 0.0):
59 rmu = aa + bb*cos(0.0)
60 rmu = max(0.0, rmu)
61 fauxo = (1.47-acos(rmu))/.15
62 alb = 0.03 + 0.630/(1.+fauxo*fauxo)
63 srmu = rmu
64 salb = alb*rmu
65
66 ! Faire l'integration numerique de midi a minuit (le facteur 2
67 ! prend en compte l'autre moitie de la journee):
68 DO k = 1, npts
69 rmu = aa + bb*cos(float(k)/float(npts)*zpi)
70 rmu = max(0.0, rmu)
71 fauxo = (1.47-acos(rmu))/.15
72 alb = 0.03 + 0.630/(1.+fauxo*fauxo)
73 srmu = srmu + rmu*2.0
74 salb = salb + alb*rmu*2.0
75 END DO
76 IF (srmu/=0.0) THEN
77 albedo(i) = salb/srmu*fmagic
78 ELSE ! nuit polaire (on peut prendre une valeur quelconque)
79 albedo(i) = fmagic
80 END IF
81 END DO
82
83 ! nouvel albedo
84
85 ELSE
86
87 zpi = 4.*atan(1.)
88
89 ! Calculer la longitude vraie de l'orbite terrestre:
90 CALL orbite(real(jour), zlonsun, zdist)
91
92 ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):
93 zdeclin = asin(sin(zlonsun*zpi/180.0)*sin(r_incl*zpi/180.0))
94
95 DO i = 1, klon
96 aa = sin(rlat(i)*zpi/180.0)*sin(zdeclin)
97 bb = cos(rlat(i)*zpi/180.0)*cos(zdeclin)
98
99 ! Midi local (angle du temps = 0.0):
100 rmu = aa + bb*cos(0.0)
101 rmu = max(0.0, rmu)
102 ! IM cf. PB alb = 0.058/(rmu + 0.30)
103 ! alb = 0.058/(rmu + 0.30) * 1.5
104 alb = 0.058/(rmu+0.30)*1.2
105 ! alb = 0.058/(rmu + 0.30) * 1.3
106 srmu = rmu
107 salb = alb*rmu
108
109 ! Faire l'integration numerique de midi a minuit (le facteur 2
110 ! prend en compte l'autre moitie de la journee):
111 DO k = 1, npts
112 rmu = aa + bb*cos(float(k)/float(npts)*zpi)
113 rmu = max(0.0, rmu)
114 ! IM cf. PB alb = 0.058/(rmu + 0.30)
115 ! alb = 0.058/(rmu + 0.30) * 1.5
116 alb = 0.058/(rmu+0.30)*1.2
117 ! alb = 0.058/(rmu + 0.30) * 1.3
118 srmu = srmu + rmu*2.0
119 salb = salb + alb*rmu*2.0
120 END DO
121 IF (srmu/=0.0) THEN
122 albedo(i) = salb/srmu*fmagic
123 ELSE ! nuit polaire (on peut prendre une valeur quelconque)
124 albedo(i) = fmagic
125 END IF
126 END DO
127 END IF
128
129 END SUBROUTINE alboc
130
131 end module alboc_m

  ViewVC Help
Powered by ViewVC 1.1.21