Skip to content

Commit 08fe230

Browse files
authored
Merge pull request #6 from IvanaEscobar/eigenray
Eigenray data storage
2 parents 9f8ad0c + ce46a24 commit 08fe230

File tree

5 files changed

+99
-39
lines changed

5 files changed

+99
-39
lines changed

mitgcm_input/data.ihop

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# IHOP package parameters
33
# ***********************
44
&IHOP_PARM01
5-
IHOP_fileroot='baro',
5+
IHOP_fileroot='baroA',
66
IHOP_title='baroclinic_gyre+ihop',
77
&
88

@@ -19,12 +19,12 @@
1919
# rr + ihop_step < ihop_ranges(end)
2020
IHOP_rr=2542.0,
2121

22-
IHOP_runopt='A',
22+
IHOP_runopt='e',
2323
IHOP_nalpha=4,
2424
IHOP_alpha=-20.0, 20.0,
2525
&
2626

2727
&IHOP_PARM03
2828
IHOP_interpfile = 'bc-gyre_ihop-grid.nc',
29-
ihop_iter = 1,2,3,4,5,6,7,8,9,
29+
ihop_iter = 1,2,3,4,5,6,7,8,
3030
&

src/bellhop.F90

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -295,15 +295,17 @@ SUBROUTINE IHOP_INIT ( myTime, myIter, myThid )
295295
CALL PRINT_MESSAGE(msgBuf, PRTFile, SQUEEZE_RIGHT, myThid)
296296

297297
! close all files
298-
SELECT CASE ( Beam%RunType( 1 : 1 ) )
298+
SELECT CASE ( Beam%RunType( 1:1 ) )
299299
CASE ( 'C', 'S', 'I' ) ! TL calculation
300300
CLOSE( SHDFile )
301301
CASE ( 'A', 'a' ) ! arrivals calculation
302302
CLOSE( ARRFile )
303-
CLOSE( RAYFile )
304-
IF ( writeDelay ) CLOSE( DELFile )
305303
CASE ( 'R', 'E' ) ! ray and eigen ray trace
306304
CLOSE( RAYFile )
305+
CASE ( 'e' )
306+
CLOSE( RAYFile )
307+
CLOSE( ARRFile )
308+
IF ( writeDelay ) CLOSE( DELFile )
307309
END SELECT
308310

309311
if (numberOfProcs.gt.1) then
@@ -389,7 +391,7 @@ SUBROUTINE BellhopCore( myThid )
389391
END SELECT
390392

391393
IF (ALLOCATED(U)) DEALLOCATE(U)
392-
SELECT CASE ( Beam%RunType( 1 : 1 ) )
394+
SELECT CASE ( Beam%RunType( 1:1 ) )
393395
! for a TL calculation, allocate space for the pressure matrix
394396
CASE ( 'C', 'S', 'I' ) ! TL calculation
395397
ALLOCATE ( U( NRz_per_range, Pos%NRr ), Stat = iAllocStat )
@@ -401,13 +403,13 @@ SUBROUTINE BellhopCore( myThid )
401403
#endif /* IHOP_WRITE_OUT */
402404
STOP 'ABNORMAL END: S/R BellhopCore'
403405
END IF
404-
CASE ( 'A', 'a', 'R', 'E' ) ! Arrivals calculation
406+
CASE ( 'A', 'a', 'R', 'E', 'e' ) ! Arrivals calculation
405407
ALLOCATE ( U( 1, 1 ), Stat = iAllocStat ) ! open a dummy variable
406408
END SELECT
407409

408410
! for an arrivals run, allocate space for arrivals matrices
409-
SELECT CASE ( Beam%RunType( 1 : 1 ) )
410-
CASE ( 'A', 'a' )
411+
SELECT CASE ( Beam%RunType( 1:1 ) )
412+
CASE ( 'A', 'a', 'e' )
411413
! allow space for at least MinNArr arrivals
412414
MaxNArr = MAX( ArrivalsStorage / ( NRz_per_range * Pos%NRr ), MinNArr )
413415
#ifdef IHOP_WRITE_OUT
@@ -446,10 +448,10 @@ SUBROUTINE BellhopCore( myThid )
446448
SourceDepth: DO is = 1, Pos%NSz
447449
xs = [ zeroRL, Pos%Sz( is ) ] ! source coordinate, assuming source @ r=0
448450

