[cig-commits] [commit] devel: work around integer overflow problem when writing Seismic Unix output (caf697f)

cig_noreply at geodynamics.org cig_noreply at geodynamics.org
Thu Nov 13 17:01:06 PST 2014


Repository : https://github.com/geodynamics/specfem2d

On branch  : devel
Link       : https://github.com/geodynamics/specfem2d/compare/7a7ca08afb0578095ac833a886583b5fdee17ee3...caf697fd40a47a7cef1cbc80e13c600c3ec41167

>---------------------------------------------------------------

commit caf697fd40a47a7cef1cbc80e13c600c3ec41167
Author: rmodrak <rmodrak at princeton.edu>
Date:   Thu Nov 13 16:54:40 2014 -0500

    work around integer overflow problem when writing Seismic Unix output


>---------------------------------------------------------------

caf697fd40a47a7cef1cbc80e13c600c3ec41167
 src/specfem2D/write_seismograms.F90 | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/specfem2D/write_seismograms.F90 b/src/specfem2D/write_seismograms.F90
index d96a7cf..4881315 100644
--- a/src/specfem2D/write_seismograms.F90
+++ b/src/specfem2D/write_seismograms.F90
@@ -68,6 +68,7 @@
 
 ! output seismograms in Seismic Unix format (adjoint traces will be read in the same format)
   logical :: SU_FORMAT
+  integer :: deltat_int2
 
   logical :: p_sv,save_ASCII_seismograms,save_binary_seismograms,save_binary_seismograms_single,save_binary_seismograms_double
 
@@ -339,6 +340,13 @@
         else ! if SU_FORMAT
 
           if (seismo_offset==0) then
+
+             if (deltat*1.0d6 > 2**15) then
+                deltat_int2 = 0
+             else
+                deltat_int2 = NINT(deltat*1.0d6, kind=2) ! deltat (unit: 10^{-6} second)
+             endif
+
              ! write SU headers (refer to Seismic Unix for details)
              write(12,rec=(irec-1)*60+(irec-1)*NSTEP+1)  irec                          ! receiver ID
              write(12,rec=(irec-1)*60+(irec-1)*NSTEP+10) NINT(st_xval(irec)-x_source)  ! offset
@@ -350,7 +358,7 @@
              header2(1)=0  ! dummy
              header2(2)=int(NSTEP, kind=2)
              write(12,rec=(irec-1)*60+(irec-1)*NSTEP+29) header2
-             header2(1)=NINT(deltat*1.0d6, kind=2)  ! deltat (unit: 10^{-6} second)
+             header2(1)=deltat_int2
              header2(2)=0  ! dummy
              write(12,rec=(irec-1)*60+(irec-1)*NSTEP+30) header2
              if ( seismotype /= 4 .and. seismotype /= 6 .and. p_sv) then
@@ -366,7 +374,7 @@
                    header2(1)=0  ! dummy
                    header2(2)=int(NSTEP, kind=2)
                    write(14,rec=(irec-1)*60+(irec-1)*NSTEP+29) header2
-                   header2(1)=NINT(deltat*1.0d6, kind=2)
+                   header2(1)=deltat_int2
                    header2(2)=0  ! dummy
                    write(14,rec=(irec-1)*60+(irec-1)*NSTEP+30) header2
                 endif



More information about the CIG-COMMITS mailing list