[cig-commits] r13100 - in seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta: DATA setup src

dkomati1 at geodynamics.org dkomati1 at geodynamics.org
Sun Oct 19 06:18:31 PDT 2008


Author: dkomati1
Date: 2008-10-19 06:18:30 -0700 (Sun, 19 Oct 2008)
New Revision: 13100

Modified:
   seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/DATA/Par_file
   seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/setup/constants.h
   seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/combine_AVS_DX.F90
   seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/create_header_file.f90
   seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/meshfem3D.F90
   seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/read_compute_parameters.F90
   seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/specfem3D.F90
Log:
added restart files (a better version than in v4.0: not limited to 3 runs,
more flexible)


Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/DATA/Par_file
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/DATA/Par_file	2008-10-17 19:47:19 UTC (rev 13099)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/DATA/Par_file	2008-10-19 13:18:30 UTC (rev 13100)
@@ -1,6 +1,6 @@
 
 # forward or adjoint simulation
-SIMULATION_TYPE                 = 1   # 1 = forward
+SIMULATION_TYPE                 = 1
 SAVE_FORWARD                    = .false.  # save last frame of forward simulation or not
 
 # number of chunks (1,2,3 or 6)
@@ -74,9 +74,9 @@
 # save mesh files to check the mesh
 SAVE_MESH_FILES                 = .false.
 
-# restart files (number of runs can be 1, 2 or 3, choose 1 for no restart files)
-NUMBER_OF_RUNS                  = 1
-NUMBER_OF_THIS_RUN              = 1
+# restart files
+IT_LAST_VALUE_DUMPED            = 0
+INTERVAL_DUMP_FILES             = 2000
 
 # interval at which we output time step info and max of norm of displacement
 NTSTEP_BETWEEN_OUTPUT_INFO      = 100
@@ -99,7 +99,7 @@
 # save all seismograms in one large combined file instead of one file per seismogram
 # to avoid overloading shared non-local file systems such as GPFS for instance
 SAVE_ALL_SEISMOS_IN_ONE_FILE    = .true.
-USE_BINARY_FOR_LARGE_FILE       = .false.
+USE_BINARY_FOR_LARGE_FILE       = .true.
 
 # flag to impose receivers at the surface or allow them to be buried
 RECEIVERS_CAN_BE_BURIED         = .false.

Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/setup/constants.h
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/setup/constants.h	2008-10-17 19:47:19 UTC (rev 13099)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/setup/constants.h	2008-10-19 13:18:30 UTC (rev 13100)
@@ -31,6 +31,10 @@
 !--- user can modify parameters below
 !
 
+! for restart files
+  logical, parameter :: USE_RESTART_FILES = .true.
+  character(len=100), parameter :: PATH_RESTART_FILES = '/scratch/komatits/dump_restart_files'
+
 ! this for non blocking assembly
   logical, parameter :: USE_NONBLOCKING_COMMS = .true.
   integer, parameter :: ELEMENTS_NONBLOCKING_CM_IC = 1500

Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/combine_AVS_DX.F90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/combine_AVS_DX.F90	2008-10-17 19:47:19 UTC (rev 13099)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/combine_AVS_DX.F90	2008-10-19 13:18:30 UTC (rev 13100)
@@ -128,7 +128,7 @@
           NER_TOP_CENTRAL_CUBE_ICB,NEX_XI,NEX_ETA,RMOHO_FICTITIOUS_IN_MESHER, &
           NPROC_XI,NPROC_ETA,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
           NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NTSTEP_BETWEEN_FRAMES, &
-          NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE, &
+          NTSTEP_BETWEEN_OUTPUT_INFO,IT_LAST_VALUE_DUMPED,INTERVAL_DUMP_FILES,NCHUNKS,SIMULATION_TYPE, &
           REFERENCE_1D_MODEL,THREE_D_MODEL,MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP, &
           ifirst_layer_aniso,ilast_layer_aniso
 
@@ -196,7 +196,7 @@
           NER_TOP_CENTRAL_CUBE_ICB,NEX_XI,NEX_ETA,RMOHO_FICTITIOUS_IN_MESHER, &
           NPROC_XI,NPROC_ETA,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
           NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NTSTEP_BETWEEN_FRAMES, &
