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

Last change on this file since 5151 was 5144, checked in by abarral, 3 months ago

Put YOMCST.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 5144 2024-07-29 21:01:04Z 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
[5144]11    USE lmdz_yomcst
12
[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    ! ======================================================================
[1992]24
[2322]25    INTEGER npts ! il controle la precision de l'integration
[5144]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
[5144]34    PARAMETER (ancien_albedo = .FALSE.)
[2322]35    ! SAVE albedo
[1992]36
[2322]37    IF (ancien_albedo) THEN
[1992]38
[5144]39      zpi = 4. * atan(1.)
[1992]40
[5144]41      ! Calculer la longitude vraie de l'orbite terrestre:
42      CALL orbite(rjour, zlonsun, zdist)
[1992]43
[5144]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
[5144]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
[5144]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
58
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)
[2322]63          rmu = max(0.0, rmu)
[5144]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
70          albedo(i) = salb / srmu
71        ELSE ! nuit polaire (on peut prendre une valeur quelconque)
72          albedo(i) = 1.0
73        END IF
74      END DO
[1992]75
[5144]76      ! nouvel albedo
[1992]77
[2322]78    ELSE
[1992]79
[5144]80      zpi = 4. * atan(1.)
[1992]81
[5144]82      ! Calculer la longitude vraie de l'orbite terrestre:
83      CALL orbite(rjour, zlonsun, zdist)
[1992]84
[5144]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
[5144]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
[5144]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
101
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)
[2322]106          rmu = max(0.0, rmu)
[5144]107          ! IM cf. PB      alb = 0.058/(rmu + 0.30)
[2322]108          ! alb = 0.058/(rmu + 0.30) * 1.5
[5144]109          alb = 0.058 / (rmu + 0.30) * 1.2
[2322]110          ! alb = 0.058/(rmu + 0.30) * 1.3
[5144]111          srmu = srmu + rmu * 2.0
112          salb = salb + alb * rmu * 2.0
113        END DO
114        IF (srmu/=0.0) THEN
115          albedo(i) = salb / srmu
116        ELSE ! nuit polaire (on peut prendre une valeur quelconque)
117          albedo(i) = 1.0
118        END IF
119      END DO
[2322]120    END IF
[5105]121
[2322]122  END SUBROUTINE alboc
123  ! =====================================================================
124  SUBROUTINE alboc_cd(rmu0, albedo)
125    USE dimphy
[5137]126    USE lmdz_clesphys
[1992]127
[2322]128    ! Auteur(s): Z.X. Li (LMD/CNRS)
129    ! date: 19940624
130    ! Calculer l'albedo sur l'ocean en fonction de l'angle zenithal moyen
131    ! Formule due a Larson and Barkstrom (1977) Proc. of the symposium
132    ! on radiation in the atmosphere, 19-28 August 1976, science Press,
133    ! 1977 pp 451-453, ou These de 3eme cycle de Sylvie Joussaume.
[1992]134
[2322]135    ! Arguments
[5117]136    ! rmu0    (IN): cosinus de l'angle solaire zenithal
137    ! albedo (OUT): albedo de surface de l'ocean
[2322]138    ! ======================================================================
[5144]139    REAL, INTENT(IN) :: rmu0(klon)
140    REAL, INTENT(OUT) :: albedo(klon)
[1992]141
[2322]142    REAL fauxo
143    INTEGER i
144    LOGICAL ancien_albedo
[5144]145    PARAMETER (ancien_albedo = .FALSE.)
[1992]146
[2322]147    IF (ancien_albedo) THEN
[5144]148      DO i = 1, klon
149        fauxo = (1.47 - acos(max(rmu0(i), 0.0))) / 0.15
150        albedo(i) = 0.03 + .630 / (1. + fauxo * fauxo)
151        albedo(i) = max(min(albedo(i), 0.60), 0.04)
152      END DO
[2322]153    ELSE
[5144]154      DO i = 1, klon
155        albedo(i) = 0.058 / (max(rmu0(i), 0.0) + 0.30)
156        albedo(i) = max(min(albedo(i), 0.60), 0.04)
157      END DO
[2322]158    END IF
[1992]159
[2322]160  END SUBROUTINE alboc_cd
[1992]161
[5119]162END MODULE albedo
Note: See TracBrowser for help on using the repository browser.