[cig-commits] [commit] devel: adds error checking when reading of Par_file parameters; updates user output in model_tomography.f90 (27634e9)

cig_noreply at geodynamics.org cig_noreply at geodynamics.org
Tue Sep 16 08:46:25 PDT 2014


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

On branch  : devel
Link       : https://github.com/geodynamics/specfem3d/compare/b8df327ddc585a0c855aa689967cdc9846ff7dd3...27c70c5c56f96bc7798b66bffb0b95d4c9783d30

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

commit 27634e918bd69d6dbbb368a09959c188abbd666f
Author: daniel peter <peterda at ethz.ch>
Date:   Mon Sep 15 16:08:37 2014 +0200

    adds error checking when reading of Par_file parameters; updates user output in model_tomography.f90


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

27634e918bd69d6dbbb368a09959c188abbd666f
 src/generate_databases/model_tomography.f90 |  17 ++--
 src/meshfem3D/meshfem3D.f90                 |  32 +++----
 src/meshfem3D/read_mesh_parameter_file.f90  |  44 +++++-----
 src/shared/read_parameter_file.f90          | 126 ++++++++++++----------------
 4 files changed, 104 insertions(+), 115 deletions(-)

diff --git a/src/generate_databases/model_tomography.f90 b/src/generate_databases/model_tomography.f90
index 43d4c87..8ec345c 100644
--- a/src/generate_databases/model_tomography.f90
+++ b/src/generate_databases/model_tomography.f90
@@ -216,10 +216,10 @@
     enddo
 
     if( nlines /= nrec .and. myrank_tomo == 0 ) then
-       write(6,*) '',trim(tomo_filename)
-       write(6,*) '     number of grid points = NX*NY*NZ:',nrec
-       write(6,*) '     number of lines for grid points:',nlines
-       stop 'Error in the grid points definition'
+       print*, 'Error: ',trim(tomo_filename),' has invalid number of records'
+       print*, '     number of grid points specified (= NX*NY*NZ):',nrec
+       print*, '     number of file lines for grid points        :',nlines
+       stop 'Error in tomography data file for the grid points definition'
     endif
 
     ! closes file
@@ -233,8 +233,12 @@
   ! user output
   if( myrank_tomo == 0 ) then
     write(IMAIN,*)
-    write(IMAIN,*) '     number of tomographic models = ',NFILES_TOMO
+    write(IMAIN,*) '     number of tomographic models       = ',NFILES_TOMO
+    write(IMAIN,*) '     maximum number of data records     = ',nrecord_max
+    write(IMAIN,*) '     size of required tomography arrays = ', &
+      sngl( 4.d0 * NFILES_TOMO * nrecord_max * CUSTOM_REAL / 1024.d0 /1024.d0),'MB per process'
     write(IMAIN,*)
+    call flush_IMAIN()
   endif
 
   ! checks if we found a tomography model
@@ -327,7 +331,8 @@ end subroutine init_tomography_files
 
     ! user output
     if( myrank_tomo == 0 ) then
-       write(IMAIN,*) '     ',trim(tomo_filename)
+       write(IMAIN,*) '     reading: ',trim(tomo_filename)
+       call flush_IMAIN()
     endif
 
     ! opens file for reading
diff --git a/src/meshfem3D/meshfem3D.f90 b/src/meshfem3D/meshfem3D.f90
index de86cee..e1b2c05 100644
--- a/src/meshfem3D/meshfem3D.f90
+++ b/src/meshfem3D/meshfem3D.f90
@@ -373,25 +373,25 @@
     write(IMAIN,*)
   endif
 
