Back to home page

MITgcm

 
 

    


File indexing completed on 2026-01-09 06:08:31 UTC

view on githubraw file Latest commit 2a2b7d0c on 2026-01-08 18:45:18 UTC
2a2b7d0c36 Mart*0001 #include "GCHEM_OPTIONS.h"
                0002 
                0003 CBOP
                0004 C !ROUTINE: GCHEM_INSOLATION
                0005 
                0006 C !INTERFACE: ==========================================================
                0007       SUBROUTINE GCHEM_INSOLATION(
                0008      O     solar_radiation,
                0009      I     iMin, iMax, jMin, jMax, bi, bj,
                0010      I     myTime, myIter, myThid )
                0011 
                0012 C !DESCRIPTION:
                0013 C find daily mean insolation as function of date and latitude based on
                0014 C Paltridge, G. W. and C. M. R. Platt. 1976. Radiative Processes in
                0015 C Meteorology and Climatology. Elsevier Sci. 318 p.
                0016 
                0017 C !USES: ===============================================================
                0018       IMPLICIT NONE
                0019 
                0020 C     === Global variables ===
                0021 #include "SIZE.h"
                0022 #include "EEPARAMS.h"
                0023 #include "PARAMS.h"
                0024 #include "GRID.h"
                0025 #include "GCHEM.h"
                0026 
                0027 C !INPUT PARAMETERS: ===================================================
                0028 C     bi,bj         :: tile indices
                0029 C     iMin,iMax     :: computation domain: 1rst index range
                0030 C     jMin,jMax     :: computation domain: 2nd  index range
                0031 C     myTime        :: current time
                0032 C     myIter        :: current timestep
                0033 C     myThid        :: thread Id. number
                0034       INTEGER bi, bj, iMin, iMax, jMin, jMax
                0035       _RL     myTime
                0036       INTEGER myIter
                0037       INTEGER myThid
                0038 
                0039 C !OUPUT PARAMETERS: ===================================================
                0040       _RL     solar_radiation(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
                0041 
                0042 C !FUNCTIONS: ==========================================================
                0043 
                0044 C !LOCAL VARIABLES: ====================================================
                0045       INTEGER i,j
                0046       _RL solar, albedo
                0047       _RL dayfrac, yday, delta
                0048       _RL lat, sun1, dayhrs
                0049       _RL cosz, frac
                0050 CEOP
                0051 
                0052 C constants
                0053       solar  = 1360. _d 0   !solar constant
                0054       albedo = 0.6 _d 0     !planetary albedo
                0055 
                0056 C find day (****NOTE for year starting in winter*****)
                0057 C fraction of year
                0058       dayfrac=MOD( myTime,gchem_secondsPerYear )/ gchem_secondsPerYear
                0059 C convert to radians
                0060       yday = 2. _d 0*PI*dayfrac
                0061 C cosine zenith angle (paltridge+platt)
                0062       delta = (0.006918 _d 0
                0063      &       -(0.399912 _d 0*COS(yday))
                0064      &       +(0.070257 _d 0*SIN(yday))
                0065      &       -(0.006758 _d 0*COS(2. _d 0*yday))
                0066      &       +(0.000907 _d 0*SIN(2. _d 0*yday))
                0067      &       -(0.002697 _d 0*COS(3. _d 0*yday))
                0068      &       +(0.001480 _d 0*SIN(3. _d 0*yday)) )
                0069 
                0070       DO j = jMin, jMax
                0071        DO i = iMin, iMax
                0072 C latitude in radians
                0073         lat=YC(i,j,bi,bj)*deg2rad
                0074 C     latitute in radians, backed out from coriolis parameter
                0075 C     (makes latitude independent of grid)
                0076         IF ( usingCartesianGrid .OR. usingCylindricalGrid )
                0077      &       lat = ASIN( fCori(i,j,bi,bj)/(2. _d 0*omega) )
                0078 C--    sun1 = -TAN(delta) * TAN(lat) ! why not use that?
                0079         sun1 = -SIN(delta)/COS(delta) * SIN(lat)/COS(lat)
                0080         IF (sun1.LE.-0.999 _d 0) sun1=-0.999 _d 0
                0081         IF (sun1.GE. 0.999 _d 0) sun1= 0.999 _d 0
                0082         dayhrs = ABS(ACOS(sun1))
                0083 C average zenith angle
                0084         cosz = ( SIN(delta)*SIN(lat)
                0085      &         +(COS(delta)*COS(lat)*SIN(dayhrs)/dayhrs) )
                0086         IF (cosz.LE.5. _d -3) cosz= 5. _d -3
                0087 C fraction of daylight in day
                0088         frac = dayhrs/PI
                0089 
                0090         solar_radiation(i,j) = solar*(1. _d 0-albedo)*cosz*frac
                0091 
                0092        ENDDO
                0093       ENDDO
                0094 
                0095       RETURN
                0096       END