Changeset 2503


Ignore:
Timestamp:
Apr 23, 2021, 4:41:19 PM (4 years ago)
Author:
emillour
Message:

Venus GCM:
Small correction in the computation of SW fluxes for the
very specific case when running without a diurnal cycle.
VB+EM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.VENUS/libf/phyvenus/sw_venus_rh.F

    r2464 r2503  
    44     S              PTOPSW,PSOLSW,ZFSNET)
    55     
    6       use dimphy
     6      use dimphy, only: klev
    77      use cpdet_phy_mod, only: cpdet
    88      IMPLICIT none
    99
    10 #include "YOMCST.h"
     10      include "YOMCST.h"
     11      include "clesphys.h"
    1112C
    1213C     ------------------------------------------------------------------
     
    3233c inputs
    3334
    34       REAL   PRMU0  ! COSINE OF ZENITHAL ANGLE
    35       REAL   PFRAC  ! fraction de la journee
    36       REAL   latdeg ! |latitude| (in degrees)
    37       REAL   PPB(klev+1)  ! inter-couches PRESSURE (bar)
    38       REAL   PPA(klev)
    39       REAL   pt(klev)     ! mid-layer temperature
     35      REAL,INTENT(IN) ::   PRMU0  ! COSINE OF ZENITHAL ANGLE
     36      REAL,INTENT(IN) ::   PFRAC  ! fraction de la journee
     37      REAL,INTENT(IN) ::   latdeg ! |latitude| (in degrees)
     38      REAL,INTENT(IN) ::   PPB(klev+1)  ! inter-couches PRESSURE (bar)
     39      REAL,INTENT(IN) ::   PPA(klev)
     40      REAL,INTENT(IN) ::   pt(klev)     ! mid-layer temperature
    4041C
    4142c output
    4243
    43       REAL   PHEAT(klev)  ! SHORTWAVE HEATING (K/s) within each layer
     44      REAL,INTENT(OUT) ::   PHEAT(klev)  ! SHORTWAVE HEATING (K/s) within each layer
    4445      REAL   PHEATPPA(klev)
    45       REAL   PTOPSW       ! SHORTWAVE FLUX AT T.O.A. (net)
    46       REAL   PSOLSW       ! SHORTWAVE FLUX AT SURFACE (net)
    47       REAL   ZFSNET(klev+1) ! net solar flux at ppb levels
     46      REAL,INTENT(OUT) ::   PTOPSW       ! SHORTWAVE FLUX AT T.O.A. (net)
     47      REAL,INTENT(OUT) ::   PSOLSW       ! SHORTWAVE FLUX AT SURFACE (net)
     48      REAL,INTENT(OUT) ::   ZFSNET(klev+1) ! net solar flux at ppb levels
    4849
    4950C
     
    136137      nsza0(:)=2
    137138
    138       do nsza=1,nszarh
    139          if (solza(nsza,nlat0-1).le.sza0) then
     139      if (.not.cycle_diurne) then
     140        ! without a diurnal cycle, no need for any elaborate weights of sza
     141        factsza(1)=1
     142        factsza(2)=0
     143      else
     144        ! standard case with diurnal cycle
     145        do nsza=1,nszarh
     146          if (solza(nsza,nlat0-1).le.sza0) then
    140147              nsza0(1) = nsza+1
    141          endif
    142       enddo
    143       if (nsza0(1).ne.nszarh+1) then
    144           factsza(1) = (sza0-solza(nsza0(1)-1,nlat0-1))/
    145      .        (solza(nsza0(1),nlat0-1)-solza(nsza0(1)-1,nlat0-1))
    146       else
    147           factsza(1) = min((sza0-solza(nszarh,nlat0-1))/
    148      .         (90.-solza(nszarh,nlat0-1)), 1.)
    149       endif
    150       if (nlat0.ne.nlatrh+1) then
    151        do nsza=1,nszarh
    152          if (solza(nsza,nlat0).le.sza0) then
     148          endif
     149        enddo
     150        if (nsza0(1).ne.nszarh+1) then
     151            factsza(1) = (sza0-solza(nsza0(1)-1,nlat0-1))/
     152     .          (solza(nsza0(1),nlat0-1)-solza(nsza0(1)-1,nlat0-1))
     153        else
     154            factsza(1) = min((sza0-solza(nszarh,nlat0-1))/
     155     .           (90.-solza(nszarh,nlat0-1)), 1.)
     156        endif
     157        if (nlat0.ne.nlatrh+1) then
     158          do nsza=1,nszarh
     159            if (solza(nsza,nlat0).le.sza0) then
    153160              nsza0(2) = nsza+1
    154          endif
    155        enddo
    156        if (nsza0(2).eq.nszarh+1) then
    157           factsza(2) = min((sza0-solza(nszarh,nlat0))/
    158      .         (90.-solza(nszarh,nlat0)), 1.)
    159        elseif ((nsza0(2).eq.2).and.(solza(1,nlat0).gt.sza0)) then
    160           factsza(2) = 0.
    161        else
    162           factsza(2) = (sza0-solza(nsza0(2)-1,nlat0))/
    163      .        (solza(nsza0(2),nlat0)-solza(nsza0(2)-1,nlat0))
    164        endif
    165       else
    166         nsza0(2)   = nszarh+1
    167         factsza(2) = 1.
    168       endif
     161            endif
     162          enddo
     163          if (nsza0(2).eq.nszarh+1) then
     164             factsza(2) = min((sza0-solza(nszarh,nlat0))/
     165     .           (90.-solza(nszarh,nlat0)), 1.)
     166          elseif ((nsza0(2).eq.2).and.(solza(1,nlat0).gt.sza0)) then
     167            factsza(2) = 0.
     168          else
     169            factsza(2) = (sza0-solza(nsza0(2)-1,nlat0))/
     170     .          (solza(nsza0(2),nlat0)-solza(nsza0(2)-1,nlat0))
     171          endif
     172        else
     173          nsza0(2)   = nszarh+1
     174          factsza(2) = 1.
     175        endif ! of if (nlat0.ne.nlatrh+1)
     176      endif ! of if (.not.cycle_diurne)
     177
    169178c Pressure levels
    170179c ---------------
     
    319328     
    320329
    321       return
    322330      end
    323331
Note: See TracChangeset for help on using the changeset viewer.