C INPUT.FOR SUBROUTINE INPUT(*, TITLE, FF, NSECT, MODEN, MAXMSH, & ALPHA1, ALPHA2, & NINC, NXVAL, & C0, C1, Z0, Z1, & FLAG, AX, AY, AS, SECD, STORE, SRD, & RPROF, BATHY, NDIVP2, MAXPRF, HMAX) CHARACTER*3 ALPHA2(6), SUBOPT(5) CHARACTER*5 ALPHA1(NOPT), OPTION CHARACTER*8 MODEL CHARACTER*80 WORD, BLANK, WTEMP CHARACTER*80 TITLE INTEGER NDIVP2( * ) INTEGER REREAD, ERROR INTEGER FIXDZ, OPTMZ REAL FLAG(NOPT,ICF), AX(NOPT,6), AY(NOPT,7), AS(5) REAL SRD(NOPT,KSRD,2) REAL FF(NFF), BUFFIN(6) REAL SECD(NOPT,3) REAL STORE(NOPT) REAL RPROF(1), BATHY(1) REAL MAXRNG DOUBLE PRECISION TWOPI, PI, OMEGA DOUBLE PRECISION C0(NDEP), C1(NDEP), Z0(NDEP), Z1(NDEP) DOUBLE PRECISION CC0, CC1, CMIN, H0, H1 COMMON /AB/ BETA(-1:3), SCATT(2), C2S, CC0, CC1, C2 COMMON /APM/ NSMPL, NSMDEF COMMON /CF/ ENRCHK, ERRMAX, MAXRNG COMMON /CFIELD/ FLDRD(3), PULRD(3) COMMON /CONTUR/ CNTR1(4,4) COMMON /DFFSN/ DFFSN, DFMIN, DFSTEP COMMON /ENRGY/ MATCH COMMON /EXPMAX/ TRESH, EPS, RNGMAX, EPSDEF COMMON /FACTS/ FACT0, FACT1, FLAGF0, FLAGF1 COMMON /FLAGG/ PLANE, NOVOL, NOLOSS, NOCYL, LARGE, SUMPL COMMON /FRQDEP/ FRQREF, FPOW, FRQDEP COMMON /CGAUSS/ GAUSS, TH1, TILT COMMON /LUIN/ LUIN, LUWRN, LUCHK COMMON /LUNIT/ LUPLP, LUPLT, LUPRT COMMON /MESH/ DZH0, DZH1, INPDZ, FIXDZ COMMON /MSHIST/ MH0(8), MSED(8), ICOUNT, USEOLD COMMON /N/ MINMOD, MAXMOD, MODCUT, HBEAM, BPHVEL COMMON /NA/ ND0, ND1, CMIN COMMON /NN/ H0BEG, H1BEG, NFREQ COMMON /NORM/ N12221, N14241 COMMON /PARA1/ NFF, MSP, NDEP,NOPT, ICF, KSRD COMMON /PARAM1/ IRANGE, IFREQ, JUMP, MODQTY COMMON /PARAM3/ IMESH, NMESH, MSHRAT, OPTMZ COMMON /MODEL/ MODEL COMMON /MODSMP/ MSPH0, MODSED, MSPH1 COMMON /STARTR/ MODST COMMON /TRIGON/ TWOPI, PI, OMEGA DATA FLAG1/0.0/ DATA BLANK/' '/ C C ARRAY ALPHA1 CONTAINS THE OPTION CODES. C C C ALPHA1(1)= TLRAN C ALPHA1(2)= GROUP C ALPHA1(3)= TLAVR C ALPHA1(4)= TLDEP C ALPHA1(5)= TLAVF C ALPHA1(6)= ANGLE C ALPHA1(7)= PHASE C ALPHA1(8)= CONDR C ALPHA1(9)= CONFR C ALPHA1(10)= PROFL C ALPHA1(11)= MODES C ALPHA1(12)= CONDA C ALPHA1(13)= HORWN C ALPHA1(14)= PARAM C ALPHA1(15)= FIELD C ALPHA1(16)= PULSE C ALPHA1(17)= CONSV C ALPHA1(18)= FREE FOR NEW OPTION C C ARRAY ALPHA2 CONTAINS THE SUB-OPTION CODES C C C ALPHA2(1)= ' ' C ALPHA2(2)= 'PRT' C ALPHA2(3)= 'PLT' C ALPHA2(4)= 'COL' C ALPHA2(5)= 'COH' C ALPHA2(6)= 'INC' C C SUBOPT IS THE MATRIX WHERE THE INPUT OPTIONS ARE READ LINE BY LINE C C C SECD IS THE MATRIX WHICH CONTAINS INFORMATION ABOUT RMIN,RMAX AND DE C FOR TLRAN AND TLAVR OPTIONS C C C C CNTR1 IS THE MATRIX THAT CONTAINS THE VARIOUS ZMIN, ZMAX C AND ZLEV COMBINATIONS FOR CONTOURED REPRESENTATIONS. C 105 FORMAT(1H ,//,' INPUT FREQUENCIES:',/) 110 FORMAT(1H ,2X,F10.2,' HZ') 115 FORMAT(1H ,/,' CALCULATION IS ALLOWED ONLY FOR POSITIVE', & ' FREQUENCY VALUES.',/,' EXECUTION IS TERMINATED.') 118 FORMAT(1H ,/,' THE FOLLOWING INPUT FREQUENCY VALUE IS', & ' SPECIFIED MORE THEN ONCE: ',F7.2,' HZ',/,' THE INPUT', & ' FREQUENCY IS NOW UNIQUELY SPECIFIED.') 125 FORMAT(A80) 140 FORMAT(A5,1X,5(A3,1X)) 160 FORMAT(1H ,//,' DENSITY OF SEDIMENT LESS THAN OR EQUAL TO ZERO', & ' IS NOT ACCEPTED.',/,' EXECUTION IS TERMINATED.') 170 FORMAT(1H ,//,' DENSITY OF BOTTOM LAYER LESS THAN OR EQUAL TO', & ' ZERO O IS NOT ACCEPTED.',//,' EXECUTION IS TERMINATED.') 220 FORMAT(1H ,/,' MATRIX FLAG ',/,8X,' Y=1;N=0 ',5(2X,A3,3X)) 240 FORMAT(1H ,A5,1X,F7.0,5F8.0) 260 FORMAT(1H ,/,' MATRIX SRD ',/,' OPTION ',A6) 280 FORMAT(1H ,/,' MATRIX SECD ',/,' RMIN RMAX DELR') 300 FORMAT(1H ,A5,2X,E9.2,2E11.2) 380 FORMAT(1H ,/,' MATRIX CNTR1',/,10X,' ZMIN ZMAX ZINC ') 400 FORMAT(1H ,A5,3X,3E9.2,F9.0) 410 FORMAT(1H ,/,' EXECUTION TERMINATED BECAUSE OF ARRAY SIZE', & ' LIMITATIONS.') 415 FORMAT(1H ,//,' REVISE THE "X" AXIS DEFINITION FOR OPTION "TLAVF" & ',/,' THE NUMBER OF SUBDIVISIONS CANNOT EXCEED', I3,' .') 416 FORMAT(1X,//,' WARNING : NO OPTION HAS BEEN SPECIFIED ',/) 418 FORMAT(1X ,/,' ERROR : THE TOTAL NUMBER OF MODE SAMPLING POINTS ' & /,' ALLOWED FOR THIS SNAP VERSION IS ',I6,/, & ' THE PRESENT INPUT RUN STREAM REQUIRES : ',I6, & ' SAMPLING POINTS.',/, & ' THE EXECUTION IS TERMINATED.') 420 FORMAT(1H ,//,' REVISE THE "Y" AXIS DEFINITION FOR OPTION ',A5,'. & ',/,' THE NUMBER OF SUBDIVISIONS CANNOT EXCEED', I3,' .') 421 FORMAT(1H ,//,' ZERO FREQUENCY VALUE NOT ALLOWED IN "Y" AXIS', & ' FOR OPTION ',A5,/,' EXECUTION IS TERMINATED.') 430 FORMAT(1H ,/,' NUMBER OF INPUT FREQUENCIES (NFREQ)= ',I3,/, & ' SIZE OF FREQUENCY ARRAY (NFF) =',I2) 450 FORMAT(1H ,/,' NUMBER OF SOUND SPEED PROFILE DEPTHS IN THE ',/, & ' WATER LAYER (ND0) =',I3,/,' SIZE OF ARRAY (NDEP)= ',I3) 460 FORMAT(1H ,' REVISE THE FOLLOWING INPUT LINE:',/,2X,A5,1X, & 5(A3,1X),/,' EXECUTION IS TERMINATED.') 470 FORMAT(1H ,/,' NUMBER OF SOUND SPEED PROFILE DEPTHS IN THE',/, & ' TOP BOTTOM LAYER (ND1)= ',I3,' SIZE OF ARRAY (NDEP)= ',I3) 500 FORMAT(1H ,' THE MAXIMUM NUMBER OF SOURCE/RECEIVER DEPTH', & ' COMBINATIONS',/,' HAS BEEN REACHED. ',/, & ' EXECUTION IS TERMINATED.') 520 FORMAT(1X,' ACCEPTABLE VALUES FOR "MATCH" ARE : ',/, & ' 1 for pressure matching. ',/, & ' 2 for reduced pressure matching. '/, & ' 3 for impedance matching. ') 600 FORMAT(1H ,//,' SHEAR SPEED IN SECTOR # ',I2,' IS TOO HIGH.',/, & ' EXECUTION IS TERMINATED.') 650 FORMAT(1H ,//,' THE ABSORPTION COEFFICIENT FOR THE SHEAR', & ' VELOCITY IN SECTOR # ',I2,' IS TOO HIGH.',/, & ' EXECUTION IS TERMINATED.') 660 FORMAT(1H ,//,' REVISE INPUT SOUND SPEED PROFILE IN THE WATER', & ' LAYER ',/,' IN SECTOR NO. ',I5,' WITH DEPTH :',F10.3,' m', & //,5X,' DEPTH(m)',4X,' SOUND SPEED(m/s) ') 670 FORMAT(1H ,5X,F10.3,9X,F10.3) 680 FORMAT(1H ,/, ' EXECUTION IS TERMINATED.') 690 FORMAT(1H ,//,' REVISE INPUT SOUND SPEED PROFILE FOR THE TOP', & ' BOTTOM LAYER ',/,' IN SECTOR NO. ',I5,' WITH DEPTH :', & F10.3,' m',//,5X,' DEPTH(m)',4X,' SOUND SPEED(m/s) ') 692 FORMAT(1H ,///,' **** WARNING FOR OPTION CONFR (only): ',/, & ' THIS CODE DOES NOT ALLOW FOR MORE THAN ONE SOURCE/RECEIVER', & /,' DEPTH COMBINATION PER RUN.',/, & ' CONFR WILL BE COMPUTED ONLY FOR THE FIRST SD/RD COMBINATION', & /,' FOUND IN THE INPUT RUN STREAM.',/) 694 FORMAT(1H ,///,' **** WARNING FOR OPTION CONFR (only): ',/, & ' THIS CODE DOES NOT ALLOW THE CHOICE OF BOTH COHERENT AND', & /,' INCOHERENT ADDITION OF MODES AT THE SAME TIME.',/, & ' IN SUCH A CASE ONLY THE COHERENT CHOICE IS ACCEPTED.',/) 700 FORMAT(1H ,//,' MAX ALLOWED NUMBER OF INPUT PROFILES IS EXCEEDED', & ' (MAX=',I5,').',/,' EXECUTION IS TERMINATED.') 710 FORMAT(1H ,///,' REVISE RMIN,RMAX AND/OR XAXIS INPUT VALUES FOR ' & ,A6,' OPTION.',/ & /,' CALCULATION:',3X,'MINIMUM RANGE',2X,F11.2,2X,'MAXIMUM RANGE', & 3X,F11.2, & /,' PLOT AXIS :',3X,'LEFT HAND VALUE',1X,F11.2,2X, & 'RIGHT HAND VALUE ',1X,F11.2, & /,' EXECUTION IS TERMINATED.',//) 720 FORMAT(1H ,///,' REVISE FREQUENCY AND/OR XAXIS INPUT VALUES FOR ' & ,A6,' OPTION.',/ & /,' CALCULATION:',3X,'MINIMUM FREQ ',2X,F11.2,2X,'MAXIMUM FREQ ', & 3X,F11.2, &/,' "X" AXIS :',3X,'LEFT HAND VALUE',1X,F11.2,2X, & 'RIGHT HAND VALUE',1X,F11.2, & /,' EXECUTION IS TERMINATED.',//) 721 FORMAT(1H ,///,' REVISE FREQUENCY AND/OR YAXIS INPUT VALUES FOR ' & ,A6,' OPTION.',/ & /,' CALCULATION:',3X,'MINIMUM FREQ ',2X,F11.2,2X,'MAXIMUM FREQ ', & 3X,F11.2, & /,' "Y" AXIS :',3X,'MIN VALUE',6X,F11.2,3X, & 'MAX VALUE',7X,F11.2, &/,' EXECUTION IS TERMINATED.',//) 740 FORMAT(1H ,//,' EXECUTION OF OPTION : "',A5,'" IS NOT ALLOWED ', & /,' FOR LESS THAN TWO FREQUENCIES.') 739 FORMAT(1X,' INPUT FREQUENCIES (HZ): ',/) 741 FORMAT(1X,' ',I3,') ','FREQ=',F10.2,/) 742 FORMAT(1X,'Y AXIS SPECIFICATIONS (HZ):',//, & 1X,'FMIN =',F10.2,2X,'FMAX =',F10.2,/) 820 FORMAT(1H ,//,' MISSING DEPTH SPECIFICATION FOR OPTION "',A5, & '"',/,' EXECUTION IS TERMINATED.') 840 FORMAT(1H ,/,' THE AXES FOR OPTION ',A5,' ARE TOO BIG.',/,' ' & ,' MAXIMUM AVAILABLE PAPER SIZE (CM) ALLOWS FOR:',/, & ' (AXMAX+7.0,AXMIN+6.0).LE.(',F6.2,',',F6.2,')',/, & ' THE ACTUAL AXES LENGTH IS:') 860 FORMAT(1H ,' AXMAX ("X" AXIS) =',F8.2,' CM',/, & ' AXMIN ("Y" AXIS) =',F8.2,' CM') 870 FORMAT(1X,//,' *************** ',/,' WARNING : PLANE GEOMETRY', & ' PROBLEM ',/,' *************** ') 872 FORMAT(1X,//,' ************* ',/,' WARNING : VOLUME ATTENUATION', & ' IS NOT INCLUDED ',/,' ************* ') 874 FORMAT(1H ,///,' **** WARNING: USING FILES FROM PREVIOUS RUN **** & ',//) 876 FORMAT(1H ,///,' **** ERROR IN READING ',A5,' : ',/,1X,A80,/) 880 FORMAT(1H ,' AXMAX ("Y" AXIS) =',F8.2,' CM',/, & ' AXMIN ("X" AXIS) =',F8.2,' CM') C 882 FORMAT(1X,' *** WARNING FROM SUB INPUT : INPDZ IS SET *** ',/,5X, C & ' DEPTH INTERVAL ON MESH POINTS (MODE AMPS) : ',F9.2,' m',/) 882 FORMAT(1X, ' *** WARNING FROM SUB INPUT : INPDZ IS SET *** ',/, & ' DZ IN LAYER H0 ON MESH POINTS FOR MODE AMPS ' ,F9.2,/, & ' DZ IN LAYER H1 ON MESH POINTS FOR MODE AMPS ' ,F9.2) C &,/, C & ' THE RATIO AMONG THE SIZE OF ADJACENT MESHES IS SET TO 2. ') 884 FORMAT(1H ,///,' **** ERROR IN READING NSMPL : ',/,1X,A80,/) 886 FORMAT(1X, ' *** WARNING FROM SUB INPUT : *** ',/, & ' THE RATIO AMONG THE SIZE OF ADJACENT MESHES IS SET TO 2. ') 888 FORMAT(1H ,///,' **** WARNING: CHECK ON STABILITY OF MEAN ENERGY', & ' WILL BE PERFORMED ' ) 890 FORMAT(1H ,//,' NO OPTION CAN BE SPECIFIED MORE THAN ONCE.', &/,' REVISE OPTION ',A5,' .') 892 FORMAT(1X,//,' ************* ',/,' WARNING : LOSSES ARE', & ' NOT INCLUDED. ',/,' ************* ') 894 FORMAT(1H ,///,' **** ERROR IN READING THE FOLLOWING LINE : ',/, & 1X,A80,/) 896 FORMAT(1X,//,' ************* ',/,' WARNING : MAX TOLERATED', & ' ERROR FOR CONVERGENCY CHECK :',E12.3,/,' ************* ') 898 FORMAT(1X,//,' ************* ',/,' WARNING : CYLINDRICAL', & ' SPREADING IS NOT INCLUDED ',/,' ************* ') 900 FORMAT(1H ,///,' REVISE THE NUMBER OF INPUT FREQUENCIES') 902 FORMAT(1H ,///,' **** WARNING: LARGE PRINT OUT ACTIVATED ****', & //) 906 FORMAT(1H ,///,' **** WARNING: The "SNAP" suboption will be', & ' ignored.',/, & ' It can be requested only for single profile cases.',//) 910 FORMAT(1H ,///,' REVISE MINMOD,MAXMOD') 915 FORMAT(1X,//,' WARNING: THIS PROGRAM VERSION ALLOWS' & ,' FOR A MAXIMUM OF ',I6,' MODES.') 920 FORMAT(1H ,///,' REVISE ND,RM (output depths,ACCURACY)') 930 FORMAT(1H ,///,' REVISE NUMBER OF SECTORS') 940 FORMAT(1H ,///,' REVISE NUMBER OF SAMPLES/MODE ') 942 FORMAT(1H ,///,' REVISE NUMBER OF MESHES ') 944 FORMAT(1H ,///,' REVISE OUTPUT MESH (IMESH)') 946 FORMAT(1H ,///,' WARNING: MAX ALLOWED NUMBER OF MESHES IS ',I3) 948 FORMAT(1H ,///,' WARNING: THE OUTPUT MESH CANNOT EXCEED ', & 'THE MAX ALLOWED NUMBER OF MESHES') 950 FORMAT(1H ,///,' REVISE WATER DEPTH, SCATTERING HEIGHTS,', & ' RANGE AND NUMBER OF SUBDIVISIONS.') 960 FORMAT(1H ,///,' ERROR DETECTED ON FIRST PROFILE :',/, & ' RANGE COORDINATE OF FIRST REGION MUST ALWAYS BE ZERO ',/, & ' REVISE THE FOLLOWING INPUT LINE : ',/,A80) 970 FORMAT(1H ,///,' ERROR DETECTED ON REGION NO. ',I3,' :',/, & ' RANGE COORDINATES MUST FORM A MONOTONIC', & ' INCREASING SEQUENCE ',/, & ' PREVIOUS RANGE : ',F9.3,/, & ' ACTUAL RANGE : ',F9.3,/, & ' LAST INPUT LINE : ',/,1X,A80) 972 FORMAT(1X,//,' ************* ',/,' WARNING : DZ ON MODE AMPS', & ' WILL BE KEPT CONSTANT OVER RANGE ',/,' ************* ') 974 FORMAT(1X,//,' ************* ',/,' WARNING : MODES CARRYING', & ' NEGLIGIBLE ENERGY WILL BE DISCARDED.',/,' ************* ') 976 FORMAT(1X,/,' *** WARNING *** INCONSISTENT INPUT ', & 'SPECIFICATION:' & ,/,' THE "HBEAM" OPTION WILL BE IGNORED AND' & ,/,' A GAUSSIAN SOURCE FIELD WILL BE PROPAGATED INSTEAD. ') 978 FORMAT(1X,/,' *** WARNING *** INCONSISTENT INPUT ', & 'SPECIFICATION:' & ,/,' THE REQUEST FOR A GAUSSIAN SOURCE WILL BE IGNORED AND' & ,/,' THE "HBEAM" OPTION WILL BE COMPUTED INSTEAD.') C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C C SOURCE PROPERTIES, SAMPLING DEPTH (MSP), ACCURACY (MAXRNG) C C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * DO 1020 I=1,NFF FF(I)=0.0 1020 CONTINUE C DO 1040 I=1,NDEP C0(I)=0.0 C1(I)=0.0 Z0(I)=0.0 Z1(I)=0.0 1040 CONTINUE C HMIN=1.0E38 HMAX=0.0 H0MAX=0.0 BPHVEL=0.0 C READ(LUIN,'(a)') TITLE READ(LUIN, *, ERR=1100) NFREQ GO TO 1150 1100 WRITE(LUPRT,900) WRITE(LUPRT,680) RETURN 1 1150 CONTINUE IF(NFREQ.LE.NFF) GO TO 1200 ITEMP=NFF WRITE(LUPRT,410) WRITE(LUPRT,430) ITEMP,NFREQ RETURN 1 C INPUT FREQUENCIES ARE READ AND ARRANGED TO BE A C MONOTONIC INCREASING FUNCTION. 1200 READ(LUIN,*)(FF(I),I=1,NFREQ) IF(NFREQ .EQ. 1) GO TO 1450 DO 1300 II=2,NFREQ I=II 1250 CONTINUE IF(FF(I) .GT. FF(I-1)) GO TO 1300 TEMP=FF(I) FF(I)=FF(I-1) FF(I-1)=TEMP I=I-1 IF(I.GT.1) GO TO 1250 1300 CONTINUE C C LOOP TO REMOVE EVENTUAL REPETITIONS OF C FREQUENCY VALUES. C I=1 DO 1400 II=2,NFREQ IF(FF(I) .EQ. FF(II)) GO TO 1350 TEMP=FF(II) I=I+1 FF(I)=TEMP GO TO 1400 1350 WRITE(LUPRT,118) FF(I) 1400 CONTINUE NFREQ=I 1450 CONTINUE IF(FF(1).GT.0.0) GO TO 1500 WRITE(LUPRT,105) WRITE(LUPRT,110)(FF(I),I=1,NFREQ) WRITE(LUPRT,115) RETURN 1 1500 CONTINUE C READ(LUIN,*,ERR=1525) MINMOD, MAXMOD, MODCUT C ___________________________________________________________ DO 1502 I= 1, 3 1502 BUFFIN(I)= 0.0 READ(LUIN, 125, ERR= 1525) WORD CALL RFFORM(WORD,80,BUFFIN,1,3,ERROR) IF(ERROR .NE. 0) GO TO 1525 MINMOD= BUFFIN(1) MAXMOD= BUFFIN(2) MODCUT= BUFFIN(3) IF(MODCUT .EQ. 0) MODCUT= MAXMOD C ___________________________________________________________ MODCUT= MIN(MODCUT,MODEN) IF(MINMOD .GT. 0) GO TO 1530 MINMOD=1 GO TO 1530 1525 WRITE(LUPRT,910) WRITE(LUPRT,680) RETURN 1 1530 CONTINUE C IF(MAXMOD .GT. MODEN-2) THEN MAXMOD=MODEN-2 WRITE(LUPRT,915) MAXMOD END IF C C READ(LUIN,*,ERR=1535)FACT0,FACT1 DO 1532 I= 1, 4 1532 BUFFIN(I)= 0.0 READ(LUIN,125) WORD CALL RFFORM(WORD,80,BUFFIN,1,4,ERROR) IF(ERROR .NE. 0) GO TO 1535 FACT0=BUFFIN(3) FACT1=BUFFIN(4) FLAGF0=0. FLAGF1=0. IF(BUFFIN(3) .LT. 0.) THEN FLAGF0=1. FACT0=1. ELSE IF(BUFFIN(3) .EQ. 0.) THEN FACT0=1. END IF IF(BUFFIN(4) .LT. 0.) THEN FLAGF1=1. FACT1=1. ELSE IF(BUFFIN(4) .EQ. 0.) THEN FACT1=1. END IF MAXRNG=BUFFIN(2) C MSPH0= JNINT(BUFFIN(1)) + 1 MSPH0= INT( BUFFIN(1) + 0.500) + 1 IF(MAXRNG .LT. 1.0E35) MAXRNG=MAXRNG*1.0E3 C GO TO 1540 1535 WRITE(LUPRT,920) WRITE(LUPRT,680) RETURN 1 1540 CONTINUE C WRITE(10) MINMOD, MAXMOD C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C C ENVIRONMENTAL INPUT C C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * I= 0 2800 CONTINUE READ(LUIN,125) WORD C IS IT A NUMBER OR A CODE WORD ? CALL ISITAN( WORD, *2900) BACKSPACE LUIN READ(LUIN, *, ERR= 2900) H0 BACKSPACE LUIN READ(LUIN, *, ERR= 2900) DUMMY, SCATT IBLANK=INDEX(WORD,'!') WTEMP= WORD IF(IBLANK .GT. 0) WTEMP(IBLANK:80)= BLANK(IBLANK:80) BUFFIN(4)= 0.0 BUFFIN(5)= 0.0 CALL RFFORM(WTEMP,80,BUFFIN,1,5,ERROR) IF(ERROR .NE. 0) THEN WRITE(LUPRT,950) WRITE(LUPRT,680) RETURN 1 ELSE I= I + 1 IF( I .GT. MAXPRF-1) THEN WRITE(LUPRT,700) MAXPRF-1 STOP END IF END IF RPROF(I)= BUFFIN(4) IF( I .EQ. 1 ) THEN IF( RPROF(I) .NE. 0.0 ) THEN WRITE(LUPRT,960) WORD PRINT 960, WORD STOP END IF ELSE IF( RPROF(I) .LE. RPROF(I-1) ) THEN WRITE(LUPRT,970) I, RPROF(I-1), RPROF(I), WORD PRINT 970, I, RPROF(I-1), RPROF(I), WORD STOP END IF NDIVP2(I)= BUFFIN(5) C READ(LUIN,*) RPROF(I), NDIVP2(I) C READ(LUIN,*) H0, SCATT IF( H0 .GT. 0.0 ) THEN BATHY(I)= H0 ND0=1 READ(LUIN,*) Z0(1), C0(1) IF(Z0(1) .NE. 0.0) THEN WRITE(LUPRT,660) I, H0 WRITE(LUPRT,670) (Z0(ID),C0(ID),ID=1,ND0) WRITE(LUPRT,680) STOP END IF 1750 CONTINUE ND0= ND0+1 IF(ND0 .GT. NDEP) THEN WRITE(LUPRT,410) WRITE(LUPRT,450) ND0, NDEP STOP END IF READ(LUIN,*) Z0(ND0), C0(ND0) IF( (Z0(ND0) .LT. Z0(ND0-1)) .OR. & ((Z0(ND0)/H0 - 1.0) .GT. 1.0E-05) ) THEN WRITE(LUPRT,660) I, H0 WRITE(LUPRT,670)(Z0(ID),C0(ID),ID=1,ND0) WRITE(LUPRT,680) STOP ELSE IF( (ABS(Z0(ND0)/H0 - 1.0) .GT. 1.0E-05)) GO TO 1750 H0= Z0(ND0) END IF C THIS POINT IS REACHED WHEN Z0(ND0) IS ASSUMED TO BE EQUAL TO H0 C CALCULATION OF AVERAGE SOUND SPEED OF WATER LAYER CC0=0. DO 1860 J=1,ND0-1 1860 CC0=CC0+((C0(J)+C0(J+1))*(Z0(J+1)-Z0(J)))/2.0 CC0=CC0/H0 ELSE C The case with H0= 0 is approximated by introducing a 1mm water C layer with sound speed derived from the previous region. ND0= 2 H0= 1.0D-3 Z0(ND0)= H0 C0(ND0)= C0(1) + 1.0E-3 * (C0(2) - C0(1)) / (Z0(2) - Z0(1)) CC0= 0.5 * (C0(ND0) + C0(1)) END IF READ(LUIN,*) H1 IF(H1 .GT. 0.0) THEN BACKSPACE LUIN READ(LUIN,125) WORD CALL RFFORM(WORD,80,BUFFIN,1,3,ERROR) C READ(LUIN,*) H1,R1,BETA(1) R1= BUFFIN(2) BETA(1)= BUFFIN(3) IF(R1 .LE.0.0) THEN WRITE(LUPRT,160) RETURN 1 END IF ND1=1 READ(LUIN,*) Z1(ND1), C1(ND1) IF(Z1(1) .NE. 0.0) THEN WRITE(LUPRT,690) I, H1 WRITE(LUPRT,670) (Z1(ID),C1(ID),ID=1,ND1) WRITE(LUPRT,680) STOP END IF 1950 CONTINUE ND1= ND1+1 IF(ND1 .GT. NDEP) THEN WRITE(LUPRT,410) WRITE(LUPRT,470) ND1, NDEP STOP END IF READ(LUIN,*) Z1(ND1), C1(ND1) IF( (Z1(ND1) .LT. Z1(ND1-1)) .OR. & ((Z1(ND1)/H1 - 1.0) .GT. 1.0E-05) ) THEN WRITE(LUPRT,690) I WRITE(LUPRT,670)(Z1(ID),C1(ID),ID=1,ND1) WRITE(LUPRT,680) STOP ELSE IF( (ABS(Z1(ND1)/H1 - 1.0) .GT. 1.0E-05)) GO TO 1950 H1= Z1(ND1) END IF ELSE IF(H1 .EQ. 0.0) THEN ND1= 0 BETA(1)=0.0 R1=0.0 ELSE WRITE(LUPRT,*) ' NEGATIVE VALUE FOR SEDIMENT DEPTH:',H1 STOP ' EXECUTION TERMINATED IN SUB input.f ' END IF H0H1= H0+H1 HMIN= MIN(HMIN,H0H1) HMAX= MAX(HMAX,H0H1) H0MAX= MAX(H0MAX,SNGL(H0)) READ(LUIN,*) R2, BETA(2), C2 IF(R2.GT.0.0) GO TO 2250 WRITE(LUPRT,170) RETURN 1 2250 CONTINUE IF(I .EQ. 1) THEN H0BEG=H0 H1BEG=H1 HTOT=H0H1 END IF READ(LUIN,*) BETA(3), C2S IF(C2S.LE.C2*SQRT(0.75)) GO TO 2300 WRITE(LUPRT,600) I RETURN 1 2300 IF(C2S.GT.0.0) GO TO 2400 BETA(3)= 0.0 GO TO 2500 2400 IF(BETA(3).LE.0.75*BETA(2)*(C2/C2S)**2) GO TO 2500 WRITE(LUPRT,650) I RETURN 1 2500 CONTINUE C CALCULATION OF AVERAGE SOUND SPEED OF TOP BOTTOM LAYER CC1=0.0 IF(ND1.GT.0) THEN DO 2600 J=1,ND1-1 2600 CC1=CC1+((C1(J)+C1(J+1))*(Z1(J+1)-Z1(J)))/2.0 CC1=CC1/H1 END IF C WRITE(10) RPROF(I) WRITE(10) R1, R2, H0, H1, ND0, ND1 WRITE(10) (BETA(J), J= 1, 3), SCATT, CC0, CC1 WRITE(10) (Z0(J), C0(J), J= 1, ND0) IF(ND1.GT.0) WRITE(10) (Z1(J), C1(J), J= 1, ND1) WRITE(10)C2,C2S GO TO 2800 2900 CONTINUE C THE NDIVP2 VALUE FOR THE LAST ENVIRONMENT IS SET C TO ZERO TO PREVENT INTRODUCING UNNECESSARY RANGE SUBDIVISIONS. NDIVP2(I)= 0 NSECT= I REWIND(10) C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * C C COMPUTATIONAL INPUT C C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * REREAD=1 I=0 3000 CONTINUE DO 3100 J=1,5 3100 SUBOPT(J)=' ' C C CHECK OF INPUT LINE TO DETERMINE REQUESTED OPTION C 3120 IF(REREAD .EQ. 0) READ(LUIN, 125, END= 8000) WORD IF( WORD .EQ. BLANK ) GO TO 3120 REREAD=0 IF(WORD(1:4) .EQ. '@EOF') GO TO 8000 IF(WORD(1:1) .EQ. '!') THEN GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'PLANE') THEN PLANE=1.0 WRITE(LUPRT,870) GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'NOVOL') THEN NOVOL=1 WRITE(LUPRT,872) GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'FRQDP') THEN WORD(1:5)= ' ' BUFFIN(1)= 0.0 BUFFIN(2)= 0.0 CALL RFFORM(WORD,80,BUFFIN,1,2,ERROR) IF(ERROR. NE. 0) THEN WORD(1:5)= 'FRQDP' WRITE(LUPRT,894) WORD WRITE(LUPRT,680) RETURN 1 ELSE FRQREF= BUFFIN(1) FPOW= BUFFIN(2) END IF GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'SUMPL') THEN SUMPL= 1.0 GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'MODST') THEN C MODAL STARTER MODST= 1 GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'FIXDZ') THEN C WRITE(LUPRT,*) ' FIXDZ NOT AVAILABLE ' C PRINT *,' FIXDZ NOT AVAILABLE ' FIXDZ=1 WRITE(LUPRT,972) GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'INPDZ') THEN WORD(1:5)= ' ' BUFFIN(1)= 0.0 C BUFFIN(2)= 0.0 CALL RFFORM(WORD,80,BUFFIN,1,2,ERROR) IF(ERROR .NE. 0) THEN WORD(1:5)= 'INPDZ' WRITE(LUPRT,876) WORD(1:5), WORD WRITE(LUPRT,680) RETURN 1 ELSE DZH0= BUFFIN(1) DZH1= BUFFIN(2) INPDZ= 1 MSHRAT= 2 FIXDZ= 1 WRITE(LUPRT,882) DZH0, DZH1 C WRITE(LUPRT,882) DZH0 END IF GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'DFFSN') THEN WORD(1:5)= ' ' BUFFIN(1)= 0.0 BUFFIN(2)= 0.0 CALL RFFORM(WORD,80,BUFFIN,1,2,ERROR) IF(ERROR .NE. 0) THEN WORD(1:5)= 'DFFSN' WRITE(LUPRT,876) WORD(1:5), WORD WRITE(LUPRT,680) RETURN 1 ELSE DFMIN= BUFFIN(1)*1.0E3 DFSTEP= BUFFIN(2)*1.0E3 DFFSN= 1.0 END IF GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'OPTMZ') THEN OPTMZ=1 WRITE(LUPRT,974) GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'NMESH') THEN WORD(1:5)= ' ' BUFFIN(1)= 0.0 CALL RFFORM(WORD,80,BUFFIN,1,1,ERROR) IF(ERROR. NE. 0) THEN WORD(1:5)= 'NMESH' WRITE(LUPRT,876) WORD(1:5), WORD WRITE(LUPRT,680) RETURN 1 ELSE NMESH= BUFFIN(1) IF(NMESH .LE. 0) THEN WRITE(LUPRT,942) WORD(1:5)= 'NMESH' WRITE(LUPRT,876) WORD(1:5), WORD WRITE(LUPRT,680) RETURN 1 ELSE IF(NMESH .GT. MAXMSH) THEN NMESH= MAXMSH WRITE(LUPRT,946) NMESH END IF END IF GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'IMESH') THEN WORD(1:5)= ' ' BUFFIN(1)= 0.0 CALL RFFORM(WORD,80,BUFFIN,1,1,ERROR) IF(ERROR. NE. 0) THEN WORD(1:5)= 'IMESH' WRITE(LUPRT,876) WORD(1:5), WORD WRITE(LUPRT,680) RETURN 1 ELSE IMESH= BUFFIN(1) IF(IMESH .LE. 0) THEN WRITE(LUPRT,944) WORD(1:5)= 'IMESH' WRITE(LUPRT,876) WORD(1:5), WORD WRITE(LUPRT,680) RETURN 1 ELSE IF(IMESH .GT. MAXMSH) THEN IMESH= MAXMSH C WRITE(LUPRT,948) IMESH END IF END IF GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'NSMPL') THEN WORD(1:5)= ' ' BUFFIN(1)= 0.0 CALL RFFORM(WORD,80,BUFFIN,1,1,ERROR) IF(ERROR. NE. 0) THEN WORD(1:5)= 'NSMPL' WRITE(LUPRT,884) WORD WRITE(LUPRT,680) RETURN 1 ELSE NSMPL= BUFFIN(1) IF(NSMPL .LE. 0) THEN WRITE(LUPRT,940) WORD(1:5)= 'NSMPL' WRITE(LUPRT,884) WORD WRITE(LUPRT,680) RETURN 1 END IF END IF GO TO 3000 ELSE IF(WORD(1:6) .EQ. 'N14241') THEN N14241= 1 N12221= 0 GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'DOUBL') THEN MSHRAT= 2 WRITE(LUPRT,886) GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'NOLOS') THEN NOLOSS=1 WRITE(LUPRT,892) GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'CNVRG') THEN WORD(1:5)= ' ' BUFFIN(1)= 0.0 CALL RFFORM(WORD,80,BUFFIN,1,1,ERROR) IF(ERROR. NE. 0) THEN WORD(1:5)= 'CNVRG' WRITE(LUPRT,894) WORD WRITE(LUPRT,680) RETURN 1 ELSE ENRCHK= 1.0 WRITE(LUPRT,888) ERRMAX= BUFFIN(1) WRITE(LUPRT,896) ERRMAX END IF GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'MATCH') THEN WORD(1:5)= ' ' BUFFIN(1)= 0.0 CALL RFFORM(WORD,80,BUFFIN,1,1,ERROR) IF(ERROR. NE. 0) THEN WORD(1:5)= 'MATCH' WRITE(LUPRT,894) WORD WRITE(LUPRT,680) RETURN 1 ELSE MATCH= BUFFIN(1) IF( ( MATCH .LT. 1) .OR. ( MATCH .GT. 3 ) ) THEN WRITE(LUPRT,520) PRINT 520 WRITE(LUPRT,680) RETURN 1 END IF END IF GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'HBEAM') THEN WORD(1:5)= ' ' BUFFIN(1)= 0.0 CALL RFFORM(WORD,80,BUFFIN,1,1,ERROR) IF(ERROR. NE. 0) THEN WORD(1:5)= 'HBEAM' WRITE(LUPRT,894) WORD WRITE(LUPRT,680) RETURN 1 ELSE HBEAM= BUFFIN(1) MINMOD= 1 MAXMOD= MODEN-2 MODCUT= MODEN-2 IF( GAUSS .GT. 0.0 ) THEN GAUSS= 0.0 TH1= 0.0 TILT= 0.0 WRITE(LUPRT,978) END IF END IF GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'GAUSS') THEN WORD(1:5)= ' ' BUFFIN(1)= 0.0 CALL RFFORM(WORD,80,BUFFIN,1,2,ERROR) IF(ERROR. NE. 0) THEN WORD(1:5)= 'GAUSS' WRITE(LUPRT,894) WORD WRITE(LUPRT,680) RETURN 1 ELSE GAUSS= 1.0 TH1= BUFFIN(1) TILT= BUFFIN(2) MINMOD= 1 MAXMOD= MODEN-2 MODCUT= MODEN-2 IF( HBEAM .GT. 0.0) THEN WRITE(LUPRT,976) HBEAM= 0.0 END IF END IF GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'NOCYL') THEN NOCYL= 1 WRITE(LUPRT,898) GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'LARGE') THEN LARGE= 1 WRITE(LUPRT,902) GO TO 3000 ELSE IF(WORD(1:5) .EQ. 'SNAP ') THEN IF( NSECT .EQ. 1 ) THEN MODEL(1:6)='SNAP ' ELSE WRITE(LUPRT,906) END IF GO TO 3000 END IF READ(WORD,140) OPTION,(SUBOPT(I),I=1,5) CALL CHKOPT(I, OPTION, SUBOPT, ALPHA1, ALPHA2, & FLAG, FLAG1, OUTPUT, *3500) RETURN 1 3500 CONTINUE WORD=BLANK 3520 READ(LUIN, 125, END= 3540) WORD GO TO 3560 3540 CONTINUE WORD(1:4)= '@EOF' 3560 CONTINUE IF( WORD .EQ. BLANK ) GO TO 3520 IF(WORD(1:4) .EQ. '@EOF') THEN REREAD=1 GO TO 7000 END IF CALL RFFORM(WORD,80,DUMMY,1,1,ERROR) IF(ERROR .GT. 0) THEN C INPUT LINE BEGINS WITH AN ALPHABETICAL CHARACTER. C THE CASES ARE: NEW OPTION, PLOT AXIS, FILE REQUEST, DEPTH INTERVAL CALL RDALFA(I,REREAD,WORD,ALPHA1,AX,AY,AS,STORE, & *7000,*3500) RETURN 1 ELSE CALL RDNUMB( I, WORD, REREAD, ALPHA1, H1BEG, H0BEG, & SECD, SRD, LUIN, *7000, *3600) RETURN 1 3600 CONTINUE C READING SOURCE/RECEIVER DEPTHS CALL RDSD(I,WORD,REREAD,LUIN,ALPHA1,HTOT,HMAX, & SRD,*7000) RETURN 1 END IF 7000 CONTINUE CALL REVISE(I,FF,NFREQ,ALPHA1, & H0,H0MAX,H1,H0BEG, & NINC,NXVAL, & FLAG,AX,AY,SECD,SRD,HMAX,RPROF(NSECT),NSECT,*3000) RETURN 1 8000 CONTINUE IF( (I .EQ. 0) .AND. (ENRCHK .LT. 1.0) ) THEN WRITE(LUPRT,416) RETURN 1 END IF IF(MSPH0 .EQ. 1) MSPH0=51 MSPZ=MSPH0 C IF(MSPZ .LE. MSP) THEN MSP=MSPZ C ELSE C WRITE(LUPRT,418) MSP,MSPH0 C RETURN 1 C END IF C CHECK ON NUMBER OF C SOURCE RECEIVER DEPTHS COMBINATIONS, AND C OF MINIMUM NUMBER OF FREQUENCIES FOR C 'CONFR', 'CONDA' AND 'HORWN' OPTIONS. C DO 7600 IOP= 1, 3 IF(IOP .EQ. 1) THEN I=9 C CASE WHEN ALPHA1(I)= 'CONFR' C THE NUMBER OF SOURCE/RECEIVER DEPTHS IS LIMITED TO ONE AND C THE CHOICE OF MODE ADDITION TO EITHER COHERENT OR (EXCLUSIVE OR) C INCOHERENT TYPE. THE LIMITATION IS DUE TO THE PROBLEM ASSOCIATED C WITH THE NAMING OF THE OUTPUT FILES AND THE SORTING OF THE C INTERMEDIATE OUTPUT FILES. WITH THE PRESENT STRUCTURE C OPTION CONFR CAN HAVE ONLY ONE SET OF OUTPUT FILES : C "INPUTFILE"_FR.CDR and "INPUTFILE"_FR.BDR. IF(FLAG(I,1) .GT. 0.0) THEN IF( SRD(I,2,1) .GT. 0.) THEN WRITE(LUPRT, 692) PRINT 692 DO 7520 IS= 2, KSRD SRD(I,IS,1)= 0.0 SRD(I,IS,2)= 0.0 7520 CONTINUE END IF IF( (FLAG(I,5) + FLAG(I,6)) .GT. 1.0) THEN WRITE(LUPRT, 694) PRINT 694 FLAG(I,6)= 0.0 END IF KFREQ= 0 DO 7550 K= 1, NFREQ IF((FF(K) .GE. AY(I,1)).AND.(FF(K) .LE. AY(I,2))) & KFREQ= KFREQ+1 7550 CONTINUE IF(KFREQ.GE.2) GO TO 7600 WRITE(LUPRT,740) ALPHA1(I) WRITE(LUPRT,739) DO 7551 K= 1, NFREQ WRITE(LUPRT,741) K, FF(K) 7551 CONTINUE WRITE(LUPRT,742) AY(I,1),AY(I,2) FLAG1=-1.0 END IF ELSE IF(IOP .EQ. 2) THEN I=12 C CASE WHEN ALPHA1(I)= 'CONDA' ELSE IF(IOP .EQ. 3) THEN I=13 C CASE WHEN ALPHA1(I)= 'HORWN' END IF 7600 CONTINUE IF(FLAG1 .GT. -1.0) GO TO 7900 WRITE(LUPRT,680) RETURN 1 7900 CONTINUE RETURN END