Page 1 Source Listing IYMD21 2014-09-16 16:52 w3timemd.f90 1 !/ ------------------------------------------------------------------- / 2 MODULE W3TIMEMD 3 !/ 4 !/ +-----------------------------------+ 5 !/ | WAVEWATCH III NOAA/NCEP | 6 !/ | H. L. Tolman | 7 !/ | FORTRAN 90 | 8 !/ | Last update : 23-Sep-2012 | 9 !/ +-----------------------------------+ 10 !/ 11 !/ Copyright 2009 National Weather Service (NWS), 12 !/ National Oceanic and Atmospheric Administration. All rights 13 !/ reserved. WAVEWATCH III is a trademark of the NWS. 14 !/ No unauthorized use without permission. 15 !/ 16 ! 1. Purpose : 17 ! 18 ! Routines for management of date and time. 19 ! 20 ! 2. Variables and types : 21 ! 22 ! None. 23 ! 24 ! 3. Subroutines and functions : 25 ! 26 ! Name Type Scope Description 27 ! ---------------------------------------------------------------- 28 ! TICK21 Subr. Public Increment a date and time array with 29 ! a given number of seconds. 30 ! IYMD21 I.F. TICK21 Date increment function. 31 ! DSEC21 R.F. Public Calculate the difference in seconds 32 ! between two data/time arrays. 33 ! MYMD21 I.F. DSEC21 Julian date function. 34 ! STME21 Subr. Public Converts integer time to string. 35 ! JULDAY I.F. Public Julian date function 36 ! CALDAT Subr. Public Transform Julian day to date 37 ! ---------------------------------------------------------------- 38 ! 39 ! 4. Subroutines and functions used : 40 ! 41 ! Name Type Module Description 42 ! ---------------------------------------------------------------- 43 ! STRACE Subr. W3SERVMD Subroutine tracing. 44 ! ---------------------------------------------------------------- 45 ! 46 ! 5. Remarks : 47 ! 48 ! 6. Switches : 49 ! 50 ! 7. Source code : 51 ! 52 !/ ------------------------------------------------------------------- / 53 !/ 54 ! 55 PUBLIC 56 ! 57 CONTAINS Page 2 Source Listing IYMD21 2014-09-16 16:52 w3timemd.f90 58 !/ ------------------------------------------------------------------- / 59 SUBROUTINE TICK21 ( TIME, DTIME ) 60 !/ 61 !/ +-----------------------------------+ 62 !/ | WAVEWATCH III NOAA/NCEP | 63 !/ | H. L. Tolman | 64 !/ | FORTRAN 90 | 65 !/ | Last update : 29-Nov-1999 | 66 !/ +-----------------------------------+ 67 !/ Based on TICK of the GLA GCM. 68 !/ 69 !/ 23-Mar-1993 : Final FORTRAN 77 ( version 1.18 ) 70 !/ 29-Nov-1999 : Upgrade to FORTRAN 90 ( version 2.00 ) 71 !/ 72 ! 1. Purpose : 73 ! 74 ! Updates time information, DTIME=0 converts to "legal" time. 75 ! Goes into the 21st century. 76 ! 77 ! 3. Parameters : 78 ! 79 ! Parameter list 80 ! ---------------------------------------------------------------- 81 ! TIME I.A. I/O (1) Current date in YYYYMMDD format. 82 ! (2) Current time in HHMMSS format. 83 ! DTIME Real I Time step in seconds. 84 ! ---------------------------------------------------------------- 85 ! 86 ! 4. Subroutines used : 87 ! 88 ! Name Type Module Description 89 ! ---------------------------------------------------------------- 90 ! STRACE Subr. W3SERVMD Subroutine tracing. 91 ! IYMD21 Func. Internal Increment date in YYYYMMDD format. 92 ! ---------------------------------------------------------------- 93 ! 94 ! 5. Called by : 95 ! 96 ! Any other routine. 97 ! 98 ! 8. Structure : 99 ! 100 ! See source code. 101 ! 102 ! 9. Switches : 103 ! 104 ! !/S Enable subroutine tracing using STRACE. 105 ! 106 ! 10. Source code : 107 ! 108 !/ ------------------------------------------------------------------- / 109 !/ 110 IMPLICIT NONE 111 !/ 112 !/ ------------------------------------------------------------------- / 113 !/ Parameter list 114 !/ Page 3 Source Listing IYMD21 2014-09-16 16:52 w3timemd.f90 115 INTEGER, INTENT(INOUT) :: TIME(2) 116 REAL, INTENT(IN) :: DTIME 117 !/ 118 !/ ------------------------------------------------------------------- / 119 !/ Local parameters 120 !/ 121 INTEGER :: NYMD, NHMS, NSEC 122 !/ 123 !/ ------------------------------------------------------------------- / 124 !/ 125 ! 126 ! Zero increment: get "legal" date 127 ! 128 NYMD = TIME(1) 129 NHMS = TIME(2) 130 IF (DTIME.EQ.0.) THEN 131 NYMD = IYMD21 (NYMD,-1) 132 NYMD = IYMD21 (NYMD, 1) 133 END IF 134 ! 135 ! Convert and increment time : 136 ! 137 NSEC = NHMS/10000*3600 + MOD(NHMS,10000)/100* 60 + & 138 MOD(NHMS,100) + NINT(DTIME) 139 ! 140 ! Check change of date : 141 ! 142 100 CONTINUE 143 IF (NSEC.GE.86400) THEN 144 NSEC = NSEC - 86400 145 NYMD = IYMD21 (NYMD,1) 146 GOTO 100 147 END IF 148 ! 149 200 CONTINUE 150 IF (NSEC.LT.00000) THEN 151 NSEC = 86400 + NSEC 152 NYMD = IYMD21 (NYMD,-1) 153 GOTO 200 154 END IF 155 ! 156 NHMS = NSEC/3600*10000 + MOD(NSEC,3600)/60*100 + MOD(NSEC,60) 157 ! 158 TIME(1) = NYMD 159 TIME(2) = NHMS 160 ! 161 RETURN 162 !/ 163 !/ Internal function IYMD21 ------------------------------------------ / 164 !/ 165 CONTAINS 166 !/ ------------------------------------------------------------------- / 167 INTEGER FUNCTION IYMD21 ( NYMD ,M ) 168 !/ 169 !/ +-----------------------------------+ 170 !/ | WAVEWATCH III NOAA/NCEP | 171 !/ | H. L. Tolman | Page 4 Source Listing IYMD21 2014-09-16 16:52 w3timemd.f90 172 !/ | FORTRAN 90 | 173 !/ | Last update : 29-Oct-1998 | 174 !/ +-----------------------------------+ 175 !/ Based on INCYMD of the GLA GCM. 176 !/ 177 !/ 18-Oct-1998 : Final FORTRAN 77 ( version 1.18 ) 178 !/ 29-Nov-1999 : Upgrade to FORTRAN 90 ( version 2.00 ) 179 !/ 180 ! 1. Purpose : 181 ! 182 ! Increment date in YYYYMMDD format by +/- 1 day. 183 ! 184 ! 3. Parameters : 185 ! 186 ! Parameter list 187 ! ---------------------------------------------------------------- 188 ! NYMD Int. I Old date in YYMMDD format. 189 ! M Int. I +/- 1 (Day adjustment) 190 ! ---------------------------------------------------------------- 191 ! 192 ! 4. Subroutines used : 193 ! 194 ! Name Type Module Description 195 ! ---------------------------------------------------------------- 196 ! STRACE Subr. W3SERVMD Subroutine tracing. 197 ! ---------------------------------------------------------------- 198 ! 199 ! 5. Called by : 200 ! 201 ! Any subroutine. 202 ! 203 ! 8. Structure : 204 ! 205 ! See source code. 206 ! 207 ! 9. Switches : 208 ! 209 ! !/S Enable subroutine tracing using STRACE. 210 ! 211 ! 10. Source code : 212 ! 213 !/ ------------------------------------------------------------------- / 214 !/ 215 IMPLICIT NONE 216 !/ 217 !/ ------------------------------------------------------------------- / 218 !/ Parameter list 219 !/ 220 INTEGER, INTENT(IN) :: NYMD, M 221 !/ 222 !/ ------------------------------------------------------------------- / 223 !/ Local parameters 224 !/ 225 INTEGER :: NY, NM, ND 226 INTEGER, SAVE :: NDPM(12) 227 DATA NDPM / 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 / 228 LOGICAL :: LEAP Page 5 Source Listing IYMD21 2014-09-16 16:52 w3timemd.f90 229 !/ 230 !/ ------------------------------------------------------------------- / 231 !/ 232 ! 233 ! "Unpack" and increment date : 234 ! 235 NY = NYMD / 10000 236 NM = MOD(NYMD,10000) / 100 237 NM = MIN ( 12 , MAX(1,NM) ) 238 ND = MOD(NYMD,100) + M 239 LEAP = MOD(NY,400).EQ.0 .OR. & 240 ( MOD(NY,4).EQ.0 .AND. MOD(NY,100).NE.0 ) 241 ! 242 ! M = -1, change month if necessary : 243 ! 244 IF (ND.EQ.0) THEN 245 NM = NM - 1 246 IF (NM.EQ.0) THEN 247 NM = 12 248 NY = NY - 1 249 ENDIF 250 ND = NDPM(NM) 251 IF (NM.EQ.2 .AND. LEAP) ND = 29 252 END IF 253 ! 254 ! M = 1, leap year 255 ! 256 IF (ND.EQ.29 .AND. NM.EQ.2 .AND. LEAP) GO TO 20 257 ! 258 ! next month 259 ! 260 IF (ND.GT.NDPM(NM)) THEN 261 ND = 1 262 NM = NM + 1 263 IF (NM.GT.12) THEN 264 NM = 1 265 NY = NY + 1 266 ENDIF 267 END IF 268 ! 269 20 CONTINUE 270 IYMD21 = NY*10000 + NM*100 + ND 271 ! 272 RETURN 273 !/ 274 !/ End of IYMD21 ----------------------------------------------------- / 275 !/ 276 END FUNCTION IYMD21 Page 6 Source Listing IYMD21 2014-09-16 16:52 Entry Points w3timemd.f90 ENTRY POINTS Name w3timemdtick21_mp_iymd21_ SYMBOL CROSS REFERENCE Name Object Declared Type Bytes Dimen Elements Attributes References 20 Label 269 256 IYMD21 Func 167 I(4) 4 scalar 131,132,145,152,270 LEAP Local 228 L(4) 4 scalar 239,251,256 M Dummy 167 I(4) 4 scalar ARG,IN 238 MAX Func 237 scalar 237 MIN Func 237 scalar 237 MOD Func 236 scalar 137,138,156,236,238,239,240 ND Local 225 I(4) 4 scalar 238,244,250,251,256,260,261,270 NDPM Local 226 I(4) 4 1 12 227,250,260 NM Local 225 I(4) 4 scalar 236,237,245,246,247,250,251,256,26 0,262,263,264,270 NY Local 225 I(4) 4 scalar 235,239,240,248,265,270 NYMD Dummy 167 I(4) 4 scalar ARG,IN 235,236,238 Page 7 Source Listing IYMD21 2014-09-16 16:52 w3timemd.f90 277 !/ 278 !/ End of TICK21 ----------------------------------------------------- / 279 !/ 280 END SUBROUTINE TICK21 ENTRY POINTS Name w3timemd_mp_tick21_ SYMBOL CROSS REFERENCE Name Object Declared Type Bytes Dimen Elements Attributes References 100 Label 142 146 200 Label 149 153 DTIME Dummy 59 R(4) 4 scalar ARG,IN 130,138 IYMD21@0 Local 167 I(4) 4 scalar NHMS Local 121 I(4) 4 scalar 129,137,138,156,159 NINT Func 138 scalar 138 NSEC Local 121 I(4) 4 scalar 137,143,144,150,151,156 NYMD Local 121 I(4) 4 scalar 128,131,132,145,152,158 TICK21 Subr 59 TIME Dummy 59 I(4) 4 1 2 ARG,INOUT 128,129,158,159 Page 8 Source Listing IYMD21 2014-09-16 16:52 w3timemd.f90 281 !/ ------------------------------------------------------------------- / 282 REAL FUNCTION DSEC21 ( TIME1, TIME2 ) 283 !/ 284 !/ +-----------------------------------+ 285 !/ | WAVEWATCH III NOAA/NCEP | 286 !/ | H. L. Tolman | 287 !/ | FORTRAN 90 | 288 !/ | Last update : 05-Jan-2001 | 289 !/ +-----------------------------------+ 290 !/ 291 !/ 23-Mar-1993 : Final FORTRAN 77 ( version 1.18 ) 292 !/ 29-Nov-1999 : Upgrade to FORTRAN 90 ( version 2.00 ) 293 !/ 05-Jan-2001 : Y2K leap year error correction. ( version 2.05 ) 294 !/ 295 !/ 296 ! 1. Purpose : 297 ! 298 ! Calculate the time difference in seconds between two times in 299 ! YYMMD HHMMMSS formats. 300 ! 301 ! 3. Parameters : 302 ! 303 ! Parameter list 304 ! ---------------------------------------------------------------- 305 ! TIMEn I.A. I Times, TIMEn(1) is date in YYYYMMDD format, 306 ! TIMEn(2) is time in HHMMSS format. 307 ! ---------------------------------------------------------------- 308 ! 309 ! 4. Subroutines used : 310 ! 311 ! Name Type Module Description 312 ! ---------------------------------------------------------------- 313 ! STRACE Subr. W3SERVMD Subroutine tracing. 314 ! MYMD21 Func. Internal Calculate Julian date. 315 ! ---------------------------------------------------------------- 316 ! 317 ! 5. Called by : 318 ! 319 ! Any routine. 320 ! 321 ! 7. Remarks : 322 ! 323 ! 8. Structure : 324 ! 325 ! See source code. 326 ! 327 ! 9. Switches : 328 ! 329 ! !/S Enable subroutine tracing using STRACE. 330 ! 331 ! 10. Source code : 332 ! 333 !/ ------------------------------------------------------------------- / 334 !/ 335 IMPLICIT NONE 336 !/ 337 !/ ------------------------------------------------------------------- / Page 9 Source Listing MYMD21 2014-09-16 16:52 w3timemd.f90 338 !/ Parameter list 339 !/ 340 INTEGER, INTENT(IN) :: TIME1(2), TIME2(2) 341 !/ 342 !/ ------------------------------------------------------------------- / 343 !/ Local parameters 344 !/ 345 INTEGER :: NY1, ND1, NY2, ND2, NS1, NS2, NS, & 346 ND, NST 347 !/ 348 !/ ------------------------------------------------------------------- / 349 !/ 350 ! 351 ! Convert dates and times : 352 ! 353 NY1 = TIME1(1) / 10000 354 ND1 = MYMD21 ( TIME1(1) ) 355 NS1 = TIME1(2)/10000*3600 + MOD(TIME1(2),10000)/100*60 + & 356 MOD(TIME1(2),100) 357 ! 358 NY2 = TIME2(1) / 10000 359 ND2 = MYMD21 ( TIME2(1) ) 360 NS2 = TIME2(2)/10000*3600 + MOD(TIME2(2),10000)/100*60 + & 361 MOD(TIME2(2),100) 362 ! 363 ! Number of days and seconds in difference : 364 ! 365 ND = ND2 - ND1 366 ! 367 IF ( NY1 .NE. NY2 ) THEN 368 NST = SIGN ( 1 , NY2-NY1 ) 369 100 CONTINUE 370 IF (NY1.EQ.NY2) GOTO 200 371 IF (NST.GT.0) THEN 372 NY2 = NY2 - 1 373 ND = ND + MYMD21 ( NY2*10000 + 1231 ) 374 ELSE 375 ND = ND - MYMD21 ( NY2*10000 + 1231 ) 376 NY2 = NY2 + 1 377 ENDIF 378 GOTO 100 379 200 CONTINUE 380 END IF 381 ! 382 NS = NS2 - NS1 383 ! 384 ! Output of time difference : 385 ! 386 DSEC21 = REAL(NS) + 86400.*REAL(ND) 387 ! 388 RETURN 389 !/ 390 !/ Internal function MYMD21 ------------------------------------------ / 391 !/ 392 CONTAINS 393 !/ ------------------------------------------------------------------- / 394 INTEGER FUNCTION MYMD21 ( NYMD ) Page 10 Source Listing MYMD21 2014-09-16 16:52 w3timemd.f90 395 !/ 396 !/ +-----------------------------------+ 397 !/ | WAVEWATCH III NOAA/NCEP | 398 !/ | H. L. Tolman | 399 !/ | FORTRAN 90 | 400 !/ | Last update : 29-Oct-1998 | 401 !/ +-----------------------------------+ 402 !/ Based on MODYMD of the GLA GCM. 403 !/ 404 !/ 19-Oct-1998 : Final FORTRAN 77 ( version 1.18 ) 405 !/ 29-Nov-1999 : Upgrade to FORTRAN 90 ( version 2.00 ) 406 !/ 407 ! 1. Purpose : 408 ! 409 ! Convert date in YYMMDD format to julian date. 410 ! 411 ! 3. Parameters : 412 ! 413 ! Parameter list 414 ! ---------------------------------------------------------------- 415 ! NYMD Int. I Date in YYMMDD format. 416 ! ---------------------------------------------------------------- 417 ! 418 ! 4. Subroutines used : 419 ! 420 ! Name Type Module Description 421 ! ---------------------------------------------------------------- 422 ! STRACE Subr. W3SERVMD Subroutine tracing. 423 ! ---------------------------------------------------------------- 424 ! 425 ! 5. Called by : 426 ! 427 ! Any subroutine. 428 ! 429 ! 8. Structure : 430 ! 431 ! See source code. 432 ! 433 ! 9. Switches : 434 ! 435 ! !/S Enable subroutine tracing using STRACE. 436 ! 437 ! 10. Source code : 438 ! 439 !/ ------------------------------------------------------------------- / 440 !/ 441 IMPLICIT NONE 442 !/ 443 !/ ------------------------------------------------------------------- / 444 !/ Parameter list 445 !/ 446 INTEGER, INTENT(IN) :: NYMD 447 !/ 448 !/ ------------------------------------------------------------------- / 449 !/ Local parameters 450 !/ 451 INTEGER :: NY, NM, ND Page 11 Source Listing MYMD21 2014-09-16 16:52 w3timemd.f90 452 INTEGER, SAVE :: NDPM(12) 453 DATA NDPM / 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 / 454 LOGICAL :: LEAP 455 !/ 456 !/ ------------------------------------------------------------------- / 457 !/ 458 ! 459 ! "Unpack" and increment date : 460 ! 461 NY = NYMD / 10000 462 NM = MOD(NYMD,10000) / 100 463 ND = MOD(NYMD,100) 464 LEAP = MOD(NY,400).EQ.0 .OR. & 465 ( MOD(NY,4).EQ.0 .AND. MOD(NY,100).NE.0 ) 466 ! 467 ! Loop over months : 468 ! 469 IF (NM.GT.2 .AND. LEAP) ND = ND + 1 470 ! 471 40 CONTINUE 472 IF (NM.LE.1) GO TO 60 473 NM = NM - 1 474 ND = ND + NDPM(NM) 475 GO TO 40 476 ! 477 60 CONTINUE 478 MYMD21 = ND 479 ! 480 RETURN 481 !/ 482 !/ End of MYMD21 ----------------------------------------------------- / 483 !/ 484 END FUNCTION MYMD21 Page 12 Source Listing MYMD21 2014-09-16 16:52 Entry Points w3timemd.f90 ENTRY POINTS Name w3timemddsec21_mp_mymd21_ SYMBOL CROSS REFERENCE Name Object Declared Type Bytes Dimen Elements Attributes References 40 Label 471 475 60 Label 477 472 LEAP Local 454 L(4) 4 scalar 464,469 MOD Func 462 scalar 355,356,360,361,462,463,464,465 MYMD21 Func 394 I(4) 4 scalar 354,359,373,375,478 ND Local 451 I(4) 4 scalar 463,469,474,478 NDPM Local 452 I(4) 4 1 12 453,474 NM Local 451 I(4) 4 scalar 462,469,472,473,474 NY Local 451 I(4) 4 scalar 461,464,465 NYMD Dummy 394 I(4) 4 scalar ARG,IN 461,462,463 Page 13 Source Listing MYMD21 2014-09-16 16:52 w3timemd.f90 485 !/ 486 !/ End of DSEC21 ----------------------------------------------------- / 487 !/ 488 END FUNCTION DSEC21 ENTRY POINTS Name w3timemd_mp_dsec21_ SYMBOL CROSS REFERENCE Name Object Declared Type Bytes Dimen Elements Attributes References 100 Label 369 378 200 Label 379 370 DSEC21 Func 282 R(4) 4 scalar 386 MYMD21@0 Local 394 I(4) 4 scalar ND Local 346 I(4) 4 scalar 365,373,375,386 ND1 Local 345 I(4) 4 scalar 354,365 ND2 Local 345 I(4) 4 scalar 359,365 NS Local 345 I(4) 4 scalar 382,386 NS1 Local 345 I(4) 4 scalar 355,382 NS2 Local 345 I(4) 4 scalar 360,382 NST Local 346 I(4) 4 scalar 368,371 NY1 Local 345 I(4) 4 scalar 353,367,368,370 NY2 Local 345 I(4) 4 scalar 358,367,368,370,372,373,375,376 REAL Func 386 scalar 386 SIGN Func 368 scalar 368 TIME1 Dummy 282 I(4) 4 1 2 ARG,IN 353,354,355,356 TIME2 Dummy 282 I(4) 4 1 2 ARG,IN 358,359,360,361 Page 14 Source Listing MYMD21 2014-09-16 16:52 w3timemd.f90 489 !/ ------------------------------------------------------------------- / 490 SUBROUTINE STME21 ( TIME , DTME21 ) 491 !/ 492 !/ +-----------------------------------+ 493 !/ | WAVEWATCH III NOAA/NCEP | 494 !/ | H. L. Tolman | 495 !/ | FORTRAN 90 | 496 !/ | Last update : 23-Nov-1999 | 497 !/ +-----------------------------------+ 498 !/ 499 !/ 21-Jun-1993 : Final FORTRAN 77 ( version 1.18 ) 500 !/ 23-Nov-1999 : Upgrade to FORTRAN 90 ( version 2.00 ) 501 !/ 502 ! 1. Purpose : 503 ! 504 ! Converts time to more readable string. 505 ! 506 ! 3. Parameters : 507 ! 508 ! Parameter list 509 ! ---------------------------------------------------------------- 510 ! TIME I.A. I Time in YYYYMMDD HHMMSS format. 511 ! TIME(1) < 0 indicates that time is not set. 512 ! ---------------------------------------------------------------- 513 ! 514 ! 4. Subroutines used : 515 ! 516 ! None. 517 ! 518 ! 5. Called by : 519 ! 520 ! Any subroutine/program. 521 ! 522 ! 10. Source code : 523 ! 524 !/ ------------------------------------------------------------------- / 525 !/ 526 IMPLICIT NONE 527 !/ 528 !/ ------------------------------------------------------------------- / 529 !/ Parameter list 530 !/ 531 INTEGER, INTENT(IN) :: TIME(2) 532 CHARACTER, INTENT(OUT) :: DTME21*23 533 !/ 534 !/ ------------------------------------------------------------------- / 535 !/ Local parameters 536 !/ 537 INTEGER :: IY, IMO, ID, IH, IMI, IS 538 !/ 539 !/ ------------------------------------------------------------------- / 540 !/ 541 IF ( TIME(1) .LT. 0 ) THEN 542 DTME21 = ' date and time not set.' 543 ELSE 544 IY = TIME(1) / 10000 545 IMO = MOD(TIME(1),10000) / 100 Page 15 Source Listing STME21 2014-09-16 16:52 w3timemd.f90 546 ID = MOD(TIME(1),100) 547 IH = TIME(2) / 10000 548 IMI = MOD(TIME(2),10000) / 100 549 IS = MOD(TIME(2),100) 550 WRITE (DTME21,900) IY, IMO, ID, IH, IMI, IS 551 ENDIF 552 ! 553 RETURN 554 ! 555 ! Formats 556 ! 557 900 FORMAT (I4.4,'/',I2.2,'/',I2.2,' ',I2.2,':',I2.2,':',I2.2,' UTC') 558 !/ 559 !/ End of STME21 ----------------------------------------------------- / 560 !/ 561 END SUBROUTINE STME21 ENTRY POINTS Name w3timemd_mp_stme21_ SYMBOL CROSS REFERENCE Name Object Declared Type Bytes Dimen Elements Attributes References 900 Label 557 550 DTME21 Dummy 490 CHAR 23 scalar ARG,OUT 542,550 ID Local 537 I(4) 4 scalar 546,550 IH Local 537 I(4) 4 scalar 547,550 IMI Local 537 I(4) 4 scalar 548,550 IMO Local 537 I(4) 4 scalar 545,550 IS Local 537 I(4) 4 scalar 549,550 IY Local 537 I(4) 4 scalar 544,550 MOD Func 545 scalar 545,546,548,549 STME21 Subr 490 TIME Dummy 490 I(4) 4 1 2 ARG,IN 541,544,545,546,547,548,549 Page 16 Source Listing STME21 2014-09-16 16:52 w3timemd.f90 562 563 !/ ------------------------------------------------------------------- / 564 INTEGER FUNCTION JULDAY(id,mm,iyyy) 565 !/ 566 !/ +-----------------------------------+ 567 !/ | WAVEWATCH III NOAA/NCEP | 568 !/ | F. Ardhuin | 569 !/ | FORTRAN 90 | 570 !/ | Last update : 23-Sep-2012 | 571 !/ +-----------------------------------+ 572 ! 573 ! 10. Source code : 574 ! 575 !/ ------------------------------------------------------------------- / 576 !/ 577 IMPLICIT NONE 578 !/ 579 !/ ------------------------------------------------------------------- / 580 INTEGER(KIND=4), INTENT(in) :: id,mm,iyyy 581 !/ 582 !/ ------------------------------------------------------------------- / 583 !/ Local parameters 584 !/ 585 INTEGER(KIND=4), PARAMETER :: IGREG=15+31*(10+12*1582) 586 INTEGER(KIND=4) ja,jm,jy 587 jy=iyyy 588 IF (jy.EQ.0) WRITE(6,*) 'There is no zero year !!' 589 IF (jy.LT.0) jy=jy+1 590 IF (mm.GT.2) THEN 591 jm=mm+1 592 ELSE 593 jy=jy-1 594 jm=mm+13 595 ENDIF 596 julday=INT(365.25*jy)+int(30.6001*jm)+id+1720995 597 IF (id+31*(mm+12*iyyy).GE.IGREG) THEN 598 ja=INT(0.01*jy) 599 julday=julday+2-ja+INT(0.25*ja) 600 END IF 601 RETURN 602 !/ 603 !/ End of JULDAY ----------------------------------------------------- / 604 !/ 605 END FUNCTION JULDAY Page 17 Source Listing JULDAY 2014-09-16 16:52 Entry Points w3timemd.f90 ENTRY POINTS Name w3timemd_mp_julday_ SYMBOL CROSS REFERENCE Name Object Declared Type Bytes Dimen Elements Attributes References ID Dummy 564 I(4) 4 scalar ARG,IN 596,597 IGREG Param 585 I(4) 4 scalar 597 INT Func 596 scalar 596,598,599 IYYY Dummy 564 I(4) 4 scalar ARG,IN 587,597 JA Local 586 I(4) 4 scalar 598,599 JM Local 586 I(4) 4 scalar 591,594,596 JULDAY Func 564 I(4) 4 scalar 596,599,711 JY Local 586 I(4) 4 scalar 587,588,589,593,596,598 MM Dummy 564 I(4) 4 scalar ARG,IN 590,591,594,597 Page 18 Source Listing JULDAY 2014-09-16 16:52 w3timemd.f90 606 607 !/ ------------------------------------------------------------------- / 608 SUBROUTINE CALDAT(julian,id,mm,iyyy) 609 ! See numerical recipes 2nd ed. The order of month and day have been swapped! 610 ! 611 ! 10. Source code : 612 ! 613 !/ ------------------------------------------------------------------- / 614 !/ 615 IMPLICIT NONE 616 !/ 617 INTEGER(KIND=4), INTENT(in) :: julian 618 INTEGER(KIND=4), INTENT(out) :: id,mm,iyyy 619 INTEGER(KIND=4), PARAMETER :: IGREG=2299161 620 INTEGER(KIND=4) ja,jalpha,jb,jc,jd,je 621 if (julian.GE.IGREG) THEN 622 jalpha=INT(((julian-1867216)-0.25)/36524.25) 623 ja=julian+1+jalpha-INT(0.25*jalpha) 624 ELSE 625 ja=julian 626 END IF 627 jb=ja+1524 628 jc=INT(6680.+((jb-2439870)-122.1)/365.25) 629 jd=365*jc+INT(0.25*jc) 630 je=INT((jb-jd)/30.6001) 631 id=jb-jd-INT(30.6001*je) 632 mm=je-1 633 IF (mm.GT.12) mm=mm-12 634 iyyy=jc-4715 635 IF (mm.GT.2) iyyy=iyyy-1 636 IF (iyyy.LE.0) iyyy=iyyy-1 637 RETURN 638 !/ 639 !/ End of CALDAT ----------------------------------------------------- / 640 !/ 641 END SUBROUTINE CALDAT Page 19 Source Listing CALDAT 2014-09-16 16:52 Entry Points w3timemd.f90 ENTRY POINTS Name w3timemd_mp_caldat_ SYMBOL CROSS REFERENCE Name Object Declared Type Bytes Dimen Elements Attributes References CALDAT Subr 608 ID Dummy 608 I(4) 4 scalar ARG,OUT 631 IGREG Param 619 I(4) 4 scalar 621 INT Func 622 scalar 622,623,628,629,630,631 IYYY Dummy 608 I(4) 4 scalar ARG,OUT 634,635,636 JA Local 620 I(4) 4 scalar 623,625,627 JALPHA Local 620 I(4) 4 scalar 622,623 JB Local 620 I(4) 4 scalar 627,628,630,631 JC Local 620 I(4) 4 scalar 628,629,634 JD Local 620 I(4) 4 scalar 629,630,631 JE Local 620 I(4) 4 scalar 630,631,632 JULIAN Dummy 608 I(4) 4 scalar ARG,IN 621,622,623,625 MM Dummy 608 I(4) 4 scalar ARG,OUT 632,633,635 Page 20 Source Listing CALDAT 2014-09-16 16:52 w3timemd.f90 642 !/ ------------------------------------------------------------------- / 643 REAL(KIND=8) FUNCTION TIME2HOURS(TIME) 644 !/ 645 !/ +-----------------------------------+ 646 !/ | WAVEWATCH III NOAA/NCEP | 647 !/ | F. Ardhuin | 648 !/ | FORTRAN 90 | 649 !/ | Last update : 26-Sep-2012 | 650 !/ +-----------------------------------+ 651 ! 652 ! gives date as real number 653 ! 654 ! 3. Parameters : 655 ! 656 ! Parameter list 657 ! ---------------------------------------------------------------- 658 ! TIME I.A. I/O (1) Current date in YYYYMMDD format. 659 ! (2) Current time in HHMMSS format. 660 ! DTIME Real I Time step in seconds. 661 ! ---------------------------------------------------------------- 662 ! 663 ! 4. Subroutines used : 664 ! 665 ! Name Type Module Description 666 ! ---------------------------------------------------------------- 667 ! STRACE Subr. W3SERVMD Subroutine tracing. 668 ! IYMD21 Func. Internal Increment date in YYYYMMDD format. 669 ! ---------------------------------------------------------------- 670 ! 671 ! 5. Called by : 672 ! 673 ! Any other routine. 674 ! 675 ! 8. Structure : 676 ! 677 ! See source code. 678 ! 679 ! 9. Switches : 680 ! 681 ! !/S Enable subroutine tracing using STRACE. 682 ! 683 ! 10. Source code : 684 ! 685 !/ ------------------------------------------------------------------- / 686 !/ 687 IMPLICIT NONE 688 !/ 689 !/ ------------------------------------------------------------------- / 690 !/ Parameter list 691 !/ 692 INTEGER, INTENT(INOUT) :: TIME(2) 693 !/ 694 !/ ------------------------------------------------------------------- / 695 !/ Local parameters 696 !/ 697 INTEGER :: NYMD, NHMS, NSEC, IY,IMO,ID,IH,IMI,IS 698 INTEGER(KIND=4) :: JDAY Page 21 Source Listing TIME2HOURS 2014-09-16 16:52 w3timemd.f90 699 !/ 700 !/ ------------------------------------------------------------------- / 701 !/ 702 ! 703 ! Zero increment: get "legal" date 704 ! 705 IY = TIME(1) / 10000 706 IMO = MOD(TIME(1),10000) / 100 707 ID = MOD(TIME(1),100) 708 IH = TIME(2) / 10000 709 IMI = MOD(TIME(2),10000) / 100 710 IS = MOD(TIME(2),100) 711 JDAY = julday(id,IMO,iy) 712 TIME2HOURS = 24.d0*dfloat(JDAY)+dfloat(IH)+dfloat(IS+IMI*60)/3600.d0 713 RETURN 714 !/ 715 !/ End of TIME2HOURS-------------------------------------------------- / 716 !/ 717 END FUNCTION TIME2HOURS ENTRY POINTS Name w3timemd_mp_time2hours_ SYMBOL CROSS REFERENCE Name Object Declared Type Bytes Dimen Elements Attributes References DFLOAT Func 712 scalar 712 ID Local 697 I(4) 4 scalar 707,711 IH Local 697 I(4) 4 scalar 708,712 IMI Local 697 I(4) 4 scalar 709,712 IMO Local 697 I(4) 4 scalar 706,711 IS Local 697 I(4) 4 scalar 710,712 IY Local 697 I(4) 4 scalar 705,711 JDAY Local 698 I(4) 4 scalar 711,712 MOD Func 706 scalar 706,707,709,710 NHMS Local 697 I(4) 4 scalar NSEC Local 697 I(4) 4 scalar NYMD Local 697 I(4) 4 scalar TIME Dummy 643 I(4) 4 1 2 ARG,INOUT 705,706,707,708,709,710 TIME2HOURS Func 643 R(8) 8 scalar 712 Page 22 Source Listing TIME2HOURS 2014-09-16 16:52 w3timemd.f90 718 719 !/ 720 !/ End of module W3TIMEMD -------------------------------------------- / 721 !/ 722 END MODULE W3TIMEMD SYMBOL CROSS REFERENCE Name Object Declared Type Bytes Dimen Elements Attributes References DSEC21@0 Local 282 R(4) 4 scalar JULDAY@0 Local 564 I(4) 4 scalar TIME2HOURS@0 Local 643 R(8) 8 scalar W3TIMEMD Module 2 Page 23 Source Listing TIME2HOURS 2014-09-16 16:52 Subprograms/Common Blocks w3timemd.f90 SUBPROGRAMS/COMMON BLOCKS Name Object Declared Type Bytes Dimen Elements Attributes References CALDAT Subr 608 DSEC21 Func 282 R(4) 4 scalar 386 IYMD21 Func 167 I(4) 4 scalar 131,132,145,152,270 JULDAY Func 564 I(4) 4 scalar 596,599,711 MYMD21 Func 394 I(4) 4 scalar 354,359,373,375,478 STME21 Subr 490 TICK21 Subr 59 TIME2HOURS Func 643 R(8) 8 scalar 712 W3TIMEMD Module 2 COMPILER OPTIONS BEING USED -align nocommons -align nodcommons -align noqcommons -align records -align nosequence -align norec1byte -align norec2byte -align norec4byte -align norec8byte -align norec16byte -altparam -assume accuracy_sensitive -assume nobscc -assume nobuffered_io -assume byterecl -assume nocc_omp -assume nocstring -assume nodummy_aliases -assume nofpe_summary -assume noieee_fpe_flags -assume nominus0 -assume noold_boz -assume old_unit_star -assume old_ldout_format -assume noold_logical_ldio -assume old_maxminloc -assume old_xor -assume protect_constants -assume noprotect_parens -assume split_common -assume source_include -assume nostd_intent_in -assume nostd_mod_proc_name -assume norealloc_lhs -assume underscore -assume no2underscores -auto no -auto_scalar no -bintext -ccdefault default -check noargs -check noarg_temp_created -check nobounds -check noformat -check nooutput_conversion -check nooverflow -check nopointers -check power -check noshape -check nounderflow -check nouninitialized -coarray-num-procs 0 no -coarray-config-file -convert big_endian -cross_reference -D __INTEL_COMPILER=1210 -D __unix__ -D __unix -D __linux__ -D __linux -D __gnu_linux__ -D unix -D linux -D __ELF__ -D __x86_64 -D __x86_64__ -D _MT -D __INTEL_COMPILER_BUILD_DATE=20120612 -D __pentium4 -D __pentium4__ -D __tune_pentium4__ -D __SSE2__ -D __SSE3__ -D __SSSE3__ -D __SSE4_1__ -D __SSE4_2__ -D __SSE__ -D __MMX__ Page 24 Source Listing TIME2HOURS 2014-09-16 16:52 w3timemd.f90 -D __AVX__ -double_size 64 no -d_lines no -Qdyncom -error_limit 30 no -f66 no -f77rtl no -fast -fpscomp nofilesfromcmd -fpscomp nogeneral -fpscomp noioformat -fpscomp noldio_spacing -fpscomp nologicals no -fpconstant -fpe3 -fprm nearest no -ftz -fp_model noprecise -fp_model fast -fp_model nostrict -fp_model nosource -fp_model nodouble -fp_model noextended -fp_model novery_fast -fp_model noexcept -fp_model nono_except -heap_arrays 0 no -threadprivate_compat -free -g0 -iface nomixed_str_len_arg -iface nono_mixed_str_len_arg no -intconstant -integer_size 32 no -mixed_str_len_arg no -module -names lowercase no -noinclude -O2 no -pad_source -real_size 32 no -recursive -reentrancy none no -sharable_localsaves -vec=simd -show noinclude -show map -show options no -syntax_only no -threadcom no -U no -vms -w noall -w nonone -w alignments -w noargument_checking -w nodeclarations -w general -w noignore_bounds -w noignore_loc -w nointerfaces -w notruncated_source -w uncalled -w uninitialized -w nounused -w usage -includepath : /gpfs/gp1/usrx/local/intel/composer_xe_2011_sp1.11.339/compiler/include/,.f,./.f,/usrx/local/intel/composerxe/mkl/include/.f, /usrx/local/intel/composerxe/tbb/include/.f,/gpfs/gp1/usrx/local/intel/composer_xe_2011_sp1.11.339/compiler/include/intel64/.f, /gpfs/gp1/usrx/local/intel/composer_xe_2011_sp1.11.339/compiler/include/.f,/usr/local/include/.f,/usr/lib/gcc/x86_64-redhat-linux/4.4.7/include/.f, /usr/include/.f,/usr/include/.f -list filename : w3timemd.lst -o filename : none COMPILER: Intel(R) Fortran 12.1-2100