[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