source: LMDZ5/branches/testing/libf/phylmd/albedo.F90 @ 5179

Last change on this file since 5179 was 2435, checked in by Laurent Fairhead, 9 years ago

Merged trunk changes r2396:2434 into testing branch

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.0 KB
RevLine 
[1403]1! $Id: albedo.F90 2435 2016-01-28 16:02:13Z abarral $
[2408]2module albedo
[1992]3
4  IMPLICIT NONE
5
[2408]6contains
[1992]7
[2408]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
[1992]15
[2408]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"
[1992]23
[2408]24    INTEGER npts ! il controle la precision de l'integration
25    PARAMETER (npts=120) ! 120 correspond a l'interval 6 minutes
[1992]26
[2408]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
[1992]35
[2408]36    IF (ancien_albedo) THEN
[1992]37
[2408]38       zpi = 4.*atan(1.)
[1992]39
[2408]40       ! Calculer la longitude vraie de l'orbite terrestre:
41       CALL orbite(rjour, zlonsun, zdist)
[1992]42
[2408]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))
[1992]45
[2408]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)
[1992]49
[2408]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
[1992]57
[2408]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
[2435]69             albedo(i) = salb/srmu
[2408]70          ELSE ! nuit polaire (on peut prendre une valeur quelconque)
[2435]71             albedo(i) = 1.0
[2408]72          END IF
73       END DO
[1992]74
[2408]75       ! nouvel albedo
[1992]76
[2408]77    ELSE
[1992]78
[2408]79       zpi = 4.*atan(1.)
[1992]80
[2408]81       ! Calculer la longitude vraie de l'orbite terrestre:
82       CALL orbite(rjour, zlonsun, zdist)
[1992]83
[2408]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))
[1992]86
[2408]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)
[1992]90
[2408]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
[1992]100
[2408]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
[2435]114             albedo(i) = salb/srmu
[2408]115          ELSE ! nuit polaire (on peut prendre une valeur quelconque)
[2435]116             albedo(i) = 1.0
[2408]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
[1992]125
[2408]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.
[1992]132
[2408]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)
[1992]140
[2408]141    REAL fauxo
142    INTEGER i
143    LOGICAL ancien_albedo
144    PARAMETER (ancien_albedo=.FALSE.)
[1992]145
[2408]146    IF (ancien_albedo) THEN
147       DO i = 1, klon
148          fauxo = (1.47-acos(max(rmu0(i), 0.0)))/0.15
[2435]149          albedo(i) = 0.03+.630/(1.+fauxo*fauxo)
[2408]150          albedo(i) = max(min(albedo(i),0.60), 0.04)
151       END DO
152    ELSE
153       DO i = 1, klon
[2435]154          albedo(i) = 0.058/(max(rmu0(i), 0.0)+0.30)
[2408]155          albedo(i) = max(min(albedo(i),0.60), 0.04)
156       END DO
157    END IF
[1992]158
[2408]159  END SUBROUTINE alboc_cd
[1992]160
[2408]161end module albedo
Note: See TracBrowser for help on using the repository browser.