source: LMDZ6/branches/Amaury_dev/libf/phylmd/albedo.F90 @ 5137

Last change on this file since 5137 was 5137, checked in by abarral, 8 weeks ago

Put gradsdef.h, tracstoke.h, clesphys.h into modules

  • 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 5137 2024-07-28 20:25:12Z abarral $
[2322]2module albedo
[5137]3  USE lmdz_clesphys
[1992]4
5  IMPLICIT NONE
6
[5119]7CONTAINS
[1992]8
[2322]9  SUBROUTINE alboc(rjour, rlat, albedo)
10    USE dimphy
11    ! ======================================================================
12    ! Auteur(s): Z.X. Li (LMD/CNRS) (adaptation du GCM du LMD)
13    ! Date: le 16 mars 1995
14    ! Objet: Calculer l'albedo sur l'ocean
15    ! Methode: Integrer numeriquement l'albedo pendant une journee
[1992]16
[2322]17    ! Arguments;
18    ! rjour (in,R)  : jour dans l'annee (a compter du 1 janvier)
19    ! rlat (in,R)   : latitude en degre
20    ! albedo (out,R): albedo obtenu (de 0 a 1)
21    ! ======================================================================
22    include "YOMCST.h"
[1992]23
[2322]24    INTEGER npts ! il controle la precision de l'integration
25    PARAMETER (npts=120) ! 120 correspond a l'interval 6 minutes
[1992]26
[2322]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
[2322]36    IF (ancien_albedo) THEN
[1992]37
[2322]38       zpi = 4.*atan(1.)
[1992]39
[2322]40       ! Calculer la longitude vraie de l'orbite terrestre:
41       CALL orbite(rjour, zlonsun, zdist)
[1992]42
[2322]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
[2322]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
[2322]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
[2322]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
[2413]69             albedo(i) = salb/srmu
[2322]70          ELSE ! nuit polaire (on peut prendre une valeur quelconque)
[2413]71             albedo(i) = 1.0
[2322]72          END IF
73       END DO
[1992]74
[2322]75       ! nouvel albedo
[1992]76
[2322]77    ELSE
[1992]78
[2322]79       zpi = 4.*atan(1.)
[1992]80
[2322]81       ! Calculer la longitude vraie de l'orbite terrestre:
82       CALL orbite(rjour, zlonsun, zdist)
[1992]83
[2322]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
[2322]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
[2322]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
[2322]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
[2413]114             albedo(i) = salb/srmu
[2322]115          ELSE ! nuit polaire (on peut prendre une valeur quelconque)
[2413]116             albedo(i) = 1.0
[2322]117          END IF
118       END DO
119    END IF
[5105]120
[2322]121  END SUBROUTINE alboc
122  ! =====================================================================
123  SUBROUTINE alboc_cd(rmu0, albedo)
124    USE dimphy
[5137]125    USE lmdz_clesphys
[1992]126
[2322]127    ! Auteur(s): Z.X. Li (LMD/CNRS)
128    ! date: 19940624
129    ! Calculer l'albedo sur l'ocean en fonction de l'angle zenithal moyen
130    ! Formule due a Larson and Barkstrom (1977) Proc. of the symposium
131    ! on radiation in the atmosphere, 19-28 August 1976, science Press,
132    ! 1977 pp 451-453, ou These de 3eme cycle de Sylvie Joussaume.
[1992]133
[2322]134    ! Arguments
[5117]135    ! rmu0    (IN): cosinus de l'angle solaire zenithal
136    ! albedo (OUT): albedo de surface de l'ocean
[2322]137    ! ======================================================================
[5117]138    REAL, INTENT(IN):: rmu0(klon)
139    REAL, INTENT(OUT):: albedo(klon)
[1992]140
[2322]141    REAL fauxo
142    INTEGER i
143    LOGICAL ancien_albedo
144    PARAMETER (ancien_albedo=.FALSE.)
[1992]145
[2322]146    IF (ancien_albedo) THEN
147       DO i = 1, klon
148          fauxo = (1.47-acos(max(rmu0(i), 0.0)))/0.15
[2413]149          albedo(i) = 0.03+.630/(1.+fauxo*fauxo)
[2322]150          albedo(i) = max(min(albedo(i),0.60), 0.04)
151       END DO
152    ELSE
153       DO i = 1, klon
[2413]154          albedo(i) = 0.058/(max(rmu0(i), 0.0)+0.30)
[2322]155          albedo(i) = max(min(albedo(i),0.60), 0.04)
156       END DO
157    END IF
[1992]158
[2322]159  END SUBROUTINE alboc_cd
[1992]160
[5119]161END MODULE albedo
Note: See TracBrowser for help on using the repository browser.