23 SUBROUTINE day2month(b, mb, md, seas, year, latitude)
25 INTEGER,
INTENT(in) ::b
26 INTEGER,
INTENT(out) ::mb
27 INTEGER,
INTENT(out) ::md
28 INTEGER,
INTENT(out) ::seas
29 INTEGER,
INTENT(in) ::year
33 REAL(KIND(1d0))::latitude
44 IF ((modulo(year, t1) == 0) .AND. (modulo(year, t2) /= 0) .OR. (modulo(year, t3) == 0))
THEN 53 ELSEIF (b > 31 .AND. b <= 59 + k)
THEN 56 ELSEIF (b > 59 + k .AND. b <= 90 + k)
THEN 59 ELSEIF (b > 90 + k .AND. b <= 120 + k)
THEN 62 ELSEIF (b > 120 + k .AND. b <= 151 + k)
THEN 65 ELSEIF (b > 151 + k .AND. b <= 181 + k)
THEN 68 ELSEIF (b > 181 + k .AND. b <= 212 + k)
THEN 71 ELSEIF (b > 212 + k .AND. b <= 243 + k)
THEN 74 ELSEIF (b > 243 + k .AND. b <= 273 + k)
THEN 77 ELSEIF (b > 273 + k .AND. b <= 304 + k)
THEN 80 ELSEIF (b > 304 + k .AND. b <= 334 + k)
THEN 83 ELSEIF (b > 334 + k)
THEN 89 IF (latitude > 0)
THEN 90 IF (mb > 3 .AND. mb < 10)
THEN 96 IF (mb < 4 .OR. mb > 9)
THEN 107 INTEGER:: mon, ne, k, b
111 ELSE IF (mon == 2)
THEN 113 ELSE IF (mon == 3)
THEN 115 ELSE IF (mon == 4)
THEN 117 ELSE IF (mon == 5)
THEN 119 ELSE IF (mon == 6)
THEN 121 ELSE IF (mon == 7)
THEN 123 ELSE IF (mon == 8)
THEN 126 ELSE IF (mon == 9)
THEN 128 ELSE IF (mon == 10)
THEN 130 ELSE IF (mon == 11)
THEN 132 ELSE IF (mon == 12)
THEN 142 INTEGER :: nroDays, year_int
144 IF (mod(year_int, 100) /= 0 .AND. mod(year_int, 4) == 0)
THEN 146 ELSEIF (mod(year_int, 400) == 0)
THEN 158 INTEGER,
INTENT(in) :: year_int
161 IF (mod(year_int, 100) /= 0 .AND. mod(year_int, 4) == 0)
THEN 163 ELSEIF (mod(year_int, 400) == 0)
THEN 180 INTEGER DATE, MONTH, DAY, YR, MN, N1, N2, DOW, YEAR
191 10 n1 = (26*(mn + 1))/10
193 day = (date + n1 + n2 - (yr/100) + (yr/400) - 1)
194 dow = mod(day, 7) + 1
205 INTEGER :: HOURS, MINS, doy
206 REAL(KIND(1d0)) :: dectime, SECS, DH, DM, DS
230 SUBROUTINE daylen(DOY, XLAT, DAYL, DEC, SNDN, SNUP)
234 REAL(KIND(1d0)) :: DEC, DAYL, SOC, SNDN, SNUP, XLAT
235 REAL(KIND(1d0)),
PARAMETER :: PI = 3.14159, rad = pi/180.0
240 dec = -23.45*cos(2.0*pi*(doy + 10.0)/365.0)
243 soc = tan(rad*dec)*tan(rad*xlat)
244 soc = min(max(soc, -1.0), 1.0)
247 dayl = 12.0 + 24.0*asin(soc)/pi
248 snup = 12.0 - dayl/2.0
249 sndn = 12.0 + dayl/2.0
269 id, it, imin, isec, & ! input
272 INTEGER,
INTENT(in)::id, it, imin, isec
274 REAL(KIND(1D0)),
INTENT(out)::dectime
276 dectime =
REAL(id - 1, KIND(1d0)) &
277 +
REAL(it, kind(1d0))/24 &
278 +
REAL(imin, kind(1d0))/(60*24) &
279 +
REAL(isec, kind(1d0))/(60*60*24)
286 nsh, nsh_real, tstep_real)
288 INTEGER,
INTENT(in)::tstep
290 INTEGER,
INTENT(out)::nsh
291 REAL(KIND(1D0)),
INTENT(out)::nsh_real
292 REAL(KIND(1D0)),
INTENT(out)::tstep_real
295 tstep_real = tstep*1.0
300 iy, id, lat, & !input
304 INTEGER,
INTENT(in) :: iy
305 INTEGER,
INTENT(in) :: id
306 REAL(KIND(1d0)),
INTENT(in):: lat
308 INTEGER,
DIMENSION(3),
INTENT(OUT) ::dayofWeek_id
315 CALL day2month(id, mb, date, seas, iy, lat)
320 dayofweek_id(3) = seas
325 id, startDLS, endDLS, & !input
329 INTEGER,
INTENT(in) :: id, startDLS, endDLS
330 INTEGER,
INTENT(out) :: DLS
333 IF (id > startdls .AND. id < enddls) dls = 1
subroutine day2month(b, mb, md, seas, year, latitude)
subroutine leapyearcalc(year_int, nroDays)
subroutine month2day(mon, ne, k, b)
subroutine suews_cal_tstep(tstep, nsh, nsh_real, tstep_real)
elemental integer function days_of_year(year_int)
subroutine suews_cal_dectime(id, it, imin, isec, dectime)
subroutine suews_cal_weekday(iy, id, lat, dayofWeek_id)
subroutine day_of_week(DATE, MONTH, YEAR, DOW)
subroutine dectime_to_timevec(dectime, HOURS, MINS, SECS)
subroutine suews_cal_dls(id, startDLS, endDLS, DLS)
subroutine daylen(DOY, XLAT, DAYL, DEC, SNDN, SNUP)