INTEGER FUNCTION WKDAY( JDATE ) C*********************************************************************** C Version "$Id: wkday.F 1 2017-06-10 18:05:20Z coats $" C EDSS/Models-3 I/O API. C Copyright (C) 1992-2002 MCNC and Carlie J. Coats, Jr., and C (C) 2003-2010 Baron Advanced Meteorological Systems, C (C) 2007-2013 Carlie J. Coats, Jr., and C (C) 2015 UNC Institute for the Environment. C Distributed under the GNU LESSER GENERAL PUBLIC LICENSE version 2.1 C See file "LGPL.txt" for conditions of use. C......................................................................... C function body starts at line 58 C C RETURNS: C day (1=Monday, ..., 7=Sunday) of the week for the given Julian date C C PRECONDITIONS REQUIRED: C JDATE integer of the form 1000 * YEAR + DAY C C SUBROUTINES AND FUNCTIONS CALLED: none C C REVISION HISTORY: C adapted 2/27/1995 by CJC from ROM 2.2 UTILIO function KDAY.FOR C C Unification 2/2002 by CJC with global-climate DAYMON, which C uses a 360-day "year" C C Modified 03/2010 by CJC: F90 changes for I/O API v3.1 C C Modified 11/2015 by CJC: IO_365 changes. For IO_360 an IO_365, C assume Year 1900 Day 1 is a Monday. Equivalently, Year 3 Day 1 C C Bug-fix 4/2016 by CJC for IO_365 C*********************************************************************** IMPLICIT NONE C........... ARGUMENTS and their descriptions: INTEGER, INTENT(IN ) :: JDATE ! Julian date, YYYYDDD = 1000 * YEAR + DAY C........... PARAMETERS and their descriptions: INTEGER, PARAMETER :: YDAYS = 365 C........... SCRATCH LOCAL VARIABLES and their descriptions: INTEGER YEAR ! year INTEGER JDAY ! Julian day-number 1 ... 365,366 INTEGER K ! subexpression #ifdef IO_360 #define CLIMODAYS (360) #endif #ifdef IO_365 #define CLIMODAYS (365) #endif C*********************************************************************** C begin body of function WKDAY YEAR = JDATE / 1000 JDAY = MOD( JDATE, 1000 ) #ifdef CLIMODAYS K = CLIMODAYS*( YEAR - 3 ) + MOD( JDAY + CLIMODAYS - 1, 7 ) WKDAY = 1 + MOD (K, 7) RETURN #endif K = MAX( YEAR - 1, 0 ) K = K * YDAYS + K / 4 - K / 100 + K / 400 + JDAY - 1 WKDAY = 1 + MOD (K, 7) RETURN END FUNCTION WKDAY