-          NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,DT, &
+          NTSTEP_BETWEEN_OUTPUT_INFO,IT_LAST_VALUE_DUMPED,INTERVAL_DUMP_FILES,NCHUNKS,DT, &
           ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES,CENTER_LONGITUDE_IN_DEGREES, &
           CENTER_LATITUDE_IN_DEGREES,GAMMA_ROTATION_AZIMUTH,ROCEAN,RMIDDLE_CRUST, &
           RMOHO,R80,R120,R220,R400,R600,R670,R771,RTOPDDOUBLEPRIME,RCMB,RICB, &

Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/create_header_file.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/create_header_file.f90	2008-10-17 19:47:19 UTC (rev 13099)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/create_header_file.f90	2008-10-19 13:18:30 UTC (rev 13100)
@@ -41,7 +41,7 @@
           NER_TOP_CENTRAL_CUBE_ICB,NEX_XI,NEX_ETA,RMOHO_FICTITIOUS_IN_MESHER, &
           NPROC_XI,NPROC_ETA,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
           NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NSOURCES,NTSTEP_BETWEEN_FRAMES, &
-          NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE, &
+          NTSTEP_BETWEEN_OUTPUT_INFO,IT_LAST_VALUE_DUMPED,INTERVAL_DUMP_FILES,NCHUNKS,SIMULATION_TYPE, &
           REFERENCE_1D_MODEL,THREE_D_MODEL,MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP, &
           ifirst_layer_aniso,ilast_layer_aniso
 
@@ -117,7 +117,7 @@
          NER_TOP_CENTRAL_CUBE_ICB,NEX_XI,NEX_ETA,RMOHO_FICTITIOUS_IN_MESHER, &
          NPROC_XI,NPROC_ETA,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
          NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NTSTEP_BETWEEN_FRAMES, &
-         NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,DT, &
+         NTSTEP_BETWEEN_OUTPUT_INFO,IT_LAST_VALUE_DUMPED,INTERVAL_DUMP_FILES,NCHUNKS,DT, &
          ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES,CENTER_LONGITUDE_IN_DEGREES, &
          CENTER_LATITUDE_IN_DEGREES,GAMMA_ROTATION_AZIMUTH,ROCEAN,RMIDDLE_CRUST, &
          RMOHO,R80,R120,R220,R400,R600,R670,R771,RTOPDDOUBLEPRIME,RCMB,RICB, &

Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/meshfem3D.F90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/meshfem3D.F90	2008-10-17 19:47:19 UTC (rev 13099)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/meshfem3D.F90	2008-10-19 13:18:30 UTC (rev 13100)
@@ -387,7 +387,7 @@
           NER_TOP_CENTRAL_CUBE_ICB,NEX_XI,NEX_ETA,RMOHO_FICTITIOUS_IN_MESHER, &
           NPROC_XI,NPROC_ETA,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
           NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NSOURCES,NTSTEP_BETWEEN_FRAMES, &
-          NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE, &
+          NTSTEP_BETWEEN_OUTPUT_INFO,IT_LAST_VALUE_DUMPED,INTERVAL_DUMP_FILES,NCHUNKS,SIMULATION_TYPE, &
           REFERENCE_1D_MODEL,THREE_D_MODEL,MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP, &
           ifirst_layer_aniso,ilast_layer_aniso
 
@@ -704,7 +704,7 @@
           NER_TOP_CENTRAL_CUBE_ICB,NEX_XI,NEX_ETA,RMOHO_FICTITIOUS_IN_MESHER, &
           NPROC_XI,NPROC_ETA,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
           NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NTSTEP_BETWEEN_FRAMES, &
-          NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,DT, &
+          NTSTEP_BETWEEN_OUTPUT_INFO,IT_LAST_VALUE_DUMPED,INTERVAL_DUMP_FILES,NCHUNKS,DT, &
           ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES,CENTER_LONGITUDE_IN_DEGREES, &
           CENTER_LATITUDE_IN_DEGREES,GAMMA_ROTATION_AZIMUTH,ROCEAN,RMIDDLE_CRUST, &
           RMOHO,R80,R120,R220,R400,R600,R670,R771,RTOPDDOUBLEPRIME,RCMB,RICB, &
@@ -756,7 +756,7 @@
             NER_TOP_CENTRAL_CUBE_ICB,NEX_XI,NEX_ETA,RMOHO_FICTITIOUS_IN_MESHER, &
             NPROC_XI,NPROC_ETA,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
             NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NSOURCES,NTSTEP_BETWEEN_FRAMES, &