-! read the parameter file
+! read the parameter file (DATA/Par_file)
   call read_parameter_file(NPROC,NTSTEP_BETWEEN_OUTPUT_SEISMOS,NSTEP,DT,NGNOD,NGNOD2D, &
-                        UTM_PROJECTION_ZONE,SUPPRESS_UTM_PROJECTION,TOMOGRAPHY_PATH, &
-                        ATTENUATION,USE_OLSEN_ATTENUATION,LOCAL_PATH,NSOURCES, &
-                        APPROXIMATE_OCEAN_LOAD,TOPOGRAPHY,ANISOTROPY,STACEY_ABSORBING_CONDITIONS,MOVIE_TYPE, &
-                        MOVIE_SURFACE,MOVIE_VOLUME,CREATE_SHAKEMAP,SAVE_DISPLACEMENT, &
-                        NTSTEP_BETWEEN_FRAMES,USE_HIGHRES_FOR_MOVIES,HDUR_MOVIE, &
-                        SAVE_MESH_FILES,PRINT_SOURCE_TIME_FUNCTION, &
-                        NTSTEP_BETWEEN_OUTPUT_INFO,SIMULATION_TYPE,SAVE_FORWARD, &
-                        NTSTEP_BETWEEN_READ_ADJSRC,NOISE_TOMOGRAPHY, &
-                        USE_FORCE_POINT_SOURCE,STACEY_INSTEAD_OF_FREE_SURFACE, &
-                        USE_RICKER_TIME_FUNCTION,OLSEN_ATTENUATION_RATIO,PML_CONDITIONS, &
-                        PML_INSTEAD_OF_FREE_SURFACE,f0_FOR_PML,IMODEL,FULL_ATTENUATION_SOLID,TRACTION_PATH,COUPLE_WITH_DSM)
+                           UTM_PROJECTION_ZONE,SUPPRESS_UTM_PROJECTION,TOMOGRAPHY_PATH, &
+                           ATTENUATION,USE_OLSEN_ATTENUATION,LOCAL_PATH,NSOURCES, &
+                           APPROXIMATE_OCEAN_LOAD,TOPOGRAPHY,ANISOTROPY,STACEY_ABSORBING_CONDITIONS,MOVIE_TYPE, &
+                           MOVIE_SURFACE,MOVIE_VOLUME,CREATE_SHAKEMAP,SAVE_DISPLACEMENT, &
+                           NTSTEP_BETWEEN_FRAMES,USE_HIGHRES_FOR_MOVIES,HDUR_MOVIE, &
+                           SAVE_MESH_FILES,PRINT_SOURCE_TIME_FUNCTION, &
+                           NTSTEP_BETWEEN_OUTPUT_INFO,SIMULATION_TYPE,SAVE_FORWARD, &
+                           NTSTEP_BETWEEN_READ_ADJSRC,NOISE_TOMOGRAPHY, &
+                           USE_FORCE_POINT_SOURCE,STACEY_INSTEAD_OF_FREE_SURFACE, &
+                           USE_RICKER_TIME_FUNCTION,OLSEN_ATTENUATION_RATIO,PML_CONDITIONS, &
+                           PML_INSTEAD_OF_FREE_SURFACE,f0_FOR_PML,IMODEL,FULL_ATTENUATION_SOLID,TRACTION_PATH,COUPLE_WITH_DSM)
 
   call read_adios_parameters(ADIOS_ENABLED, ADIOS_FOR_DATABASES,       &
                              ADIOS_FOR_FORWARD_ARRAYS, ADIOS_FOR_MESH, &
                              ADIOS_FOR_KERNELS)
 
