Hidrológiai Közlöny 1987 (67. évfolyam)
2-3. szám - Gauzer Balázs: Néhány FORTRAN szubrutin hidrológiai adatok elsődleges feldolgozásához
GAUZER B.: Néhány FORTRAN szubrutin 153 ÍSTORAGE:2 FUNCTION MAXDAY(IDAT) DIMENSION IDAT (1), NDAYS(12) DATA NDAYS /31,28,31,30,31,30,31,31, 30,31,30,31/ M=IDAT( 2) IF(M .NE .2) GOTO 1 IF(MOD(IDAT( 3),4).NE. 0) GOTO 1 I F( MOD( IDAT(3),100). NE.0) GOTO 2 I F( MOD( IDAT(3),4 00). EQ .0) GOTO 2 1 MÄXDAY=NDAYS (M ) GOTO 3 2 MAXDAY=29 3 RETURN - END ÍSTORAGE:2 •FUNCTION NDTCHK(IDAT) DIMENSION IDAT(l) C IF(IDAT(3)-1700) 6, 6, 1 1 I F( IDAT(3)-2100) 2, 6, 6 2 IF(IDAT(2)) 6, 6, 3 3 IF(IDAT(2)-12) 4, 4, 6 4 IF(IDAT(1)) 6, 6, 5 5 IF (IDAT (1)-MAXDAYfIDAT )) 6 NDTCHK= 1 GOTO 100 7 NDTCHK=0 100 RETURN END ÍSTORAGE:2 FUNCTION DIMENSION C NDTTST(IDAT1 ,IDAT2 ) IDATl(l), IDAT2 (1 ) IF( IDAT1(3)IDAT2(3)) 3, 1, 5 1 IFCIDAT1(2)IDAT2(2) ) 3, 2, 5 2 IF(IDA >T1(1)-IDAT2(1)) 3, 4, 5 3 NDTTST=-1 GOTO 6 4 NDTTST=0 GOTO 6 o foú'i i''á'i'=l 6 RETURN END ÍSTORAGE:2 FUNCTION NDTDIFtIDAT1 , IDAT2 ) DIMENSION IDATl(l), IDAT2(1), NSDAY(12) DATA NSDAY /0, 31,31,62,92,123,153,184, 215,245,276,306/ C NY1=IDAT1 (3)-1 NY2=IDAT2 (3)-1 NM1=IDAT1 (2) NM2-IDAT2 C 2) N'=NY1-NY2 N=365*N+NYl/4-NY2/4-NY1/100+NY2/100+NY1 /400-NY2/400+ / NSDAY ( NM1 )-NSDAY ( NM2 ) + IDAT 1(1)-1DAT 2(1) IF(NM1 .LE .2) GOTO 1 IDAT1 (2)=2 N=N+MAXDAY(IDAT1 ) IDAT1 (2)=N'M1 1 IF(NM2 .LE. 2) GOTO 2 IDAT2( 2)=2 N=N-MAXDAY(IDAT2) IDAT2 (2)=NM2 2 NDTDIF=N RETURN END 6. ábra. A MAXDA Y, az NDTCHK, az NDTTST és az NDTDIF szubrutin Az NDTSHF szubrutin Adott dátumot adott nappal eltol (7. ábra). Paraméterek: N — A napok száma, amellyel módosítani kívánjuk az adott dátumot. Értéke negatív és pozitív egyaránt lehet. —INP— 1DAT1 — A módosítandó dátumot tartalmazó tömb (nap, hó, óv) —INP— IDAT2 — A módosított dátumot tartalmazó tömb (nap, hó, év) —OUT— Hívott szubrutin: MAXDAY. ÍSTORAGE:2 SUBROUTINE NDTSHF(N, IDAT1 , IDA'1'2) DIMENSION IDATl(l), IDAT2(1) C DO 1 1=1,3 1 IDAT 2( I)-1DAT1(1) NN=IDAT2(1)+N IF(NN) 5, 5, 2 2 NDM=NN-MAXDAY(IDAT2) IF(NDM) 10, 10, 3 3 NN=NDM IDAT2(2)=IDAT2(2)+1 IF(IDAT2(2)-12) 2, 2, 4 4 IDAT2(2)=1 IDAT2(3)=IDAT2(3)+1 GOTO 2 5 IDAT2(2)=IDAT2(2)-1 IF(IDAT2(2) ) 6, 6, 7 " 6 IDAT2(2)=12 IDAT2(3)=IDAT2(3) -1 7 NN = NN fMAXDAY(IDAT2) IF(NN) 5, 5, 10 10 IDAT2 (1) =NÍ1 RETURN END ÍSTORAGE:2 FUNCTION NTMCHK(ITM) DIMENSION ITM(l) C NTMCHK=0 IF(NDTCHK(ITM(3) ) ) 9, 1, 1 IF(ITM(1)) 9, 3, 2 2 IF(ITM(l)-24) 3, 9, 9 3 IF(ITM(2)) 9, 10, 4 4 IF(ITM(2)-60) 10, 9, 9 C 9 NTMCHK=1 10 RETURN END ÍSTORAGE:2 FUNCTION NTMTST-( ITM1, ITM2 ) DIMENSION ITMl(l), ITM2(1) C NTMTST=0 IF(NDTTST(ITM1(3),ITM2(3))) 3, 1, 2 1 IF(ITM1(1)-ITM2(1)) 3, 2, 4 2 IF(ITM1(2)TITM2 ( 2)) 3, 10, 4 3 NTMTST=-1 GOTO 10 4 NTMTST=1 C 10 RETURN END 7. ábra. Az NDTSHF, az NTMCHK, és az NTMTST szubrutin Az NTMCHK, NTMTST NTMDIF és NTMSHF függvények és szubrutinok feladata és működése teljesen megegyezik a fent leírtakkal, a különbség annyi, hogy a műveleteket ezúttal óra, perc, nap,