Ignore:
Timestamp:
Sep 4, 2015, 6:48:31 PM (9 years ago)
Author:
oboucher
Message:

Recoded diurnal cycle in physiq.F90
iflag_diurnal_cycle is the new flag
=0 for no diurnal cycle
=1 for old diurnal cycle
=2 for new diurnal cycle with updates
in between two calls to radiation according
to how rmu0 has changed over the previous
timestep of physiq

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/orbite.F90

    r2346 r2359  
    102102END SUBROUTINE angle
    103103! ====================================================================
    104 SUBROUTINE zenang(longi, gmtime, pdtrad, lat, long, pmu0, frac)
     104SUBROUTINE zenang(longi, gmtime, pdtrad1, pdtrad2, lat, long, pmu0, frac)
    105105  USE dimphy
    106106  IMPLICIT NONE
     
    114114  ! fournit des moyennes de pmu0 et non des valeurs
    115115  ! instantanees, du coup frac prend toutes les valeurs
    116   ! entre 0 et 1.
     116  ! entre 0 et 1. La routine integre entre gmtime+pdtrad1 et
     117  ! gmtime+pdtrad2 avec pdtrad1 et pdtrad2 exprimes en secondes.
    117118  ! Date   : premiere version le 13 decembre 1994
    118119  ! revu pour  GCM  le 30 septembre 1996
     120  ! revu le 3 septembre 2015 pour les bornes de l'integrale
    119121  ! ===============================================================
    120122  ! longi : la longitude vraie de la terre dans son plan
    121123  ! solaire a partir de l'equinoxe de printemps (degre)
    122124  ! gmtime : temps universel en fraction de jour
    123   ! pdtrad : pas de temps du rayonnement (secondes)
     125  ! pdtrad1 : borne inferieure du pas de temps du rayonnement (secondes)
     126  ! pdtrad2 : borne inferieure du pas de temps du rayonnement (secondes)
     127  ! pdtrad2-pdtrad1 correspond a pdtrad, le pas de temps du rayonnement (secondes)
    124128  ! lat------INPUT : latitude en degres
    125129  ! long-----INPUT : longitude en degres
    126   ! pmu0-----OUTPUT: angle zenithal moyen entre gmtime et gmtime+pdtrad
    127   ! frac-----OUTPUT: ensoleillement moyen entre gmtime et gmtime+pdtrad
    128   ! ================================================================
    129   include "YOMCST.h"
    130   ! ================================================================
    131   REAL, INTENT (IN) :: longi, gmtime, pdtrad
     130  ! pmu0-----OUTPUT: angle zenithal moyen entre gmtime+pdtrad1 et gmtime+pdtrad2
     131  ! frac-----OUTPUT: ensoleillement moyen entre gmtime+pdtrad1 et gmtime+pdtrad2
     132  ! ================================================================
     133  include "YOMCST.h"
     134  ! ================================================================
     135  REAL, INTENT (IN) :: longi, gmtime, pdtrad1, pdtrad2
    132136  REAL lat(klon), long(klon), pmu0(klon), frac(klon)
    133137  ! ================================================================
     
    143147  REAL lat_sun ! declinaison en radian
    144148  REAL lon_sun ! longitude solaire en radian
    145   REAL latr ! latitude du pt de grille en radian
     149  REAL latr    ! latitude du pt de grille en radian
    146150  ! ================================================================
    147151
     
    153157  lat_sun = asin(sin(lon_sun)*sin(incl))
    154158
    155   gmtime1 = gmtime*86400.
    156   gmtime2 = gmtime*86400. + pdtrad
     159  gmtime1 = gmtime*86400. + pdtrad1
     160  gmtime2 = gmtime*86400. + pdtrad2
    157161
    158162  DO i = 1, klon
     
    160164    latr = lat(i)*pi_local/180.
    161165
    162     ! --pose probleme quand lat=+/-90 degres
    163 
    164     ! omega = -TAN(latr)*TAN(lat_sun)
    165     ! omega = ACOS(omega)
    166     ! IF (latr.GE.(pi_local/2.+lat_sun)
    167     ! .    .OR. latr.LE.(-pi_local/2.+lat_sun)) THEN
    168     ! omega = 0.0       ! nuit polaire
    169     ! ENDIF
    170     ! IF (latr.GE.(pi_local/2.-lat_sun)
    171     ! .          .OR. latr.LE.(-pi_local/2.-lat_sun)) THEN
    172     ! omega = pi_local  ! journee polaire
    173     ! ENDIF
    174 
    175     ! --remplace par cela (le cas par defaut est different)
    176 
    177166    omega = 0.0 !--nuit polaire
     167
    178168    IF (latr>=(pi_local/2.-lat_sun) .OR. latr<=(-pi_local/2.-lat_sun)) THEN
    179169      omega = pi_local ! journee polaire
    180170    END IF
     171
    181172    IF (latr<(pi_local/2.+lat_sun) .AND. latr>(-pi_local/2.+lat_sun) .AND. &
    182173        latr<(pi_local/2.-lat_sun) .AND. latr>(-pi_local/2.-lat_sun)) THEN
Note: See TracChangeset for help on using the changeset viewer.