-! read the mesh parameter file
+! read the mesh parameter file (Data/meshfem3D_files/Mesh_Par_file)
 ! nullify(subregions,material_properties)
   call read_mesh_parameter_file(LATITUDE_MIN,LATITUDE_MAX,LONGITUDE_MIN,LONGITUDE_MAX, &
                           UTM_X_MIN,UTM_X_MAX,UTM_Y_MIN,UTM_Y_MAX,Z_DEPTH_BLOCK, &
@@ -587,7 +587,11 @@
     write(IMAIN,*) 'longitude min = ',LONGITUDE_MIN
     write(IMAIN,*) 'longitude max = ',LONGITUDE_MAX
     write(IMAIN,*)
-    write(IMAIN,*) 'this is mapped to UTM in region ',UTM_PROJECTION_ZONE
+    if (SUPPRESS_UTM_PROJECTION) then
+      write(IMAIN,*) 'this is given directly as UTM'
+    else
+      write(IMAIN,*) 'this is mapped to UTM in region ',UTM_PROJECTION_ZONE
+    endif
     write(IMAIN,*)
     write(IMAIN,*) 'UTM X min = ',UTM_X_MIN
     write(IMAIN,*) 'UTM X max = ',UTM_X_MAX
diff --git a/src/meshfem3D/read_mesh_parameter_file.f90 b/src/meshfem3D/read_mesh_parameter_file.f90
index 9951143..b05e455 100644
--- a/src/meshfem3D/read_mesh_parameter_file.f90
+++ b/src/meshfem3D/read_mesh_parameter_file.f90
@@ -85,31 +85,31 @@ contains
   call open_parameter_file_mesh()
 
   call read_value_dble_precision_mesh(IIN,IGNORE_JUNK,LATITUDE_MIN, 'LATITUDE_MIN', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 1'
+  if (ierr /= 0) stop 'Error reading Mesh parameter LATITUDE_MIN'
   call read_value_dble_precision_mesh(IIN,IGNORE_JUNK,LATITUDE_MAX, 'LATITUDE_MAX', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 2'
+  if (ierr /= 0) stop 'Error reading Mesh parameter LATITUDE_MAX'
   call read_value_dble_precision_mesh(IIN,IGNORE_JUNK,LONGITUDE_MIN, 'LONGITUDE_MIN', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 3'
+  if (ierr /= 0) stop 'Error reading Mesh parameter LONGITUDE_MIN'
   call read_value_dble_precision_mesh(IIN,IGNORE_JUNK,LONGITUDE_MAX, 'LONGITUDE_MAX', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 4'
+  if (ierr /= 0) stop 'Error reading Mesh parameter LONGITUDE_MAX'
   call read_value_dble_precision_mesh(IIN,IGNORE_JUNK,DEPTH_BLOCK_KM, 'DEPTH_BLOCK_KM', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 5'
+  if (ierr /= 0) stop 'Error reading Mesh parameter DEPTH_BLOCK_KM'
   call read_value_integer_mesh(IIN,IGNORE_JUNK,UTM_PROJECTION_ZONE, 'UTM_PROJECTION_ZONE', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 6'
+  if (ierr /= 0) stop 'Error reading Mesh parameter UTM_PROJECTION_ZONE'
   call read_value_logical_mesh(IIN,IGNORE_JUNK,SUPPRESS_UTM_PROJECTION, 'SUPPRESS_UTM_PROJECTION', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 7'
+  if (ierr /= 0) stop 'Error reading Mesh parameter SUPPRESS_UTM_PROJECTION'
 
   call read_value_string_mesh(IIN,IGNORE_JUNK,INTERFACES_FILE, 'INTERFACES_FILE', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 8'
+  if (ierr /= 0) stop 'Error reading Mesh parameter INTERFACES_FILE'
 
   call read_value_integer_mesh(IIN,IGNORE_JUNK,NEX_XI, 'NEX_XI', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 9'
+  if (ierr /= 0) stop 'Error reading Mesh parameter NEX_XI'
   call read_value_integer_mesh(IIN,IGNORE_JUNK,NEX_ETA, 'NEX_ETA', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 10'
+  if (ierr /= 0) stop 'Error reading Mesh parameter NEX_ETA'
   call read_value_integer_mesh(IIN,IGNORE_JUNK,NPROC_XI, 'NPROC_XI', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 11'
+  if (ierr /= 0) stop 'Error reading Mesh parameter NPROC_XI'
   call read_value_integer_mesh(IIN,IGNORE_JUNK,NPROC_ETA, 'NPROC_ETA', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 12'
+  if (ierr /= 0) stop 'Error reading Mesh parameter NPROC_ETA'
 
 ! convert model size to UTM coordinates and depth of mesh to meters
   call utm_geo(LONGITUDE_MIN,LATITUDE_MIN,UTM_X_MIN,UTM_Y_MIN,UTM_PROJECTION_ZONE,ILONGLAT2UTM,SUPPRESS_UTM_PROJECTION)
@@ -127,13 +127,13 @@ contains
   UTM_MAX = max(UTM_Y_MAX-UTM_Y_MIN, UTM_X_MAX-UTM_X_MIN)/1000.0 ! in KM
 
   call read_value_logical_mesh(IIN,IGNORE_JUNK,USE_REGULAR_MESH, 'USE_REGULAR_MESH', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 13'
+  if (ierr /= 0) stop 'Error reading Mesh parameter USE_REGULAR_MESH'
   call read_value_integer_mesh(IIN,IGNORE_JUNK,NDOUBLINGS, 'NDOUBLINGS', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 14'
+  if (ierr /= 0) stop 'Error reading Mesh parameter NDOUBLINGS'
   call read_value_integer_mesh(IIN,IGNORE_JUNK,ner_doublings(1), 'NZ_DOUGLING_1', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 15'
+  if (ierr /= 0) stop 'Error reading Mesh parameter NZ_DOUGLING_1'
   call read_value_integer_mesh(IIN,IGNORE_JUNK,ner_doublings(2), 'NZ_DOUGLING_2', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 16'
+  if (ierr /= 0) stop 'Error reading Mesh parameter NZ_DOUGLING_2'
 
   if(ner_doublings(1) < ner_doublings(2) .and. NDOUBLINGS == 2) then
     idoubl = ner_doublings(1)
@@ -142,19 +142,19 @@ contains
   endif
 
   call read_value_logical_mesh(IIN,IGNORE_JUNK,CREATE_ABAQUS_FILES, 'CREATE_ABAQUS_FILES', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 17'
+  if (ierr /= 0) stop 'Error reading Mesh parameter CREATE_ABAQUS_FILES'
   call read_value_logical_mesh(IIN,IGNORE_JUNK,CREATE_DX_FILES, 'CREATE_DX_FILES', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 18'
+  if (ierr /= 0) stop 'Error reading Mesh parameter CREATE_DX_FILES'
   call read_value_logical_mesh(IIN,IGNORE_JUNK,CREATE_VTK_FILES, 'CREATE_VTK_FILES', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 19'
+  if (ierr /= 0) stop 'Error reading Mesh parameter CREATE_VTK_FILES'
 
 ! file in which we store the databases
   call read_value_string_mesh(IIN,IGNORE_JUNK,LOCAL_PATH, 'LOCAL_PATH', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 20'
+  if (ierr /= 0) stop 'Error reading Mesh parameter LOCAL_PATH'
 
 ! read number of materials
   call read_value_integer_mesh(IIN,IGNORE_JUNK,NMATERIALS, 'NMATERIALS', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 21'
+  if (ierr /= 0) stop 'Error reading Mesh parameter NMATERIALS'
 
 ! read materials properties
   allocate(material_properties(NMATERIALS,6),stat=ierr)
@@ -174,7 +174,7 @@ contains
 
 ! read number of subregions
   call read_value_integer_mesh(IIN,IGNORE_JUNK,NSUBREGIONS, 'NSUBREGIONS', ierr)
-  if (ierr /= 0) stop 'Error reading Mesh parameter 22'
+  if (ierr /= 0) stop 'Error reading Mesh parameter NSUBREGIONS'
 
 ! read subregions properties
   allocate(subregions(NSUBREGIONS,7),stat=ierr)
diff --git a/src/shared/read_parameter_file.f90 b/src/shared/read_parameter_file.f90
index 4fea2a8..af2c070 100644
--- a/src/shared/read_parameter_file.f90
+++ b/src/shared/read_parameter_file.f90
@@ -67,17 +67,6 @@
   ! opens file Par_file
   call open_parameter_file(ierr)
 
-  ! reads in parameters
-  call read_value_integer(SIMULATION_TYPE, 'SIMULATION_TYPE', ierr)
-  if (ierr /= 0) return
-  call read_value_integer(NOISE_TOMOGRAPHY, 'NOISE_TOMOGRAPHY', ierr)
-  if (ierr /= 0) return
-  call read_value_logical(SAVE_FORWARD, 'SAVE_FORWARD', ierr)
-  if (ierr /= 0) return
-  call read_value_integer(UTM_PROJECTION_ZONE, 'UTM_PROJECTION_ZONE', ierr)
-  if (ierr /= 0) return
-  call read_value_logical(SUPPRESS_UTM_PROJECTION, 'SUPPRESS_UTM_PROJECTION', ierr)
-  if (ierr /= 0) return
   ! total number of processors
   call read_value_integer(NPROC, 'NPROC', ierr)
   if (ierr /= 0) then
@@ -97,111 +86,102 @@
     endif
     NPROC = nproc_eta_old * nproc_xi_old
   endif
+
+  ! reads in mandatory simulation parameters
+  call read_value_integer(SIMULATION_TYPE, 'SIMULATION_TYPE', ierr)
+  if (ierr /= 0) stop 'Error reading Par_file parameter SIMULATION_TYPE'
+  call read_value_integer(NOISE_TOMOGRAPHY, 'NOISE_TOMOGRAPHY', ierr)
+  if (ierr /= 0) stop 'Error reading Par_file parameter NOISE_TOMOGRAPHY'
+  call read_value_logical(SAVE_FORWARD, 'SAVE_FORWARD', ierr)
+  if (ierr /= 0) stop 'Error reading Par_file parameter SAVE_FORWARD'
+  call read_value_integer(UTM_PROJECTION_ZONE, 'UTM_PROJECTION_ZONE', ierr)
+  if (ierr /= 0) stop 'Error reading Par_file parameter UTM_PROJECTION_ZONE'
+  call read_value_logical(SUPPRESS_UTM_PROJECTION, 'SUPPRESS_UTM_PROJECTION', ierr)
+  if (ierr /= 0) stop 'Error reading Par_file parameter SUPPRESS_UTM_PROJECTION'
   call read_value_integer(NSTEP, 'NSTEP', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter NSTEP'
   call read_value_double_precision(DT, 'DT', ierr)
-  if (ierr /= 0) return
-
-  ! number of nodes for 2D and 3D shape functions for quadrilaterals and hexahedra
+  if (ierr /= 0) stop 'Error reading Par_file parameter DT'
   call read_value_integer(NGNOD, 'NGNOD', ierr)
-  if (ierr /= 0) return
-
-  ! define the velocity model
+  if (ierr /= 0) stop 'Error reading Par_file parameter NGNOD'
   call read_value_string(MODEL, 'MODEL', ierr)
-  if (ierr /= 0) stop 'an error occurred while reading the parameter file: MODEL'
-
+  if (ierr /= 0) stop 'Error reading Par_file parameter MODEL'
   call read_value_logical(APPROXIMATE_OCEAN_LOAD, 'APPROXIMATE_OCEAN_LOAD', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter APPROXIMATE_OCEAN_LOAD'
   call read_value_logical(TOPOGRAPHY, 'TOPOGRAPHY', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter TOPOGRAPHY'
   call read_value_logical(ATTENUATION, 'ATTENUATION', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter ATTENUATION'
   call read_value_logical(FULL_ATTENUATION_SOLID, 'FULL_ATTENUATION_SOLID', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter FULL_ATTENUATION_SOLID'
   call read_value_logical(ANISOTROPY, 'ANISOTROPY', ierr)
-  if (ierr /= 0) return
-
+  if (ierr /= 0) stop 'Error reading Par_file parameter ANISOTROPY'
   call read_value_string(TOMOGRAPHY_PATH, 'TOMOGRAPHY_PATH', ierr)
-  if (ierr /= 0) return
-! see if we are running several independent runs in parallel
-! if so, add the right directory for that run (group numbers start at zero, but directory names start at run0001, thus we add one)
-! a negative value for "mygroup" is a convention that indicates that groups (i.e. sub-communicators, one per run) are off
-  if(NUMBER_OF_SIMULTANEOUS_RUNS > 1 .and. mygroup >= 0) then
-    write(path_to_add,"('run',i4.4,'/')") mygroup + 1
-    TOMOGRAPHY_PATH = path_to_add(1:len_trim(path_to_add))//TOMOGRAPHY_PATH(1:len_trim(TOMOGRAPHY_PATH))
-  endif
-
+  if (ierr /= 0) stop 'Error reading Par_file parameter TOMOGRAPHY_PATH'
   call read_value_logical(USE_OLSEN_ATTENUATION, 'USE_OLSEN_ATTENUATION', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter USE_OLSEN_ATTENUATION'
   call read_value_double_precision(OLSEN_ATTENUATION_RATIO, 'OLSEN_ATTENUATION_RATIO', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter OLSEN_ATTENUATION_RATIO'
   call read_value_logical(PML_CONDITIONS, 'PML_CONDITIONS', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter PML_CONDITIONS'
   call read_value_logical(PML_INSTEAD_OF_FREE_SURFACE, 'PML_INSTEAD_OF_FREE_SURFACE', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter PML_INSTEAD_OF_FREE_SURFACE'
   call read_value_double_precision(f0_FOR_PML, 'f0_FOR_PML', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter f0_FOR_PML'
   call read_value_logical(STACEY_ABSORBING_CONDITIONS, 'STACEY_ABSORBING_CONDITIONS', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter STACEY_ABSORBING_CONDITIONS'
   call read_value_logical(STACEY_INSTEAD_OF_FREE_SURFACE, 'STACEY_INSTEAD_OF_FREE_SURFACE', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter STACEY_INSTEAD_OF_FREE_SURFACE'
   call read_value_logical(CREATE_SHAKEMAP, 'CREATE_SHAKEMAP', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter CREATE_SHAKEMAP'
   call read_value_logical(MOVIE_SURFACE, 'MOVIE_SURFACE', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter MOVIE_SURFACE'
   call read_value_integer(MOVIE_TYPE, 'MOVIE_TYPE', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter MOVIE_TYPE'
   call read_value_logical(MOVIE_VOLUME, 'MOVIE_VOLUME', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter MOVIE_VOLUME'
   call read_value_logical(SAVE_DISPLACEMENT, 'SAVE_DISPLACEMENT', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter SAVE_DISPLACEMENT'
   call read_value_logical(USE_HIGHRES_FOR_MOVIES, 'USE_HIGHRES_FOR_MOVIES', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter USE_HIGHRES_FOR_MOVIES'
   call read_value_integer(NTSTEP_BETWEEN_FRAMES, 'NTSTEP_BETWEEN_FRAMES', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter NTSTEP_BETWEEN_FRAMES'
   call read_value_double_precision(HDUR_MOVIE, 'HDUR_MOVIE', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter HDUR_MOVIE'
   call read_value_logical(SAVE_MESH_FILES, 'SAVE_MESH_FILES', ierr)
-  if (ierr /= 0) return
-
+  if (ierr /= 0) stop 'Error reading Par_file parameter SAVE_MESH_FILES'
   call read_value_string(LOCAL_PATH, 'LOCAL_PATH', ierr)
-  if (ierr /= 0) return
-! see if we are running several independent runs in parallel
-! if so, add the right directory for that run (group numbers start at zero, but directory names start at run0001, thus we add one)
-! a negative value for "mygroup" is a convention that indicates that groups (i.e. sub-communicators, one per run) are off
-  if(NUMBER_OF_SIMULTANEOUS_RUNS > 1 .and. mygroup >= 0) then
-    write(path_to_add,"('run',i4.4,'/')") mygroup + 1
-    LOCAL_PATH = path_to_add(1:len_trim(path_to_add))//LOCAL_PATH(1:len_trim(LOCAL_PATH))
-  endif
-
+  if (ierr /= 0) stop 'Error reading Par_file parameter LOCAL_PATH'
   call read_value_integer(NTSTEP_BETWEEN_OUTPUT_INFO, 'NTSTEP_BETWEEN_OUTPUT_INFO', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter NTSTEP_BETWEEN_OUTPUT_INFO'
   call read_value_integer(NTSTEP_BETWEEN_OUTPUT_SEISMOS, 'NTSTEP_BETWEEN_OUTPUT_SEISMOS', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter NTSTEP_BETWEEN_OUTPUT_SEISMOS'
   call read_value_integer(NTSTEP_BETWEEN_READ_ADJSRC, 'NTSTEP_BETWEEN_READ_ADJSRC', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter NTSTEP_BETWEEN_READ_ADJSRC'
   call read_value_logical(USE_FORCE_POINT_SOURCE, 'USE_FORCE_POINT_SOURCE', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter USE_FORCE_POINT_SOURCE'
   call read_value_logical(USE_RICKER_TIME_FUNCTION, 'USE_RICKER_TIME_FUNCTION', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter USE_RICKER_TIME_FUNCTION'
   call read_value_logical(PRINT_SOURCE_TIME_FUNCTION, 'PRINT_SOURCE_TIME_FUNCTION', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter PRINT_SOURCE_TIME_FUNCTION'
   call read_value_logical(COUPLE_WITH_DSM, 'COUPLE_WITH_DSM', ierr)
-  if (ierr /= 0) return
-
+  if (ierr /= 0) stop 'Error reading Par_file parameter COUPLE_WITH_DSM'
   call read_value_string(TRACTION_PATH, 'TRACTION_PATH', ierr)
-  if (ierr /= 0) return
+  if (ierr /= 0) stop 'Error reading Par_file parameter TRACTION_PATH'
+
+  ! close parameter file
+  call close_parameter_file()
+
 ! see if we are running several independent runs in parallel
 ! if so, add the right directory for that run (group numbers start at zero, but directory names start at run0001, thus we add one)
 ! a negative value for "mygroup" is a convention that indicates that groups (i.e. sub-communicators, one per run) are off
   if(NUMBER_OF_SIMULTANEOUS_RUNS > 1 .and. mygroup >= 0) then
     write(path_to_add,"('run',i4.4,'/')") mygroup + 1
+    LOCAL_PATH = path_to_add(1:len_trim(path_to_add))//LOCAL_PATH(1:len_trim(LOCAL_PATH))
+    TOMOGRAPHY_PATH = path_to_add(1:len_trim(path_to_add))//TOMOGRAPHY_PATH(1:len_trim(TOMOGRAPHY_PATH))
     TRACTION_PATH = path_to_add(1:len_trim(path_to_add))//TRACTION_PATH(1:len_trim(TRACTION_PATH))
   endif
 
-  ! close parameter file
-  call close_parameter_file()
-
   ! noise simulations:
   ! double the number of time steps, if running noise simulations (+/- branches)
   if( NOISE_TOMOGRAPHY /= 0 )   NSTEP = 2*NSTEP-1



More information about the CIG-COMMITS mailing list