PROGRAM ETOPO2v2g_to_GRD !by Peter Bird, UCLA, 2022.11.16 IMPLICIT NONE INTEGER*2, DIMENSION(5401, 10801) :: DEM_meters INTEGER :: i, j, k, k1, k2 CHARACTER*8 :: elevation CHARACTER*240 :: group_of_30 ! or, 31 (at end of each row) OPEN (UNIT = 1, FILE = "ETOPO2v2g_i2_MSB.bin", STATUS = "OLD", ACTION = "READ", FORM = "BINARY", CONVERT = "BIG_ENDIAN") READ (UNIT = 1) ((DEM_meters(i, j), j = 1, 10801), i = 1, 5401) CLOSE (1) OPEN (UNIT = 2, FILE = "ETOPO2v2g.grd") WRITE (2, "('-180.0 0.0333333 +180.0 ETOPO2v2g [NOAA National Geophysical Data Center, 2006]')") WRITE (2, "(' -90.0 0.0333333 +90.0 from NOAA, specifically from NCEI (formerly NGDC) in 2022')") DO i = 1, 5401 ! rows, N to S, 2 arc-minutes apart group_of_30 = ' ' ! initialize as empty DO j = 1, 360 ! degrees of longitude, running East from -180 k2 = j * 30 ! most groups have a length of 30 elevations (1 degree) k1 = k2 - 29 IF (j == 360) k2 = k2 + 1 ! creating a group of 31 (including redundant IDL-seam end-cap) DO k = k1, k2 WRITE (elevation, *) DEM_meters(i, k) elevation = ADJUSTL(elevation) IF (k == k1) THEN group_of_30 = TRIM(elevation) ELSE group_of_30 = TRIM(group_of_30) // ' ' // TRIM(elevation) END IF END DO WRITE (2, "(A)") TRIM(group_of_30) END DO END DO CLOSE (2) END PROGRAM ETOPO2v2g_to_GRD