-            NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,&
+            NTSTEP_BETWEEN_OUTPUT_INFO,IT_LAST_VALUE_DUMPED,INTERVAL_DUMP_FILES,NCHUNKS,&
             SIMULATION_TYPE,REFERENCE_1D_MODEL,THREE_D_MODEL,NPROC,NPROCTOT, &
             NEX_PER_PROC_XI,NEX_PER_PROC_ETA,ratio_divide_central_cube,&
             MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP,ifirst_layer_aniso,ilast_layer_aniso,nrec/)
@@ -880,8 +880,8 @@
     NSOURCES = bcast_integer(22)
     NTSTEP_BETWEEN_FRAMES = bcast_integer(23)
     NTSTEP_BETWEEN_OUTPUT_INFO = bcast_integer(24)
-    NUMBER_OF_RUNS = bcast_integer(25)
-    NUMBER_OF_THIS_RUN = bcast_integer(26)
+    IT_LAST_VALUE_DUMPED = bcast_integer(25)
+    INTERVAL_DUMP_FILES = bcast_integer(26)
     NCHUNKS = bcast_integer(27)
     SIMULATION_TYPE = bcast_integer(28)
     REFERENCE_1D_MODEL = bcast_integer(29)

Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/read_compute_parameters.F90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/read_compute_parameters.F90	2008-10-17 19:47:19 UTC (rev 13099)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/read_compute_parameters.F90	2008-10-19 13:18:30 UTC (rev 13100)
@@ -31,7 +31,7 @@
          NER_TOP_CENTRAL_CUBE_ICB,NEX_XI,NEX_ETA,RMOHO_FICTITIOUS_IN_MESHER, &
          NPROC_XI,NPROC_ETA,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
          NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NTSTEP_BETWEEN_FRAMES, &
-         NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,DT, &
+         NTSTEP_BETWEEN_OUTPUT_INFO,IT_LAST_VALUE_DUMPED,INTERVAL_DUMP_FILES,NCHUNKS,DT, &
          ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES,CENTER_LONGITUDE_IN_DEGREES, &
          CENTER_LATITUDE_IN_DEGREES,GAMMA_ROTATION_AZIMUTH,ROCEAN,RMIDDLE_CRUST, &
          RMOHO,R80,R120,R220,R400,R600,R670,R771,RTOPDDOUBLEPRIME,RCMB,RICB, &
@@ -70,7 +70,7 @@
           NER_TOP_CENTRAL_CUBE_ICB,NEX_XI,NEX_ETA,RMOHO_FICTITIOUS_IN_MESHER, &
           NPROC_XI,NPROC_ETA,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
           NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NTSTEP_BETWEEN_FRAMES, &
-          NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE, &
+          NTSTEP_BETWEEN_OUTPUT_INFO,IT_LAST_VALUE_DUMPED,INTERVAL_DUMP_FILES,NCHUNKS,SIMULATION_TYPE, &
           REFERENCE_1D_MODEL,THREE_D_MODEL,MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP, &
           NEX_XI_read,NEX_ETA_read,NPROC_XI_read,NPROC_ETA_read,ifirst_layer_aniso,ilast_layer_aniso
 
@@ -1109,9 +1109,9 @@
 
   call read_value_logical(SAVE_MESH_FILES, 'mesher.SAVE_MESH_FILES')
   if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file'
-  call read_value_integer(NUMBER_OF_RUNS, 'solver.NUMBER_OF_RUNS')
+  call read_value_integer(IT_LAST_VALUE_DUMPED, 'solver.IT_LAST_VALUE_DUMPED')
   if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file'
-  call read_value_integer(NUMBER_OF_THIS_RUN, 'solver.NUMBER_OF_THIS_RUN')
+  call read_value_integer(INTERVAL_DUMP_FILES, 'solver.INTERVAL_DUMP_FILES')
   if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file'
   call read_value_integer(NTSTEP_BETWEEN_OUTPUT_INFO, 'solver.NTSTEP_BETWEEN_OUTPUT_INFO')
   if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file'
@@ -1120,6 +1120,16 @@
   call read_value_integer(NTSTEP_BETWEEN_READ_ADJSRC, 'solver.NTSTEP_BETWEEN_READ_ADJSRC')
   if(err_occurred() /= 0) return
 
