GCC Code Coverage Report


Directory: ./
File: phys/albedo.f90
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 0 26 0.0%
Branches: 0 8 0.0%

Line Branch Exec Source
1 ! $Id: albedo.F90 2413 2015-12-18 19:27:39Z oboucher $
2 module albedo
3
4 IMPLICIT NONE
5
6 contains
7
8 SUBROUTINE alboc(rjour, rlat, albedo)
9 USE dimphy
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 ! Arguments;
17 ! rjour (in,R) : jour dans l'annee (a compter du 1 janvier)
18 ! rlat (in,R) : latitude en degre
19 ! albedo (out,R): albedo obtenu (de 0 a 1)
20 ! ======================================================================
21 include "YOMCST.h"
22 include "clesphys.h"
23
24 INTEGER npts ! il controle la precision de l'integration
25 PARAMETER (npts=120) ! 120 correspond a l'interval 6 minutes
26
27 REAL rlat(klon), rjour, albedo(klon)
28 REAL zdist, zlonsun, zpi, zdeclin
29 REAL rmu, alb, srmu, salb, fauxo, aa, bb
30 INTEGER i, k
31 ! ccIM
32 LOGICAL ancien_albedo
33 PARAMETER (ancien_albedo=.FALSE.)
34 ! SAVE albedo
35
36 IF (ancien_albedo) THEN
37
38 zpi = 4.*atan(1.)
39
40 ! Calculer la longitude vraie de l'orbite terrestre:
41 CALL orbite(rjour, zlonsun, zdist)
42
43 ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):
44 zdeclin = asin(sin(zlonsun*zpi/180.0)*sin(r_incl*zpi/180.0))
45
46 DO i = 1, klon
47 aa = sin(rlat(i)*zpi/180.0)*sin(zdeclin)
48 bb = cos(rlat(i)*zpi/180.0)*cos(zdeclin)
49
50 ! Midi local (angle du temps = 0.0):
51 rmu = aa + bb*cos(0.0)
52 rmu = max(0.0, rmu)
53 fauxo = (1.47-acos(rmu))/.15
54 alb = 0.03 + 0.630/(1.+fauxo*fauxo)
55 srmu = rmu
56 salb = alb*rmu
57
58 ! Faire l'integration numerique de midi a minuit (le facteur 2
59 ! prend en compte l'autre moitie de la journee):
60 DO k = 1, npts
61 rmu = aa + bb*cos(real(k)/real(npts)*zpi)
62 rmu = max(0.0, rmu)
63 fauxo = (1.47-acos(rmu))/.15
64 alb = 0.03 + 0.630/(1.+fauxo*fauxo)
65 srmu = srmu + rmu*2.0
66 salb = salb + alb*rmu*2.0
67 END DO
68 IF (srmu/=0.0) THEN
69 albedo(i) = salb/srmu
70 ELSE ! nuit polaire (on peut prendre une valeur quelconque)
71 albedo(i) = 1.0
72 END IF
73 END DO
74
75 ! nouvel albedo
76
77 ELSE
78
79 zpi = 4.*atan(1.)
80
81 ! Calculer la longitude vraie de l'orbite terrestre:
82 CALL orbite(rjour, zlonsun, zdist)
83
84 ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):
85 zdeclin = asin(sin(zlonsun*zpi/180.0)*sin(r_incl*zpi/180.0))
86
87 DO i = 1, klon
88 aa = sin(rlat(i)*zpi/180.0)*sin(zdeclin)
89 bb = cos(rlat(i)*zpi/180.0)*cos(zdeclin)
90
91 ! Midi local (angle du temps = 0.0):
92 rmu = aa + bb*cos(0.0)
93 rmu = max(0.0, rmu)
94 ! IM cf. PB alb = 0.058/(rmu + 0.30)
95 ! alb = 0.058/(rmu + 0.30) * 1.5
96 alb = 0.058/(rmu+0.30)*1.2
97 ! alb = 0.058/(rmu + 0.30) * 1.3
98 srmu = rmu
99 salb = alb*rmu
100
101 ! Faire l'integration numerique de midi a minuit (le facteur 2
102 ! prend en compte l'autre moitie de la journee):
103 DO k = 1, npts
104 rmu = aa + bb*cos(real(k)/real(npts)*zpi)
105 rmu = max(0.0, rmu)
106 ! IM cf. PB alb = 0.058/(rmu + 0.30)
107 ! alb = 0.058/(rmu + 0.30) * 1.5
108 alb = 0.058/(rmu+0.30)*1.2
109 ! alb = 0.058/(rmu + 0.30) * 1.3
110 srmu = srmu + rmu*2.0
111 salb = salb + alb*rmu*2.0
112 END DO
113 IF (srmu/=0.0) THEN
114 albedo(i) = salb/srmu
115 ELSE ! nuit polaire (on peut prendre une valeur quelconque)
116 albedo(i) = 1.0
117 END IF
118 END DO
119 END IF
120 RETURN
121 END SUBROUTINE alboc
122 ! =====================================================================
123 SUBROUTINE alboc_cd(rmu0, albedo)
124 USE dimphy
125
126 ! Auteur(s): Z.X. Li (LMD/CNRS)
127 ! date: 19940624
128 ! Calculer l'albedo sur l'ocean en fonction de l'angle zenithal moyen
129 ! Formule due a Larson and Barkstrom (1977) Proc. of the symposium
130 ! on radiation in the atmosphere, 19-28 August 1976, science Press,
131 ! 1977 pp 451-453, ou These de 3eme cycle de Sylvie Joussaume.
132
133 ! Arguments
134 ! rmu0 (in): cosinus de l'angle solaire zenithal
135 ! albedo (out): albedo de surface de l'ocean
136 ! ======================================================================
137 include "clesphys.h"
138 REAL, intent(in):: rmu0(klon)
139 real, intent(out):: albedo(klon)
140
141 REAL fauxo
142 INTEGER i
143 LOGICAL ancien_albedo
144 PARAMETER (ancien_albedo=.FALSE.)
145
146 IF (ancien_albedo) THEN
147 DO i = 1, klon
148 fauxo = (1.47-acos(max(rmu0(i), 0.0)))/0.15
149 albedo(i) = 0.03+.630/(1.+fauxo*fauxo)
150 albedo(i) = max(min(albedo(i),0.60), 0.04)
151 END DO
152 ELSE
153 DO i = 1, klon
154 albedo(i) = 0.058/(max(rmu0(i), 0.0)+0.30)
155 albedo(i) = max(min(albedo(i),0.60), 0.04)
156 END DO
157 END IF
158
159 END SUBROUTINE alboc_cd
160
161 end module albedo
162