diff --git a/inc/IHOP.h b/inc/IHOP.h index 77c14a3..7407ad9 100644 --- a/inc/IHOP.h +++ b/inc/IHOP.h @@ -52,20 +52,23 @@ !-- COMMON /IHOP_PARAMS_I/ IHOP Integer-type parameters: ! IHOP_nalpha :: No. of rays to propagate +! IHOP_nts :: No. of sample times ! IHOP_nsd :: No. of source depths (m) ! IHOP_nrd :: No. of receiver depths (m) ! IHOP_nrr :: No. of receiver ranges (km) +! IHOP_iter :: GCM iteration to run ihop INTEGER IHOP_nalpha + INTEGER IHOP_nts INTEGER IHOP_nsd INTEGER IHOP_nrd INTEGER IHOP_nrr - INTEGER ihop_iter + INTEGER ihop_iter(nts) INTEGER IHOP_npts_range INTEGER IHOP_npts_idw COMMON /IHOP_PARAMS_I/ & - & IHOP_nsd, & + & IHOP_nts, IHOP_nsd, & & IHOP_nrd, IHOP_nrr, & & IHOP_npts_range, IHOP_npts_idw, & & IHOP_nalpha, ihop_iter @@ -83,8 +86,6 @@ ! IHOP_rr :: receiver ranges (km) ! IHOP_alpha :: bearing launch angles (degrees) ! IHOP_step :: step length (m) -! IHOP_zbox :: acoustic domain depth (m) -! IHOP_rbox :: acoustic domain range (km) _RL IHOP_freq _RL IHOP_depth diff --git a/inc/IHOP_OPTIONS.h b/inc/IHOP_OPTIONS.h index c1aeacc..0c1f3cd 100644 --- a/inc/IHOP_OPTIONS.h +++ b/inc/IHOP_OPTIONS.h @@ -27,6 +27,8 @@ #define IHOP_2D_STATE #define IHOP_TENDENCY +#define IHOP_MULTIPLE_TIMES + #undef IHOP_MULTIPLE_SOURCES #undef IHOP_MULTIPLE_RECEIVER_DEPTHS diff --git a/inc/IHOP_SIZE.h b/inc/IHOP_SIZE.h index 85764fd..95bdb9f 100644 --- a/inc/IHOP_SIZE.h +++ b/inc/IHOP_SIZE.h @@ -11,6 +11,18 @@ ! \ev !EOP +! nts :: No. of time series points +! ================================ +! Number of time series: +! ================================ + INTEGER nts +#ifdef IHOP_MULTIPLE_TIMES + PARAMETER ( nts=10 ) +#else + PARAMETER ( nts=1 ) +#endif + + ! nsd :: No. of sound sources at range of 0 m ! nrd :: No. of sound receivers at a single range ! nrr :: No. of sound receivers at a single depth diff --git a/mitgcm_input/data.ihop b/mitgcm_input/data.ihop index 766298f..98b8b3a 100644 --- a/mitgcm_input/data.ihop +++ b/mitgcm_input/data.ihop @@ -26,5 +26,5 @@ &IHOP_PARM03 IHOP_interpfile = 'bc-gyre_ihop-grid.nc', - ihop_iter = 9, + ihop_iter = 4,9, & diff --git a/src/bdry_mod.F90 b/src/bdry_mod.F90 index 65b3e82..4e400fd 100644 --- a/src/bdry_mod.F90 +++ b/src/bdry_mod.F90 @@ -136,6 +136,7 @@ SUBROUTINE ReadATI( FileRoot, TopATI, DepthT, myThid ) ! we'll be extending the altimetry to infinity to the left and right NatiPts = NatiPts + 2 + IF (ALLOCATED(phi)) DEALLOCATE(phi) ALLOCATE( Top( NatiPts ), phi( NatiPts ), Stat = IAllocStat ) IF ( IAllocStat /= 0 ) THEN #ifdef IHOP_WRITE_OUT @@ -538,6 +539,7 @@ SUBROUTINE ComputeBdryTangentNormal( Bdry, BotTop ) END SELECT ! compute curvature in each segment + IF (ALLOCATED(phi)) DEALLOCATE(phi) ALLOCATE( phi( NPts ), Stat = IAllocStat ) ! phi is the angle at each node phi = atan2( Bdry( : )%Nodet( 2 ), Bdry( : )%Nodet( 1 ) ) diff --git a/src/beampattern.F90 b/src/beampattern.F90 index 1963bb7..728dc56 100644 --- a/src/beampattern.F90 +++ b/src/beampattern.F90 @@ -62,6 +62,7 @@ SUBROUTINE ReadPat( FileRoot, myThid ) WRITE( PRTFile, * ) 'Number of source beam pattern points', NSBPPts #endif /* IHOP_WRITE_OUT */ + IF (ALLOCATED(SrcBmPat)) DEALLOCATE(SrcBmPat) ALLOCATE( SrcBmPat( NSBPPts, 2 ), Stat = IAllocStat ) IF ( IAllocStat /= 0 ) THEN #ifdef IHOP_WRITE_OUT @@ -86,6 +87,7 @@ SUBROUTINE ReadPat( FileRoot, myThid ) ELSE ! no pattern given, use omni source pattern NSBPPts = 2 + IF (ALLOCATED(SrcBmPat)) DEALLOCATE(SrcBmPat) ALLOCATE( SrcBmPat( 2, 2 ), Stat = IAllocStat ) IF ( IAllocStat /= 0 ) THEN #ifdef IHOP_WRITE_OUT diff --git a/src/bellhop.F90 b/src/bellhop.F90 index c77e423..64f6068 100644 --- a/src/bellhop.F90 +++ b/src/bellhop.F90 @@ -28,7 +28,7 @@ MODULE BELLHOP USE ihop_mod, only: rad2deg, i, MaxN, Title, Beam, ray2D, istep, & NRz_per_range, afreq, SrcDeclAngle, & PRTFile, SHDFile, ARRFile, RAYFile, DELFile - USE readEnviHop, only: ReadEnvironment, OpenOutputFiles + USE readEnviHop, only: ReadEnvironment, OpenOutputFiles, resetMemory USE angle_mod, only: Angles, ialpha USE srPos_mod, only: Pos USE ssp_mod, only: EvaluateSSP, HSInfo, Bdry, SSP, betaPowerLaw, fT @@ -65,11 +65,13 @@ MODULE BELLHOP EXTERNAL ILNBLNK CONTAINS - SUBROUTINE IHOP_INIT ( myThid ) + SUBROUTINE IHOP_INIT ( myTime, myIter, myThid ) ! !INPUT/OUTPUT PARAMETERS: ! == Routine Arguments == ! myThid :: Thread number. Unused by IESCO ! msgBuf :: Used to build messages for printing. + _RL, INTENT( IN ) :: myTime + INTEGER, INTENT( IN ) :: myIter INTEGER, INTENT( IN ) :: myThid CHARACTER*(MAX_LEN_MBUF):: msgBuf @@ -81,25 +83,26 @@ SUBROUTINE IHOP_INIT ( myThid ) ! added locally previously read in from unknown mod ... IEsco2022 CHARACTER ( LEN=2 ) :: AttenUnit ! For MPI writing: copying eeboot_minimal.F - CHARACTER*(13) :: fNam - CHARACTER*(6) :: fmtStr - INTEGER :: mpiRC, iTmp + CHARACTER*(MAX_LEN_FNAM) :: fNam + CHARACTER*(6) :: fmtStr + INTEGER :: mpiRC, IL ! =========================================================================== ! Open the print file: template from eeboot_minimal.F #ifdef IHOP_WRITE_OUT IF ( .NOT.usingMPI ) THEN - WRITE(myProcessStr, '(I4.4)') myProcId - WRITE(fNam,'(A,A,A,A)') TRIM(IHOP_fileroot),'.',myProcessStr(1:4),'.prt' + WRITE(myProcessStr, '(I10.10)') myIter + IL=ILNBLNK( myProcessStr ) + WRITE(fNam,'(A,A,A,A)') TRIM(IHOP_fileroot),'.',myProcessStr(1:IL),'.prt' OPEN(PRTFile, FILE = fNam, STATUS = 'UNKNOWN', IOSTAT = iostat ) #ifdef ALLOW_USE_MPI ELSE ! using MPI CALL MPI_COMM_RANK( MPI_COMM_MODEL, mpiMyId, mpiRC ) myProcId = mpiMyId - iTmp = MAX(4,1+INT(LOG10(DFLOAT(nPx*nPy)))) - WRITE(fmtStr,'(2(A,I1),A)') '(I',iTmp,'.',iTmp,')' + IL = MAX(4,1+INT(LOG10(DFLOAT(nPx*nPy)))) + WRITE(fmtStr,'(2(A,I1),A)') '(I',IL,'.',IL,')' WRITE(myProcessStr,fmtStr) myProcId - iTmp = ILNBLNK( myProcessStr ) + IL = ILNBLNK( myProcessStr ) mpiPidIo = myProcId pidIO = mpiPidIo @@ -107,8 +110,14 @@ SUBROUTINE IHOP_INIT ( myThid ) # ifdef SINGLE_DISK_IO IF( myProcId.eq.0) THEN # endif - WRITE(fNam,'(A,A,A,A)') & - TRIM(IHOP_fileroot),'.',myProcessStr(1:iTmp),'.prt' + IF (myIter.GE.0) THEN + WRITE(fNam,'(4A,I10.10,A)') & + TRIM(IHOP_fileroot),'.',myProcessStr(1:IL),'.',myIter,'.prt' + ELSE + WRITE(fNam,'(4A)') & + TRIM(IHOP_fileroot),'.',myProcessStr(1:IL),'.prt' + ENDIF + OPEN(PRTFile, FILE=fNam, STATUS='UNKNOWN', IOSTAT=iostat ) IF ( iostat /= 0 ) THEN WRITE(*,*) 'ihop: IHOP_fileroot not recognized, ', & @@ -124,7 +133,9 @@ SUBROUTINE IHOP_INIT ( myThid ) # endif /* ALLOW_USE_MPI */ END IF #endif /* IHOP_WRITE_OUT */ - + + ! Reset memory + CALL resetMemory() ! =========================================================================== ! Read in or otherwise initialize inline all the variables by BELLHOP IF ( Inline ) THEN @@ -230,8 +241,8 @@ SUBROUTINE IHOP_INIT ( myThid ) ELSE ! Read and allocate user input - ! Read .env file: REQUIRED - CALL ReadEnvironment( IHOP_fileroot, myThid ) + ! save data.ihop, gcm SSP: REQUIRED + CALL ReadEnvironment( myTime, myIter, myThid ) ! AlTImetry: OPTIONAL, default is no ATIFile CALL ReadATI( IHOP_fileroot, Bdry%Top%HS%Opt( 5:5 ), Bdry%Top%HS%Depth, myThid ) ! BaThYmetry: OPTIONAL, default is BTYFile @@ -255,9 +266,9 @@ SUBROUTINE IHOP_INIT ( myThid ) END IF ! open all output files - CALL OpenOutputFiles( IHOP_fileroot ) + CALL OpenOutputFiles( IHOP_fileroot, myTime, myIter, myThid ) - ! Run Bellhop solver + ! Run Bellhop solver on a single processor if (numberOfProcs.gt.1) then if(myProcId.eq.(numberOfProcs-1)) then CALL CPU_TIME( Tstart ) @@ -274,7 +285,7 @@ SUBROUTINE IHOP_INIT ( myThid ) ! print run time if (numberOfProcs.gt.1) then if(myProcId.ne.(numberOfProcs-1)) then - WRITE(msgBuf,'(A,I4,A)') 'Proc ',myProcId, " didn't run ihop" + WRITE(msgBuf,'(A,I4,A)') 'NOTE: Proc ',myProcId, " didn't run ihop" CALL PRINT_MESSAGE(msgBuf, PRTFile, SQUEEZE_RIGHT, myThid) endif endif @@ -315,7 +326,7 @@ SUBROUTINE BellhopCore( myThid ) ! == Local Variables == INTEGER :: iAllocStat - INTEGER, PARAMETER :: ArrivalsStorage = 200000, MinNArr = 10 + INTEGER, PARAMETER :: ArrivalsStorage = 20000, MinNArr = 10 INTEGER :: IBPvec( 1 ), ibp, is, iBeamWindow2, Irz1, Irec, & NalphaOpt, iSeg REAL (KIND=_RL90) :: Amp0, DalphaOpt, xs( 2 ), RadMax, s, & @@ -369,6 +380,7 @@ SUBROUTINE BellhopCore( myThid ) NRz_per_range = Pos%NRz ! rectilinear grid END SELECT + IF (ALLOCATED(U)) DEALLOCATE(U) SELECT CASE ( Beam%RunType( 1 : 1 ) ) ! for a TL calculation, allocate space for the pressure matrix CASE ( 'C', 'S', 'I' ) ! TL calculation diff --git a/src/ihop_driver.F b/src/ihop_driver.F index af34f6b..9f876be 100644 --- a/src/ihop_driver.F +++ b/src/ihop_driver.F @@ -13,13 +13,6 @@ SUBROUTINE IHOP_DRIVER( myTime, myIter, myThid ) USE bellhop IMPLICIT NONE -C == Global variables == -C#include "SIZE.h" -C#include "GRID.h" -C#include "EEPARAMS.h" -C#include "PARAMS.h" -C#include "IHOP_SIZE.h" -C#include "IHOP.h" C !INPUT PARAMETERS: =================================================== C myTime :: Current time in simulation @@ -31,36 +24,17 @@ SUBROUTINE IHOP_DRIVER( myTime, myIter, myThid ) C !OUTPUT PARAMETERS: ================================================== C !LOCAL VARIABLES: ==================================================== -C bi,bj :: Tile indices -C lat2d :: latitude of grid-cell center [rad] -C pHalf3d :: pressure at interface between 2 levels [Pa] -C pFull3d :: pressure at level center [Pa] -C zHalf3d :: height of interface between 2 levels [m] -C zFull3d :: height of level center [m] -C t3d :: absolute temperature [K] -C q3d :: specific humidity [kg/kg] -C u3d :: wind speed, 1rst component (X-dir) [m/s] -C v3d :: wind speed, 2nd component (Y-dir) [m/s] - INTEGER bi, bj - _RL lat2d (sNx,sNy) - _RL pHalf3d (sNx,sNy,Nr+1) - _RL pFull3d (sNx,sNy,Nr) - _RL zHalf3d (sNx,sNy,Nr+1) - _RL zFull3d (sNx,sNy,Nr) - _RL t3d (sNx,sNy,Nr) - _RL q3d (sNx,sNy,Nr) - _RL u3d (sNx,sNy,Nr) - _RL v3d (sNx,sNy,Nr) - _RL tdt3d (sNx,sNy,Nr) - _RL qdt3d (sNx,sNy,Nr) - _RL udt3d (sNx,sNy,Nr) - _RL vdt3d (sNx,sNy,Nr) + INTEGER t CEOP #ifdef ALLOW_IHOP - IF ( ihop_iter .EQ. myIter ) THEN - CALL IHOP_INIT( myThid ) - ENDIF + DO t=1,nts + IF ( IHOP_iter(t).GE.0 ) THEN + IF ( IHOP_iter(t).EQ.myIter ) THEN + CALL IHOP_INIT( myTime, myIter, myThid ) + ENDIF + ENDIF + ENDDO #endif /* ALLOW_IHOP */ RETURN diff --git a/src/ihop_readparms.F b/src/ihop_readparms.F index 7d1fe04..077c741 100644 --- a/src/ihop_readparms.F +++ b/src/ihop_readparms.F @@ -235,7 +235,9 @@ SUBROUTINE IHOP_READPARMS( myThid ) C ihop_init_fixed.f useSSPFile = .FALSE. IHOP_interpfile = '' - ihop_iter = 0 + DO i=1,nts + ihop_iter(i) = -1 + ENDDO IHOP_npts_range = 0 IHOP_npts_idw = 0 DO i=1,IHOP_MAX_NC_SIZE @@ -255,13 +257,13 @@ SUBROUTINE IHOP_READPARMS( myThid ) CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, & SQUEEZE_RIGHT, myThid ) -CC Check paramters of IHOP_PARM03 -C IF ( IHOP_interpfile.EQ.'' ) THEN -C WRITE(msgBuf, '(2A)') 'S/R IHOP_READPARMS: "IHOP_interpfile" ', -C & 'Provide interpolation file name for ihop package' -C CALL PRINT_ERROR( msgBuf, myThid ) -C STOP 'ABNORMAL END: S/R IHOP_READPARMS' -C ENDIF +C Check paramters of IHOP_PARM03 + IF ( IHOP_interpfile.EQ.'' ) THEN + WRITE(msgBuf, '(2A)') 'S/R IHOP_READPARMS: "IHOP_interpfile" ', + & 'Provide interpolation file name for ihop package' + CALL PRINT_ERROR( msgBuf, myThid ) + STOP 'ABNORMAL END: S/R IHOP_READPARMS' + ENDIF C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| diff --git a/src/readenvihop.F90 b/src/readenvihop.F90 index 0c89d02..17192e5 100644 --- a/src/readenvihop.F90 +++ b/src/readenvihop.F90 @@ -24,17 +24,19 @@ MODULE readEnviHop #include "IHOP_SIZE.h" #include "IHOP.h" +! == External Functions == + INTEGER ILNBLNK + EXTERNAL ILNBLNK + PRIVATE -! public interfaces +! == Public Interfaces == !======================================================================= - - public ReadEnvironment, OpenOutputFiles - + public ReadEnvironment, OpenOutputFiles, resetMemory !======================================================================= CONTAINS - SUBROUTINE ReadEnvironment( FileRoot, myThid ) + SUBROUTINE ReadEnvironment( myTime, myIter, myThid ) ! I/O routine for acoustic fixed inputS @@ -45,15 +47,17 @@ SUBROUTINE ReadEnvironment( FileRoot, myThid ) #endif /* IHOP_THREED */ ReadFreqVec - ! == Routine Arguments == - ! myThid :: Thread number. Unused by IESCO - ! msgBuf :: Used to build messages for printing. - INTEGER, INTENT( IN ) :: myThid + ! == Routine Arguments == + ! myTime :: Current time in simulation + ! myIter :: Current time-step number + ! myThid :: my Thread Id number + ! msgBuf :: Used to build messages for printing. + _RL, INTENT(IN) :: myTime + INTEGER, INTENT(IN) :: myIter, myThid CHARACTER*(MAX_LEN_MBUF):: msgBuf - ! == Local Variables == - REAL (KIND=_RL90), PARAMETER :: c0 = 1500.0 - CHARACTER (LEN=80), INTENT(IN ) :: FileRoot + ! == Local Variables == + REAL (KIND=_RL90), PARAMETER :: c0 = 1500.0 REAL :: ZMin, ZMax REAL (KIND=_RL90) :: x( 2 ), c, cimag, gradc( 2 ), crr, crz, czz, rho, & Depth @@ -85,19 +89,29 @@ SUBROUTINE ReadEnvironment( FileRoot, myThid ) #endif /* IHOP_THREED */ #ifdef IHOP_WRITE_OUT - WRITE(msgbuf,'(A)') Title + WRITE(msgbuf,'(A)') Title ! , ACHAR(10) + CALL PRINT_MESSAGE( msgbuf, PRTFile, SQUEEZE_RIGHT, myThid ) + WRITE(msgBuf,'(2A)')'___________________________________________________', & + '________' CALL PRINT_MESSAGE( msgbuf, PRTFile, SQUEEZE_RIGHT, myThid ) WRITE(msgbuf,'(A)') CALL PRINT_MESSAGE( msgbuf, PRTFile, SQUEEZE_RIGHT, myThid ) - WRITE( msgBuf, '(A,G11.4,A)' )'Frequency ', IHOP_freq, 'Hz' + WRITE( msgBuf, '(A,I,A,F20.2,A)') 'GCM iter ', myIter,' at time = ', & + myTime,' [sec]' + CALL PRINT_MESSAGE( msgbuf, PRTFile, SQUEEZE_RIGHT, myThid ) + WRITE(msgbuf,'(A)') + CALL PRINT_MESSAGE( msgbuf, PRTFile, SQUEEZE_RIGHT, myThid ) + WRITE( msgBuf, '(A,F11.4,A)' )'Frequency ', IHOP_freq, ' [Hz]' + CALL PRINT_MESSAGE( msgbuf, PRTFile, SQUEEZE_RIGHT, myThid ) + WRITE(msgBuf,'(2A)')'___________________________________________________', & + '________' CALL PRINT_MESSAGE( msgbuf, PRTFile, SQUEEZE_RIGHT, myThid ) #endif /* IHOP_WRITE_OUT */ ! *** Top Boundary *** Bdry%Top%HS%Opt = IHOP_topopt Bdry%Top%HS%Depth = 0 !initiate to dummy value - CALL ReadTopOpt( Bdry%Top%HS%Opt, Bdry%Top%HS%BC, AttenUnit, FileRoot, & - myThid ) + CALL ReadTopOpt( Bdry%Top%HS%Opt, Bdry%Top%HS%BC, AttenUnit, myThid ) CALL TopBot( IHOP_freq, AttenUnit, Bdry%Top%HS, myThid ) @@ -106,7 +120,7 @@ SUBROUTINE ReadEnvironment( FileRoot, myThid ) Bdry%Bot%HS%Depth = IHOP_depth ELSE ! Extend by 5 wavelengths - Bdry%Bot%HS%Depth = rkSign*rF( Nr+1 ) + 5*1500.0/IHOP_freq + Bdry%Bot%HS%Depth = rkSign*rF( Nr+1 ) + 5*c0/IHOP_freq END IF x = [ 0.0 _d 0, Bdry%Bot%HS%Depth ] ! tells SSP Depth to read to @@ -387,7 +401,7 @@ SUBROUTINE ReadEnvironment( FileRoot, myThid ) !**********************************************************************! - SUBROUTINE ReadTopOpt( TopOpt, BC, AttenUnit, FileRoot, myThid ) + SUBROUTINE ReadTopOpt( TopOpt, BC, AttenUnit, myThid ) ! == Routine Arguments == ! myThid :: Thread number. Unused by IESCO @@ -399,7 +413,6 @@ SUBROUTINE ReadTopOpt( TopOpt, BC, AttenUnit, FileRoot, myThid ) CHARACTER (LEN= 6), INTENT( OUT ) :: TopOpt CHARACTER (LEN= 1), INTENT( OUT ) :: BC ! Boundary condition type CHARACTER (LEN= 2), INTENT( OUT ) :: AttenUnit - CHARACTER (LEN=80), INTENT( IN ) :: FileRoot TopOpt = IHOP_topopt #ifdef IHOP_WRITE_OUT @@ -920,23 +933,38 @@ SUBROUTINE TopBot( freq, AttenUnit, HS, myThid ) ! **********************************************************************! - SUBROUTINE OpenOutputFiles( FileRoot ) + SUBROUTINE OpenOutputFiles( fName, myTime, myIter, myThid ) ! Write appropriate header information USE angle_mod, only: Angles USE srPos_mod, only: Pos ! == Routine Arguments == + ! myTime :: Current time in simulation + ! myIter :: Current time-step number + ! myThid :: my Thread Id number + _RL, INTENT(IN) :: myTime + INTEGER, INTENT(IN) :: myIter, myThid ! == Local variables == - CHARACTER (LEN=80), INTENT( IN ) :: FileRoot + CHARACTER*(MAX_LEN_FNAM), INTENT(IN) :: fName + CHARACTER*(MAX_LEN_FNAM) :: fullName + INTEGER :: IL REAL :: atten CHARACTER (LEN=10) :: PlotType + ! add time step to filename + IF (myIter.GE.0) THEN + IL=ILNBLNK( fName ) + WRITE(fullName, '(2A,I10.10)') fName(1:IL),'.',myIter + ELSE + fullName = fName + ENDIF + SELECT CASE ( Beam%RunType( 1 : 1 ) ) CASE ( 'R', 'E' ) ! Ray trace or Eigenrays #ifdef IHOP_WRITE_OUT - OPEN ( FILE = TRIM( FileRoot ) // '.ray', UNIT = RAYFile, & + OPEN ( FILE = TRIM( fullName ) // '.ray', UNIT = RAYFile, & FORM = 'FORMATTED' ) WRITE( RAYFile, * ) '''', Title( 1 : 50 ), '''' WRITE( RAYFile, * ) IHOP_freq @@ -954,7 +982,7 @@ SUBROUTINE OpenOutputFiles( FileRoot ) CASE ( 'A' ) ! arrival file in ascii format #ifdef IHOP_WRITE_OUT - OPEN ( FILE = TRIM( FileRoot ) // '.arr', UNIT = ARRFile, & + OPEN ( FILE = TRIM( fullName ) // '.arr', UNIT = ARRFile, & FORM = 'FORMATTED' ) # ifdef IHOP_THREED @@ -982,7 +1010,7 @@ SUBROUTINE OpenOutputFiles( FileRoot ) # endif /* IHOP_THREED */ ! IEsco22: add to arrivals output - OPEN ( FILE = TRIM( FileRoot ) // '.ray', UNIT = RAYFile, & + OPEN ( FILE = TRIM( fullName ) // '.ray', UNIT = RAYFile, & FORM = 'FORMATTED' ) WRITE( RAYFile, * ) '''', Title( 1 : 50 ), '''' WRITE( RAYFile, * ) IHOP_freq @@ -997,7 +1025,7 @@ SUBROUTINE OpenOutputFiles( FileRoot ) WRITE( RAYFile, * ) '''rz''' # endif /* IHOP_THREED */ - OPEN ( FILE = TRIM( FileRoot ) // '.delay', UNIT = DELFile, & + OPEN ( FILE = TRIM( fullName ) // '.delay', UNIT = DELFile, & FORM = 'FORMATTED' ) WRITE( DELFile, * ) '''', Title( 1 : 50 ), '''' WRITE( DELFile, * ) IHOP_freq @@ -1014,7 +1042,7 @@ SUBROUTINE OpenOutputFiles( FileRoot ) #endif /* IHOP_WRITE_OUT */ CASE ( 'a' ) ! arrival file in binary format #ifdef IHOP_WRITE_OUT - OPEN ( FILE = TRIM( FileRoot ) // '.arr', UNIT = ARRFile, & + OPEN ( FILE = TRIM( fullName ) // '.arr', UNIT = ARRFile, & FORM = 'UNFORMATTED' ) # ifdef IHOP_THREED @@ -1056,7 +1084,7 @@ SUBROUTINE OpenOutputFiles( FileRoot ) PlotType = 'rectilin ' END SELECT - CALL WriteSHDHeader( TRIM( FileRoot ) // '.shd', Title, REAL( IHOP_freq ), & + CALL WriteSHDHeader( TRIM( fullName ) // '.shd', Title, REAL( IHOP_freq ), & atten, PlotType ) END SELECT @@ -1187,4 +1215,40 @@ SUBROUTINE AllocateSR( Nx, x_out, x_in ) !**********************************************************************! + SUBROUTINE resetMemory() + USE srpos_mod, only: Pos + USE bdry_mod, only: Top,Bot + USE angle_mod, only: Angles + USE arr_mod, only: Narr, Arr + + ! From angle_mod + IF (ALLOCATED(Angles%alpha))DEALLOCATE(Angles%alpha) + IF (ALLOCATED(Angles%beta)) DEALLOCATE(Angles%beta) + ! From bdry_mod + IF (ALLOCATED(Top)) DEALLOCATE(Top) + IF (ALLOCATED(Bot)) DEALLOCATE(Bot) + ! From bellhop + IF (ALLOCATED(Pos%theta)) DEALLOCATE(Pos%theta) + IF (ALLOCATED(Arr)) DEALLOCATE(Arr) + IF (ALLOCATED(NArr)) DEALLOCATE(NArr) + ! from readenvihop + IF (ALLOCATED(Pos%Sx)) DEALLOCATE(Pos%Sx) + IF (ALLOCATED(Pos%Sy)) DEALLOCATE(Pos%Sy) + IF (ALLOCATED(Pos%Sz)) DEALLOCATE(Pos%Sz) + ! From srpos_mod + IF (ALLOCATED(Pos%ws)) DEALLOCATE(Pos%ws) + IF (ALLOCATED(Pos%isz)) DEALLOCATE(Pos%isz) + IF (ALLOCATED(Pos%wr)) DEALLOCATE(Pos%wr) + IF (ALLOCATED(Pos%irz)) DEALLOCATE(Pos%irz) + IF (ALLOCATED(Pos%rr)) DEALLOCATE(Pos%rr) + IF (ALLOCATED(Pos%rz)) DEALLOCATE(Pos%rz) + ! From ssp_mod + IF (ALLOCATED(SSP%cMat)) DEALLOCATE(SSP%cMat) + IF (ALLOCATED(SSP%czMat)) DEALLOCATE(SSP%czMat) + IF (ALLOCATED(SSP%cMat3)) DEALLOCATE(SSP%cMat3) + IF (ALLOCATED(SSP%czMat3)) DEALLOCATE(SSP%czMat3) + IF (ALLOCATED(SSP%Seg%r)) DEALLOCATE(SSP%Seg%r) + + END ! SUBROUTINE resetMemory + END MODULE readEnviHop diff --git a/src/ssp_mod.F90 b/src/ssp_mod.F90 index 3c8e5fc..bed3532 100644 --- a/src/ssp_mod.F90 +++ b/src/ssp_mod.F90 @@ -973,6 +973,7 @@ SUBROUTINE ExtractSSP( Depth, freq, myThid ) CALL GLOBAL_VEC_SUM_R8(SSP%Nz*SSP%Nr,SSP%Nz*SSP%Nr,tmpSSP,myThid) SSP%cMAT = tmpSSP(:,:,1,1) + IF(ALLOCATED(tmpSSP)) DEALLOCATE(tmpSSP) !================================================== ! END IDW Interpolate !==================================================