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

Annotation of /trunk/phylmd/Interface_surf/alboc.f

Parent Directory Parent Directory | Revision Log Revision Log


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

1 guez 81 SUBROUTINE alboc(rjour, rlat, albedo)
2 guez 117 ! From LMDZ4/libf/phylmd/albedo.F,v 1.2 2005/02/07 15:00:52
3 guez 81 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 guez 3 srmu = rmu
58 guez 81 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 guez 3 DO k = 1, npts
63 guez 81 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 guez 3 ELSE ! nuit polaire (on peut prendre une valeur quelconque)
73 guez 81 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 guez 3 srmu = rmu
101 guez 81 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 guez 3 DO k = 1, npts
106 guez 81 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 guez 3 ELSE ! nuit polaire (on peut prendre une valeur quelconque)
118 guez 81 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