+! when using restart files, make sure the two intervals coincide
+  if(USE_RESTART_FILES) then
+    NTSTEP_BETWEEN_OUTPUT_SEISMOS = INTERVAL_DUMP_FILES
+! some people might erroneously think that they should start with 1, fix that to 0
+    if(IT_LAST_VALUE_DUMPED <= 1) IT_LAST_VALUE_DUMPED = 0
+  else
+! if no restart files
+    IT_LAST_VALUE_DUMPED = 0
+  endif
+
   call read_value_logical(OUTPUT_SEISMOS_ASCII_TEXT, 'solver.OUTPUT_SEISMOS_ASCII_TEXT')
   if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file'
   call read_value_logical(OUTPUT_SEISMOS_SAC_ALPHANUM, 'solver.OUTPUT_SEISMOS_SAC_ALPHANUM')
@@ -1152,6 +1162,14 @@
     SAVE_ALL_SEISMOS_IN_ONE_FILE    = .true.
     USE_BINARY_FOR_LARGE_FILE       = .true.
     RECEIVERS_CAN_BE_BURIED         = .false.
+
+! when using restart files, make sure the two intervals coincide
+    if(USE_RESTART_FILES) then
+      NTSTEP_BETWEEN_OUTPUT_SEISMOS = INTERVAL_DUMP_FILES
+      SAVE_ALL_SEISMOS_IN_ONE_FILE    = .false.
+      USE_BINARY_FOR_LARGE_FILE       = .false.
+    endif
+
   endif
 
   if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file'

Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/specfem3D.F90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/specfem3D.F90	2008-10-17 19:47:19 UTC (rev 13099)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/version41_beta/src/specfem3D.F90	2008-10-19 13:18:30 UTC (rev 13100)
@@ -485,7 +485,7 @@
           NER_TOP_CENTRAL_CUBE_ICB,NEX_XI,NEX_ETA,RMOHO_FICTITIOUS_IN_MESHER, &
           NPROC_XI,NPROC_ETA,NTSTEP_BETWEEN_OUTPUT_SEISMOS,&
           NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NSOURCES,NTSTEP_BETWEEN_FRAMES, &
-          NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE, &
+          NTSTEP_BETWEEN_OUTPUT_INFO,IT_LAST_VALUE_DUMPED,INTERVAL_DUMP_FILES,NCHUNKS,SIMULATION_TYPE, &
           REFERENCE_1D_MODEL,THREE_D_MODEL,MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP, &
           ifirst_layer_aniso,ilast_layer_aniso
 
@@ -619,7 +619,7 @@
          NER_TOP_CENTRAL_CUBE_ICB,NEX_XI,NEX_ETA,RMOHO_FICTITIOUS_IN_MESHER, &
          NPROC_XI,NPROC_ETA,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
          NTSTEP_BETWEEN_READ_ADJSRC,NSTEP,NTSTEP_BETWEEN_FRAMES, &
-         NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,DT, &
+         NTSTEP_BETWEEN_OUTPUT_INFO,IT_LAST_VALUE_DUMPED,INTERVAL_DUMP_FILES,NCHUNKS,DT, &
          ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES,CENTER_LONGITUDE_IN_DEGREES, &
          CENTER_LATITUDE_IN_DEGREES,GAMMA_ROTATION_AZIMUTH,ROCEAN,RMIDDLE_CRUST, &
          RMOHO,R80,R120,R220,R400,R600,R670,R771,RTOPDDOUBLEPRIME,RCMB,RICB, &
@@ -675,8 +675,8 @@
     NSOURCES = bcast_integer(22)
     NTSTEP_BETWEEN_FRAMES = bcast_integer(23)
     NTSTEP_BETWEEN_OUTPUT_INFO = bcast_integer(24)
-    NUMBER_OF_RUNS = bcast_integer(25)
-    NUMBER_OF_THIS_RUN = bcast_integer(26)
+    IT_LAST_VALUE_DUMPED = bcast_integer(25)
+    INTERVAL_DUMP_FILES = bcast_integer(26)
     NCHUNKS = bcast_integer(27)
     SIMULATION_TYPE = bcast_integer(28)
     REFERENCE_1D_MODEL = bcast_integer(29)
@@ -1690,14 +1690,50 @@
   vz_inner_core = size(factor_common_inner_core,4)
   vnspec_inner_core = size(factor_common_inner_core,5)
 
