C MESHES.FOR SUBROUTINE MESHES( MREF, IREF, FRQ, & NPH0, MRH0, & NPH1, MRH1 ) C__________________________________________________________ C | C This routine estimates the max number of modes | C in both the water and sediment layers and the | C number of discretization points to be used in the | C finite difference scheme. | C__________________________________________________________| INTEGER FIXDZ, OPTMZ, MREF(*) DOUBLE PRECISION FRQ, CMIN DOUBLE PRECISION CC0, CC1, H0, H1 COMMON /AB/ BETA(-1:3), SCATT(2), C2S, CC0, CC1, C2 COMMON /APM/ NSMPL, NSMDEF COMMON /G/ H0, H1 COMMON /FACTS/ FACT0, FACT1, FLAGF0, FLAGF1 COMMON /FLAGPL/ FIRST, FLAGP, FLAGPU, EXTPOL, CORREC 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 /NORM/ N12221, N14241 COMMON /PARAM1/ IRANGE, IFREQ, JUMP, MODQTY COMMON /PARAM3/ IMESH, NMESH, MSHRAT, OPTMZ COMMON /PARAM4/ MESHI, MESHN COMMON /RNGPRF/ NSECT, RKM C NPH0 number of subdivisions in layer H0 C NPH1 number of subdivisions in layer H1 C MRH0 multiplier of first mesh in layer H0 C MRH1 multiplier of first mesh in layer H1 C NSMPL input parameter: it specifies the number of points/mode. C FACT0 input parameter: it is a multiplier for NSMPL in H0 C FACT1 input parameter: it is a multiplier for NSMPL in H1 100 FORMAT(1X,/, & ' NUMBER OF SAMPLES/MODE :' ,I4 ,/) 101 FORMAT(1X,/, & ' FIXED DZ, INPUT VALUES : DZH0, DZH1 ',2(F8.2,2X),/) 110 FORMAT(' ESTIMATED NUMBER OF MODES IN LAYER H0 :' ,F9.2) 111 FORMAT(' ESTIMATED NUMBER OF MODES IN LAYER H1 :' ,F9.2) 112 FORMAT(' ESTIMATED NUMBER OF MODES IN LAYER H0+H1:' ,F9.2) 120 FORMAT(' ESTIMATED DZ IN LAYER H0 :' ,F9.2,' m') 121 FORMAT(' ESTIMATED DZ IN LAYER H1 :' ,F9.2,' m') 122 FORMAT(' ESTIMATED DZ IN LAYER H0+H1 :' ,F9.2,' m') 123 FORMAT(' RESULTING ESTIMATED DZ ON FIRST MESH :' ,F9.2,' m') 160 FORMAT(' DZ IN LAYER H0 ON FIRST MESH :' ,F9.2,' m') 161 FORMAT(' DZ IN LAYER H1 ON FIRST MESH :' ,F9.2,' m') 200 FORMAT(' PREDICTED/USED # OF POINTS ON FIRST MESH IN LAYER H0 :', & I6,' /',I6,/, & ' FINAL DZ ON FIRST MESH IN LAYER H0 :',F9.2,' m') 201 FORMAT(' PREDICTED/USED # OF POINTS ON FIRST MESH IN LAYER H1 :', & I6,' /',I6,/, & ' FINAL DZ ON FIRST MESH IN LAYER H1 :',F9.2,' m') 220 FORMAT(' NUMBER OF POINTS USED ON FIRST MESH IN LAYER H0 :',I6) 221 FORMAT(' NUMBER OF POINTS USED ON FIRST MESH IN LAYER H1 :',I6) 300 FORMAT(1X, ' OUTPUT MESH FOR MODEAMPS CANNOT EXCEED THE TOTAL', & ' NUMBER OF MESHES.',/,' REVISE INPUT RUN STREAM.',/, & ' TOTAL NUMBER OF MESHES : ',I2,'; OUTPUT MESH : ',I2) 320 FORMAT(1X,/, ' *** MESSAGE FROM SUB MESHES :',//, & ' ESTIMATED NUMBER OF MESHES :' ,I4 ,/, & ' MODEAMP POSSIBLY MADE AVAILABLE ON MESH No. :' ,I4 ,/) C TMH0 ESTIM # OF MODES IN LAYER H0 C TMH1 ESTIM # OF MODES IN LAYER H1 C TMTOT ESTIM # OF MODES IN LAYER HTOT= H0 + H1 IF( RKM .EQ. 0.0 ) THEN IF( MESHI .GT. MESHN ) THEN WRITE(LUPRT,300) MESHN, MESHI STOP ' SUB MESH_SIZE ' ELSE IF(JUMP .LE. 0) WRITE(LUPRT,320) MESHN, MESHI END IF IF( JUMP .LE. 0 ) THEN IF( H0*DZH0 + H1*DZH1 .EQ. 0.) THEN WRITE(LUPRT,100) NSMPL ELSE WRITE(LUPRT,101) DZH0, DZH1 END IF END IF END IF MBASE= MREF(IREF) IF( INPDZ .GT. 0 ) MBASE= 1 RBASE= MBASE C ESTIMATED MAX NUMBER OF MODES IN LAYER H0 TMH0= 0.0 IF( H0 .GT. 0.0 ) THEN TMH0= ANINT(( 2.0*FRQ*H0/CC0 ) * & ( LOG( SQRT(1.0 - (CC0/C2)) + 1.0 ) ) / LOG(2.0)) IF(TMH0 .GT. 0.0) THEN TDH0= H0/(NSMPL*TMH0) ELSE TDH0= MAX(H0,H1) END IF END IF H0SNGL= H0 H1SNGL= H1 IF( INPDZ .LT. 1 ) THEN C ESTIMATED MAX NUMBER OF MODES IN LAYER H1 TMH1= 0.0 TDH1= MAX(H0,H1) IF( H1 .GT. 0.0 ) THEN TMH1= ANINT(( 2.0*FRQ*H1/CC1 ) * & ( LOG( SQRT(1.0 - MIN(1.0D0,(CC1/C2))) + 1.0 ) ) / & LOG(2.0)) IF(TMH1 .GT. 0.0) TDH1= H1/(NSMPL*TMH1) END IF C ESTIMATED MAX NUMBER OF MODES IN LAYERS H0+H1 HTOT= H0 + H1 CAVRG= (H0*CC0 + H1*CC1)/HTOT TMTOT= ANINT(( 2.0*FRQ*HTOT/CAVRG ) * & ( LOG( SQRT(1.0 - (CAVRG/C2)) + 1.0 ) ) / LOG(2.0)) IF(TMTOT .GT. 0.0) THEN TDTOT= HTOT/(NSMPL*TMTOT) ELSE TDTOT= HTOT END IF IF( FLAGPU .LT. 1.0 ) THEN IF( H0 .GT. 0.0 ) WRITE(LUPRT,110) TMH0 IF( H1 .GT. 0.0 ) WRITE(LUPRT,111) TMH1 IF( H0 .GT. 0.0 .AND. H1 .GT. 0.0 ) WRITE(LUPRT,112) TMTOT END IF DZTOT= MIN(TDH0,TDH1,TDTOT) IF( FLAGPU .LT. 1.0 ) THEN IF( H0 .GT. 0.0) WRITE(LUPRT,120) TDH0 IF( H1 .GT. 0.0) WRITE(LUPRT,121) TDH1 IF( H0 .GT. 0.0 .AND. H1 .GT. 0.0 ) WRITE(LUPRT,122) TDTOT WRITE(LUPRT,123) DZTOT END IF IF( H0 .GT. 0.0 ) THEN RNPH0= ANINT(H0SNGL/DZTOT) NPH0= MAX( 2., RNPH0 ) ELSE NPH0= 0 MRH0= 0 END IF IF( H1 .GT. 0.0 ) THEN RNPH1= ANINT(H1SNGL/DZTOT) NPH1= MAX( RNPH1, 1.0 ) ELSE NPH1= 0 MRH1= 0 END IF ELSE C case with INPDZ .GT. 0 MRH0= 1 MRH1= 1 DZH0= DZH0 * 2 ** (MESHI - 1) DZH1= DZH1 * 2 ** (MESHI - 1) IF( H0 .GT. 0.0 ) THEN IF( FLAGPU .LT. 1.0 ) WRITE(LUPRT,160) DZH0 RNPH0= ANINT(H0SNGL/DZH0) NPH0= MAX( 2., RNPH0 ) ELSE C THIS CASE TO BE IMPLEMENTED YET NPH0= 0 MRH0= 0 END IF IF( H1 .GT. 0.0 ) THEN IF( FLAGPU .LT. 1.0 ) WRITE(LUPRT,161) DZH1 RNPH1= ANINT(H1SNGL/DZH1) NPH1= MAX( RNPH1, 1.0 ) ELSE NPH1= 0 MRH1= 0 END IF END IF IF(N14241 .EQ. 1) THEN NPH0= NPH0 + MOD(NPH0,2) NPH1= NPH1 + MOD(NPH1,2) END IF C INSERIRE CONTROLLO CON 40 E 50 OLTRECHE' CON 32 IF( MSHRAT .NE. 2 ) THEN IF( H0 .GT. 0.0 ) THEN MRH0= MAX( ANINT(RNPH0/RBASE), 1.0 ) FDZH0= H0SNGL/(MRH0*MBASE ) IF( FLAGPU .LT. 1.0 ) WRITE(LUPRT,200) NPH0, MRH0*MBASE, & FDZH0 ELSE MRH0= 0 FDZH0= 0.0 END IF IF( H1 .GT. 0.0 ) THEN MRH1= MAX( ANINT(RNPH1/RBASE), 1.0 ) FDZH1= H1SNGL/(MRH1*MBASE ) IF( FLAGPU .LT. 1.0 ) WRITE(LUPRT,201) NPH1, MRH1*MBASE, & FDZH1 ELSE MRH1= 0 FDZH1= 0.0 END IF ELSE IF( FLAGPU .LT. 1.0 ) THEN IF( H0 .GT. 0.0 ) WRITE(LUPRT,220) NPH0 IF( H1 .GT. 0.0 ) WRITE(LUPRT,221) NPH1 END IF END IF CALL REVIEW( MREF, IREF, MRH0, MRH1, FRQ ) C ADOPT PRESENT DZ FOR SUBSEQUENT PROFILES ? IF(INPDZ .GT. 0) RETURN IF( FIXDZ .GT. 0 ) THEN INPDZ= 1 DZH0= H0 / NPH0 DZH1= DZH0 IF( NPH1 .GT. 0.0 ) DZH1= H1 / NPH1 END IF RETURN END