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

Contents of /trunk/phylmd/alboc.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 117 - (show annotations)
Thu Dec 4 16:48:53 2014 UTC (9 years, 4 months ago) by guez
File size: 3789 byte(s)
Split "albedo.f" into "alboc.f" and "alboc_cd.f".

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

  ViewVC Help
Powered by ViewVC 1.1.21