-! define correct time steps if restart files
-  if(NUMBER_OF_RUNS < 1 .or. NUMBER_OF_RUNS > 3) stop 'number of restart runs can be 1, 2 or 3'
-  if(NUMBER_OF_THIS_RUN < 1 .or. NUMBER_OF_THIS_RUN > NUMBER_OF_RUNS) stop 'incorrect run number'
-  if (SIMULATION_TYPE /= 1 .and. NUMBER_OF_RUNS /= 1) stop 'Only 1 run for SIMULATION_TYPE = 2/3'
-
   it_begin = 1
   it_end = NSTEP
 
+! read restart files
+  if(USE_RESTART_FILES) then
+
+    it_begin = IT_LAST_VALUE_DUMPED + 1
+
+! if this is not the first part of the run, read all the files dumped to disk
+    if(IT_LAST_VALUE_DUMPED > 0) then
+      write(outputname,"('/dump_all_arrays',i6.6)") myrank
+      open(unit=55,file=trim(PATH_RESTART_FILES)//outputname,status='old',form='unformatted',action='read')
+      read(55) displ_crust_mantle
+      read(55) veloc_crust_mantle
+      read(55) accel_crust_mantle
+      read(55) displ_inner_core
+      read(55) veloc_inner_core
+      read(55) accel_inner_core
+      read(55) displ_outer_core
+      read(55) veloc_outer_core
+      read(55) accel_outer_core
+      read(55) R_memory_crust_mantle
+      read(55) R_memory_inner_core
+      read(55) epsilondev_crust_mantle
+      read(55) epsilondev_inner_core
+!     read(55) A_array_rotation
+!     read(55) B_array_rotation
+      close(55)
+
+! write a stamp to disk to notify user that files have been read back
+      if(myrank == 0) then
+        write(outputname,"('/restart_file_read_back_for_timestamp',i6.6)") it_begin
+        open(unit=IOUT,file=trim(OUTPUT_FILES)//outputname,status='unknown',action='write')
+        write(IOUT,*) 'Restart file read back for time step # ',it_begin
+        close(IOUT)
+      endif
+    endif
+
+! synchronize all the processes to make sure everybody has finished
+#ifdef USE_MPI
+    call MPI_BARRIER(MPI_COMM_WORLD,ier)
+#endif
+  endif
+
 ! initialize variables for writing seismograms
   seismo_offset = it_begin - 1
   seismo_current = 0
@@ -1762,7 +1798,7 @@
 ! compute the maximum of the norm of the displacement
 ! in all the slices using an MPI reduction
 ! and output timestamp file to check that simulation is running fine
-  if(mod(it,NTSTEP_BETWEEN_OUTPUT_INFO) == 0 .or. it == 5 .or. it == NSTEP) then
+  if(mod(it,NTSTEP_BETWEEN_OUTPUT_INFO) == 0 .or. it - it_begin + 1 == 5 .or. it == NSTEP) then
 
 ! compute maximum of norm of displacement in each slice
     Usolidnorm = max( &
@@ -1813,11 +1849,11 @@
 #ifdef USE_MPI
       write(IMAIN,*) 'Elapsed time in seconds = ',tCPU
       write(IMAIN,"(' Elapsed time in hh:mm:ss = ',i4,' h ',i2.2,' m ',i2.2,' s')") ihours,iminutes,iseconds
-      write(IMAIN,*) 'Mean elapsed time per time step in seconds = ',tCPU/dble(it)
+      write(IMAIN,*) 'Mean elapsed time per time step in seconds = ',tCPU/dble(it - it_begin + 1)
 #endif
 
 ! compute estimated remaining simulation time
-      t_remain = (NSTEP - it) * (tCPU/dble(it))
+      t_remain = (NSTEP - it) * (tCPU/dble(it - it_begin + 1))
       int_t_remain = int(t_remain)
       ihours_remain = int_t_remain / 3600
       iminutes_remain = (int_t_remain - 3600*ihours_remain) / 60
@@ -1841,10 +1877,10 @@
       write(IMAIN,"(' Estimated total run time in hh:mm:ss = ',i4,' h ',i2.2,' m ',i2.2,' s')") &
                ihours_total,iminutes_total,iseconds_total
 #endif
-      write(IMAIN,*) 'We have done ',sngl(100.d0*dble(it)/dble(NSTEP)),'% of that'
+      write(IMAIN,*) 'We have done ',sngl(100.d0*dble(it - it_begin + 1)/dble(NSTEP - IT_LAST_VALUE_DUMPED)),'% of that'
 
 #ifdef USE_MPI
-      if(it < 100) then
+      if(it - it_begin + 1 < 100) then
         write(IMAIN,*) '************************************************************'
         write(IMAIN,*) '**** BEWARE: the above time estimates are not reliable'
         write(IMAIN,*) '**** because fewer than 100 iterations have been performed'
@@ -1912,7 +1948,7 @@
             weekday_name(day_of_week_remote),month_name(mon_remote),day_remote,year_remote,hr_remote,minutes_remote
       endif
 
-      if(it < 100) then
+      if(it - it_begin + 1 < 100) then
         write(IMAIN,*) '************************************************************'
         write(IMAIN,*) '**** BEWARE: the above time estimates are not reliable'
         write(IMAIN,*) '**** because fewer than 100 iterations have been performed'
@@ -1939,7 +1975,7 @@
 #ifdef USE_MPI
       write(IOUT,*) 'Elapsed time in seconds = ',tCPU
       write(IOUT,"(' Elapsed time in hh:mm:ss = ',i4,' h ',i2.2,' m ',i2.2,' s')") ihours,iminutes,iseconds
-      write(IOUT,*) 'Mean elapsed time per time step in seconds = ',tCPU/dble(it)
+      write(IOUT,*) 'Mean elapsed time per time step in seconds = ',tCPU/dble(it- it_begin + 1 )
       write(IOUT,*)
 #endif
 
@@ -1955,7 +1991,7 @@
       write(IOUT,"(' Estimated total run time in hh:mm:ss = ',i4,' h ',i2.2,' m ',i2.2,' s')") &
                ihours_total,iminutes_total,iseconds_total
 #endif
-      write(IOUT,*) 'We have done ',sngl(100.d0*dble(it)/dble(NSTEP)),'% of that'
+      write(IOUT,*) 'We have done ',sngl(100.d0*dble(it - it_begin + 1)/dble(NSTEP - IT_LAST_VALUE_DUMPED)),'% of that'
       write(IOUT,*)
 
 #ifdef USE_MPI
@@ -1979,7 +2015,7 @@
             weekday_name(day_of_week_remote),month_name(mon_remote),day_remote,year_remote,hr_remote,minutes_remote
       endif
 
-      if(it < 100) then
+      if(it - it_begin + 1 < 100) then
         write(IOUT,*)
         write(IOUT,*) '************************************************************'
         write(IOUT,*) '**** BEWARE: the above time estimates are not reliable'
@@ -2769,6 +2805,44 @@
   endif
 #endif
 
+! dump restart files
+! if this is not the first part of the run, write all the files to disk
+  if(USE_RESTART_FILES .and. mod(it,INTERVAL_DUMP_FILES) == 0 .and. it /= NSTEP) then
+
+    write(outputname,"('/dump_all_arrays',i6.6)") myrank
+    open(unit=55,file=trim(PATH_RESTART_FILES)//outputname,status='unknown',form='unformatted',action='write')
+    write(55) displ_crust_mantle
+    write(55) veloc_crust_mantle
+    write(55) accel_crust_mantle
+    write(55) displ_inner_core
+    write(55) veloc_inner_core
+    write(55) accel_inner_core
+    write(55) displ_outer_core
+    write(55) veloc_outer_core
+    write(55) accel_outer_core
+    write(55) R_memory_crust_mantle
+    write(55) R_memory_inner_core
+    write(55) epsilondev_crust_mantle
+    write(55) epsilondev_inner_core
+!   write(55) A_array_rotation
+!   write(55) B_array_rotation
+    close(55)
+
+! synchronize all the processes to make sure everybody has finished
+#ifdef USE_MPI
+    call MPI_BARRIER(MPI_COMM_WORLD,ier)
+#endif
+
+! write a stamp to disk to notify user that files have been written
+    if(myrank == 0) then
+      write(outputname,"('/restart_file_for_timestamp',i6.6)") it
+      open(unit=IOUT,file=trim(OUTPUT_FILES)//outputname,status='unknown',action='write')
+      write(IOUT,*) 'Restart file created for time step # ',it
+      close(IOUT)
+    endif
+
+  endif
+
 !---- end of time iteration loop
 !
   enddo   ! end of main time loop



More information about the CIG-COMMITS mailing list