C     ADJUSTMENT OF BUNDLES,     SORTING     JUNE 1978    G.H.S.            2001
C                                                                           2002
C   *****   SORT STEREOCOMPARATOR DATA   ****   MAIN ROUTINE   *****        2003
C                                                                           2004
C   ****************************************************************        2005
C   * SET DIMENSIONS AND 8 CONSTANTS AS FOLLOWS, OR LARGER         *        2006
C   * MPH   IS NUMBER OF PHOTOGRAPHS                               *        2007
C   * MENH  IS NUMBER OF CONTROL AND CHECK POINTS, PLUS ONE        *        2008
C   * MXY   IS MAXIMUM NUMBER OF STEREO POINTS PER STEREOPAIR      *        2009
C   * MID   IS NUMBER OF STEREO POINTS                             *        2010
C   * MIM   IS TWICE MAXIMUM NUMBER OF STEREOPAIRS PER TERRAIN POINT        2011
C   * MTY   IS MAXIMUM NUMBER OF POINTS IN ARRAY LTIE (.LE. MXY)   *        2012
C   * MW    IS BANDWIDTH                                           *        2013
C   * MSP   IS NUMBER OF STEREOPAIRS                               *        2014
C   * LAIR(8,MPH),LPH(4,MPH),LENH(4,MENH),                         *        2015
C   * LXY(5,MXY),ID(MID),LTIE(3,MIM,MTY),LSP(3,MSP)                *        2016
C   * ROT(3,3,MW)                                                  *        2017
C   ****************************************************************        2018
C                                                                           2019
      COMMON INT(16), CLIST(161)                                            2020
      EQUIVALENCE (INT(1),N), (INT(2),NIM), (INT(3),NW), (INT(5),NP),       2021
     1 (LPH(1,1),LTIE(1,1,1)), (LXY(1,1),ROT(1,1,1)), (ID(1),LENH(1,1))     2022
C   ****************************************************************        2023
C     DIMENSIONS FOR CRYSLER TEST BLOCK    STER                                 
C     *********************************                                         
      DIMENSION LAIR(8,30),LPH(4,30),LENH(4,65),                                
     1          LXY(5,18),ID( 350),LTIE(3,12, 6), LSP(3,27)                     
      DOUBLE PRECISION ROT(3,3, 9)                                              
      DATA MPH,MENH,MXY,MID,MIM,MTY,MW,MSP / 30,65,18,350,12,6,9,27 /           
C   ****************************************************************        2030
C                                                                           2031
C     READ PHOTOGRAPH SPECIFICATIONS, READ AIR STATIONS IN DESIRED ORDER    2032
C     WITH APPROXIMATE VALUES OF ALL ORIENTATION PARAMETERS                 2033
      CALL       COMM1 (LAIR,LPH,4,MPH)                                     2034
C                                                                           2035
C     READ, REDUCE, AND SORT IMAGE COORDINATES                              2036
      CALL       STER2 (LXY,MXY, LPH,MPH, LSP,MSP, ID,MID)                  2037
      NSP     = INT(2)                                                      2038
      INT(3)  = MW                                                          2039
      CALL       STER3 (LSP,NSP, ID, LXY,MXY, LTIE,MIM,MTY)                 2040
C                                                                           2041
C     READ GROUND CONTROL AND COMPUTE APPROXIMATE COORDINATES               2042
      CALL       COMM4 (LENH,MENH, LAIR, LTIE,MTY, ROT)                     2043
      STOP 77                                                               2044
      END                                                                   2045
      SUBROUTINE COMM1 (LAIR,LPH,JPH,MPH)                                   1101
C                                                                           1102
C     READ JOB AND PHOTOGRAPH SPECIFICATIONS.                               1103
C     READ AIR STATIONS IN DESIRED ORDER, WITH INITIAL VALUES               1104
C     OF ORIENTATION PARAMETERS                                             1105
C                                                                           1106
      COMMON INT(6),JD31,JD32,JD33,IPR,JW11,JW12,JW13,LFOC,LSC(2),          1107
     1       CLIST(160),DELR                                                1108
      DOUBLE PRECISION FOC,SC(2)                                            1109
      DIMENSION A(19), LAIR(8,MPH),LPH(JPH,MPH)                             1110
      EQUIVALENCE (INT(1),N), (INT(2),KODE),(INT(3),LENS),(INT(4),JTOT),    1111
     1            (INT(6),LIST)                                             1112