449-
SELECT CASE ( Beam%RunType( 1 : 1 ) )
451+
SELECT CASE ( Beam%RunType( 1:1 ) )
450452
CASE ( 'C', 'S', 'I' ) ! TL calculation, zero out pressure matrix
451453
U = 0.0
452-
CASE ( 'A', 'a' ) ! Arrivals calculation, zero out arrival matrix
454+
CASE ( 'A', 'a', 'e' ) ! Arrivals calculation, zero out arrival matrix
453455
NArr = 0
454456
END SELECT
455457

@@ -458,7 +460,7 @@ SUBROUTINE BellhopCore( myThid )
458460

459461
!!IESCO22: BEAM stuff !!
460462
RadMax = 5 * c / IHOP_freq ! 5 wavelength max radius IEsco22: unused
461-
IF ( Beam%RunType( 1 : 1 ) == 'C' ) THEN ! for Coherent TL Run
463+
IF ( Beam%RunType( 1:1 ) == 'C' ) THEN ! for Coherent TL Run
462464
! Are there enough rays?
463465
DalphaOpt = SQRT( c / ( 6.0 * IHOP_freq * Pos%Rr( Pos%NRr ) ) )
464466
NalphaOpt = 2 + INT( ( Angles%alpha( Angles%Nalpha ) &
@@ -496,7 +498,7 @@ SUBROUTINE BellhopCore( myThid )
496498
! IEsco22: When a beam pattern isn't specified, Amp0 = 0
497499

498500
! Lloyd mirror pattern for semi-coherent option
499-
IF ( Beam%RunType( 1 : 1 ) == 'S' ) &
501+
IF ( Beam%RunType( 1:1 ) == 'S' ) &
500502
Amp0 = Amp0 * SQRT( 2.0 ) * ABS( SIN( afreq / c * xs( 2 ) &
501503
* SIN( Angles%alpha( ialpha ) ) ) )
502504
!!IESCO22: end BEAM stuff !!
@@ -517,11 +519,10 @@ SUBROUTINE BellhopCore( myThid )
517519
! Write the ray trajectory to RAYFile
518520
IF ( Beam%RunType(1:1) == 'R') THEN
519521
CALL WriteRay2D( SrcDeclAngle, Beam%Nsteps )
520-
ELSE ! Compute the contribution to the field
521-
CALL WriteRay2D( SrcDeclAngle, Beam%Nsteps )
522522
IF (writeDelay) CALL WriteDel2D( SrcDeclAngle, Beam%Nsteps )
523+
ELSE ! Compute the contribution to the field
523524

524-
SELECT CASE ( Beam%Type( 1 : 1 ) )
525+
SELECT CASE ( Beam%Type( 1:1 ) )
525526
CASE ( 'g' )
526527
CALL InfluenceGeoHatRayCen( U, Angles%alpha( ialpha ), &
527528
Angles%Dalpha, myThid )
@@ -541,7 +542,7 @@ SUBROUTINE BellhopCore( myThid )
541542

542543
! write results to disk
543544

544-
SELECT CASE ( Beam%RunType( 1 : 1 ) )
545+
SELECT CASE ( Beam%RunType( 1:1 ) )
545546
CASE ( 'C', 'S', 'I' ) ! TL calculation
546547
CALL ScalePressure( Angles%Dalpha, ray2D( 1 )%c, Pos%Rr, U, &
547548
NRz_per_range, Pos%NRr, Beam%RunType, IHOP_freq )
@@ -550,7 +551,7 @@ SUBROUTINE BellhopCore( myThid )
550551
IRec = IRec + 1
551552
WRITE( SHDFile, REC = IRec ) U( Irz1, 1 : Pos%NRr )
552553
END DO RcvrDepth
553-
CASE ( 'A' ) ! arrivals calculation, ascii
554+
CASE ( 'A', 'e' ) ! arrivals calculation, ascii
554555
CALL WriteArrivalsASCII( Pos%Rr, NRz_per_range, Pos%NRr, &
555556
Beam%RunType( 4:4 ) )
556557
CASE ( 'a' ) ! arrivals calculation, binary
@@ -599,8 +600,8 @@ SUBROUTINE TraceRay2D( xs, alpha, Amp0, myThid )
599600
ray2D( 1 )%p = [ 1.0, 0.0 ] ! IESCO22: slowness vector
600601
! second component of qv is not supported in geometric beam tracing
601602
! set I.C. to 0 in hopes of saving run time
602-
IF ( Beam%RunType( 2:2 ) == 'G' ) THEN ! IESCO22: geometric hat in Cartesian
603-
ray2D( 1 )%q = [ 0.0, 0.0 ] ! IESCO22: ray centered coords
603+
IF ( Beam%RunType( 2:2 ) == 'G' .or. Beam%RunType( 2:2 ) == 'B') THEN
604+
ray2D( 1 )%q = [ 0.0, 0.0 ] ! IESCO22: geometric beam in Cartesian
604605
ELSE
605606
ray2D( 1 )%q = [ 0.0, 1.0 ] ! IESCO22: ray centered coords
606607
END IF

src/influence.F90

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ MODULE influence
1616
! sspMod used to construct image beams in the Cerveny style beam routines
1717
USE ssp_mod, only: Bdry
1818
USE arr_mod, only: WriteArrivalsASCII, WriteArrivalsBinary, AddArr
19-
USE writeRay, only: WriteRay2D
19+
USE writeRay, only: WriteRay2D, WriteDel2D
2020

2121
! ! USES
2222
implicit none
@@ -474,9 +474,16 @@ SUBROUTINE InfluenceGeoGaussianCart( U, alpha, Dalpha, myThid )
474474
SUBROUTINE ApplyContribution( U )
475475
COMPLEX, INTENT( INOUT ) :: U
476476

477-
SELECT CASE( Beam%RunType( 1 : 1 ) )
477+
SELECT CASE( Beam%RunType( 1:1 ) )
478478
CASE ( 'E' ) ! eigenrays
479479
CALL WriteRay2D( SrcDeclAngle, iS )
480+
CASE ( 'e' ) ! eigenrays AND arrivals
481+
CALL WriteRay2D( SrcDeclAngle, iS )
482+
IF (writeDelay) CALL WriteDel2D( SrcDeclAngle, iS )
483+
484+
CALL AddArr( afreq, iz, ir, Amp, phaseInt, delay, SrcDeclAngle, &
485+
RcvrDeclAngle, ray2D( iS )%NumTopBnc, &
486+
ray2D( iS )%NumBotBnc )
480487
CASE ( 'A', 'a' ) ! arrivals
481488
CALL AddArr( afreq, iz, ir, Amp, phaseInt, delay, SrcDeclAngle, &
482489
RcvrDeclAngle, ray2D( iS )%NumTopBnc, &
@@ -556,10 +563,11 @@ SUBROUTINE InfluenceSGB( U, alpha, Dalpha )
556563
deltaz = Pos%Rz( iz ) - x( 2 ) ! ray to rcvr distance
557564
! Adeltaz = ABS( deltaz )
558565
! IF ( Adeltaz < RadiusMax ) THEN
559-
SELECT CASE( Beam%RunType( 1 : 1 ) )
560-
CASE ( 'E' ) ! eigenrays
566+
SELECT CASE( Beam%RunType( 1:1 ) )
567+
CASE ( 'E', 'e' ) ! eigenrays
561568
SrcDeclAngle = rad2deg * alpha ! take-off angle in degrees
562569
CALL WriteRay2D( SrcDeclAngle, iS )
570+
IF (writeDelay) CALL WriteDel2D( SrcDeclAngle, iS )
563571
CASE DEFAULT ! coherent TL
564572
CPA = ABS( deltaz * ( rB - rA ) ) / SQRT( ( rB - rA )**2 &
565573
+ ( ray2D( iS )%x( 2 ) - ray2D( iS-1 )%x( 2 ) )**2 )

src/readenvihop.F90

Lines changed: 56 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -614,7 +614,7 @@ SUBROUTINE ReadRunType( RunType, PlotType, myThid )
614614
CALL PRINT_MESSAGE( msgbuf, PRTFile, SQUEEZE_RIGHT, myThid )
615615
#endif /* IHOP_WRITE_OUT */
616616

617-
SELECT CASE ( RunType( 1 : 1 ) )
617+
SELECT CASE ( RunType( 1:1 ) )
618618
CASE ( 'R' )
619619
#ifdef IHOP_WRITE_OUT
620620
WRITE(msgBuf,'(A)') 'Ray trace run'
@@ -649,6 +649,11 @@ SUBROUTINE ReadRunType( RunType, PlotType, myThid )
649649
#ifdef IHOP_WRITE_OUT
650650
WRITE(msgBuf,'(A)') 'Arrivals calculation, binary file output'
651651
CALL PRINT_MESSAGE( msgbuf, PRTFile, SQUEEZE_RIGHT, myThid )
652+
#endif /* IHOP_WRITE_OUT */
653+
CASE ( 'e' )
654+
#ifdef IHOP_WRITE_OUT
655+
WRITE(msgBuf,'(A)') 'Eigenrays + Arrivals run, ASCII file output'
656+
CALL PRINT_MESSAGE( msgbuf, PRTFile, SQUEEZE_RIGHT, myThid )
652657
#endif /* IHOP_WRITE_OUT */
653658
CASE DEFAULT
654659
#ifdef IHOP_WRITE_OUT
@@ -960,7 +965,7 @@ SUBROUTINE OpenOutputFiles( fName, myTime, myIter, myThid )
960965
fullName = fName
961966
ENDIF
962967

963-
SELECT CASE ( Beam%RunType( 1 : 1 ) )
968+
SELECT CASE ( Beam%RunType( 1:1 ) )
964969
CASE ( 'R', 'E' ) ! Ray trace or Eigenrays
965970
#ifdef IHOP_WRITE_OUT
966971
OPEN ( FILE = TRIM( fullName ) // '.ray', UNIT = RAYFile, &
@@ -977,9 +982,9 @@ SUBROUTINE OpenOutputFiles( fName, myTime, myIter, myThid )
977982
#else /* IHOP_THREED */
978983
WRITE( RAYFile, * ) '''rz'''
979984
#endif /* IHOP_THREED */
985+
FLUSH( RAYFile )
980986
#endif /* IHOP_WRITE_OUT */
981-
982-
CASE ( 'A' ) ! arrival file in ascii format
987+
CASE ( 'e' ) ! eigenrays + arrival file in ascii format
983988
#ifdef IHOP_WRITE_OUT
984989
OPEN ( FILE = TRIM( fullName ) // '.arr', UNIT = ARRFile, &
985990
FORM = 'FORMATTED' )
@@ -1008,7 +1013,7 @@ SUBROUTINE OpenOutputFiles( fName, myTime, myIter, myThid )
10081013
WRITE( ARRFile, * ) Pos%Ntheta, Pos%theta( 1 : Pos%Ntheta )
10091014
# endif /* IHOP_THREED */
10101015

1011-
! IEsco22: add to arrivals output
1016+
! IEsco22: add erays to arrivals output
10121017
OPEN ( FILE = TRIM( fullName ) // '.ray', UNIT = RAYFile, &
10131018
FORM = 'FORMATTED' )
10141019
WRITE( RAYFile, * ) '''', Title( 1 : 50 ), ''''
@@ -1040,6 +1045,38 @@ SUBROUTINE OpenOutputFiles( fName, myTime, myIter, myThid )
10401045
WRITE( DELFile, * ) '''rz'''
10411046
# endif /* IHOP_THREED */
10421047
ENDIF
1048+
1049+
FLUSH( RAYFile )
1050+
IF (writeDelay) FLUSH( DELFile )
1051+
FLUSH( ARRFile )
1052+
#endif /* IHOP_WRITE_OUT */
1053+
CASE ( 'A' ) ! arrival file in ascii format
1054+
#ifdef IHOP_WRITE_OUT
1055+
OPEN ( FILE = TRIM( fullName ) // '.arr', UNIT = ARRFile, &
1056+
FORM = 'FORMATTED' )
1057+
1058+
# ifdef IHOP_THREED
1059+
WRITE( ARRFile, * ) '''3D'''
1060+
# else /* IHOP_THREED */
1061+
WRITE( ARRFile, * ) '''2D'''
1062+
# endif /* IHOP_THREED */
1063+
1064+
WRITE( ARRFile, * ) IHOP_freq
1065+
1066+
! write source locations
1067+
# ifdef IHOP_THREED
1068+
WRITE( ARRFile, * ) Pos%NSx, Pos%Sx( 1 : Pos%NSx )
1069+
WRITE( ARRFile, * ) Pos%NSy, Pos%Sy( 1 : Pos%NSy )
1070+
# endif /* IHOP_THREED */
1071+
WRITE( ARRFile, * ) Pos%NSz, Pos%Sz( 1 : Pos%NSz )
1072+
1073+
! write receiver locations
1074+
WRITE( ARRFile, * ) Pos%NRz, Pos%Rz( 1 : Pos%NRz )
1075+
WRITE( ARRFile, * ) Pos%NRr, Pos%Rr( 1 : Pos%NRr )
1076+
# ifdef IHOP_THREED
1077+
WRITE( ARRFile, * ) Pos%Ntheta, Pos%theta( 1 : Pos%Ntheta )
1078+
# endif /* IHOP_THREED */
1079+
FLUSH( ARRFile )
10431080
#endif /* IHOP_WRITE_OUT */
10441081
CASE ( 'a' ) ! arrival file in binary format
10451082
#ifdef IHOP_WRITE_OUT
@@ -1069,8 +1106,8 @@ SUBROUTINE OpenOutputFiles( fName, myTime, myIter, myThid )
10691106
# ifdef IHOP_THREED
10701107
WRITE( ARRFile ) Pos%Ntheta, Pos%theta( 1 : Pos%Ntheta )
10711108
# endif /* IHOP_THREED */
1109+
FLUSH( ARRFile )
10721110
#endif /* IHOP_WRITE_OUT */
1073-
10741111
CASE DEFAULT
10751112
atten = 0.0
10761113

@@ -1263,7 +1300,7 @@ SUBROUTINE openPRTFile ( myTime, myIter, myThid )
12631300
CALL PRINT_MESSAGE( msgbuf, PRTFile, SQUEEZE_RIGHT, myThid )
12641301
WRITE(msgbuf,'(A)')
12651302
CALL PRINT_MESSAGE( msgbuf, PRTFile, SQUEEZE_RIGHT, myThid )
1266-
WRITE( msgBuf, '(A,I,A,F20.2,A)') 'GCM iter ', myIter,' at time = ', &
1303+
WRITE( msgBuf, '(A,I10,A,F20.2,A)') 'GCM iter ', myIter,' at time = ', &
12671304
myTime,' [sec]'
12681305
CALL PRINT_MESSAGE( msgbuf, PRTFile, SQUEEZE_RIGHT, myThid )
12691306
# ifdef ALLOW_CAL
@@ -1294,6 +1331,7 @@ SUBROUTINE resetMemory()
12941331
USE bdry_mod, only: Top,Bot
12951332
USE angle_mod, only: Angles
12961333
USE arr_mod, only: Narr, Arr
1334+
USE ihop_mod, only: ray2D, MaxN, iStep
12971335

12981336
! From angle_mod
12991337
IF (ALLOCATED(Angles%alpha))DEALLOCATE(Angles%alpha)
@@ -1322,6 +1360,17 @@ SUBROUTINE resetMemory()
13221360
IF (ALLOCATED(SSP%cMat3)) DEALLOCATE(SSP%cMat3)
13231361
IF (ALLOCATED(SSP%czMat3)) DEALLOCATE(SSP%czMat3)
13241362
IF (ALLOCATED(SSP%Seg%r)) DEALLOCATE(SSP%Seg%r)
1363+
! From ihop_mod
1364+
DO iStep = 1,MaxN
1365+
ray2D(iStep)%x = [zeroRL, zeroRL]
1366+
ray2D(iStep)%t = [zeroRL, zeroRL]
1367+
ray2D(iStep)%p = [zeroRL, zeroRL]
1368+
ray2D(iStep)%q = [zeroRL, zeroRL]
1369+
ray2D(iStep)%c = zeroRL
1370+
ray2D(iStep)%Amp = zeroRL
1371+
ray2D(iStep)%Phase = zeroRL
1372+
ray2D(iStep)%tau = (zeroRL, zeroRL)
1373+
END DO
13251374

13261375
END ! SUBROUTINE resetMemory
13271376

src/writeray.F90

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ MODULE writeRay
2828

2929
!=======================================================================
3030

31-
INTEGER, PRIVATE :: MaxNRayPoints = 500000 ! this is the maximum length of
31+
INTEGER, PRIVATE :: MaxNRayPoints = 50000 ! this is the maximum length of
3232
! the ray vector that is written out
3333
INTEGER, PRIVATE :: is, N2, iSkip
3434

@@ -58,13 +58,14 @@ SUBROUTINE WriteRay2D( alpha0, Nsteps1 )
5858

5959
! write to ray file
6060

61+
WRITE(*, '(A,G,3I)') "Escobar:",alpha0, N2, ray2D(N2)%NumTopBnc, ray2D(N2)%NumBotBnc
6162
#ifdef IHOP_WRITE_OUT
62-
WRITE( RAYFile, * ) alpha0
63-
WRITE( RAYFile, * ) N2, ray2D( Nsteps1 )%NumTopBnc, &
63+
WRITE( RAYFile, '(G)') alpha0
64+
WRITE( RAYFile, '(3I)' ) N2, ray2D( Nsteps1 )%NumTopBnc, &
6465
ray2D( Nsteps1 )%NumBotBnc
6566

6667
DO is = 1, N2
67-
WRITE( RAYFile, * ) ray2D( is )%x
68+
WRITE( RAYFile, '(2G)' ) ray2D( is )%x
6869
END DO
6970
#endif /* IHOP_WRITE_OUT */
7071

@@ -91,18 +92,19 @@ SUBROUTINE WriteDel2D( alpha0, Nsteps1 )
9192
MOD( is, iSkip ) == 0 .OR. is == Nsteps1 ) THEN
9293
N2 = N2 + 1
9394
ray2D( N2 )%x = ray2D( is )%x
95+
ray2D( N2 )%tau = ray2D( is )%tau
9496
END IF
9597
END DO Stepping
9698

9799
! write to delay file
98100

99101
#ifdef IHOP_WRITE_OUT
100-
WRITE( DELFile, * ) alpha0
101-
WRITE( DELFile, * ) N2, ray2D( Nsteps1 )%NumTopBnc, &
102+
WRITE( DELFile, '(G)' ) alpha0
103+
WRITE( DELFile, '(3I)' ) N2, ray2D( Nsteps1 )%NumTopBnc, &
102104
ray2D( Nsteps1 )%NumBotBnc
103105

104106
DO is = 1, N2
105-
WRITE( DELFile, * ) REAL(ray2D( is )%tau), ray2D( is )%x(2)
107+
WRITE( DELFile, '(2G)' ) REAL(ray2D( is )%tau), ray2D( is )%x(2)
106108
END DO
107109
#endif /* IHOP_WRITE_OUT */
108110

0 commit comments

Comments
 (0)