MAPL_SunGetInsolation Interface

public interface MAPL_SunGetInsolation

Module Procedures

private recursive subroutine SOLAR_1D(LONS, LATS, ORBIT, ZTH, SLR, INTV, CLOCK, TIME, currTime, DIST, ZTHB, ZTHD, ZTH1, ZTHN, ZTHP, STEPSIZE, RC)

GEOS_SunGetInsolation returns the cosine of the solar zenith angle and the insolation at the top of the atmosphere for the given reference time, latitudes, longitudes, and orbit. It is overloaded to accept either 1d or 2d FORTRAN arrays or ESMF arrays of lats and lons and to produce the corresponding outputs.

The reference time is obtained as follows. If CurrTime is specified, it is used; otherwise, if the optional clock is specified, it is set to the time on that clock. If neither currTime nor clock are given, the time on the attached clock is used.

If the optional time interval is specified, the return values are averages over that interval following the reference time. In this case, the cosine of the solar zenith angle is an insolation-weighted average. The straight average of the zenith angle and the average over the daylight part of the interval (ZTHB,ZTHD) and the values at the beginning and end of the interval (ZTH1,ZTHN) are also optionally available. The last two are supported only for first two (non-ESMF) overloads. PMN Jun 2020: Added optional ZTHP, like ZTHB a pure average of the cosine of the solar zenith angle, except that for ZTHP the value averaged is allowed to be negative (below the horizon). It will be used for Photolysis calculations. Not implemented for ESMF overload.

If the interval is not specified, the values are instantaneous values valid at the reference time.

The optional TIME argument is used to return some specialized insolations. For example, the orbit at any of four Equinox or Solstice positions. If TIME is present, only the time of day is used from the clock, and a time interval, if specified, must be less than 24 hours. It can also be used to return daily-mean insolation for the date on the clock, or the annual-mean insolation for the year on the clock.

The TIME argument can be any of the following:

      MAPL_SunAutumnalEquinox
      MAPL_SunWinterSolstice
      MAPL_SunVernalEquinox
      MAPL_SunSummerSolstice
      MAPL_SunDailyMean
      MAPL_SunAnnualMean

@note Note If ORBIT%EOT is .TRUE., an Equation of Time correction will be applied. This shifts the actual daylight period w.r.t. to mean solar noon, to account for small but cumulative eccentricity and obliquity effects on the actual length of the solar day.

Arguments

Type IntentOptional Attributes Name
real, intent(in) :: LONS(:)
real, intent(in) :: LATS(:)
type(MAPL_SunOrbit), intent(in) :: ORBIT
real, intent(out) :: ZTH(:)
real, intent(out) :: SLR(:)
type(ESMF_TimeInterval), intent(inout), optional :: INTV
type(ESMF_Clock), intent(in), optional :: CLOCK
integer, intent(in), optional :: TIME
type(ESMF_Time), intent(in), optional :: currTime
real, intent(out), optional :: DIST
real, intent(out), optional :: ZTHB(:)
real, intent(out), optional :: ZTHD(:)
real, intent(out), optional :: ZTH1(:)
real, intent(out), optional :: ZTHN(:)
real, intent(out), optional :: ZTHP(:)
real, intent(in), optional :: STEPSIZE
integer, intent(out), optional :: RC

private recursive subroutine SOLAR_2D(LONS, LATS, ORBIT, ZTH, SLR, INTV, CLOCK, TIME, currTime, DIST, ZTHB, ZTHD, ZTH1, ZTHN, ZTHP, STEPSIZE, RC)

Arguments

Type IntentOptional Attributes Name
real, intent(in) :: LONS(:,:)
real, intent(in) :: LATS(:,:)
type(MAPL_SunOrbit), intent(in) :: ORBIT
real, intent(out) :: ZTH(:,:)
real, intent(out) :: SLR(:,:)
type(ESMF_TimeInterval), intent(inout), optional :: INTV
type(ESMF_Clock), intent(in), optional :: CLOCK
integer, intent(in), optional :: TIME
type(ESMF_Time), intent(in), optional :: currTime
real, intent(out), optional :: DIST
real, intent(out), optional :: ZTHB(:,:)
real, intent(out), optional :: ZTHD(:,:)
real, intent(out), optional :: ZTH1(:,:)
real, intent(out), optional :: ZTHN(:,:)
real, intent(out), optional :: ZTHP(:,:)
real, intent(in), optional :: STEPSIZE
integer, intent(out), optional :: RC

private subroutine SOLAR_ARR_INT(LONS, LATS, ORBIT, ZTH, SLR, INTV, CLOCK, TIME, currTime, DIST, ZTHB, ZTHD, RC)

Arguments

Type IntentOptional Attributes Name
type(ESMF_Array), intent(in) :: LONS
type(ESMF_Array), intent(in) :: LATS
type(MAPL_SunOrbit), intent(in) :: ORBIT
type(ESMF_Array), intent(out) :: ZTH
type(ESMF_Array), intent(out) :: SLR
type(ESMF_TimeInterval), intent(inout), optional :: INTV
type(ESMF_Clock), intent(in), optional :: CLOCK
integer, intent(in), optional :: TIME
type(ESMF_Time), intent(in), optional :: currTime
real, intent(out), optional :: DIST
type(ESMF_Array), intent(out), optional :: ZTHB
type(ESMF_Array), intent(out), optional :: ZTHD
integer, intent(out), optional :: RC

$ character(len=ESMF_MAXSTR) :: IAm = “SunGetInsolationArr”