C ISOINT.FOR SUBROUTINE ISOINT(ISO,MODEN, & DH0I,MH0I,MSEDI,DSEDI, & FRQ,SPEED,ADA,C0,Z0,C1,Z1, *) C C___________________________________________________________ C | C This routine isolates the eigenvalues by counting | C sign changes in the Sturm sequence. The counting | C is done by the routine STURM | C__________________________________________________________| C INTEGER EXTPOL DOUBLE PRECISION CMIN, H0, H1, STEP DOUBLE PRECISION TWOPI, PI, OMEGA, FRQ DOUBLE PRECISION ADA( * ), SPEED( * ), ISO( * ) DOUBLE PRECISION EIGREF, EIGMIN, EIGMAX, EIGVAL, MINEIG DOUBLE PRECISION DH0I, DSEDI, STIFF DOUBLE PRECISION C0(*), Z0(*), C1(*), Z1(*) COMMON /FLAGPL/ FIRST, FLAGP, FLAGPU, EXTPOL, CORREC COMMON /G/ H0, H1 COMMON /GEN/ EIGREF, EIGMIN, EIGMAX, STIFF COMMON /LUNIT/ LUPLP, LUPLT, LUPRT COMMON /N/ MINMOD, MAXMOD, MODCUT, HBEAM, BPHVEL COMMON /NA/ ND0, ND1, CMIN COMMON /TRIGON/ TWOPI, PI, OMEGA C 100 FORMAT(1X,/,' *** WARNING : ',/,' MODE CUTOFF FOR SOURCE', & ' FREQUENCY: ',F9.2,'Hz DETECTED IN SUB ISOINT.',/, & ' EXECUTION IS TERMINATED FOR THIS SOURCE FREQUENCY. ') 200 FORMAT(1X,/,' *** WARNING : ',/,' THE MAXIMUM ORDER MODE', & ' FOR WHICH COMPUTATION IS WANTED IS',/, & ' LARGER THAN THE MAXIMUM ORDER EXISTING MODE. ',/, & ' EXECUTION IS TERMINATED FOR THIS SOURCE FREQUENCY. ') 300 FORMAT(1H ,/ /,' SOURCE FREQUENCY =',F9.2,' HZ',/, & ' ESTIMATED MAXIMUM NO. OF MODES =',I5,/) 400 FORMAT(1X,/,' *** WARNING: ',/, & ' THE MAXIMUM NUMBER OF MODES IN THE SOURCE FIELD WILL BE', & ' ADJUSTED TO',/,' MATCH THE',F8.2,' deg', & ' HALF_BEAMWIDTH LIMITATION SPECIFIED ON INPUT.') 500 FORMAT(1X,'THE RESULTING HIGHEST ORDER MODE IS:',I5,' .',//) C DO 1000 I= 1, MODEN 1000 ISO(I)= 0.D0 CALL MDIAG(MH0I,MSEDI,DH0I,DSEDI, & SPEED,ADA,C0,Z0,C1,Z1) MINEIG=EIGMIN*1.00001D0 C FIND THE ESTIMATED NUMBER OF PROPAGATING MODES: NCROSS. CALL STURM(MINEIG,MH0I,MSEDI,DH0I,DSEDI,NCROSS,ADA) IF( (FLAGPU.LT.1.0) .AND. (FIRST.EQ.0.0) ) THEN WRITE(LUPRT,300) FRQ, NCROSS IF( BPHVEL .GT. 0.0 ) THEN MINEIG= ( (OMEGA*H0)/(DBLE(BPHVEL)*MH0I) )**2 WRITE(LUPRT,400) HBEAM C FIND THE ESTIMATED NUMBER OF MODES IN THE HALF BEAM SOURCE. CALL STURM(MINEIG,MH0I,MSEDI,DH0I,DSEDI,NCROSS,ADA) WRITE(LUPRT,500) NCROSS END IF FIRST=1.0 END IF MAXMOD=MIN(MAXMOD,NCROSS) IF(MAXMOD .LT. 1) THEN WRITE(LUPRT,100) FRQ RETURN 1 END IF IF(MAXMOD .LT. MINMOD) THEN WRITE(LUPRT,200) RETURN 1 END IF C MAXIND=MIN(MODEN,NCROSS-MINMOD+2) ISO(MAXIND)=MINEIG C C ISOLATE THE EIGENVALUES C IF(MINMOD.EQ.1) THEN ISO(1)=EIGMAX M1=1 ELSE M1=MINMOD-1 ENDIF 2000 CONTINUE EIGVAL=(EIGMAX+MINEIG)*.5D0 STEP=(EIGMAX-MINEIG)*.5D0 3000 CONTINUE CALL STURM(EIGVAL,MH0I,MSEDI,DH0I,DSEDI,M,ADA) STEP=STEP*0.5D0 INDEX=MIN(MODEN,M-MINMOD+2) INDEX=MAX(1,INDEX) IF(INDEX .GT. 1) THEN IF(ISO(INDEX).EQ.0.D0.AND.M+1.GE.MINMOD.AND.M.LE.MAXMOD) & ISO(INDEX)=EIGVAL ELSE ISO(1)=EIGVAL END IF IF(M.GT.M1) THEN EIGVAL=EIGVAL+STEP GO TO 3000 ELSEIF(M.LT.M1) THEN EIGVAL=EIGVAL-STEP GO TO 3000 ENDIF 4000 CONTINUE M1=M1+1 IF(M1.EQ.MAXMOD+1) RETURN IF(ISO(M1-MINMOD+2).EQ.0.D0) THEN EIGMAX=ISO(M1-MINMOD+1) GO TO 2000 ELSE GO TO 4000 ENDIF END