C                                                                           1113
    1 FORMAT (19A4, I4, / 24X, 4I8, 20X, I4)                                1114
    2 FORMAT (I4, F4.1, 8F8.1, 4X, I4)                                      1115
    3 FORMAT (8I10)                                                         1116
   11 FORMAT (3H1  19A4// 7H    F = F8.3, 16H, ROTATION CODES I4,           1117
     1        15H, SCALE FACTORS 2F9.5 /)                                   1118
   12 FORMAT (19H    LENS CORRECTION /)                                     1119
   13 FORMAT (50H0   AIR STATIONS AND INITIAL PHOTOGRAPH PARAMETERS /       1120
     1        T7,5HSEQ.# T20,2HPH / (1H 9I10))                              1121
   21 FORMAT (34H0   ERROR IN LENS CORRECTION TABLE)                        1122
   22 FORMAT (19H0   NO AIR STATIONS)                                       1123
   23 FORMAT ( 7H0   THE I4, 28H AIR STATIONS OVERFLOW ARRAY)               1124
C                                                                           1125
C     DEFINE INPUT DEVICES JW, STORAGE DEVICES JD, AND PRINTER IPR          1126
      JW11    = 11                                                          1127
      JW12    = 12                                                          1128
      JW13    = 13                                                          1129
      JD31    = 31                                                          1130
      JD32    = 32                                                          1131
      JD33    = 33                                                          1132
      IPR     = 6                                                           1133
C                                                                           1134
C     READ JOB DESCRIPTION CARD, FOCAL LENGTH, ETC.                         1135
      READ (JW11,1) A, LIST,  LFOC, KODE, LSC, LENS                         1136
      FOC     = 1D-3 * LFOC                                                 1137
      DO 101 J = 1,2                                                        1138
      IF (LSC(J) .EQ. 0) LSC(J) = 100000                                    1139
  101 SC(J)   = LSC(J) * 1D-5                                               1140
      WRITE (IPR,11) A, FOC, KODE, SC                                       1141
      IF (LENS .EQ. 0) GO TO 110                                            1142
C     READ LENS CORRECTION TABLE                                            1143
      DO 104 J1 = 1,160,8                                                   1144
      J2      = J1 + 7                                                      1145
      READ (JW11,2, END=151) JJ, DR, (CLIST(J), J = J1,J2), J3              1146
      IF (J1.GT.1) GO TO 102                                                1147
      JTOT    = JJ                                                          1148
      DELR    = DR                                                          1149
  102 LENS    = LENS + 1                                                    1150
      IF (J3 .NE. LENS) GO TO 151                                           1151
      IF (J2 .GE. JTOT) GO TO 106                                           1152
  104 CONTINUE                                                              1153
      GO TO 151                                                             1154
  106 DO  107  J = 1,JTOT                                                   1155
  107 CLIST(J) = CLIST(J) / (DELR * 1000.)                                  1156
      WRITE (IPR,12)                                                        1157
C                                                                           1158
C     READ IN PROPER SEQUENCE ALL AIR STATIONS                              1159
C     WITH INITIAL VALUES OF ALL PHOTOGRAPH PARAMETERS                      1160
  110 DO 115 N = 1,9999                                                     1161
      IF (N .GT. MPH) GO TO 114                                             1162
      READ (JW11,3, END=116) (LAIR(J,N), J = 1,8)                           1163
      IF (LAIR(1,N) .EQ. 0) GO TO 116                                       1164
      LPH(1,N) = LAIR(1,N)                                                  1165
      DO 112 J = 2,JPH                                                      1166
  112 LPH(J,N) = 0                                                          1167
      GO TO 115                                                             1168
  114 READ (JW11,3, END=116) JJ                                             1169
      IF (JJ .EQ. 0) GO TO 116                                              1170
  115 CONTINUE                                                              1171
  116 N       = N - 1                                                       1172
      IF (N .EQ. 0) GO TO 152                                               1173
      IF (N .GT. MPH) GO TO 153                                             1174
      WRITE (IPR,13) (J2, (LAIR(J1,J2), J1=1,8), J2=1,N)                    1175
      RETURN                                                                1176
C                                                                           1177
C     ERROR MESSAGES                                                        1178
  151 WRITE (IPR,21)                                                        1179
      GO TO 159                                                             1180
  152 WRITE (IPR,22)                                                        1181
      GO TO 159                                                             1182
  153 WRITE (IPR,23) N                                                      1183
  159 STOP 01                                                               1184
      END                                                                   1185
      SUBROUTINE COMM4 (LENH,MENH, LAIR, LTIE,MTY, ROT)                     1801
C                                                                           1802
C     COMPLETE AND STORE ONE RECORD FOR EACH TERRAIN POINT                  1803
      COMMON N,NIM,NW,JNT(2),LIST,JD31,JD32,JD33,IPR,JW11,JW12,JW13,LFOC    1804
      DIMENSION LENH(4,MENH),LAIR(8,N),LTIE(3,NIM,MTY),LTER(4)              1805
      DIMENSION BASE(3),XA(3),XB(3), INT(6)                                 1806
      DOUBLE PRECISION ROT(3,3,NW), ABCD(4),AR,BR,CR,DR                     1807
      EQUIVALENCE (AR,ABCD(1)),(BR,ABCD(2)),(CR,ABCD(3)),(DR,ABCD(4))       1808
      EQUIVALENCE (INT(1),N)                                                1809
    3 FORMAT (8I10)                                                         1810
   71 FORMAT (41H0    POINTS   INITIAL TERRAIN COORDINATES                  1811
     1        / T51,'#' 4X,'IM' )                                           1812
   72 FORMAT (1H 5I10, I6)                                                  1813
   73 FORMAT (1H0 I8,' PLANIMETRIC CONTROL POINTS' / 1H I8,' HEIGHT CONT    1814
     1ROL POINTS' / 1H I8,' CHECK POINTS' / 1H I8,' TERRAIN POINTS' /)      1815
   81 FORMAT (21H0   NO GROUND CONTROL)                                     1816
   82 FORMAT (37H0   GROUND CONTROL OVERFLOWS AT POINT I7)                  1817
   83 FORMAT ( 9H    POINT I8, 26H OCCURS ONLY IN PHOTOGRAPH I8)            1818
   84 FORMAT (49H    POINT 7777 NOT USED AS CONTROL OR CHECK POINT)         1819
C                                                                           1820
      ITER    = 0                                                           1821
      WRITE (JD31) ITER, (INT(J),J=1,3), LFOC,                              1822
     1             ((LAIR(J1,J2), J1=1,8), J2=1,N)                          1823
C                                                                           1824
C     READ GROUND COORDINATES, CHECK ON OVERFLOW                            1825
      LL1     = 0                                                           1826
      J       = 0                                                           1827
  401 J       = J + 1                                                       1828
      IF (J .GT. MENH) GO TO 492                                            1829
  402 READ (JW13,3, END=405) (LENH(J1,J), J1 = 1,4)                         1830
      IF (INT(5).GT.0 .OR. LENH(1,J).NE.7777) GO TO 403                     1831
      WRITE (IPR,84)                                                        1832
      GO TO 402                                                             1833
  403 IF (LENH(1,J) .GT. 0) GO TO 401                                       1834
      IF (LL1 .NE. 0) GO TO 405                                             1835
      LL1     = J - 1                                                       1836
      GO TO 402                                                             1837
C                                                                           1838
  405 LL2     = J - 1                                                       1839
      IF (LL1 .EQ. 0) LL1 = LL2                                             1840
      IF (LL1 .EQ. 0) GO TO 491                                             1841
C                                                                           1842
      IF (LIST .GT. 0) WRITE (IPR,71)                                       1843
      LG1     = 0                                                           1844
      LG2     = 0                                                           1845
      LG3     = 0                                                           1846
C                                                                           1847
C     READ AND PROCESS ONE RECORD                                           1848
      KK      = 0                                                           1849
      KKMAX   = N - NW + 1                                                  1850
  410 READ (JD33,END=480) K,MZ,MT, (((LTIE(J,M1,M2),J=1,3),M1=1,MZ),        1851
     1 M2=1,MT)                                                             1852
      IF (KK .EQ. KKMAX .OR. K .EQ. KK) GO TO 430                           1853
C                                                                           1854
C     COMPUTE AND STORE THE ORIENTATION MATRICES                            1855
      IF (KK .NE. 0) GO TO 421                                              1856
      KK      = K                                                           1857
      L1      = 1                                                           1858
      GO TO 425                                                             1859
C     SHIFT THE AVAILABLE MATRICES                                          1860
  421 INCR    = K - KK                                                      1861
      IF ((KKMAX-KK) .LT. INCR) INCR = KKMAX - KK                           1862
      KK      = KK + INCR                                                   1863
      M1      = INCR + 1                                                    1864
      DO 422 J2 = M1,NW                                                     1865
      M2      = J2 - INCR                                                   1866
      DO 422 J1 = 1,3                                                       1867
      DO 422 J  = 1,3                                                       1868
  422 ROT(J,J1,M2) = ROT(J,J1,J2)                                           1869
      L1      = NW - INCR + 1                                               1870
C     FORM THE MISSING MATRICES                                             1871
  425 DO 428 L = L1,NW                                                      1872
      J       = L + KK - 1                                                  1873
      DO 426 J1 = 1,4                                                       1874
  426 ABCD(J1) = LAIR(J1+4,J) * 1D-7                                        1875
      ROT(2,3,L) = 2D0*(BR*CR - AR*DR)                                      1876
      ROT(3,1,L) = 2D0*(CR*AR - BR*DR)                                      1877
      ROT(1,2,L) = 2D0*(AR*BR - CR*DR)                                      1878
      ROT(3,2,L) = 2D0*(BR*CR + AR*DR)                                      1879
      ROT(1,3,L) = 2D0*(CR*AR + BR*DR)                                      1880
      ROT(2,1,L) = 2D0*(AR*BR + CR*DR)                                      1881
      DO 427 J1 = 1,4                                                       1882
  427 ABCD(J1) = ABCD(J1)**2                                                1883
      ROT(1,1,L) = DR + AR - BR - CR                                        1884
      ROT(2,2,L) = DR - AR + BR - CR                                        1885
  428 ROT(3,3,L) = DR - AR - BR + CR                                        1886
C                                                                           1887
C     PROCESS THE TERRAIN POINTS IN THE RECORD, ONE AT A TIME               1888
  430 DO 479 M2 = 1,MT                                                      1889
      LTER(1) = LTIE(1,1,M2)                                                1890
      LTIE(1,1,M2) = K                                                      1891
      DO 431 M1 = 1,MZ                                                      1892
      IF (LTIE(1,M1,M2) .EQ. 0) GO TO 432                                   1893
  431 CONTINUE                                                              1894
      M1      = MZ + 1                                                      1895
  432 M1      = M1 - 1                                                      1896
C                                                                           1897
C     SEARCH FOR GIVEN GROUND COORDINATES                                   1898
      DO 441 L = 1,LL2                                                      1899
      IF (LTER(1) .EQ. LENH(1,L)) GO TO 445                                 1900
  441 CONTINUE                                                              1901
      L       = 0                                                           1902
      DO 442 J1 = 2,4                                                       1903
  442 LTER(J1) = 0                                                          1904
  443 IF (M1 .GT. 1) GO TO 450                                              1905
  444 WRITE (IPR,83) LTER(1), LAIR(1,K)                                     1906
      GO TO 479                                                             1907
  445 DO 446 J1 = 2,4                                                       1908
  446 LTER(J1) = LENH(J1,L)                                                 1909
      IF (LTER(3).EQ.0 .OR. LTER(4).EQ.0) GO TO 443                         1910
      IF (M1.EQ.1 .AND. L.GT.LL1) GO TO 444                                 1911
      GO TO 460                                                             1912
C                                                                           1913
C     COMPUTE APPROXIMATE COORDINATES                                       1914
C     BASE AND VECTORS TO PHOTO POINTS                                      1915
  450 J       = LTIE(1,2,M2)                                                1916
      JL      = K - KK + 1                                                  1917
      JR      = J - KK + 1                                                  1918
      DO 451 J1 = 1,3                                                       1919
  451 BASE(J1) = LAIR(J1+1,J) - LAIR(J1+1,K)                                1920
      DO 452 J = 1,3                                                        1921
      XA(J) = ROT(J,1,JL)*LTIE(2,1,M2) + ROT(J,2,JL)*LTIE(3,1,M2) -         1922
     1        ROT(J,3,JL)*1D6                                               1923
  452 XB(J) = ROT(J,1,JR)*LTIE(2,2,M2) + ROT(J,2,JR)*LTIE(3,2,M2) -         1924
     1        ROT(J,3,JR)*1D6                                               1925
C     CROSS PRODUCTS                                                        1926
      D1      = XA(2) * XB(3) - XA(3) * XB(2)                               1927
      D2      = XA(3) * XB(1) - XA(1) * XB(3)                               1928
      D3      = XA(1) * XB(2) - XA(2) * XB(1)                               1929
      DD      = D1*D1 + D2*D2 + D3*D3                                       1930
      D4      = BASE(2) * XB(3) - BASE(3) * XB(2)                           1931
      D5      = BASE(3) * XB(1) - BASE(1) * XB(3)                           1932
      D6      = BASE(1) * XB(2) - BASE(2) * XB(1)                           1933
      D7      = (D4*D1 + D5*D2 + D6*D3) / DD                                1934
      D8      = .5   * (BASE(1)*D1 + BASE(2)*D2 + BASE(3)*D3) / DD          1935
C     TAG GROUND CONTROL AND INSERT APPROXIMATE COORDINATES                 1936
      IF (LTER(3) .EQ. 0) GO TO 461                                         1937
  460 LTER(1) = LTER(1) + 2000000                                           1938
      IF (L .LE. LL1) LG1 = LG1 + 1                                         1939
      GO TO 462                                                             1940
  461 LTER(2) = LAIR(2,K) + D7 * XA(1) + D8 * D1                            1941
      LTER(3) = LAIR(3,K) + D7 * XA(2) + D8 * D2                            1942
  462 IF (LTER(4) .EQ. 0) GO TO 463                                         1943
      LTER(1) = LTER(1) + 1000000                                           1944
      IF (L .LE. LL1) LG2 = LG2 + 1                                         1945
      GO TO 466                                                             1946
  463 LTER(4) = LAIR(4,K) + D7 * XA(3) + D8 * D3                            1947
  466 IF (L .LE. LL1) GO TO 467                                             1948
      LTER(1) = LTER(1) + 3000000                                           1949
      LG3     = LG3 + 1                                                     1950
  467 IF (LIST .GT. 0) WRITE (IPR,72) LTER, K, M1                           1951
C                                                                           1952
C     WRITE ONE RECORD FOR EACH TERRAIN POINT                               1953
      WRITE (JD31) LTER, M1, ((LTIE(J,J1,M2),J=1,3),J1=1,M1)                1954
  479 CONTINUE                                                              1955
      GO TO 410                                                             1956
C                                                                           1957
  480 END FILE JD31                                                         1958
      REWIND JD31                                                           1959
      REWIND JD33                                                           1960
      WRITE (IPR,73) LG1, LG2, LG3, INT(4)                                  1961
      RETURN                                                                1962
C                                                                           1963
C     ERROR MESSAGES                                                        1964
  491 WRITE (IPR,81)                                                        1965
      GO TO 499                                                             1966
  492 WRITE (IPR,82) LENH(1,MENH)                                           1967
  499 STOP 04                                                               1968
      END                                                                   1969
      SUBROUTINE STER2 (LXY,MXY, LPH,MPH, LSP,MSP, ID,MID)                  2201
C                                                                           2202
C     READ STEREOCOMPARATOR COORD., COMPUTE REDUCED PHOTOGRAPH COORD.       2203
C     CONSTRUCT ONE RECORD WITH REDUCED COORDINATES FOR EACH STEREOPAIR     2204
C                                                                           2205
      COMMON INT(6),JD31,JD32,JD33,IPR,JW11,JW12,JW13,LFOC,LSC(2),          2206
     1       CLIST(160),DELR                                                2207
      DOUBLE PRECISION S(2,2),FREC,T,W(2),ROUND                             2208
      DIMENSION L(3,3),LXY(5,MXY),LPH(4,MPH),LSP(3,MSP),ID(MID),            2209
     1          LPPX(2),LPPY(2),JSP(2)                                      2210
      EQUIVALENCE (INT(1),N), (INT(2),KODE),(INT(3),LENS),(INT(4),JTOT),    2211
     1            (INT(5),NP),(INT(6),LIST)                                 2212
      FREC    = 1D0 / (1D-3 * LFOC)                                         2213
C                                                                           2214
    8 FORMAT (10I8)                                                         2215
   31 FORMAT (15H0   STEREOPAIRS / T9,'#' T17,'#' T28,'PH' T38,'PH')        2216
   32 FORMAT (1H 2I8, 2X, 2I10)                                             2217
   33 FORMAT (15H0   PHOTOGRAPHS  T27,'CODES' T38,'SCALE FACTORS' /         2218
     1        T11, '#' T20, 'PH' / (1H 5I10))                               2219
   34 FORMAT (1H0 I8, 12H STEREOPAIRS / I9, 13H STEREOPOINTS)               2220
   40 FORMAT (27H0   NO MEASURED COORDINATES)                               2221
   41 FORMAT (23H0   MEASURED PHOTOGRAPH I8, 19H HAS NO AIR STATION)        2222
   42 FORMAT (15H0   AIR STATION I8, 27H HAS NO MEASURED PHOTOGRAPH)        2223
   43 FORMAT (16H0   INVALID CODE I3, 21H FOR ROTATION OF AXES)             2224
   44 FORMAT (33H0   NO STEREOPOINTS IN STEREOPAIR I8)                      2225
   45 FORMAT (39H0   TOO MANY STEREOPOINTS IN STEREOPAIR I8)                2226
   46 FORMAT (35H0   TOO MANY STEREOPOINTS IN BLOCK: I4)                    2227
   47 FORMAT (32H0   NO SPACE FOR NEXT STEREOPAIR)                          2228
   48 FORMAT (16H    POINT NUMBER I8, 27H IS DUPLICATE IN STEREOPAIR I8)    2229
   49 FORMAT ( 9H    POINT I7, 14H IN PHOTOGRAPH I8,                        2230
     1        42H IS OUTSIDE RANGE OF LENS CORRECTION TABLE)                2231
C                                                                           2232
C     FOR EACH STEREOPAIR, READ FIRST THE PRINCIPAL POINTS                  2233
C     THEN THE MEASURED POINTS, ONE PER CARD                                2234
C     NO SEPARATION BETWEEN SETS OF CARDS FOR DIFFERENT STEREOPAIRS         2235
C     END OF DECK OR BLANK CARD ENDS READING                                2236
      WRITE (IPR,31)                                                        2237
      MISS    = 0                                                           2238
      NSP     = 1                                                           2239
      NP      = 0                                                           2240
      MODL    = 0                                                           2241
  205 READ (JW12, 8, END=240) JPAIR, ((L(J1,J2), J1 = 1,3), J2 = 1,3)       2242
      IF (JPAIR .EQ. MODL) GO TO 230                                        2243
      IF (MODL .NE. 0) GO TO 250                                            2244
C                                                                           2245
C     PROCESS PRINCIPAL POINTS CARD                                         2246
  210 MODL    = JPAIR                                                       2247
      IF (L(1,3) .NE. 0) KODE = L(1,3)                                      2248
      DO 215 J1 = 1,2                                                       2249
      IF (L(J1+1,3) .NE. 0) LSC(J1) = L(J1+1,3)                             2250
      LPPX(J1) = L(2,J1)                                                    2251
      LPPY(J1) = L(3,J1)                                                    2252
C     FIND THE SEQUENCE NUMBERS OF THE TWO PHOTOGRAPHS,                     2253
      DO 213 J2 = 1,N                                                       2254
      IF (L(1,J1) .EQ. LPH(1,J2)) GO TO 214                                 2255
  213 CONTINUE                                                              2256
      WRITE (IPR,41) L(1,J1)                                                2257
      MISS    = MISS + 1                                                    2258
      GO TO 215                                                             2259
  214 JSP(J1) = J2                                                          2260
      IF (LPH(2,J2) .EQ. 0) LPH(2,J2) = KODE                                2261
      IF (LPH(2,J2) .NE. KODE) GO TO 293                                    2262
  215 CONTINUE                                                              2263
C                                                                           2264
C     PREPARE TO PLACE THE TWO PHOTOGRAPHS IN PROPER SEQUENCE               2265
      L4      = 1                                                           2266
      L5      = 2                                                           2267
      IF (JSP(1) .LT. JSP(2)) GO TO 217                                     2268
      L4      = 2                                                           2269
      L5      = 1                                                           2270
C     STORE SEQUENCE NUMBERS AND PHOTOGRAPH NUMBERS                         2271
C     INTERCHANGES ARE MADE HERE                                            2272
  217 LSP(1,NSP) = JSP(L4)                                                  2273
      LSP(2,NSP) = JSP(L5)                                                  2274
      LSP(3,NSP) = NSP                                                      2275
      JSP(1)  = L(1,L4)                                                     2276
      JSP(2)  = L(1,L5)                                                     2277
C     STORE SCALE FACTORS                                                   2278
      DO 218 J = 1,2                                                        2279
      J2      = LSP(J,NSP)                                                  2280
      DO 218 J1 = 3,4                                                       2281
      IF (LPH(J1,J2) .EQ. 0) LPH(J1,J2) = LSC(J1-2)                         2282
  218 S(J1-2,J) = LPH(J1,J2) * 1D-8                                         2283
C                                                                           2284
C     PREPARE FOR CHANGE TO U,V COORDINATES                                 2285
      L2      = 2                                                           2286
      L3      = 3                                                           2287
      JU      = KODE / 10                                                   2288
      JV      = KODE - 10 * JU                                              2289
      IF (JU.GT.4 .OR. JV.GT.4) GO TO 293                                   2290
      JU      = JU + 1                                                      2291
      JV      = JV + 1                                                      2292
      GO TO (221, 222, 221, 222, 221), JU                                   2293
  221 GO TO (225, 293, 225, 293, 225), JV                                   2294
  222 GO TO (293, 223, 293, 223, 293), JV                                   2295
  223 L2      = 3                                                           2296
      L3      = 2                                                           2297
C     CHANGE OF POSITIVE DIRECTIONS                                         2298
  225 DO 226 J = 1,2                                                        2299
      IF (JU.EQ.3 .OR. JU.EQ.4) S(1,J) = -S(1,J)                            2300
      IF (JV.EQ.2 .OR. JV.EQ.3) S(2,J) = -S(2,J)                            2301
  226 CONTINUE                                                              2302
      L1      = 0                                                           2303
      GO TO 205                                                             2304
C                                                                           2305
C     STORE IMAGE POINTS IN ARRAY LXY, CHANGE DUPLICATE POINT NUMBERS       2306
C     SHIFT ORIGIN AND MAKE REQUIRED INTERCHANGES                           2307
  230 IF (L1 .EQ. 0) GO TO 233                                              2308
      IF (L(1,1) .EQ. 7777) GO TO 232                                       2309
      DO 231 J = 1,L1                                                       2310
      IF (L(1,1) .NE. LXY(1,J)) GO TO 231                                   2311
      IF (LIST.GT.0) WRITE (IPR,48) L(1,1), MODL                            2312
      L(1,1)  = 7777                                                        2313
      GO TO 232                                                             2314
  231 CONTINUE                                                              2315
  232 IF (L1 .EQ. MXY) GO TO 295                                            2316
  233 L1      = L1 + 1                                                      2317
C     TO ADD PARALLAXES ON THE RIGHT TO COORDINATES ON THE LEFT, INSERT     2318
C     L(2,2)  = L(2,1) + L(2,2)                                             2319
C     L(3,2)  = L(3,1) + L(3,2)                                             2320
C     INTERCHANGE OF LEFT AND RIGHT PHOT. COORD. IS MADE HERE               2321
      LXY(1,L1)  = L(1,1)                                                   2322
      LXY(2,L1) = L(2,L4) - LPPX(L4)                                        2323
      LXY(3,L1) = L(3,L4) - LPPY(L4)                                        2324
      LXY(4,L1) = L(2,L5) - LPPX(L5)                                        2325
      LXY(5,L1) = L(3,L5) - LPPY(L5)                                        2326
      GO TO 205                                                             2327
C                                                                           2328
  240 IF (MODL .EQ. 0) GO TO 290                                            2329
      JPAIR   = -1                                                          2330
C                                                                           2331
C     PROCESS THE POINTS IN ONE STEREOPAIR                                  2332
  250 IF (L1 .EQ. 0) GO TO 294                                              2333
      DO 259 J3 = 1,L1                                                      2334
      DO 259 J1 = 1,2                                                       2335
      J2      = J1 + J1                                                     2336
C     X,Y COORDINATE INTERCHANGE IS MADE HERE                               2337
      W(L2-1) = LXY(J2,J3) * S(1,J1)                                        2338
      W(L3-1) = LXY(J2+1,J3) * S(2,J1)                                      2339
      T       = 0.                                                          2340
      IF (LENS .EQ. 0) GO TO 253                                            2341
      T1      = W(1)**2 + W(2)**2                                           2342
      T2      = T1**.5 + 1E-7                                               2343
      J       = T2 / DELR + 1.                                              2344
      IF (J .LT. JTOT) GO TO 252                                            2345
      WRITE (IPR,49) LXY(1,J3), JSP(J1)                                     2346
      GO TO 253                                                             2347
  252 T3      = DELR * J - T2                                               2348
      T       = (T3*CLIST(J) + (DELR-T3)*CLIST(J+1)) / T2                   2349
  253 DO 254 J = 1,2                                                        2350
      J2      = J1 + J1 + J - 1                                             2351
      W(J)    = (W(J) + W(J) * T) * FREC                                    2352
      ROUND   = .5D0                                                        2353
      IF (W(J) .LT. 0) ROUND = - ROUND                                      2354
  254 LXY(J2,J3) = W(J) * 1D6 + ROUND                                       2355
  259 CONTINUE                                                              2356
C                                                                           2357
C     STORE THE DATA, ONE RECORD PER STEREOPAIR                             2358
      WRITE (JD33) L1, ((LXY(J1,J2), J1=1,5), J2=1,L1)                      2359
      WRITE (IPR,32) (LSP(J,NSP), J=1,2), (JSP(J), J=1,2)                   2360
      NP      = NP + L1                                                     2361
      IF (JPAIR .LE. 0) GO TO 260                                           2362
      NSP     = NSP + 1                                                     2363
      IF (NSP .GT. MSP) GO TO 297                                           2364
      GO TO 210                                                             2365
C                                                                           2366
C     CHECK WHETHER ALL PHOTOGRAPHS IN LPH HAVE BEEN MEASURED               2367
  260 DO 262 J1 = 1,N                                                       2368
      DO 261 J2 = 1,NSP                                                     2369
      DO 261 J = 1,2                                                        2370
      IF (J1 .EQ. LSP(J,J2)) GO TO 262                                      2371
  261 CONTINUE                                                              2372
      WRITE (IPR,42) LPH(1,J1)                                              2373
      MISS    = MISS + 1                                                    2374
  262 CONTINUE                                                              2375
      WRITE (IPR,33) (J2, (LPH(J1,J2), J1=1,4), J2=1,N)                     2376
      IF (MISS .GT. 0) GO TO 299                                            2377
      INT(2)  = NSP                                                         2378
      END FILE JD33                                                         2379
      REWIND JD33                                                           2380
      IF (NP .GT. MID) GO TO 296                                            2381
C                                                                           2382
C     SORT STEREOPAIRS IN SEQUENCE FOR ADJUSTMENT                           2383
      NP      = 0                                                           2384
      J       = 1                                                           2385
      L3      = 1                                                           2386
      DO 279 J1 = 1,N                                                       2387
      L2      = L3                                                          2388
      DO 278 J2 = L2,NSP                                                    2389
      IF (LSP(1,J2) .NE. J1) GO TO 278                                      2390
      IF (J2 .EQ. L3) GO TO 272                                             2391
      DO 271 L4 = 1,3                                                       2392
      MOVE    = LSP(L4,J2)                                                  2393
      LSP(L4,J2) = LSP(L4,L3)                                               2394
  271 LSP(L4,L3) = MOVE                                                     2395
  272 IF (LSP(3,L3) - J) 273, 275, 274                                      2396
  273 BACKSPACE JD33                                                        2397
      J       = J - 1                                                       2398
      GO TO 272                                                             2399
  274 READ (JD33)                                                           2400
      J       = J + 1                                                       2401
      GO TO 272                                                             2402
  275 READ (JD33) L1, ((LXY(L4,L5), L4=1,5), L5=1,L1)                       2403
      J       = J + 1                                                       2404
      WRITE (JD32) L3, L1, ((LXY(L4,L5), L4 = 1,5), L5 = 1,L1)              2405
C                                                                           2406
C     STORE POINT NUMBERS IN ARRAY ID                                       2407
      DO 277 L4 = 1,L1                                                      2408
      NP      = NP + 1                                                      2409
  277 ID(NP)  = LXY(1,L4)                                                   2410
      LSP(3,L3) = NP                                                        2411
      L3      = L3 + 1                                                      2412
      IF (L3 .GT. NSP) GO TO 280                                            2413
  278 CONTINUE                                                              2414
  279 CONTINUE                                                              2415
C                                                                           2416
  280 WRITE (IPR,34) NSP, NP                                                2417
      END FILE JD32                                                         2418
      REWIND JD32                                                           2419
      REWIND JD33                                                           2420
      RETURN                                                                2421
C                                                                           2422
C     ERROR MESSAGES                                                        2423
  290 WRITE (IPR,40)                                                        2424
      GO TO 299                                                             2425
  293 WRITE (IPR,43) KODE                                                   2426
      GO TO 299                                                             2427
  294 WRITE (IPR,44) MODL                                                   2428
      GO TO 299                                                             2429
  295 WRITE (IPR,45) MODL                                                   2430
      GO TO 299                                                             2431
  296 WRITE (IPR,46) NP                                                     2432
      GO TO 299                                                             2433
  297 WRITE (IPR,47)                                                        2434
  299 STOP 02                                                               2435
      END                                                                   2436
      SUBROUTINE STER3 (LSP,NSP, ID, LXY,MXY, LTIE,MIM,MTY)                 2501
C                                                                           2502
C     FOR EACH TERRAIN POINT, CODE INFORMATION ON EACH IMAGE POINT          2503
C     AND PLACE IN ARRAY LTIE                                               2504
C                                                                           2505
      COMMON N,NIM,NW,MTOT,NP,LIST, JD31,JD32,JD33,IPR,JW(3), LFOC          2506
      DOUBLE PRECISION REC                                                  2507
      DIMENSION ID(NP), LXY(5,MXY), LSP(3,NSP), LTIE(3,MIM,MTY)             2508
      DIMENSION LLL(4), INT(6)                                              2509
      EQUIVALENCE (INT(1),N)                                                2510
   50 FORMAT (17H0    PH.#   POINT T26,'DIFFERENCES')                       2511
   51 FORMAT (33H0   STEREOPAIRS WITH STEREOPOINTS / T9,'#' T17,'#')        2512
   52 FORMAT (1H 2I8, (1H T24, 12I8))                                       2513
   53 FORMAT (22H0   A MAXIMUM OF NIM = I3, 25H IMAGES PER TERRAIN POINT    2514
     1      / 27H    REQUIRED BANDWIDTH NW = I3)                            2515
   61 FORMAT (9H0   POINT I8, 23H, FIRST IN PHOTOGRAPH # I4,                2516
     1        24H, OCCURS MORE THAN MIM = I3, 6H TIMES)                     2517
   62 FORMAT (9H0   POINT I8, 23H, FIRST IN PHOTOGRAPH # I4,                2518
     1        26H, OVERFLOWS BANDWIDTH MW = I3)                             2519
      F       = LFOC * 1E-6                                                 2520
      IF (LIST .GT. 0) WRITE (IPR,50)                                       2521
C                                                                           2522
      MW      = INT(3)                                                      2523
      DO 301 J = 2,4                                                        2524
  301 INT(J) = 0                                                            2525
      KK      = 0                                                           2526
      JSUM    = 0                                                           2527
      L2      = 0                                                           2528
C                                                                           2529
C     FOR EACH STEREOPAIR,                                                  2530
      DO 379 K1 = 1,NSP                                                     2531
      K       = LSP(1,K1)                                                   2532
      LST     = K + 2*MW - 1                                                2533
      IF (LST .GT. N) LST = N                                               2534
      K11     = K1 + 1                                                      2535
      LL      = L2 + 1                                                      2536
      L       = L2                                                          2537
      L2      = LSP(3,K1)                                                   2538
C                                                                           2539
C     AT FIRST OCCURRENCE OF A TERRAIN POINT, STORE IN ARRAY LTIE           2540
C     POINT NUMBER AND POINT SEQ.#                                          2541
  310 L1      = L + 1                                                       2542
      MT      = 0                                                           2543
      DO 329 L = L1,L2                                                      2544
      IF (ID(L) .LE. 0) GO TO 329                                           2545
      IF (MT .GT. 0) GO TO 311                                              2546
      KMAX    = LSP(2,K1)                                                   2547
      KKMAX   = K1                                                          2548
      MZZ     = 2                                                           2549
  311 M1      = 2                                                           2550
      MT      = MT + 1                                                      2551
      LTIE(1,1,MT) = ID(L)                                                  2552
      LTIE(2,1,MT) = L - (LL - 1)                                           2553
      IF (K1.EQ.NSP .OR. ID(L).EQ.7777) GO TO 326                           2554
C                                                                           2555
C     SEARCH FOR POINT NUMBER IN FOLLOWING STEREOPAIRS,                     2556
C     RECORD EACH OCCURRENCE BY STEREOPAIR SEQ.# AND POINT SEQ.#            2557
      DO 325 J2 = K11,NSP                                                   2558
      IF (LSP(1,J2) .GT. LST) GO TO 326                                     2559
      L3      = LSP(3,J2-1) + 1                                             2560
      L4      = LSP(3,J2)                                                   2561
      DO 325 J = L3,L4                                                      2562
      IF (ID(J) .NE. ID(L)) GO TO 325                                       2563
      M1      = M1 + 2                                                      2564
      J3      = LSP(2,J2)                                                   2565
      IF (J2 .GT. KKMAX) KKMAX = J2                                         2566
      IF (J3 .GT. KMAX) KMAX = J3                                           2567
      IF (M1.LE.MIM .AND. KMAX.LT.K+MW) GO TO 323                           2568
      IF (M1 .GT. MIM) WRITE (IPR,61) ID(L), K, MIM                         2569
      IF (J3-K .GE. MW)  WRITE (IPR,62) ID(L), K, MW                        2570
      JSUM    = JSUM + 1                                                    2571
      GO TO 324                                                             2572
  323 LTIE(1,M1-1,MT) = J2                                                  2573
      LTIE(2,M1-1,MT) = J - (L3 - 1)                                        2574
  324 ID(J)   = -ID(J)                                                      2575
  325 CONTINUE                                                              2576
C                                                                           2577
C     COMPLETE PROCESSING OF A TERRAIN POINT                                2578
C     MZZ IS REQUIRED SECOND DIMENSION OF LTIE                              2579
  326 ID(L)   = -ID(L)                                                      2580
      IF (M1 .GT. MZZ) MZZ = M1                                             2581
      IF (M1 .EQ. MIM) GO TO 328                                            2582
      J2      = M1 + 1                                                      2583
      DO 327 J = J2,MIM                                                     2584
  327 LTIE(1,J,MT) = 7777                                                   2585
  328 IF (MT . EQ. MTY) GO TO 330                                           2586
  329 CONTINUE                                                              2587
      L       = L2                                                          2588
      IF (MT .EQ. 0) GO TO 379                                              2589
C                                                                           2590
C     INSERT REDUCED COORDINATES OF ALL TERRAIN POINTS IN ARRAY LTIE        2591
C                                                                           2592
C     FIRST, UPDATE COUNTERS IN ARRAY INT                                   2593
C     K AND KMAX ARE SEQUENCE NUMBERS OF FIRST AND LAST PHOTOGRAPH,         2594
C     MT IS NUMBER OF TERRAIN POINTS COLLECTED IN LTIE                      2595
  330 IF (KMAX-K .GE. NW)  NW = KMAX - K + 1                                2596
      INT(4)  = INT(4) + MT                                                 2597
C                                                                           2598
C     SEARCH ARRAY LTIE FOR POINTS THAT BELONG TO RECORD KK                 2599
      J1      = 1                                                           2600
      DO 349 J3 = K1,KKMAX                                                  2601
      DO 348 J2 = 1,MT                                                      2602
      IF (J3 .EQ. K1) GO TO 340                                             2603
  335 DO 336 J1 = 3,MZZ,2                                                   2604
      IF (LTIE(1,J1,J2) - J3) 336, 340, 348                                 2605
  336 CONTINUE                                                              2606
      GO TO 348                                                             2607
C     READ NEEDED RECORD OF STEREOPAIR J3 INTO ARRAY LXY                    2608
  340 IF (J3 .EQ. KK) GO TO 345                                             2609
  341 IF (KK+1 - J3) 342, 344, 343                                          2610
  342 READ (JD32)                                                           2611
      KK      = KK + 1                                                      2612
      GO TO 341                                                             2613
  343 BACKSPACE JD32                                                        2614
      KK      = KK - 1                                                      2615
      GO TO 341                                                             2616
  344 READ (JD32) KK,JJ, ((LXY(J,JJ1), J=1,5), JJ1=1,JJ)                    2617
  345 J       = LTIE(2,J1,J2)                                               2618
      DO 346 JJ = 2,3                                                       2619
      LTIE(JJ,J1,J2) = LXY(JJ,J)                                            2620
  346 LTIE(JJ,J1+1,J2) = LXY(JJ+2,J)                                        2621
      IF (J1 .GT. 1) LTIE(1,J1,J2) = -LSP(1,KK)                             2622
      LTIE(1,J1+1,J2) = LSP(2,KK)                                           2623
  348 CONTINUE                                                              2624
  349 CONTINUE                                                              2625
C     CHANGE NEGATIVE PHOTOGRAPH SEQUENCE NUMBERS TO POSITIVE               2626
      DO 332 J2 = 1,MT                                                      2627
      DO 331 J1 = 3,MZZ,2                                                   2628
      IF (LTIE(1,J1,J2)) 331, 332, 332                                      2629
  331 LTIE(1,J1,J2) = -LTIE(1,J1,J2)                                        2630
  332 CONTINUE                                                              2631
C                                                                           2632
C     FOR EACH TERRAIN POINT, SORT IMAGES IN SEQUENCE OF PHOTOGRAPHS AND    2633
C     ELIMINATE DUPLICATE MEASUREMENTS BY TAKING THE MEAN                   2634
      MZ      = 1                                                           2635
      DO 377 JJ = 1,MT                                                      2636
      NXTPH   = K                                                           2637
      JJ1     = 1                                                           2638
      LAST    = MZZ                                                         2639
      DO 369 NXTLOC = 1,MZZ                                                 2640
  351 IF (LTIE(1,LAST,JJ) .LT. 7777) GO TO 352                              2641
      LAST    = LAST - 1                                                    2642
      GO TO 351                                                             2643
  352 IF (NXTLOC.GE.LAST .OR. LAST.EQ.2) GO TO 370                          2644
      IF (NXTLOC .EQ. 1) GO TO 360                                          2645
C     FIND NEXT NEEDED IMAGE POINT,                                         2646
      NXTPH   = N + 1                                                       2647
      DO 353 J1 = NXTLOC,LAST                                               2648
      J2      = LTIE(1,J1,JJ)                                               2649
      IF (J2 .GE. NXTPH) GO TO 353                                          2650
      NXTPH   = J2                                                          2651
      JJ1     = J1                                                          2652
  353 CONTINUE                                                              2653
      IF (JJ1 .EQ. NXTLOC) GO TO 360                                        2654
C     SHIFT INTO NEXT POSITION                                              2655
      DO 354 J1 = 1,3                                                       2656
      LOC     = LTIE(J1,JJ1,JJ)                                             2657
      LTIE(J1,JJ1,JJ) = LTIE(J1,NXTLOC,JJ)                                  2658
  354 LTIE(J1,NXTLOC,JJ) = LOC                                              2659
      IF (JJ1 .EQ. LAST) GO TO 369                                          2660
C     SEARCH FOR DUPLICATES                                                 2661
  360 KOUNT   = 1                                                           2662
      L3      = NXTLOC + 1                                                  2663
      DO 365 J2 = L3,LAST                                                   2664
      IF (LTIE(1,J2,JJ) .NE. NXTPH) GO TO 365                               2665
      DO 362 J = 2,3                                                        2666
      LLL(J+1) = (LTIE(J,J2,JJ) - LTIE(J,NXTLOC,JJ)) * F + .5               2667
      IF (LLL(J+1) .LT. 0) LLL(J+1) = LLL(J+1) - 1                          2668
  362 LTIE(J,NXTLOC,JJ) = LTIE(J,NXTLOC,JJ) + LTIE(J,J2,JJ)                 2669
      IF (LIST .LE. 0) GO TO 364                                            2670
      LLL(1)  = NXTPH                                                       2671
      LLL(2)  = LTIE(1, 1,JJ)                                               2672
      WRITE (IPR,52) LLL                                                    2673
  364 KOUNT   = KOUNT + 1                                                   2674
      LTIE(1,J2,JJ) = 7777                                                  2675
  365 CONTINUE                                                              2676
      IF (KOUNT .EQ. 1) GO TO 369                                           2677
C     COMPUTE MEANS OF DUPLICATE MEASUREMENTS                               2678
      REC     = 1D0 / KOUNT                                                 2679
      DO 368 J = 2,3                                                        2680
  368 LTIE(J,NXTLOC,JJ) = LTIE(J,NXTLOC,JJ) * REC                           2681
  369 CONTINUE                                                              2682
C                                                                           2683
  370 IF (MZ .LT. LAST) MZ = LAST                                           2684
      IF (LAST .EQ. MZZ) GO TO 377                                          2685
C     STORE ZEROS IN UNUSED LOCATIONS OF LTIE                               2686
      L3      = LAST + 1                                                    2687
      DO 371 J1 = L3,MZZ                                                    2688
      DO 371 J  = 1,3                                                       2689
  371 LTIE(J,J1,JJ) = 0                                                     2690
  377 CONTINUE                                                              2691
C                                                                           2692
C     MZ IS HIGHEST NUMBER OF IMAGES PER TERRAIN POINT                      2693
      IF (MZ .GT. NIM)  NIM = MZ                                            2694
      WRITE (JD33) K,MZ,MT, (((LTIE(J1,J2,J3),J1=1,3),J2=1,MZ),J3=1,MT)     2695
      IF (L .LT. L2) GO TO 310                                              2696
  379 CONTINUE                                                              2697
C                                                                           2698
C     OPTIONALLY, LIST ALL STEREOPOINTS IN EACH STEREOPAIR                  2699
      IF (LIST.LE.0 .AND. JSUM.EQ.0) GO TO 390                              2700
      DO 381 J = 1,NP                                                       2701
  381 ID(J)   = -ID(J)                                                      2702
      WRITE (IPR,51)                                                        2703
      J2      = 0                                                           2704
      DO 382 L = 1,NSP                                                      2705
      J1      = J2 + 1                                                      2706
      J2      = LSP(3,L)                                                    2707
      WRITE (IPR,52) (LSP(J,L), J=1,2), (ID(J), J=J1,J2)                    2708
  382 CONTINUE                                                              2709
      IF (JSUM .GT. 0) STOP 03                                              2710
C                                                                           2711
  390 WRITE (IPR,53) NIM, NW                                                2712
      INT(5)  = -INT(5)                                                     2713
      END FILE JD33                                                         2714
      REWIND JD33                                                           2715
      REWIND JD32                                                           2716
      RETURN                                                                2717
      END                                                                   2718
