//LEVINT JOB NOTIFY=6461 /*SERVICE NONPRIME /*JOBPARM S=149,L=199,R=2048,PRINT=ALL //STEP1 EXEC FORTVCLG,REGION=2048K //FORT.SYSIN DD * C--------------------------------------------------------------------- C********************************************************************* C * C PROGRAM NAME : LEVINT * C FUNCTION : INTERPOLATION OF 1X1 DEGREE LEVITUS DYNAMIC * C TOPOGRAPHY DATA ON 10 X 10 MINUTE GRID USING * C LINEAR INTERPOLATION IN LATITUDE AND LONGITUDE * C DIRECTIONS SUCCESSIVELY * C COMPILER : VS FORTRAN VERSION 2 * C AUTHOR : NICK CHRISTOU * C HISTORY : OCTOBER 23, 1985 - VERSION 1.0 * C********************************************************************* C--------------------------------------------------------------------- IMPLICIT REAL*8 (A-H,O-Z) DIMENSION DLAT(92),DLON(92),DTOP(92) C-------------------------------------------------------------- C THE SETUP OF THE PROGRAM IS TO PERFORM LINEAR INTERPOLATION C IN THE LONGITUDE DIRECTION FIRST. C ALL THE STATEMENTS WITH C2-- CARDS ARE RESERVED FOR THE C LATITUDE INTERPOLATION (SECOND RUN OF THE PROGRAM). C IN THE SECOND RUN THE "LONGITUDE" STATEMENTS SHOULD NOT BE C COMMENTED WHILE THE "LATITUDE" ONES SHOULD C THE OUTPUT FILE OF THE FIRST RUN SHOULD BE SORTED IN SUCH C A WAY AS TO HAVE ALL THE LATITUDE NODES FOR ONE LONGITUDE C-------------------------------------------------------------- PI=3.141592653589793D0 C-------------------------------------------------------------- C SUPPOSE THERE ARE 37 LATITUDE LINES (1ST RUN) C-------------------------------------------------------------- DO 100 J = 1,37 C2-- DO 100 J = 1,546 C-------------------------------------------------------------- C SUPPOSE THERE ARE 92 GRID NODES IN LONGITUDE (1ST RUN) C READ FROM UNIT 11 ONE LATITUDE LINE OF THE 1 X 1 DEGREE FILE C-------------------------------------------------------------- READ(11,1000) (DLAT(I),DLON(I),DTOP(I),I=1,92) C2-- READ(11,1000) (DLAT(I),DLON(I),DTOP(I),I=1,37) C----------------------------------------------------------------- C FIND THE LONGITUDE DIFFERENCE BETWEEN TWO SUCCESSIVE GRID NODES C NODES AND CONVERTED IN A LOCAL CARTESIAN COORDINATE SYSTEM C----------------------------------------------------------------- DELLAM = DLON(2) - DLON(1) DD = 69.041D0 * DCOS((DLAT(1)*PI/180.0D0)) DX = DD * DELLAM C2-- DELPHI = DLAT(2) - DLAT(1) C2-- DY = 69.041D0 * DELPHI C----------------------------------------------------------------- C START DO LOOP FOR LINEAR INTERPOLATION IN THE LONGITUDE C DIRECTION , FIND THE HEIGHT DIFFERENCE BETWEEN TWO CONSEQUTIVE C GRID NODES , DETERMINE SLOPE , AND PERFORM LINEAR INTERPOLATION C THE DEFAULT VALUE OF -9.90 HAS BEEN SET IN THE PROGRAM "LEVITUS" C----------------------------------------------------------------- DO 10 K = 1,91 C2-- DO 10 K = 1,36 DH = DTOP(K+1) - DTOP(K) IF(DTOP(K).EQ.-9.90D0.OR.DTOP(K+1).EQ.-9.90D0) DH = 0.0D0 SLOPE = DH / DX C2-- SLOPE = DH / DY C----------------------------------------------------------------- C DO LOOP FOR 10 X 10 MINUTE GRID, I.E. 6 POINTS IN 1 DEGREE C----------------------------------------------------------------- DO 40 KK = 1,6 DLAM = DLON(K) + ((1.0D0/6.0D0)*(KK-1)) C2-- FLAT = DLAT(K) + ((1.0D0/6.0D0)*(KK-1)) TOP = SLOPE * ((DX/6.0D0) * (KK-1)) C2-- TOP = SLOPE * ((DY/6.0D0) * (KK-1)) HTOP = DTOP(K) + TOP WRITE(6,1000) DLAT(1),DLAM,HTOP C2-- WRITE(6,1000) FLAT,DLON(1),HTOP 40 CONTINUE 10 CONTINUE 100 CONTINUE C-------------------------------------------------------------- 1000 FORMAT(3F12.4) STOP END //GO.FT11F001 DD DSN=A.M12126.LEV25,DISP=SHR //GO.SYSIN DD * //