Ignore:
Timestamp:
Jul 29, 2024, 11:01:04 PM (3 months ago)
Author:
abarral
Message:

Put YOMCST.h into modules

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/Amaury_dev/libf/phylmd/albedo.F90

    r5137 r5144  
    99  SUBROUTINE alboc(rjour, rlat, albedo)
    1010    USE dimphy
     11    USE lmdz_yomcst
     12
    1113    ! ======================================================================
    1214    ! Auteur(s): Z.X. Li (LMD/CNRS) (adaptation du GCM du LMD)
     
    2022    ! albedo (out,R): albedo obtenu (de 0 a 1)
    2123    ! ======================================================================
    22     include "YOMCST.h"
    2324
    2425    INTEGER npts ! il controle la precision de l'integration
    25     PARAMETER (npts=120) ! 120 correspond a l'interval 6 minutes
     26    PARAMETER (npts = 120) ! 120 correspond a l'interval 6 minutes
    2627
    2728    REAL rlat(klon), rjour, albedo(klon)
     
    3132    ! ccIM
    3233    LOGICAL ancien_albedo
    33     PARAMETER (ancien_albedo=.FALSE.)
     34    PARAMETER (ancien_albedo = .FALSE.)
    3435    ! SAVE albedo
    3536
    3637    IF (ancien_albedo) THEN
    3738
    38        zpi = 4.*atan(1.)
     39      zpi = 4. * atan(1.)
    3940
    40        ! Calculer la longitude vraie de l'orbite terrestre:
    41        CALL orbite(rjour, zlonsun, zdist)
     41      ! Calculer la longitude vraie de l'orbite terrestre:
     42      CALL orbite(rjour, zlonsun, zdist)
    4243
    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))
     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))
    4546
    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)
     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)
    4950
    50           ! Midi local (angle du temps = 0.0):
    51           rmu = aa + bb*cos(0.0)
     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)
    5263          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
     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
    5775
    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
    69              albedo(i) = salb/srmu
    70           ELSE ! nuit polaire (on peut prendre une valeur quelconque)
    71              albedo(i) = 1.0
    72           END IF
    73        END DO
    74 
    75        ! nouvel albedo
     76      ! nouvel albedo
    7677
    7778    ELSE
    7879
    79        zpi = 4.*atan(1.)
     80      zpi = 4. * atan(1.)
    8081
    81        ! Calculer la longitude vraie de l'orbite terrestre:
    82        CALL orbite(rjour, zlonsun, zdist)
     82      ! Calculer la longitude vraie de l'orbite terrestre:
     83      CALL orbite(rjour, zlonsun, zdist)
    8384
    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))
     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))
    8687
    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)
     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)
    9091
    91           ! Midi local (angle du temps = 0.0):
    92           rmu = aa + bb*cos(0.0)
     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)
    93106          rmu = max(0.0, rmu)
    94           ! IM cf. PB  alb = 0.058/(rmu + 0.30)
     107          ! IM cf. PB      alb = 0.058/(rmu + 0.30)
    95108          ! alb = 0.058/(rmu + 0.30) * 1.5
    96           alb = 0.058/(rmu+0.30)*1.2
     109          alb = 0.058 / (rmu + 0.30) * 1.2
    97110          ! alb = 0.058/(rmu + 0.30) * 1.3
    98           srmu = rmu
    99           salb = alb*rmu
    100 
    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
    114              albedo(i) = salb/srmu
    115           ELSE ! nuit polaire (on peut prendre une valeur quelconque)
    116              albedo(i) = 1.0
    117           END IF
    118        END DO
     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
    119120    END IF
    120121
     
    136137    ! albedo (OUT): albedo de surface de l'ocean
    137138    ! ======================================================================
    138     REAL, INTENT(IN):: rmu0(klon)
    139     REAL, INTENT(OUT):: albedo(klon)
     139    REAL, INTENT(IN) :: rmu0(klon)
     140    REAL, INTENT(OUT) :: albedo(klon)
    140141
    141142    REAL fauxo
    142143    INTEGER i
    143144    LOGICAL ancien_albedo
    144     PARAMETER (ancien_albedo=.FALSE.)
     145    PARAMETER (ancien_albedo = .FALSE.)
    145146
    146147    IF (ancien_albedo) THEN
    147        DO i = 1, klon
    148           fauxo = (1.47-acos(max(rmu0(i), 0.0)))/0.15
    149           albedo(i) = 0.03+.630/(1.+fauxo*fauxo)
    150           albedo(i) = max(min(albedo(i),0.60), 0.04)
    151        END DO
     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
    152153    ELSE
    153        DO i = 1, klon
    154           albedo(i) = 0.058/(max(rmu0(i), 0.0)+0.30)
    155           albedo(i) = max(min(albedo(i),0.60), 0.04)
    156        END DO
     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
    157158    END IF
    158159
Note: See TracChangeset for help on using the changeset viewer.