source: LMDZ6/trunk/libf/phylmd/albedo.f90 @ 5301

Last change on this file since 5301 was 5285, checked in by abarral, 4 days ago

As discussed internally, remove generic ONLY: ... for new _mod_h 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 5285 2024-10-28 13:33:29Z abarral $
[2322]2module albedo
[1992]3
[5282]4  USE clesphys_mod_h
[5285]5    USE yomcst_mod_h
[5274]6IMPLICIT NONE
[1992]7
[2322]8contains
[1992]9
[2322]10  SUBROUTINE alboc(rjour, rlat, albedo)
11    USE dimphy
[5282]12    USE clesphys_mod_h
[2322]13    ! ======================================================================
14    ! Auteur(s): Z.X. Li (LMD/CNRS) (adaptation du GCM du LMD)
15    ! Date: le 16 mars 1995
16    ! Objet: Calculer l'albedo sur l'ocean
17    ! Methode: Integrer numeriquement l'albedo pendant une journee
[1992]18
[2322]19    ! Arguments;
20    ! rjour (in,R)  : jour dans l'annee (a compter du 1 janvier)
21    ! rlat (in,R)   : latitude en degre
22    ! albedo (out,R): albedo obtenu (de 0 a 1)
23    ! ======================================================================
[5274]24
[2322]25    INTEGER npts ! il controle la precision de l'integration
26    PARAMETER (npts=120) ! 120 correspond a l'interval 6 minutes
[1992]27
[2322]28    REAL rlat(klon), rjour, albedo(klon)
29    REAL zdist, zlonsun, zpi, zdeclin
30    REAL rmu, alb, srmu, salb, fauxo, aa, bb
31    INTEGER i, k
32    ! ccIM
33    LOGICAL ancien_albedo
34    PARAMETER (ancien_albedo=.FALSE.)
35    ! SAVE albedo
[1992]36
[2322]37    IF (ancien_albedo) THEN
[1992]38
[2322]39       zpi = 4.*atan(1.)
[1992]40
[2322]41       ! Calculer la longitude vraie de l'orbite terrestre:
42       CALL orbite(rjour, zlonsun, zdist)
[1992]43
[2322]44       ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):
45       zdeclin = asin(sin(zlonsun*zpi/180.0)*sin(r_incl*zpi/180.0))
[1992]46
[2322]47       DO i = 1, klon
48          aa = sin(rlat(i)*zpi/180.0)*sin(zdeclin)
49          bb = cos(rlat(i)*zpi/180.0)*cos(zdeclin)
[1992]50
[2322]51          ! Midi local (angle du temps = 0.0):
52          rmu = aa + bb*cos(0.0)
53          rmu = max(0.0, rmu)
54          fauxo = (1.47-acos(rmu))/.15
55          alb = 0.03 + 0.630/(1.+fauxo*fauxo)
56          srmu = rmu
57          salb = alb*rmu
[1992]58
[2322]59          ! Faire l'integration numerique de midi a minuit (le facteur 2
60          ! prend en compte l'autre moitie de la journee):
61          DO k = 1, npts
62             rmu = aa + bb*cos(real(k)/real(npts)*zpi)
63             rmu = max(0.0, rmu)
64             fauxo = (1.47-acos(rmu))/.15
65             alb = 0.03 + 0.630/(1.+fauxo*fauxo)
66             srmu = srmu + rmu*2.0
67             salb = salb + alb*rmu*2.0
68          END DO
69          IF (srmu/=0.0) THEN
[2413]70             albedo(i) = salb/srmu
[2322]71          ELSE ! nuit polaire (on peut prendre une valeur quelconque)
[2413]72             albedo(i) = 1.0
[2322]73          END IF
74       END DO
[1992]75
[2322]76       ! nouvel albedo
[1992]77
[2322]78    ELSE
[1992]79
[2322]80       zpi = 4.*atan(1.)
[1992]81
[2322]82       ! Calculer la longitude vraie de l'orbite terrestre:
83       CALL orbite(rjour, zlonsun, zdist)
[1992]84
[2322]85       ! Calculer la declinaison du soleil (qui varie entre + et - R_incl):
86       zdeclin = asin(sin(zlonsun*zpi/180.0)*sin(r_incl*zpi/180.0))
[1992]87
[2322]88       DO i = 1, klon
89          aa = sin(rlat(i)*zpi/180.0)*sin(zdeclin)
90          bb = cos(rlat(i)*zpi/180.0)*cos(zdeclin)
[1992]91
[2322]92          ! Midi local (angle du temps = 0.0):
93          rmu = aa + bb*cos(0.0)
94          rmu = max(0.0, rmu)
95          ! IM cf. PB  alb = 0.058/(rmu + 0.30)
96          ! alb = 0.058/(rmu + 0.30) * 1.5
97          alb = 0.058/(rmu+0.30)*1.2
98          ! alb = 0.058/(rmu + 0.30) * 1.3
99          srmu = rmu
100          salb = alb*rmu
[1992]101
[2322]102          ! Faire l'integration numerique de midi a minuit (le facteur 2
103          ! prend en compte l'autre moitie de la journee):
104          DO k = 1, npts
105             rmu = aa + bb*cos(real(k)/real(npts)*zpi)
106             rmu = max(0.0, rmu)
107             ! IM cf. PB      alb = 0.058/(rmu + 0.30)
108             ! alb = 0.058/(rmu + 0.30) * 1.5
109             alb = 0.058/(rmu+0.30)*1.2
110             ! alb = 0.058/(rmu + 0.30) * 1.3
111             srmu = srmu + rmu*2.0
112             salb = salb + alb*rmu*2.0
113          END DO
114          IF (srmu/=0.0) THEN
[2413]115             albedo(i) = salb/srmu
[2322]116          ELSE ! nuit polaire (on peut prendre une valeur quelconque)
[2413]117             albedo(i) = 1.0
[2322]118          END IF
119       END DO
120    END IF
121    RETURN
122  END SUBROUTINE alboc
123  ! =====================================================================
124  SUBROUTINE alboc_cd(rmu0, albedo)
125    USE dimphy
[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
135    ! rmu0    (in): cosinus de l'angle solaire zenithal
136    ! albedo (out): albedo de surface de l'ocean
137    ! ======================================================================
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
[2322]161end module albedo
Note: See TracBrowser for help on using the repository browser.