CTITLEMNOQDX -- REMOVE CONSTANT AND QUAD. LEAST SQUARES COMPONENTS 00010000 C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** CA AUTHOR D.D. THOMPSON 00020000 CA DESIGNER D.D. THOMPSON 00030000 CA LANGUAGE VS FORTRAN 00040000 CA SYSTEM IBM 00050000 CA WRITTEN SEPTEMBER, 1979 00060000 C REVISED MO-DA-YR BY PROGRAMMER FOR REASON 00070000 C REVISED 01-15-85 REP. ADD USBFRX CALLS AND IX TO ARG. LIST. 00080000 C REVISED 08-14-85 REP. CHANGE NAME FROM MNOQD3. 00090000 C REVISED 11-09-88 ESN. INCORPORATE MEMORY PATH. 00100008 C 00110000 CA 00120000 CA 00130000 CA CALL MNOQDX (Q, IX, ICDP, KCDP, LINE, LD, NLINE, D, XCDP, XRNMO, 00140000 CA ZA, ZB, ZC, NUMC, NUML) 00150000 CA 00160000 CA IN/OUT ARGUMENT TYPE DESCRIPTION 00170000 CA 00180000 CA IN/OUT Q R8 LAG VALUES FOR EACH TRACE. LENGTH LINE(NLINE)00190000 CA (REJECTED TRACES ARE INDICATED BY Q > 1.0E6) 00200000 CA IN IX I4 STARTING INDEX MINUS ONE IN ARRAYS Q & D. 00210000 CA IN ICDP I4 ARRAY OF INDEX POSITIONS IN IND CORRESPONDING00220000 CA TO THE LAST TRACE IN EACH CDP. LENGTH < OR = 00230000 CA NLINE*LD 00240000 CA IN KCDP I4 ARRAY OF STARTING CDP NUMBERS FOR EACH LINE. 00250000 CA LENGTH = NLINE 00260000 CA IN LINE I4 POINTER ARRAY INDICATING LAST ELEMENT IN Q 00270000 CA FOR EACH LINE. LENGTH = NLINE 00280000 CA IN LD I4 MAXIMUM CDP # WHICH OCCURS ON ANY LINE. 00290000 CA IN NLINE I4 NUMBER OF LINES. 00300000 CA IN D R4 OFFSET SQUARED FOR EACH CDP. LENGTH = 00310000 CA LINE(NLINE) 00320000 CA OUT XCDP R8 OUTPUT CDP AVERAGE FOR EACH CDP. ARRANGED 00330000 CA BY LINES WITH LD ENTRIES/LINE. NOTE SOME 00340000 CA OF THESE CDP ARE NOT REPRESENTED BY TRACES. 00350000 CA LENGTH = LD*NLINE 00360000 CA OUT XRNMO R8 OUTPUT RNMO FOR EACH CDP ARRANGED AS XCDP. 00370000 CA LENGTH = LD*NLINE 00380000 CA IN ZA R8 SCRATCH ARRAY OF LENGTH = NLINE*LD 00390000 CA IN ZB R8 SCRATCH ARRAY OF LENGTH = NLINE*LD 00400000 CA IN ZC R8 SCRATCH ARRAY OF LENGTH = NLINE*LD 00410000 CA IN NUMC I4 # CDP ON EACH SIDE OF CENTER IN RNMO AVERAGE 00420000 CA IN NUML I4 #LINES ON EACH SIDE OF CENTER IN RNMO AVERAGE00430000 CA 00440000 CA THIS ROUTINE REMOVES THE CONSTANT AND QUADRATIC COMPONENTS 00450000 CA (WITH RESPECT TO OFFSET) FROM THE INPUT LAG VALUES. 00460000 CA THE QUADRATIC COMPONENT IS AVERAGED OVER A SPECIFIED 00470000 CA RECTANGLE OF ADJACENT CDP FOR 3-D DATA. THE COEFFICIENTS OF 00480000 CA THE REMOVED COMPONENTS ARE ALSO RETURNED. 00490000 CA 00500000 CA NOTE: AT ENDS AND CORNERS OF 3-D GRID THE RNMO AVERAGES 00510000 CA ARE COMPUTED OVER WHATEVER TRACES ARE AVAILABLE 00520000 CA ON THE AVERAGING RECTANGLE. THUS THE AVERAGES ARE 00530000 CA NOT SYMMETRIC ABOUT THE CDP'S BEING EVALUATED. 00540000 CA 00550000 C *** SEE THE FIRST PART OF APPENDIX A IN THE TECHNICAL NOTES 00560000 C FOR THE PROCESS 'TRAX'. COMMENTS HERE WILL REFERENCE THE 00570000 C STEP NUMBERS AND VARIABLE NAMES DESCRIBED THERE. 00580000 C 00590000 C 00600000 SUBROUTINE MNOQDX (Q, IX, ICDP, KCDP, LINE, LD, NLINE, D, XCDP, 00610000 * XRNMO, ZA, ZB, ZC, NUMC, NUML) 00620000 C 00630000 COMMON COM(1) 00640000 INTEGER COM 00650002 REAL XCOM(1) 00660001 REAL*8 ZCOM(1) 00670000 EQUIVALENCE (COM(1),XCOM(1),ZCOM(1)) 00680000 C 00690000 C COMMON BUFFERING INFORMATION BLOCK 00700000 C 00710000 COMMON /BFINFO/ BYND(15), BIND(15), BOFF(15), BQND(15) 00720000 C 00730000 INTEGER BYND, BIND, BOFF, BQND 00740000 C 00750000 C INTEGER VARIABLES 00760000 C 00770000 INTEGER B1 00780000 INTEGER B2 00790000 INTEGER IX 00800000 C 00810000 C 00820000 C INTEGER ARRAYS IN PARAMETER LIST 00830000 C 00840000 INTEGER ICDP (1) 00850000 INTEGER KCDP (1) 00860000 INTEGER LINE (1) 00870000 C 00880000 C REAL ARRAYS IN PARAMETER LIST 00890000 C 00900000 REAL*4 D (1) 00910000 REAL*8 Q (1) 00920000 REAL*8 XCDP (1) 00930000 REAL*8 XRNMO (1) 00940000 REAL*8 ZA (1) 00950000 REAL*8 ZB (1) 00960000 REAL*8 ZC (1) 00970000 C 00980000 C REAL VARIABLES--LOCAL 00990000 C 01000000 REAL*8 B 01010000 REAL*8 D2 01020007 REAL*8 Q2 01030000 REAL*8 SD 01040000 REAL*8 SW 01050000 REAL*8 SX 01060000 REAL*8 SX2 01070000 REAL*8 SY 01080000 REAL*8 SYD 01090000 C 01100000 C DETERMINE THE MAXIMUM VALUE OF DEPTH POINTS 01110000 C 01120000 LDD = LD * NLINE 01130000 LDD2 = 2 * LDD 01140000 C 01150000 C SET NUMBER OF CDP (MUM) AND NUMBER OF LINES (LUM) FOR RNMO 01160000 C AVERAGING. THESE ARE NORMALLY SET TO PARAMETER VALUES NUMC 01170000 C AND NUML BUT CAN NOT BE GREATER THAN 1/4 NUMBER OF CDP OR 01180000 C LINES IN DATA. 01190000 C 01200000 MUM = NUMC 01210000 IF (MUM*4+3 .GT. LD) MUM = (LD-3) / 4 01220000 MUMP = MUM + 1 01230000 LDM = LD - MUM 01240000 LDMP = LDM + 1 01250000 LUM = NUML 01260000 IF (LUM*4+3 .GT. NLINE) LUM = (NLINE-3) / 4 01270000 LUMP = LUM + 1 01280000 NLNM = NLINE - LUM 01290000 NLNMP = NLNM + 1 01300000 LUMLD = LUM * LD 01310000 C 01320000 C CLEAR SCRATCH ARRAYS AND XCDP AND XRNMO ARRAYS. 01330000 C 01340000 CALL ARSET(ZA, LDD2, 0.) 01350000 CALL ARSET(ZB, LDD2, 0.) 01360000 CALL ARSET(ZC, LDD2, 0.) 01370000 CALL ARSET(XCDP, LDD2, 0.) 01380000 CALL ARSET(XRNMO, LDD2, 0.) 01390000 C 01400000 C PREPARE TO EVALUATE CDP SUMS DESCRIBED IN STEP 1. 01410000 C 01420000 II = 0 01430000 III = 0 01440000 KEY2 = 1 01450000 KEY = 0 01460000 L = 1 01470000 KK = 0 01480000 C 01490000 C INITIALIZE SUMS FOR NEW CDP. 01500000 C 01510000 10 SW = 0. 01520000 SYD = 0. 01530000 SY = 0. 01540000 SX = 0. 01550000 SX2 = 0. 01560000 KK = KK + 1 01570000 III = III + 1 01580000 IIIC = ICDP(III) 01590000 IF (KEY2 .EQ. 0) GO TO 20 01600000 C 01610000 C UPDATE POINTERS, ETC. FOR NEW LINES 01620000 C 01630000 II = II + 1 01640000 IILD = (II-1) * LD 01650000 NTT = LINE(II) 01660000 KEY2 = 0 01670000 KK = KCDP(II) 01680000 C 01690000 20 CONTINUE 01700000 IF (BQND(12) .EQ. 0) THEN 01710000 DO 30 I = L, IIIC 01720000 CALL USBFRX (Q, I+IX, B1, 0, BQND) 01730000 Q2 = Q(B1) 01740000 C 01750000 C IF TRACE NOT REJECTED , UPDATE SUMS 01760000 C 01770000 IF(Q2 .GT. 1.0E6) GO TO 30 01780000 CALL USBFRX (D, I+IX, B2, 0, BOFF) 01790000 D2 = D(B2) 01800000 SW = SW + 1.0 01810000 SYD = Q2 * D2 + SYD 01820000 SY = Q2 + SY 01830000 SX = D2 + SX 01840000 SX2 = D2 * D2 + SX2 01850000 30 CONTINUE 01860000 ELSE 01870000 B1 = (BQND(12)+1) / 2 01880001 DO 35 I = L, IIIC 01890000 Q2 = ZCOM(B1+I+IX-1) 01900000 C 01910000 C IF TRACE NOT REJECTED , UPDATE SUMS 01920000 C 01930000 IF(Q2 .GT. 1.0E6) GO TO 35 01940000 D2 = XCOM(BOFF(12)+I+IX-1) 01950000 SW = SW + 1.0 01960000 SYD = Q2 * D2 + SYD 01970000 SY = Q2 + SY 01980000 SX = D2 + SX 01990000 SX2 = D2 * D2 + SX2 02000000 35 CONTINUE 02010000 ENDIF 02020000 C 02030000 C END OF CDP. UPDATE POINTERS AND IF ALL TRACES ARE NOT REJECTED 02040000 C STORE KERNELS DESCRIBED IN STEP 1. 02050000 C 02060000 L = IIIC + 1 02070000 IF (IIIC .EQ. NTT) KEY2 = 1 02080000 IF (II .EQ. NLINE .AND. IIIC .EQ. NTT) KEY = 1 02090000 IF (SW .EQ. 0.) GO TO 40 02100000 INDX = KK + IILD 02110000 B = SX / SW 02120000 ZA(INDX) = SYD - SY * B 02130000 ZB(INDX) = SX2 - SX * B 02140000 XCDP(INDX) = SY / SW 02150000 XRNMO(INDX) = B 02160000 C 02170000 40 CONTINUE 02180000 IF (KEY .EQ. 0) GO TO 10 02190000 C 02200000 C STEP 1 COMPLETE. BEGIN PART OF STEP 2 WHICH FORMS Q IN APPENDIX A.02210000 C (NOT THE SAME AS Q HERE.) 02220000 C 02230000 K = 0 02240000 C 02250000 C LOOP THROUGH EACH TIME 02260000 C 02270000 DO 100 I = 1, NLINE 02280000 SD = 0. 02290000 KK = K + MUM 02300000 KL = K - MUM 02310000 C 02320000 C IF CDP AVERAGE RANGE NOT ZERO INITIALIZE SLIDING SUM FOR Q IN 02330000 C STEP 2 AT BEGINNING OF LINE WITH PARTIAL SUM. Q WILL BE STOPPED 02340000 C IN VARIABLE ZC. 02350000 C 02360000 IF (MUM .LE. 0) GO TO 70 02370000 C 02380000 DO 50 J = 1, MUM 02390000 50 SD = SD + ZB(J+K) 02400000 C 02410000 DO 60 J = 1, MUM 02420000 SD = SD + ZB(J+KK) 02430000 60 ZC(J+K) = SD 02440000 C 02450000 C FORM SLIDING SUM FOR 1 ON MIDDLE OF LINE IN STEP 2. 02460000 C 02470000 70 DO 80 J = MUMP, LDM 02480000 SD = SD + ZB(J+KK) 02490000 ZC(J+K) = SD 02500000 C 02510000 80 SD = SD - ZB(J+KL) 02520000 C 02530000 C IF CDP AVERAGE RANGE IS NOT ZERO FINISH OFF SLIDING SUM FOR Q 02540000 C AT THE END OF THE LINE. 02550000 C 02560000 IF (MUM .LE. 0) GO TO 100 02570000 C 02580000 DO 90 J = LDMP, LD 02590000 ZC(J+K) = SD 02600000 90 SD = SD - ZB(J+KL) 02610000 C 02620000 100 K = K + LD 02630000 C 02640000 C END STEP 2, Q CALCULATION. BEGIN STEP 3, H CALCULATION. CLEAR ZB 02650000 C WHICH WILL NOW BE USED TO STORE H. 02660000 C 02670000 CALL ARSET (ZB, LDD2, 0.) 02680000 C 02690000 C IF NUMBER OF LINES FOR RNMO AVERAGE IS ZERO FORM H BY SLIDING SUM 02700000 C FOR ENTIRE GRID. 02710000 C 02720000 IF (LUM .GT. 0) GO TO 130 02730000 C 02740000 DO 120 I = 1, LD 02750000 SD = 0. 02760000 KK = I + LUMLD 02770000 KL = I - LUMLD 02780000 JJ = LD * (LUMP-1) 02790000 C 02800000 DO 110 J = LUMP, NLNM 02810000 SD = SD + ZC(JJ+KK) 02820000 ZB(JJ+I) = SD 02830000 SD = SD - ZC(JJ+KL) 02840000 C 02850000 110 JJ = JJ + LD 02860000 C 02870000 120 CONTINUE 02880000 C 02890000 GO TO 190 02900000 C 02910000 C FOR CASES WHERE NUMBER OF LINES RNMO AVERAGE IS NOT ZERO LOOP 02920000 C THROUGH CONSTANT CDP CROSS LINES TO FORM H FOR STEP 3. 02930000 C 02940000 130 DO 180 I = 1, LD 02950000 SD = 0. 02960000 KK = I + LUMLD 02970000 KL = I - LUMLD 02980000 JJ = 0 02990000 C 03000000 C INITIALIZE SLIDING SUM FOR H AT BEGINNING OF CROSS LINE. 03010000 C 03020000 DO 140 J = 1, LUM 03030000 SD = SD + ZC(JJ+I) 03040000 140 JJ = JJ + LD 03050000 C 03060000 JJ = 0 03070000 C 03080000 DO 150 J = 1, LUM 03090000 SD = SD + ZC(JJ+KK) 03100000 ZB(JJ+I) = SD 03110000 150 JJ = JJ + LD 03120000 C 03130000 JJ = LD * (LUMP-1) 03140000 C 03150000 C FORM H FOR MIDDLE OF CROSSLINE. 03160000 C 03170000 DO 160 J = LUMP, NLNM 03180000 SD = SD + ZC(JJ+KK) 03190000 ZB(JJ+I) = SD 03200000 SD = SD - ZC(JJ+KL) 03210000 160 JJ = JJ + LD 03220000 C 03230000 JJ = LD * (NLNMP-1) 03240000 C 03250000 DO 170 J = NLNMP, NLINE 03260000 ZB(JJ+I) = SD 03270000 SD = SD - ZC(JJ+KL) 03280000 170 JJ = JJ + LD 03290000 C 03300000 180 CONTINUE 03310000 C 03320000 C END OF STEP #3 H CALCULATION. BEGIN STEP #2 P CALCULATION. 03330000 C CLEAR ZC WHICH WILL NOW BE REUSED TO STORE P. 03340000 C 03350000 190 CALL ARSET(ZC, LDD2, 0.) 03360000 K = 0 03370000 C 03380000 C IF CDP AVERAGE RANGE IS ZERO FORM P FOR ENTIRE GRID. 03390000 C 03400000 IF (MUM .GT. 0) GO TO 220 03410000 C 03420000 DO 210 I = 1, NLINE 03430000 SD = 0. 03440000 KK = K + MUM 03450000 KL = K - MUM 03460000 C 03470000 DO 200 J = MUMP, LDM 03480000 SD = SD + ZA(J+KK) 03490000 ZC(J+K) = SD 03500000 200 SD = SD - ZA(J+KL) 03510000 C 03520000 210 K = K + LD 03530000 C 03540000 GO TO 280 03550000 C 03560000 C FOR CASE WHERE CDP AVERAGE RANGE IS NOT ZERO BEGIN P CALCULATION 03570000 C BY LOOPING THROUGH EACH LINE. 03580000 C 03590000 220 DO 270 I = 1, NLINE 03600000 SD = 0. 03610000 KK = K + MUM 03620000 KL = K - MUM 03630000 C 03640000 C INITIALIZE SLIDING SUM FOR P AT BEGINNING OF LINE. 03650000 C 03660000 DO 230 J = 1, MUM 03670000 230 SD = SD + ZA(J+K) 03680000 C 03690000 DO 240 J = 1, MUM 03700000 SD = SD + ZA(J+KK) 03710000 240 ZC(J+K) = SD 03720000 C 03730000 C COMPUTE P FOR MIDDLE OF LINE. 03740000 C 03750000 DO 250 J = MUMP, LDM 03760000 SD = SD + ZA(J+KK) 03770000 ZC(J+K) = SD 03780000 250 SD = SD - ZA(J+KL) 03790000 C 03800000 C COMPUTE P FOR END OF LINE. 03810000 C 03820000 DO 260 J = LDMP, LD 03830000 ZC(J+K) = SD 03840000 260 SD = SD - ZA(J+KL) 03850000 C 03860000 270 K = K + LD 03870000 C 03880000 C END OF STEP #2 P CALCULATION. BEGIN STEP #3 G CALCULATION. 03890000 C NOTE G IS NOT STORED BUT IS USED TO IMMEDIATELY COMPLETE STEP 03900000 C 3 BY COMPUTING ALPHA AND BETA. 03910000 C 03920000 280 IF (LUM .GT. 0) GO TO 310 03930000 C 03940000 C SPECIAL CASE FOR ZERO CDP IN RNM0 AVERAGE CYCLE THRU CROSS LINES 03950000 C 03960000 DO 300 I = 1, LD 03970000 SD = 0. 03980000 KK = I + LUMLD 03990000 KL = I - LUMLD 04000000 JJ = LD * (LUMP-1) 04010000 C 04020000 C CYCLE THRU THE CDP 04030000 C 04040000 DO 290 J = LUMP, NLNM 04050000 JJPI = JJ + I 04060000 SD = SD + ZC(JJ+KK) 04070000 B = 0. 04080000 IF (DABS(ZB(JJPI)) .GT. 1.E-30) B = SD / ZB(JJPI) 04090000 C 04100000 C STORE ALPHA IN XCDP. STORE BETA IN XRNM0. 04110000 C 04120000 XCDP(JJPI) = XCDP(JJPI) - XRNMO(JJPI) * B 04130000 XRNMO(JJPI) = B 04140000 SD = SD - ZC(JJ+KL) 04150000 C 04160000 290 JJ = JJ + LD 04170000 C 04180000 300 CONTINUE 04190000 C 04200000 GO TO 370 04210000 C 04220000 C CASE WHERE THE NUMBER OF CDP IN REN0 AVERAGE IS NOT ZERO. CYCLE 04230000 C THRU THE CROSS LINES 04240000 C 04250000 310 DO 360 I = 1, LD 04260000 SD = 0. 04270000 KK = I + LUMLD 04280000 KL = I - LUMLD 04290000 JJ = 0 04300000 C 04310000 C INITIALIZE SLIDING SUM G ON CROSS LINE. 04320000 C 04330000 DO 320 J = 1, LUM 04340000 SD = SD + ZC(JJ+I) 04350000 320 JJ = JJ + LD 04360000 C 04370000 JJ = 0 04380000 C 04390000 DO 330 J = 1, LUM 04400000 JJPI = JJ + I 04410000 SD = SD + ZC(JJ+KK) 04420000 B = 0. 04430000 IF (DABS(ZB(JJPI)) .GT. 1.E-30) B = SD / ZB(JJPI) 04440000 C 04450000 C STORE ALPHA IN XCDP. STORE BETA IN XRNM0. 04460000 C 04470000 XCDP(JJPI) = XCDP(JJPI) - XRNMO(JJPI) * B 04480000 XRNMO(JJPI) = B 04490000 C 04500000 330 JJ = JJ + LD 04510000 C 04520000 JJ = LD * (LUMP-1) 04530000 C 04540000 DO 340 J = LUMP, NLNM 04550000 JJPI = JJ + I 04560000 SD = SD + ZC(JJ+KK) 04570000 B = 0. 04580000 IF (DABS(ZB(JJPI)) .GT. 1.E-30) B = SD / ZB(JJPI) 04590000 C 04600000 C STORE ALPHA IN XCDP. STORE BETA IN XRNM0. 04610000 C 04620000 XCDP(JJPI) = XCDP(JJPI) - XRNMO(JJPI) * B 04630000 XRNMO(JJPI) = B 04640000 SD = SD - ZC(JJ+KL) 04650000 C 04660000 340 JJ = JJ + LD 04670000 C 04680000 JJ = LD * (NLNMP-1) 04690000 C 04700000 C FINISH SLIDING SUM G ON END OF CROSS LINES. 04710000 C 04720000 DO 350 J = NLNMP, NLINE 04730000 JJPI = JJ + I 04740000 B = 0. 04750000 IF (DABS(ZB(JJPI)) .GT. 1.E-30) B = SD / ZB(JJPI) 04760000 C 04770000 C STORE ALPHA IN XCDP. STORE BETA IN XRNM0. 04780000 C 04790000 XCDP(JJPI) = XCDP(JJPI) - XRNMO(JJPI) * B 04800000 XRNMO(JJPI) = B 04810000 SD = SD - ZC(JJ+KL) 04820000 C 04830000 350 JJ = JJ + LD 04840000 C 04850000 360 CONTINUE 04860000 C 04870000 C BEGIN STEP #4. COMPUTE THE TRANSFORMED LAGS. 04880000 C 04890000 370 KT = 0 04900000 KK = 0 04910000 III = 0 04920000 C 04930000 C SCAN THRU THE LINES. 04940000 C 04950000 DO 400 I = 1, NLINE 04960000 KL = KT + 1 04970000 KT = LINE(I) 04980000 K = KCDP(I) 04990000 III = III + 1 05000000 IIIC = ICDP(III) 05010000 KKK = KK + K 05020000 C 05030000 C SCAN THRU THE CDP PRESENT IN EACH LINE. 05040000 C 05050000 IF (BQND(12) .EQ. 0) THEN 05060000 DO 390 J = KL, KT 05070000 IF (J .LE. IIIC) GO TO 380 05080000 K = K + 1 05090000 KKK = KK + K 05100000 III = III + 1 05110000 IIIC = ICDP(III) 05120000 C 05130000 380 CALL USBFRX (Q, J+IX, B1, 1, BQND) 05140000 CALL USBFRX (D, J+IX, B2, 0, BOFF) 05150000 Q2 = Q(B1) 05160000 C 05170000 C IF TRACE IS NOT REJECTED REMOVE CONSTANT AND QUADRATIC COMPONENTS 05180000 C FROM LAG VALUES. 05190000 C 05200000 IF (Q2 .LE. 1.0E6) Q(B1) = Q2 - XCDP(KKK) - XRNMO(KKK)*D(B2) 05210000 C 05220000 390 CONTINUE 05230000 ELSE 05240000 B1 = (BQND(12)+1) / 2 05250001 DO 396 J = KL, KT 05260000 IF (J .LE. IIIC) GO TO 393 05270000 K = K + 1 05280000 KKK = KK + K 05290000 III = III + 1 05300000 IIIC = ICDP(III) 05310000 C 05320000 393 CONTINUE 05330000 C 05340000 C IF TRACE IS NOT REJECTED REMOVE CONSTANT AND QUADRATIC COMPONENTS 05350000 C FROM LAG VALUES. 05360000 C 05370000 IF (ZCOM(B1+J+IX-1) .LE. 1.0E6) 05380000 * ZCOM(B1+J+IX-1) = ZCOM(B1+J+IX-1) - 05390000 * XCDP(KKK) - XRNMO(KKK)* 05400000 * XCOM(BOFF(12)+J+IX-1) 05410000 C 05420000 396 CONTINUE 05430000 ENDIF 05440000 C 05450000 400 KK = KK + LD 05460000 C 05470000 RETURN 05480000 END 05490000