[cig-commits] r22482 - in seismo/3D/SPECFEM3D_GLOBE: branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared trunk/src/shared

dkomati1 at geodynamics.org dkomati1 at geodynamics.org
Mon Jul 1 13:51:10 PDT 2013


Author: dkomati1
Date: 2013-07-01 13:51:09 -0700 (Mon, 01 Jul 2013)
New Revision: 22482

Modified:
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/auto_ner.f90
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/broadcast_compute_parameters.f90
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/get_model_parameters.f90
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/memory_eval.f90
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/param_reader.c
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/read_compute_parameters.f90
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/read_parameter_file.f90
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/read_value_parameters.f90
   seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/save_header_file.f90
   seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/auto_ner.f90
   seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/broadcast_compute_parameters.f90
   seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/get_model_parameters.f90
   seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/memory_eval.f90
   seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/model_topo_bathy.f90
   seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/read_compute_parameters.f90
   seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/read_parameter_file.f90
   seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/save_header_file.f90
Log:
done with all the easy merges in "src/shared"


Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/auto_ner.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/auto_ner.f90	2013-07-01 18:39:32 UTC (rev 22481)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/auto_ner.f90	2013-07-01 20:51:09 UTC (rev 22482)
@@ -426,12 +426,17 @@
 
   implicit none
 
-  integer npts, ispec
+  integer :: npts,ispec,istart_left,istart_right,i
   integer, parameter :: NBNODE = 8
-  double precision pts(NBNODE+1,2), points(npts,2)
+  double precision pts(NBNODE+1,2),points(npts,2)
 
-  pts(1:8,:) = points( ( (ispec-1) * NBNODE)+1 : ( (ispec) * NBNODE ), : )
-  pts(NBNODE+1,:) = pts(1,:)  ! Use first point as the last point
+    istart_left = 1
+    istart_right = (ispec-1)*NBNODE + 1
+    do i = 0,NBNODE-1
+      pts(istart_left + i,1) = points(istart_right + i,1)
+      pts(istart_left + i,2) = points(istart_right + i,2)
+    enddo
+    pts(NBNODE+1,:) = pts(1,:)  ! use first point as the last point
 
   end subroutine get_element
 

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/broadcast_compute_parameters.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/broadcast_compute_parameters.f90	2013-07-01 18:39:32 UTC (rev 22481)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/broadcast_compute_parameters.f90	2013-07-01 20:51:09 UTC (rev 22482)
@@ -349,7 +349,7 @@
 !! \param myrank The rank of the MPI process in COMM_WORLD
 !! \param ADIOS_ENABLED Flag to indicate ADIOS output for seismograms.
 !! \param ADIOS_FOR_FORWARD_ARRAYS Flag to indicate that intermediate and
-!1        forward arrays are stored with the help of ADIOS.
+!!        forward arrays are stored with the help of ADIOS.
 subroutine broadcast_adios_parameters(myrank,ADIOS_ENABLED,  &
     ADIOS_FOR_FORWARD_ARRAYS, ADIOS_FOR_MPI_ARRAYS, &
     ADIOS_FOR_ARRAYS_SOLVER, ADIOS_FOR_SOLVER_MESHFILES, &

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/get_model_parameters.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/get_model_parameters.f90	2013-07-01 18:39:32 UTC (rev 22481)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/get_model_parameters.f90	2013-07-01 20:51:09 UTC (rev 22482)
@@ -397,7 +397,7 @@
     REFERENCE_1D_MODEL = GLL_REFERENCE_1D_MODEL
     THREE_D_MODEL = THREE_D_MODEL_GLL
     TRANSVERSE_ISOTROPY = .true.
-    ! note: after call to this routines read_compute_parameters() we will set
+    ! note: after call to this routine read_compute_parameters() we will set
     ! mgll_v%model_gll flag and reset
     ! THREE_D_MODEL = THREE_D_MODEL_S29EA
     ! (not done here because we will use mgll_v%model_gll flag to identify this
@@ -555,15 +555,13 @@
     RHO_BOTTOM_OC = 12168.6383 / RHOAV
 
   else if(REFERENCE_1D_MODEL == REFERENCE_MODEL_AK135) then
-    ! our implementation of AK135 has not been checked carefully yet
-    ! therefore let us doublecheck it carefully one day
 
-    ! values below corrected by Ying Zhou <yingz at gps.caltech.edu>
-    ! AK135 without the 300 meters of mud layer
+!! DK DK values below entirely checked and fixed by Dimitri Komatitsch in December 2012.
+
     ROCEAN = 6368000.d0
-    RMIDDLE_CRUST = 6361000.d0
-    RMOHO  = 6353000.d0
-    R80    = 6291000.d0
+    RMIDDLE_CRUST = 6351000.d0
+    RMOHO  = 6336000.d0
+    R80    = 6293500.d0
     R220   = 6161000.d0
     R400   = 5961000.d0
     R670   = 5711000.d0
@@ -571,9 +569,9 @@
     RCMB   = 3479500.d0
     RICB   = 1217500.d0
 
-    ! values for AK135 that are not discontinuities
+    ! values for AK135F that are not discontinuities
     R600 = 5771000.d0
-    R771 = 5611000.d0
+    R771 = 5600000.d0
 
     RHO_TOP_OC = 9914.5000 / RHOAV
     RHO_BOTTOM_OC = 12139.1000 / RHOAV

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/memory_eval.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/memory_eval.f90	2013-07-01 18:39:32 UTC (rev 22481)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/memory_eval.f90	2013-07-01 20:51:09 UTC (rev 22482)
@@ -162,7 +162,6 @@
     NSPEC_INNER_CORE_STR_AND_ATT = 1
   endif
 
-
   if(SIMULATION_TYPE /= 1 .or. SAVE_FORWARD .or. (MOVIE_VOLUME .and. SIMULATION_TYPE /= 3)) then
     NSPEC_CRUST_MANTLE_STRAIN_ONLY = NSPEC(IREGION_CRUST_MANTLE)
     NSPEC_INNER_CORE_STRAIN_ONLY = NSPEC(IREGION_INNER_CORE)
@@ -493,6 +492,5 @@
   static_memory_size = static_memory_size + &
     2.d0*dble(NGLLX)*dble(NGLLY)*dble(NGLLZ)*NSPEC_OUTER_CORE_ROT_ADJOINT*dble(CUSTOM_REAL)
 
-
   end subroutine memory_eval
 

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/param_reader.c
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/param_reader.c	2013-07-01 18:39:32 UTC (rev 22481)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/param_reader.c	2013-07-01 20:51:09 UTC (rev 22482)
@@ -104,6 +104,7 @@
     return;
   }
   free(fncopy);
+  *ierr = 0;
 }
 
 void

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/read_compute_parameters.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/read_compute_parameters.f90	2013-07-01 18:39:32 UTC (rev 22481)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/read_compute_parameters.f90	2013-07-01 20:51:09 UTC (rev 22482)
@@ -65,7 +65,6 @@
 
   include "constants.h"
 
-
 ! parameters read from parameter file
   integer NTSTEP_BETWEEN_OUTPUT_SEISMOS,NTSTEP_BETWEEN_READ_ADJSRC,NTSTEP_BETWEEN_FRAMES, &
           NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE, &
@@ -167,7 +166,7 @@
                           RECEIVERS_CAN_BE_BURIED,PRINT_SOURCE_TIME_FUNCTION, &
                           SAVE_MESH_FILES,ATTENUATION,ATTENUATION_NEW,ABSORBING_CONDITIONS,SAVE_FORWARD, &
                           OUTPUT_SEISMOS_ASCII_TEXT,OUTPUT_SEISMOS_SAC_ALPHANUM,OUTPUT_SEISMOS_SAC_BINARY, &
-                          ROTATE_SEISMOGRAMS_RT,WRITE_SEISMOGRAMS_BY_MASTER,&
+                          ROTATE_SEISMOGRAMS_RT,WRITE_SEISMOGRAMS_BY_MASTER, &
                           SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE,NOISE_TOMOGRAPHY)
 
   ! converts values to radians
@@ -211,11 +210,9 @@
                         RTOPDDOUBLEPRIME,RCMB,RICB,RMOHO_FICTITIOUS_IN_MESHER, &
                         R80_FICTITIOUS_IN_MESHER,RHO_TOP_OC,RHO_BOTTOM_OC,RHO_OCEANS)
 
-
-  NEX_MAX = max(NEX_XI,NEX_ETA)
-
   ! sets time step size and number of layers
   ! right distribution is determined based upon maximum value of NEX
+  NEX_MAX = max(NEX_XI,NEX_ETA)
   call get_timestep_and_layers(DT,MIN_ATTENUATION_PERIOD,MAX_ATTENUATION_PERIOD, &
                           NER_CRUST,NER_80_MOHO,NER_220_80,NER_400_220,&
                           NER_600_400,NER_670_600,NER_771_670, &
@@ -229,13 +226,26 @@
   ! initial guess : compute total number of time steps, rounded to next multiple of 100
   NSTEP = 100 * (int(RECORD_LENGTH_IN_MINUTES * 60.d0 / (100.d0*DT)) + 1)
 
+!! DK DK make sure NSTEP is a multiple of NT_DUMP_ATTENUATION
+  if(UNDO_ATTENUATION .and. mod(NSTEP,NT_DUMP_ATTENUATION) /= 0) NSTEP = (NSTEP/NT_DUMP_ATTENUATION + 1)*NT_DUMP_ATTENUATION
+
+! if doing benchmark runs to measure scaling of the code for a limited number of time steps only
+  if (DO_BENCHMARK_RUN_ONLY) NSTEP = NSTEP_FOR_BENCHMARK
+
+!<YANGL
+  if ( NOISE_TOMOGRAPHY /= 0 )   NSTEP = 2*NSTEP-1   ! time steps needs to be doubled, due to +/- branches
+!>YANGL
+
+  ! subsets used to save seismograms must not be larger than the whole time series,
+  ! otherwise we waste memory
+  if(NTSTEP_BETWEEN_OUTPUT_SEISMOS > NSTEP) NTSTEP_BETWEEN_OUTPUT_SEISMOS = NSTEP
+
   ! computes a default hdur_movie that creates nice looking movies.
   ! Sets HDUR_MOVIE as the minimum period the mesh can resolve
   if(HDUR_MOVIE <= TINYVAL) &
     HDUR_MOVIE = 1.2d0*max(240.d0/NEX_XI*18.d0*ANGULAR_WIDTH_XI_IN_DEGREES/90.d0, &
                            240.d0/NEX_ETA*18.d0*ANGULAR_WIDTH_ETA_IN_DEGREES/90.d0)
 
-
   ! checks parameters
   call rcp_check_parameters(NEX_XI,NEX_ETA,NPROC_XI,NPROC_ETA, &
                         NCHUNKS,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
@@ -339,11 +349,8 @@
                         last_doubling_layer, cut_doubling, nglob_int_surf_xi, nglob_int_surf_eta,nglob_ext_surf,&
                         normal_doubling, nglob_center_edge, nglob_corner_edge, nglob_border_edge)
 
-
-
   end subroutine read_compute_parameters
 
-
 !
 !-------------------------------------------------------------------------------------------------
 !
@@ -422,12 +429,12 @@
     stop 'need six chunks to include central cube'
 
   ! check that sphere can be cut into slices without getting negative Jacobian
-!  if(NCHUNKS == 6 ) then
-!    if(NEX_XI < 48) &
-!      stop 'NEX_XI must be greater than 48 to cut the sphere into slices with positive Jacobian'
-!    if(NEX_ETA < 48) &
-!      stop 'NEX_ETA must be greater than 48 to cut the sphere into slices with positive Jacobian'
-!  endif
+  if(NCHUNKS == 6 ) then
+    if(NEX_XI < 48) &
+      stop 'NEX_XI must be greater than 48 to cut the sphere into slices with positive Jacobian'
+    if(NEX_ETA < 48) &
+      stop 'NEX_ETA must be greater than 48 to cut the sphere into slices with positive Jacobian'
+  endif
 
   ! check that topology is correct if more than two chunks
   if(NCHUNKS > 2 .and. NEX_XI /= NEX_ETA) &

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/read_parameter_file.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/read_parameter_file.f90	2013-07-01 18:39:32 UTC (rev 22481)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/read_parameter_file.f90	2013-07-01 20:51:09 UTC (rev 22482)
@@ -25,6 +25,14 @@
 !
 !=====================================================================
 
+!!!!!! VERY IMPORTANT
+!!!!!! VERY IMPORTANT
+!!!!!! VERY IMPORTANT if you add new parameters to DATA/Par_file, remember to also
+!!!!!! VERY IMPORTANT broadcast them with MPI_BCAST in src/shared/broadcast_compute_parameters.f90
+!!!!!! VERY IMPORTANT otherwise the code will *NOT* work
+!!!!!! VERY IMPORTANT
+!!!!!! VERY IMPORTANT
+
   subroutine read_parameter_file(OUTPUT_FILES, &
                                 LOCAL_PATH,LOCAL_TMP_PATH,MODEL, &
                                 NTSTEP_BETWEEN_OUTPUT_SEISMOS,NTSTEP_BETWEEN_READ_ADJSRC,NTSTEP_BETWEEN_FRAMES, &
@@ -72,123 +80,124 @@
   character(len=150) OUTPUT_FILES,LOCAL_PATH,LOCAL_TMP_PATH,MODEL
 
 ! local variables
-  integer, external :: err_occurred
+  integer :: ierr
 
   ! gets the base pathname for output files
   call get_value_string(OUTPUT_FILES, 'OUTPUT_FILES', 'OUTPUT_FILES')
 
   ! opens the parameter file: DATA/Par_file
-  call open_parameter_file()
+  call open_parameter_file(ierr)
+  if (ierr /= 0) stop 'an error occurred while opening the parameter file'
 
   ! reads in values
-  call read_value_integer(SIMULATION_TYPE, 'solver.SIMULATION_TYPE')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: SIMULATION_TYPE'
-  call read_value_integer(NOISE_TOMOGRAPHY, 'solver.NOISE_TOMOGRAPHY')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: NOISE_TOMOGRAPHY'
-  call read_value_logical(SAVE_FORWARD, 'solver.SAVE_FORWARD')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: SAVE_FORWARD'
-  call read_value_integer(NCHUNKS, 'mesher.NCHUNKS')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: NCHUNKS'
-  call read_value_double_precision(ANGULAR_WIDTH_XI_IN_DEGREES, 'mesher.ANGULAR_WIDTH_XI_IN_DEGREES')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: ANGULAR_WIDTH_XI...'
-  call read_value_double_precision(ANGULAR_WIDTH_ETA_IN_DEGREES, 'mesher.ANGULAR_WIDTH_ETA_IN_DEGREES')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: ANGULAR_WIDTH_ETA...'
-  call read_value_double_precision(CENTER_LATITUDE_IN_DEGREES, 'mesher.CENTER_LATITUDE_IN_DEGREES')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: CENTER_LATITUDE...'
-  call read_value_double_precision(CENTER_LONGITUDE_IN_DEGREES, 'mesher.CENTER_LONGITUDE_IN_DEGREES')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: CENTER_LONGITUDE...'
-  call read_value_double_precision(GAMMA_ROTATION_AZIMUTH, 'mesher.GAMMA_ROTATION_AZIMUTH')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: GAMMA_ROTATION...'
+  call read_value_integer(SIMULATION_TYPE, 'solver.SIMULATION_TYPE', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: SIMULATION_TYPE'
+  call read_value_integer(NOISE_TOMOGRAPHY, 'solver.NOISE_TOMOGRAPHY', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: NOISE_TOMOGRAPHY'
+  call read_value_logical(SAVE_FORWARD, 'solver.SAVE_FORWARD', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: SAVE_FORWARD'
+  call read_value_integer(NCHUNKS, 'mesher.NCHUNKS', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: NCHUNKS'
+  call read_value_double_precision(ANGULAR_WIDTH_XI_IN_DEGREES, 'mesher.ANGULAR_WIDTH_XI_IN_DEGREES', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: ANGULAR_WIDTH_XI...'
+  call read_value_double_precision(ANGULAR_WIDTH_ETA_IN_DEGREES, 'mesher.ANGULAR_WIDTH_ETA_IN_DEGREES', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: ANGULAR_WIDTH_ETA...'
+  call read_value_double_precision(CENTER_LATITUDE_IN_DEGREES, 'mesher.CENTER_LATITUDE_IN_DEGREES', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: CENTER_LATITUDE...'
+  call read_value_double_precision(CENTER_LONGITUDE_IN_DEGREES, 'mesher.CENTER_LONGITUDE_IN_DEGREES', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: CENTER_LONGITUDE...'
+  call read_value_double_precision(GAMMA_ROTATION_AZIMUTH, 'mesher.GAMMA_ROTATION_AZIMUTH', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: GAMMA_ROTATION...'
   ! number of elements at the surface along the two sides of the first chunk
-  call read_value_integer(NEX_XI_read, 'mesher.NEX_XI')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: NEX_XI'
-  call read_value_integer(NEX_ETA_read, 'mesher.NEX_ETA')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: NEX_ETA'
-  call read_value_integer(NPROC_XI_read, 'mesher.NPROC_XI')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: NPROC_XI'
-  call read_value_integer(NPROC_ETA_read, 'mesher.NPROC_ETA')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: NPROC_ETA'
-  call read_value_logical(OCEANS, 'model.OCEANS')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: OCEANS'
-  call read_value_logical(ELLIPTICITY, 'model.ELLIPTICITY')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: ELLIPTICITIY'
-  call read_value_logical(TOPOGRAPHY, 'model.TOPOGRAPHY')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: TOPOGRAPHY'
-  call read_value_logical(GRAVITY, 'model.GRAVITY')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: GRAVITY'
-  call read_value_logical(ROTATION, 'model.ROTATION')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: ROTATION'
-  call read_value_logical(ATTENUATION, 'model.ATTENUATION')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: ATTENUATION'
-  call read_value_logical(ATTENUATION_NEW, 'model.ATTENUATION_NEW')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: ATTENUATION_NEW'
-  call read_value_logical(ABSORBING_CONDITIONS, 'solver.ABSORBING_CONDITIONS')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: ABSORBING_CONDITIONS'
+  call read_value_integer(NEX_XI_read, 'mesher.NEX_XI', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: NEX_XI'
+  call read_value_integer(NEX_ETA_read, 'mesher.NEX_ETA', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: NEX_ETA'
+  call read_value_integer(NPROC_XI_read, 'mesher.NPROC_XI', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: NPROC_XI'
+  call read_value_integer(NPROC_ETA_read, 'mesher.NPROC_ETA', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: NPROC_ETA'
+  call read_value_logical(OCEANS, 'model.OCEANS', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: OCEANS'
+  call read_value_logical(ELLIPTICITY, 'model.ELLIPTICITY', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: ELLIPTICITIY'
+  call read_value_logical(TOPOGRAPHY, 'model.TOPOGRAPHY', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: TOPOGRAPHY'
+  call read_value_logical(GRAVITY, 'model.GRAVITY', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: GRAVITY'
+  call read_value_logical(ROTATION, 'model.ROTATION', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: ROTATION'
+  call read_value_logical(ATTENUATION, 'model.ATTENUATION', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: ATTENUATION'
+  call read_value_logical(ATTENUATION_NEW, 'model.ATTENUATION_NEW', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: ATTENUATION_NEW'
+  call read_value_logical(ABSORBING_CONDITIONS, 'solver.ABSORBING_CONDITIONS', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: ABSORBING_CONDITIONS'
   ! define the velocity model
-  call read_value_string(MODEL, 'model.MODEL')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: MODEL'
-  call read_value_double_precision(RECORD_LENGTH_IN_MINUTES, 'solver.RECORD_LENGTH_IN_MINUTES')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: RECORD_LENGTH..'
-  call read_value_logical(MOVIE_SURFACE, 'solver.MOVIE_SURFACE')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: MOVIE_SURFACE'
-  call read_value_logical(MOVIE_VOLUME, 'solver.MOVIE_VOLUME')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: MOVIE_VOLUME'
-  call read_value_logical(MOVIE_COARSE,'solver.MOVIE_COARSE')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: MOVIE_COARSE'
-  call read_value_integer(NTSTEP_BETWEEN_FRAMES, 'solver.NTSTEP_BETWEEN_FRAMES')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: NTSTEP_BETWEEN_FRAMES'
-  call read_value_double_precision(HDUR_MOVIE, 'solver.HDUR_MOVIE')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: HDUR_MOVIE'
-  call read_value_integer(MOVIE_VOLUME_TYPE, 'solver.MOVIE_VOLUME_TYPE')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: MOVIE_VOLUME_TYPE'
-  call read_value_double_precision(MOVIE_TOP_KM, 'solver.MOVIE_TOP_KM')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: MOVIE_TOP_KM'
-  call read_value_double_precision(MOVIE_BOTTOM_KM, 'solver.MOVIE_BOTTOM_KM')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: MOVIE_BOTTOM_KM'
-  call read_value_double_precision(MOVIE_WEST_DEG, 'solver.MOVIE_WEST_DEG')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: MOVIE_WEST_DEG'
-  call read_value_double_precision(MOVIE_EAST_DEG, 'solver.MOVIE_EAST_DEG')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: MOVIE_EAST_DEG'
-  call read_value_double_precision(MOVIE_NORTH_DEG, 'solver.MOVIE_NORTH_DEG')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: MOVIE_NORTH_DEG'
-  call read_value_double_precision(MOVIE_SOUTH_DEG, 'solver.MOVIE_SOUTH_DEG')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: MOVIE_SOUTH_DEG'
-  call read_value_integer(MOVIE_START, 'solver.MOVIE_START')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: MOVIE_START'
-  call read_value_integer(MOVIE_STOP, 'solver.MOVIE_STOP')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: MOVIE_STOP'
-  call read_value_logical(SAVE_MESH_FILES, 'mesher.SAVE_MESH_FILES')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: SAVE_MESH_FILES'
-  call read_value_integer(NUMBER_OF_RUNS, 'solver.NUMBER_OF_RUNS')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: NUMBER_OF_RUNS'
-  call read_value_integer(NUMBER_OF_THIS_RUN, 'solver.NUMBER_OF_THIS_RUN')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: NUMBER_OF_THIS_RUN'
-  call read_value_string(LOCAL_PATH, 'LOCAL_PATH')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: LOCAL_PATH'
-  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: NTSTEP_BETWEEN_OUTPUT_INFO'
-  call read_value_integer(NTSTEP_BETWEEN_OUTPUT_SEISMOS, 'solver.NTSTEP_BETWEEN_OUTPUT_SEISMOS')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: NTSTEP_BETWEEN_OUTPUT_SEISMOS'
-  call read_value_integer(NTSTEP_BETWEEN_READ_ADJSRC, 'solver.NTSTEP_BETWEEN_READ_ADJSRC')
-  if(err_occurred() /= 0) return
-  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: OUTPUT_SIESMOS_ASCII_TEXT'
-  call read_value_logical(OUTPUT_SEISMOS_SAC_ALPHANUM, 'solver.OUTPUT_SEISMOS_SAC_ALPHANUM')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: OUTPUT_SEISMOS_SAC_ALPHANUM'
-  call read_value_logical(OUTPUT_SEISMOS_SAC_BINARY, 'solver.OUTPUT_SEISMOS_SAC_BINARY')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: OUTPUT_SEISMOS_SAC_BINARY'
-  call read_value_logical(ROTATE_SEISMOGRAMS_RT, 'solver.ROTATE_SEISMOGRAMS_RT')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: ROTATE_SEISMOGRAMS_RT'
-  call read_value_logical(WRITE_SEISMOGRAMS_BY_MASTER, 'solver.WRITE_SEISMOGRAMS_BY_MASTER')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: WRITE_SEISMOGRAMS_BY_MASTER'
-  call read_value_logical(SAVE_ALL_SEISMOS_IN_ONE_FILE, 'solver.SAVE_ALL_SEISMOS_IN_ONE_FILE')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: SAVE_ALL_SEISMOS_IN_ONE_FILE'
-  call read_value_logical(USE_BINARY_FOR_LARGE_FILE, 'solver.USE_BINARY_FOR_LARGE_FILE')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: USE_BINARY_FOR_LARGE_FILE'
-  call read_value_logical(RECEIVERS_CAN_BE_BURIED, 'solver.RECEIVERS_CAN_BE_BURIED')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: RECEIVERS_CAN_BE_BURIED'
-  call read_value_logical(PRINT_SOURCE_TIME_FUNCTION, 'solver.PRINT_SOURCE_TIME_FUNCTION')
-  if(err_occurred() /= 0) stop 'an error occurred while reading the parameter file: PRINT_SOURCE_TIME_FUNCTION'
+  call read_value_string(MODEL, 'model.MODEL', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: MODEL'
+  call read_value_double_precision(RECORD_LENGTH_IN_MINUTES, 'solver.RECORD_LENGTH_IN_MINUTES', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: RECORD_LENGTH_IN_MINUTES'
+  call read_value_logical(MOVIE_SURFACE, 'solver.MOVIE_SURFACE', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: MOVIE_SURFACE'
+  call read_value_logical(MOVIE_VOLUME, 'solver.MOVIE_VOLUME', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: MOVIE_VOLUME'
+  call read_value_logical(MOVIE_COARSE,'solver.MOVIE_COARSE', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: MOVIE_COARSE'
+  call read_value_integer(NTSTEP_BETWEEN_FRAMES, 'solver.NTSTEP_BETWEEN_FRAMES', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: NTSTEP_BETWEEN_FRAMES'
+  call read_value_double_precision(HDUR_MOVIE, 'solver.HDUR_MOVIE', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: HDUR_MOVIE'
+  call read_value_integer(MOVIE_VOLUME_TYPE, 'solver.MOVIE_VOLUME_TYPE', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: MOVIE_VOLUME_TYPE'
+  call read_value_double_precision(MOVIE_TOP_KM, 'solver.MOVIE_TOP_KM', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: MOVIE_TOP_KM'
+  call read_value_double_precision(MOVIE_BOTTOM_KM, 'solver.MOVIE_BOTTOM_KM', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: MOVIE_BOTTOM_KM'
+  call read_value_double_precision(MOVIE_WEST_DEG, 'solver.MOVIE_WEST_DEG', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: MOVIE_WEST_DEG'
+  call read_value_double_precision(MOVIE_EAST_DEG, 'solver.MOVIE_EAST_DEG', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: MOVIE_EAST_DEG'
+  call read_value_double_precision(MOVIE_NORTH_DEG, 'solver.MOVIE_NORTH_DEG', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: MOVIE_NORTH_DEG'
+  call read_value_double_precision(MOVIE_SOUTH_DEG, 'solver.MOVIE_SOUTH_DEG', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: MOVIE_SOUTH_DEG'
+  call read_value_integer(MOVIE_START, 'solver.MOVIE_START', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: MOVIE_START'
+  call read_value_integer(MOVIE_STOP, 'solver.MOVIE_STOP', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: MOVIE_STOP'
+  call read_value_logical(SAVE_MESH_FILES, 'mesher.SAVE_MESH_FILES', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: SAVE_MESH_FILES'
+  call read_value_integer(NUMBER_OF_RUNS, 'solver.NUMBER_OF_RUNS', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: NUMBER_OF_RUNS'
+  call read_value_integer(NUMBER_OF_THIS_RUN, 'solver.NUMBER_OF_THIS_RUN', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: NUMBER_OF_THIS_RUN'
+  call read_value_string(LOCAL_PATH, 'LOCAL_PATH', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: LOCAL_PATH'
+  call read_value_integer(NTSTEP_BETWEEN_OUTPUT_INFO, 'solver.NTSTEP_BETWEEN_OUTPUT_INFO', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: NTSTEP_BETWEEN_OUTPUT_INFO'
+  call read_value_integer(NTSTEP_BETWEEN_OUTPUT_SEISMOS, 'solver.NTSTEP_BETWEEN_OUTPUT_SEISMOS', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: NTSTEP_BETWEEN_OUTPUT_SEISMOS'
+  call read_value_integer(NTSTEP_BETWEEN_READ_ADJSRC, 'solver.NTSTEP_BETWEEN_READ_ADJSRC', ierr)
+  if (ierr /= 0) return
+  call read_value_logical(OUTPUT_SEISMOS_ASCII_TEXT, 'solver.OUTPUT_SEISMOS_ASCII_TEXT', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: OUTPUT_SIESMOS_ASCII_TEXT'
+  call read_value_logical(OUTPUT_SEISMOS_SAC_ALPHANUM, 'solver.OUTPUT_SEISMOS_SAC_ALPHANUM', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: OUTPUT_SEISMOS_SAC_ALPHANUM'
+  call read_value_logical(OUTPUT_SEISMOS_SAC_BINARY, 'solver.OUTPUT_SEISMOS_SAC_BINARY', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: OUTPUT_SEISMOS_SAC_BINARY'
+  call read_value_logical(ROTATE_SEISMOGRAMS_RT, 'solver.ROTATE_SEISMOGRAMS_RT', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: ROTATE_SEISMOGRAMS_RT'
+  call read_value_logical(WRITE_SEISMOGRAMS_BY_MASTER, 'solver.WRITE_SEISMOGRAMS_BY_MASTER', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: WRITE_SEISMOGRAMS_BY_MASTER'
+  call read_value_logical(SAVE_ALL_SEISMOS_IN_ONE_FILE, 'solver.SAVE_ALL_SEISMOS_IN_ONE_FILE', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: SAVE_ALL_SEISMOS_IN_ONE_FILE'
+  call read_value_logical(USE_BINARY_FOR_LARGE_FILE, 'solver.USE_BINARY_FOR_LARGE_FILE', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: USE_BINARY_FOR_LARGE_FILE'
+  call read_value_logical(RECEIVERS_CAN_BE_BURIED, 'solver.RECEIVERS_CAN_BE_BURIED', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: RECEIVERS_CAN_BE_BURIED'
+  call read_value_logical(PRINT_SOURCE_TIME_FUNCTION, 'solver.PRINT_SOURCE_TIME_FUNCTION', ierr)
+  if (ierr /= 0) stop 'an error occurred while reading the parameter file: PRINT_SOURCE_TIME_FUNCTION'
 
   ! closes parameter file
   call close_parameter_file()
@@ -233,7 +242,7 @@
 
   end subroutine read_gpu_mode
 
-
+!
 !-------------------------------------------------------------------------------------------------
 !
   subroutine read_adios_parameters(ADIOS_ENABLED, ADIOS_FOR_FORWARD_ARRAYS, &

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/read_value_parameters.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/read_value_parameters.f90	2013-07-01 18:39:32 UTC (rev 22481)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/read_value_parameters.f90	2013-07-01 20:51:09 UTC (rev 22482)
@@ -27,7 +27,7 @@
 
 ! read values from parameter file, ignoring white lines and comments
 
-  subroutine read_value_integer(value_to_read, name)
+  subroutine read_value_integer(value_to_read, name, ierr)
 
   implicit none
 
@@ -35,17 +35,16 @@
   character(len=*) name
   character(len=100) string_read
   integer ierr
-  common /param_err_common/ ierr
 
   call param_read(string_read, len(string_read), name, len(name), ierr)
   if (ierr /= 0) return
-  read(string_read,*) value_to_read
+  read(string_read,*,iostat=ierr) value_to_read
 
   end subroutine read_value_integer
 
 !--------------------
 
-  subroutine read_value_double_precision(value_to_read, name)
+  subroutine read_value_double_precision(value_to_read, name, ierr)
 
   implicit none
 
@@ -53,17 +52,16 @@
   character(len=*) name
   character(len=100) string_read
   integer ierr
-  common /param_err_common/ ierr
 
   call param_read(string_read, len(string_read), name, len(name), ierr)
   if (ierr /= 0) return
-  read(string_read,*) value_to_read
+  read(string_read,*,iostat=ierr) value_to_read
 
   end subroutine read_value_double_precision
 
 !--------------------
 
-  subroutine read_value_logical(value_to_read, name)
+  subroutine read_value_logical(value_to_read, name, ierr)
 
   implicit none
 
@@ -71,17 +69,16 @@
   character(len=*) name
   character(len=100) string_read
   integer ierr
-  common /param_err_common/ ierr
 
   call param_read(string_read, len(string_read), name, len(name), ierr)
   if (ierr /= 0) return
-  read(string_read,*) value_to_read
+  read(string_read,*,iostat=ierr) value_to_read
 
   end subroutine read_value_logical
 
 !--------------------
 
-  subroutine read_value_string(value_to_read, name)
+  subroutine read_value_string(value_to_read, name, ierr)
 
   implicit none
 
@@ -89,7 +86,6 @@
   character(len=*) name
   character(len=150) string_read
   integer ierr
-  common /param_err_common/ ierr
 
   call param_read(string_read, len(string_read), name, len(name), ierr)
   if (ierr /= 0) return
@@ -99,10 +95,9 @@
 
 !--------------------
 
-  subroutine open_parameter_file
+  subroutine open_parameter_file(ierr)
 
   integer ierr
-  common /param_err_common/ ierr
   character(len=50) filename
   filename = 'DATA/Par_file'
 
@@ -121,28 +116,6 @@
 
 !--------------------
 
-  integer function err_occurred()
-
-  integer ierr
-  common /param_err_common/ ierr
-
-  err_occurred = ierr
-
-  end function err_occurred
-
-!--------------------
-
-  subroutine read_value_clear_err()
-
-  integer ierr
-  common /param_err_common/ ierr
-
-  ierr = 0
-
-  end subroutine read_value_clear_err
-
-!--------------------
-
 !
 ! unused routines:
 !

Modified: seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/save_header_file.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/save_header_file.f90	2013-07-01 18:39:32 UTC (rev 22481)
+++ seismo/3D/SPECFEM3D_GLOBE/branches/SPECFEM3D_GLOBE_SUNFLOWER/src/shared/save_header_file.f90	2013-07-01 20:51:09 UTC (rev 22482)
@@ -61,7 +61,7 @@
   integer NEX_XI,NEX_ETA,NPROC,NPROCTOT,NCHUNKS,NSOURCES,NSTEP
 
   logical TRANSVERSE_ISOTROPY,ANISOTROPIC_3D_MANTLE,ANISOTROPIC_INNER_CORE, &
-       ELLIPTICITY,GRAVITY,ROTATION,OCEANS,ATTENUATION,ATTENUATION_NEW,ATTENUATION_3D,INCLUDE_CENTRAL_CUBE
+          ELLIPTICITY,GRAVITY,ROTATION,OCEANS,ATTENUATION,ATTENUATION_NEW,ATTENUATION_3D,INCLUDE_CENTRAL_CUBE
 
   double precision ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES, &
           CENTER_LONGITUDE_IN_DEGREES,CENTER_LATITUDE_IN_DEGREES,GAMMA_ROTATION_AZIMUTH
@@ -259,21 +259,41 @@
   write(IOUT,*) '! approximate static memory needed by the solver:'
   write(IOUT,*) '! ----------------------------------------------'
   write(IOUT,*) '!'
-  write(IOUT,*) '! size of static arrays per slice = ',static_memory_size/1073741824.d0,' GB'
+  write(IOUT,*) '! (lower bound, usually the real amount used is 5% to 10% higher)'
   write(IOUT,*) '!'
-  ! note: using less memory becomes only an issue if the code scaling is bad.
-  !          most users will run simulations with an executable using far less than 80% RAM per core
-  !          since they prefer having a faster computational time (and use a higher number of cores).
-  !write(IOUT,*) '!   (should be below and typically equal to 80% or 90%'
-  !write(IOUT,*) '!    of the memory installed per core)'
-  write(IOUT,*) '!   (should be below to 80% or 90% of the memory installed per core)'
-  write(IOUT,*) '!   (if significantly more, the job will not run by lack of memory )'
-  !write(IOUT,*) '!   (if significantly less, you waste a significant amount of memory)'
+  write(IOUT,*) '! (you can get a more precise estimate of the size used per MPI process'
+  write(IOUT,*) '!  by typing "size -d bin/xspecfem3D"'
+  write(IOUT,*) '!  after compiling the code with the DATA/Par_file you plan to use)'
   write(IOUT,*) '!'
-  write(IOUT,*) '! size of static arrays for all slices = ',static_memory_size*dble(NPROCTOT)/1073741824.d0,' GB'
-  write(IOUT,*) '!                                      = ',static_memory_size*dble(NPROCTOT)/1099511627776.d0,' TB'
+  write(IOUT,*) '! size of static arrays per slice = ',static_memory_size/1.d6,' MB'
+  write(IOUT,*) '!                                 = ',static_memory_size/1048576.d0,' MiB'
+  write(IOUT,*) '!                                 = ',static_memory_size/1.d9,' GB'
+  write(IOUT,*) '!                                 = ',static_memory_size/1073741824.d0,' GiB'
   write(IOUT,*) '!'
 
+  ! note: using less memory becomes an issue only if the strong scaling of the code is poor.
+  !          Some users will run simulations with an executable using far less than 80% RAM per core
+  !          if they prefer having a faster computational time (and use a higher number of cores).
+
+  write(IOUT,*) '! (should be below to 80% or 90% of the memory installed per core)'
+  write(IOUT,*) '! (if significantly more, the job will not run by lack of memory )'
+  write(IOUT,*) '! (note that if significantly less, you waste a significant amount'
+  write(IOUT,*) '!  of memory per processor core)'
+  write(IOUT,*) '! (but that can be perfectly acceptable if you can afford it and'
+  write(IOUT,*) '!  want faster results by using more cores)'
+  write(IOUT,*) '!'
+  if(static_memory_size*dble(NPROCTOT)/1.d6 < 10000.d0) then
+    write(IOUT,*) '! size of static arrays for all slices = ',static_memory_size*dble(NPROCTOT)/1.d6,' MB'
+    write(IOUT,*) '!                                      = ',static_memory_size*dble(NPROCTOT)/1048576.d0,' MiB'
+    write(IOUT,*) '!                                      = ',static_memory_size*dble(NPROCTOT)/1.d9,' GB'
+  else
+    write(IOUT,*) '! size of static arrays for all slices = ',static_memory_size*dble(NPROCTOT)/1.d9,' GB'
+  endif
+  write(IOUT,*) '!                                      = ',static_memory_size*dble(NPROCTOT)/1073741824.d0,' GiB'
+  write(IOUT,*) '!                                      = ',static_memory_size*dble(NPROCTOT)/1.d12,' TB'
+  write(IOUT,*) '!                                      = ',static_memory_size*dble(NPROCTOT)/1099511627776.d0,' TiB'
+  write(IOUT,*) '!'
+
   write(IOUT,*)
   write(IOUT,*) 'integer, parameter :: NEX_XI_VAL = ',NEX_XI
   write(IOUT,*) 'integer, parameter :: NEX_ETA_VAL = ',NEX_ETA

Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/auto_ner.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/auto_ner.f90	2013-07-01 18:39:32 UTC (rev 22481)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/auto_ner.f90	2013-07-01 20:51:09 UTC (rev 22482)
@@ -276,8 +276,8 @@
   ! Find optimal elements per region
   do i = 1,NUM_REGIONS-1
      dr = r(i) - r(i+1)              ! Radial Length of Ragion
-     wt = width * PI/180.0d0 * r(i)   / (NEX*1.0d0 / scaling(i)*1.0d0) ! Element Width Top
-     wb = width * PI/180.0d0 * r(i+1) / (NEX*1.0d0 / scaling(i)*1.0d0) ! Element Width Bottom
+     wt = width * DEGREES_TO_RADIANS * r(i)   / (NEX*1.0d0 / scaling(i)*1.0d0) ! Element Width Top
+     wb = width * DEGREES_TO_RADIANS * r(i+1) / (NEX*1.0d0 / scaling(i)*1.0d0) ! Element Width Bottom
      w  = (wt + wb) * 0.5d0          ! Average Width of Region
      ner_test = NER(i)               ! Initial solution
      ratio = (dr / ner_test) / w     ! Aspect Ratio of Element
@@ -372,8 +372,9 @@
 
   implicit none
 
+  include 'constants.h'
+
   double precision, parameter :: RICB_KM = 1221.0d0
-  double precision, parameter :: PI = 3.1415
 
   integer nex_xi, ner
   double precision rcube, alpha
@@ -390,10 +391,10 @@
      factx = 2.0d0 * ratio_x - 1.0d0
      xi = (PI / 2.0d0) * factx
      x = (rcube / sqrt(2.0d0)) * factx
-     y = (rcube / sqrt(2.0d0)) * (1 + cos(xi) * alpha / (PI / 2.0d0))
+     y = (rcube / sqrt(2.0d0)) * (1 + cos(xi) * alpha / PI_OVER_TWO)
 
-     surfx = RICB_KM * cos(3 * (PI/4.0d0) - ratio_x * (PI/2.0d0))
-     surfy = RICB_KM * sin(3 * (PI/4.0d0) - ratio_x * (PI/2.0d0))
+     surfx = RICB_KM * cos(3 * (PI/4.0d0) - ratio_x * PI_OVER_TWO)
+     surfy = RICB_KM * sin(3 * (PI/4.0d0) - ratio_x * PI_OVER_TWO)
 
      dist_cc_icb = sqrt((surfx -x)**2 + (surfy - y)**2)
      if(ix /= nex_xi/2) then
@@ -411,18 +412,20 @@
 !
 
   subroutine get_element(points, ispec, npts, pts)
-    implicit none
-    integer :: npts,ispec,istart_left,istart_right,i
-    integer, parameter :: NBNODE = 8
-    double precision pts(NBNODE+1,2), points(npts,2)
 
+  implicit none
+
+  integer :: npts,ispec,istart_left,istart_right,i
+  integer, parameter :: NBNODE = 8
+  double precision pts(NBNODE+1,2),points(npts,2)
+
     istart_left = 1
     istart_right = (ispec-1)*NBNODE + 1
     do i = 0,NBNODE-1
       pts(istart_left + i,1) = points(istart_right + i,1)
       pts(istart_left + i,2) = points(istart_right + i,2)
     enddo
-    pts(NBNODE+1,:) = pts(1,:)  ! Use first point as the last point
+    pts(NBNODE+1,:) = pts(1,:)  ! use first point as the last point
 
   end subroutine get_element
 
@@ -439,7 +442,6 @@
   double precision edgemax, edgemin, edge
   double precision pts(NBNODE+1, 2)
 
-
   edgemax = -1e7
   edgemin = -edgemax
   do ie = 1,NBNODE/2,1
@@ -517,7 +519,7 @@
 
   implicit none
 
-  double precision, parameter :: PI = 3.1415d0
+  include 'constants.h'
 
   integer ix, iy, nbx, nby
   double precision radius, alpha
@@ -533,11 +535,11 @@
   factx = 2.0d0 * ratio_x - 1.0d0
   facty = 2.0d0 * ratio_y - 1.0d0
 
-  xi  = (PI / 2.0d0) * factx
-  eta = (PI / 2.0d0) * facty
+  xi  = PI_OVER_TWO * factx
+  eta = PI_OVER_TWO * facty
 
-  x = (radius / sqrt(2.0d0)) * factx * ( 1 + cos(eta) * alpha / (PI / 2.0d0))
-  y = (radius / sqrt(2.0d0)) * facty * ( 1 + cos(xi)  * alpha / (PI / 2.0d0))
+  x = (radius / sqrt(2.0d0)) * factx * ( 1 + cos(eta) * alpha / PI_OVER_TWO )
+  y = (radius / sqrt(2.0d0)) * facty * ( 1 + cos(xi)  * alpha / PI_OVER_TWO )
 
   end subroutine compute_coordinate_central_cube
 
@@ -549,7 +551,8 @@
 
   implicit none
 
-  double precision, parameter :: PI      = 3.1415d0
+  include 'constants.h'
+
   double precision, parameter :: RICB_KM = 1221.0d0
 
   integer ix, iy, nbx, nby, ic
@@ -567,13 +570,13 @@
   ratio_y = (iy * 1.0d0) / (nby * 1.0d0)
 
   factx = 2.0d0 * ratio_x - 1.0d0
-  xi = (PI/2.0d0) * factx
+  xi = PI_OVER_TWO * factx
 
   xcc = (rcube / sqrt(2.0d0)) * factx
-  ycc = (rcube / sqrt(2.0d0)) * (1 + cos(xi) * alpha / (PI/2.0d0))
+  ycc = (rcube / sqrt(2.0d0)) * (1 + cos(xi) * alpha / PI_OVER_TWO)
 
-  xsurf = RICB_KM * cos(3.0d0 * (PI/4.0d0) - ratio_x * (PI/2.0d0))
-  ysurf = RICB_KM * sin(3.0d0 * (PI/4.0d0) - ratio_x * (PI/2.0d0))
+  xsurf = RICB_KM * cos(3.0d0 * PI_OVER_FOUR - ratio_x * PI_OVER_TWO)
+  ysurf = RICB_KM * sin(3.0d0 * PI_OVER_FOUR - ratio_x * PI_OVER_TWO)
 
   deltax = xsurf - xcc
   deltay = ysurf - ycc

Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/broadcast_compute_parameters.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/broadcast_compute_parameters.f90	2013-07-01 18:39:32 UTC (rev 22481)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/broadcast_compute_parameters.f90	2013-07-01 20:51:09 UTC (rev 22482)
@@ -324,3 +324,70 @@
   endif
 
   end subroutine broadcast_compute_parameters
+
+
+!-------------------------------------------------------------------------------------------------
+!> Broadcast the parameters relative to GPU computing settings.
+!! \param myrank The rank of the MPI process in COMM_WORLD
+!! \param GPU_MODE Flag to indicate that GPU computing is ON or OFF.
+  subroutine broadcast_gpu_parameters(myrank,GPU_MODE)
+
+  implicit none
+
+! standard include of the MPI library
+  include 'mpif.h'
+  include "constants.h"
+  include "precision.h"
+
+  integer:: myrank
+  logical:: GPU_MODE
+  ! local parameters
+  integer :: ier
+
+  call MPI_BCAST(GPU_MODE,1,MPI_LOGICAL,0,MPI_COMM_WORLD,ier)
+  if( ier /= 0 ) call exit_MPI(myrank,'error broadcasting GPU_MODE')
+
+  end subroutine broadcast_gpu_parameters
+
+!-------------------------------------------------------------------------------------------------
+!> Broadcast the parameters relative to ADIOS output settings.
+!! \param myrank The rank of the MPI process in COMM_WORLD
+!! \param ADIOS_ENABLED Flag to indicate ADIOS output for seismograms.
+!! \param ADIOS_FOR_FORWARD_ARRAYS Flag to indicate that intermediate and
+!!        forward arrays are stored with the help of ADIOS.
+subroutine broadcast_adios_parameters(myrank,ADIOS_ENABLED,  &
+    ADIOS_FOR_FORWARD_ARRAYS, ADIOS_FOR_MPI_ARRAYS, &
+    ADIOS_FOR_ARRAYS_SOLVER, ADIOS_FOR_SOLVER_MESHFILES, &
+    ADIOS_FOR_AVS_DX)
+
+  implicit none
+
+  ! standard include of the MPI library
+  include 'mpif.h'
+  include "constants.h"
+  include "precision.h"
+
+  integer:: myrank
+  logical:: ADIOS_ENABLED, ADIOS_FOR_FORWARD_ARRAYS, ADIOS_FOR_MPI_ARRAYS, &
+      ADIOS_FOR_ARRAYS_SOLVER, ADIOS_FOR_SOLVER_MESHFILES, ADIOS_FOR_AVS_DX
+  ! local parameters
+  integer :: ier
+  call MPI_BCAST(ADIOS_ENABLED,1,MPI_LOGICAL,0,MPI_COMM_WORLD,ier)
+  if( ier /= 0 ) call exit_MPI(myrank,'error broadcasting ADIOS_ENABLED')
+  call MPI_BCAST(ADIOS_FOR_FORWARD_ARRAYS,1,MPI_LOGICAL,0,MPI_COMM_WORLD,ier)
+  if( ier /= 0 ) call exit_MPI(myrank, &
+      'error broadcasting ADIOS_FOR_FORWARD_ARRAYS')
+  call MPI_BCAST(ADIOS_FOR_MPI_ARRAYS,1,MPI_LOGICAL,0,MPI_COMM_WORLD,ier)
+  if( ier /= 0 ) call exit_MPI(myrank, &
+      'error broadcasting ADIOS_FOR_MPI_ARRAYS')
+  call MPI_BCAST(ADIOS_FOR_ARRAYS_SOLVER,1,MPI_LOGICAL,0,MPI_COMM_WORLD,ier)
+  if( ier /= 0 ) call exit_MPI(myrank, &
+      'error broadcasting ADIOS_FOR_ARRAYS_SOLVER')
+  call MPI_BCAST(ADIOS_FOR_SOLVER_MESHFILES,1,MPI_LOGICAL,0,MPI_COMM_WORLD,ier)
+  if( ier /= 0 ) call exit_MPI(myrank, &
+      'error broadcasting ADIOS_FOR_SOLVER_MESHFILES')
+  call MPI_BCAST(ADIOS_FOR_AVS_DX,1,MPI_LOGICAL,0,MPI_COMM_WORLD,ier)
+  if( ier /= 0 ) call exit_MPI(myrank, &
+      'error broadcasting ADIOS_FOR_AVS_DX')
+
+end subroutine broadcast_adios_parameters

Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/get_model_parameters.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/get_model_parameters.f90	2013-07-01 18:39:32 UTC (rev 22481)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/get_model_parameters.f90	2013-07-01 20:51:09 UTC (rev 22482)
@@ -122,6 +122,8 @@
   ! layers in the case of 3D models. The purpose of this stretching is to squeeze more
   ! GLL points per km in the upper part of the crust than in the lower part.
   !
+  ! CRUSTAL : flag set to .true. if a 3D crustal model (e.g. Crust-2.0) will be used or
+  !  to .false. for a 1D crustal model.
 
   ! extract ending of model name
   ending = ' '
@@ -156,19 +158,28 @@
 !
 !---
 
+  ! default values
 
   ! uses PREM as the 1D reference model by default
-  ! uses no mantle heterogeneities by default
-  ! uses no 3D model by default
+  REFERENCE_1D_MODEL = REFERENCE_MODEL_PREM
+
+  ! uses no anisotropic 3D model by default
   ANISOTROPIC_3D_MANTLE = .false.
+
+  ! uses 1D attenuation model by default
   ATTENUATION_3D = .false.
+
+  ! no crustal mesh stretching and 3D crust models by default
   CASE_3D = .false.
   CRUSTAL = .false.
+  ONE_CRUST = .false.
+
+  ! uses no 3D heterogeneity mantle by default
   HETEROGEN_3D_MANTLE = .false.
+  ISOTROPIC_3D_MANTLE = .false.
   HONOR_1D_SPHERICAL_MOHO = .false.
-  ISOTROPIC_3D_MANTLE = .false.
-  ONE_CRUST = .false.
-  REFERENCE_1D_MODEL = REFERENCE_MODEL_PREM
+
+  ! no 3D model by default
   THREE_D_MODEL = 0
   TRANSVERSE_ISOTROPY = .false.
 
@@ -441,6 +452,10 @@
       REFERENCE_1D_MODEL == REFERENCE_MODEL_SEA1D) .and. TRANSVERSE_ISOTROPY) &
         stop 'models IASP91, AK135, 1066A, JP1D and SEA1D are currently isotropic'
 
+  ! checks that 3D attenuation models use 3D arrays
+  if( ATTENUATION_3D .and. ( .not. USE_3D_ATTENUATION_ARRAYS )) then
+    stop '3D attenuation models need 3D attenuation arrays'
+  endif
 
   end subroutine get_model_parameters_flags
 

Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/memory_eval.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/memory_eval.f90	2013-07-01 18:39:32 UTC (rev 22481)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/memory_eval.f90	2013-07-01 20:51:09 UTC (rev 22482)
@@ -27,43 +27,45 @@
 
 ! compute the approximate amount of static memory needed to run the solver
 
-  subroutine memory_eval(OCEANS,ABSORBING_CONDITIONS,ATTENUATION,ANISOTROPIC_3D_MANTLE,&
-                       TRANSVERSE_ISOTROPY,ANISOTROPIC_INNER_CORE,ROTATION,&
-                       ONE_CRUST,doubling_index,this_region_has_a_doubling,&
-                       ner,NEX_PER_PROC_XI,NEX_PER_PROC_ETA,ratio_sampling_array,&
-                       NSPEC,nglob,SIMULATION_TYPE,MOVIE_VOLUME,SAVE_FORWARD, &
-         NSPECMAX_ANISO_IC,NSPECMAX_ISO_MANTLE,NSPECMAX_TISO_MANTLE, &
-         NSPECMAX_ANISO_MANTLE,NSPEC_CRUST_MANTLE_ATTENUAT, &
-         NSPEC_INNER_CORE_ATTENUATION, &
-         NSPEC_CRUST_MANTLE_STR_OR_ATT,NSPEC_INNER_CORE_STR_OR_ATT, &
-         NSPEC_CRUST_MANTLE_STR_AND_ATT,NSPEC_INNER_CORE_STR_AND_ATT, &
-         NSPEC_CRUST_MANTLE_STRAIN_ONLY,NSPEC_INNER_CORE_STRAIN_ONLY, &
-         NSPEC_CRUST_MANTLE_ADJOINT, &
-         NSPEC_OUTER_CORE_ADJOINT,NSPEC_INNER_CORE_ADJOINT, &
-         NGLOB_CRUST_MANTLE_ADJOINT,NGLOB_OUTER_CORE_ADJOINT, &
-         NGLOB_INNER_CORE_ADJOINT,NSPEC_OUTER_CORE_ROT_ADJOINT, &
-         NSPEC_CRUST_MANTLE_STACEY,NSPEC_OUTER_CORE_STACEY, &
-         NGLOB_CRUST_MANTLE_OCEANS,NSPEC_OUTER_CORE_ROTATION,static_memory_size)
+  subroutine memory_eval(OCEANS,ABSORBING_CONDITIONS,ATTENUATION,ANISOTROPIC_3D_MANTLE, &
+                         TRANSVERSE_ISOTROPY,ANISOTROPIC_INNER_CORE,ROTATION, &
+                         ONE_CRUST,doubling_index,this_region_has_a_doubling, &
+                         ner,NEX_PER_PROC_XI,NEX_PER_PROC_ETA, &
+                         ratio_sampling_array, &
+                         NSPEC,nglob,SIMULATION_TYPE,MOVIE_VOLUME,SAVE_FORWARD, &
+                         NSPECMAX_ANISO_IC,NSPECMAX_ISO_MANTLE,NSPECMAX_TISO_MANTLE, &
+                         NSPECMAX_ANISO_MANTLE,NSPEC_CRUST_MANTLE_ATTENUAT, &
+                         NSPEC_INNER_CORE_ATTENUATION, &
+                         NSPEC_CRUST_MANTLE_STR_OR_ATT,NSPEC_INNER_CORE_STR_OR_ATT, &
+                         NSPEC_CRUST_MANTLE_STR_AND_ATT,NSPEC_INNER_CORE_STR_AND_ATT, &
+                         NSPEC_CRUST_MANTLE_STRAIN_ONLY,NSPEC_INNER_CORE_STRAIN_ONLY, &
+                         NSPEC_CRUST_MANTLE_ADJOINT, &
+                         NSPEC_OUTER_CORE_ADJOINT,NSPEC_INNER_CORE_ADJOINT, &
+                         NGLOB_CRUST_MANTLE_ADJOINT,NGLOB_OUTER_CORE_ADJOINT, &
+                         NGLOB_INNER_CORE_ADJOINT,NSPEC_OUTER_CORE_ROT_ADJOINT, &
+                         NSPEC_CRUST_MANTLE_STACEY,NSPEC_OUTER_CORE_STACEY, &
+                         NGLOB_CRUST_MANTLE_OCEANS,NSPEC_OUTER_CORE_ROTATION, &
+                         static_memory_size)
 
   implicit none
 
   include "constants.h"
 
-! input
+  ! input
   logical, intent(in) :: TRANSVERSE_ISOTROPY,ANISOTROPIC_3D_MANTLE,ANISOTROPIC_INNER_CORE, &
-             ROTATION,ATTENUATION,ONE_CRUST,OCEANS,ABSORBING_CONDITIONS,MOVIE_VOLUME,SAVE_FORWARD
+             ROTATION, &
+             ATTENUATION,ONE_CRUST,OCEANS,ABSORBING_CONDITIONS, &
+             MOVIE_VOLUME,SAVE_FORWARD
   integer, dimension(MAX_NUM_REGIONS), intent(in) :: NSPEC, nglob
+
   integer, intent(in) :: NEX_PER_PROC_XI,NEX_PER_PROC_ETA,SIMULATION_TYPE
   integer, dimension(MAX_NUMBER_OF_MESH_LAYERS), intent(in) :: doubling_index
   logical, dimension(MAX_NUMBER_OF_MESH_LAYERS), intent(in) :: this_region_has_a_doubling
   integer, dimension(MAX_NUMBER_OF_MESH_LAYERS), intent(in) :: ner,ratio_sampling_array
 
-! output
+  ! output
   double precision, intent(out) :: static_memory_size
 
-! variables
-  integer :: ilayer,NUMBER_OF_MESH_LAYERS,ner_without_doubling,ispec_aniso
-
   integer, intent(out) :: NSPECMAX_ANISO_IC,NSPECMAX_ISO_MANTLE,NSPECMAX_TISO_MANTLE, &
          NSPECMAX_ANISO_MANTLE,NSPEC_CRUST_MANTLE_ATTENUAT, &
          NSPEC_INNER_CORE_ATTENUATION, &
@@ -77,7 +79,10 @@
          NSPEC_CRUST_MANTLE_STACEY,NSPEC_OUTER_CORE_STACEY, &
          NGLOB_CRUST_MANTLE_OCEANS,NSPEC_OUTER_CORE_ROTATION
 
-! generate the elements in all the regions of the mesh
+  ! local variables
+  integer :: ilayer,NUMBER_OF_MESH_LAYERS,ner_without_doubling,ispec_aniso
+
+  ! generate the elements in all the regions of the mesh
   ispec_aniso = 0
 
   if (ONE_CRUST) then
@@ -86,7 +91,7 @@
     NUMBER_OF_MESH_LAYERS = MAX_NUMBER_OF_MESH_LAYERS
   endif
 
-! count anisotropic elements
+  ! count anisotropic elements
   do ilayer = 1, NUMBER_OF_MESH_LAYERS
       if(doubling_index(ilayer) == IFLAG_220_80 .or. doubling_index(ilayer) == IFLAG_80_MOHO) then
           ner_without_doubling = ner(ilayer)
@@ -101,8 +106,7 @@
       endif
   enddo
 
-! define static size of the arrays whose size depends on logical tests
-
+  ! define static size of the arrays whose size depends on logical tests
   if(ANISOTROPIC_INNER_CORE) then
     NSPECMAX_ANISO_IC = NSPEC(IREGION_INNER_CORE)
   else
@@ -117,10 +121,10 @@
 
     NSPECMAX_ISO_MANTLE = NSPEC(IREGION_CRUST_MANTLE)
     if(TRANSVERSE_ISOTROPY) then
-! note: the number of transverse isotropic elements is ispec_aniso
-!          however for transverse isotropic kernels, the arrays muhstore,kappahstore,eta_anisostore,
-!          will be needed for the crust_mantle region everywhere still...
-!          originally: NSPECMAX_TISO_MANTLE = ispec_aniso
+      ! note: the number of transverse isotropic elements is ispec_aniso
+      !          however for transverse isotropic kernels, the arrays muhstore,kappahstore,eta_anisostore,
+      !          will be needed for the crust_mantle region everywhere still...
+      !          originally: NSPECMAX_TISO_MANTLE = ispec_aniso
       NSPECMAX_TISO_MANTLE = NSPEC(IREGION_CRUST_MANTLE)
     else
       NSPECMAX_TISO_MANTLE = 1
@@ -129,7 +133,7 @@
     NSPECMAX_ANISO_MANTLE = 1
   endif
 
-! if attenuation is off, set dummy size of arrays to one
+  ! if attenuation is off, set dummy size of arrays to one
   if(ATTENUATION) then
     NSPEC_CRUST_MANTLE_ATTENUAT = NSPEC(IREGION_CRUST_MANTLE)
     NSPEC_INNER_CORE_ATTENUATION = NSPEC(IREGION_INNER_CORE)
@@ -155,7 +159,6 @@
     NSPEC_INNER_CORE_STR_AND_ATT = 1
   endif
 
-
   if(SIMULATION_TYPE /= 1 .or. SAVE_FORWARD .or. (MOVIE_VOLUME .and. SIMULATION_TYPE /= 3)) then
     NSPEC_CRUST_MANTLE_STRAIN_ONLY = NSPEC(IREGION_CRUST_MANTLE)
     NSPEC_INNER_CORE_STRAIN_ONLY = NSPEC(IREGION_INNER_CORE)
@@ -190,7 +193,7 @@
     NSPEC_OUTER_CORE_ROT_ADJOINT = 1
    endif
 
-! if absorbing conditions are off, set dummy size of arrays to one
+  ! if absorbing conditions are off, set dummy size of arrays to one
   if(ABSORBING_CONDITIONS) then
     NSPEC_CRUST_MANTLE_STACEY = NSPEC(IREGION_CRUST_MANTLE)
     NSPEC_OUTER_CORE_STACEY = NSPEC(IREGION_OUTER_CORE)
@@ -199,9 +202,9 @@
     NSPEC_OUTER_CORE_STACEY = 1
   endif
 
-! if oceans are off, set dummy size of arrays to one
+  ! if oceans are off, set dummy size of arrays to one
   if(OCEANS) then
-    NGLOB_CRUST_MANTLE_OCEANS = NGLOB(IREGION_CRUST_MANTLE)
+    NGLOB_CRUST_MANTLE_OCEANS = nglob(IREGION_CRUST_MANTLE)
   else
     NGLOB_CRUST_MANTLE_OCEANS = 1
   endif
@@ -358,9 +361,10 @@
   static_memory_size = static_memory_size + (5.d0*dble(N_SLS) + 3.d0)* &
       dble(NGLLX)*dble(NGLLY)*dble(NGLLZ)*NSPEC_CRUST_MANTLE_ADJOINT*dble(CUSTOM_REAL)
 
-! b_div_displ_outer_core
-! rho_kl_outer_core,alpha_kl_outer_core
-  static_memory_size = static_memory_size + 3.d0*dble(NGLLX)*dble(NGLLY)*dble(NGLLZ)*NSPEC_OUTER_CORE_ADJOINT*dble(CUSTOM_REAL)
+  ! b_div_displ_outer_core
+  ! rho_kl_outer_core,alpha_kl_outer_core
+  static_memory_size = static_memory_size + &
+    3.d0*dble(NGLLX)*dble(NGLLY)*dble(NGLLZ)*NSPEC_OUTER_CORE_ADJOINT*dble(CUSTOM_REAL)
 
 ! b_R_memory_inner_core
 !! ZN ZN this has now been suppressed to save as much memory as possible to undo attenuation
@@ -371,17 +375,21 @@
   static_memory_size = static_memory_size + (5.d0*dble(N_SLS) + 3.d0)* &
       dble(NGLLX)*dble(NGLLY)*dble(NGLLZ)*NSPEC_INNER_CORE_ADJOINT*dble(CUSTOM_REAL)
 
-! b_displ_crust_mantle,b_veloc_crust_mantle,b_accel_crust_mantle
-  static_memory_size = static_memory_size + 3.d0*dble(NDIM)*NGLOB_CRUST_MANTLE_ADJOINT*dble(CUSTOM_REAL)
+  ! b_displ_crust_mantle,b_veloc_crust_mantle,b_accel_crust_mantle
+  static_memory_size = static_memory_size + &
+    3.d0*dble(NDIM)*NGLOB_CRUST_MANTLE_ADJOINT*dble(CUSTOM_REAL)
 
-! b_displ_outer_core,b_veloc_outer_core,b_accel_outer_core
-  static_memory_size = static_memory_size + 3.d0*NGLOB_OUTER_CORE_ADJOINT*dble(CUSTOM_REAL)
+  ! b_displ_outer_core,b_veloc_outer_core,b_accel_outer_core
+  static_memory_size = static_memory_size + &
+    3.d0*NGLOB_OUTER_CORE_ADJOINT*dble(CUSTOM_REAL)
 
-! b_displ_inner_core,b_veloc_inner_core,b_accel_inner_core
-  static_memory_size = static_memory_size + 3.d0*dble(NDIM)*NGLOB_INNER_CORE_ADJOINT*dble(CUSTOM_REAL)
+  ! b_displ_inner_core,b_veloc_inner_core,b_accel_inner_core
+  static_memory_size = static_memory_size + &
+    3.d0*dble(NDIM)*NGLOB_INNER_CORE_ADJOINT*dble(CUSTOM_REAL)
 
-! b_A_array_rotation,b_B_array_rotation
-  static_memory_size = static_memory_size + 2.d0*dble(NGLLX)*dble(NGLLY)*dble(NGLLZ)*NSPEC_OUTER_CORE_ROT_ADJOINT*dble(CUSTOM_REAL)
+  ! b_A_array_rotation,b_B_array_rotation
+  static_memory_size = static_memory_size + &
+    2.d0*dble(NGLLX)*dble(NGLLY)*dble(NGLLZ)*NSPEC_OUTER_CORE_ROT_ADJOINT*dble(CUSTOM_REAL)
 
   end subroutine memory_eval
 

Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/model_topo_bathy.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/model_topo_bathy.f90	2013-07-01 18:39:32 UTC (rev 22481)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/model_topo_bathy.f90	2013-07-01 20:51:09 UTC (rev 22482)
@@ -70,13 +70,14 @@
 
   include "constants.h"
 
-  character(len=150) topo_bathy_file
-
   ! use integer array to store values
   integer, dimension(NX_BATHY,NY_BATHY) :: ibathy_topo
 
   ! local parameters
   integer :: itopo_x,itopo_y,ier
+  character(len=150) :: topo_bathy_file
+  integer,parameter :: TOPO_MINIMUM = - 10000 ! (depth in m )
+  integer,parameter :: TOPO_MAXIMUM = + 10000 ! (height in m )
 
   call get_value_string(topo_bathy_file, 'model.topoBathy.PATHNAME_TOPO_FILE', PATHNAME_TOPO_FILE)
 
@@ -125,6 +126,93 @@
 !-------------------------------------------------------------------------------------------------
 !
 
+  subroutine save_topo_bathy_database(ibathy_topo,LOCAL_PATH)
+
+  implicit none
+
+  include "constants.h"
+
+  ! use integer array to store values
+  integer, dimension(NX_BATHY,NY_BATHY) :: ibathy_topo
+  character(len=150) :: LOCAL_PATH
+
+  ! local parameters
+  character(len=150) :: prname
+  integer :: ier
+
+  ! create the name for the database of the current slide and region
+  ! only master needs to save this
+  call create_name_database(prname,0,IREGION_CRUST_MANTLE,LOCAL_PATH)
+
+  ! saves topography and bathymetry file for solver
+  open(unit=27,file=prname(1:len_trim(prname))//'topo.bin', &
+        status='unknown',form='unformatted',action='write',iostat=ier)
+  if( ier /= 0 ) then
+    ! inform about missing database topo file
+    print*,'TOPOGRAPHY problem:'
+    print*,'error opening file: ',prname(1:len_trim(prname))//'topo.bin'
+    print*,'please check if path exists and rerun mesher'
+    call exit_mpi(0,'error opening file for database topo')
+  endif
+
+  write(27) ibathy_topo
+  close(27)
+
+  end subroutine save_topo_bathy_database
+
+!
+!-------------------------------------------------------------------------------------------------
+!
+
+  subroutine read_topo_bathy_database(ibathy_topo,LOCAL_PATH)
+
+  implicit none
+
+  include "constants.h"
+
+  ! use integer array to store values
+  integer, dimension(NX_BATHY,NY_BATHY) :: ibathy_topo
+  character(len=150) :: LOCAL_PATH
+
+  ! local parameters
+  character(len=150) :: prname
+  integer :: ier
+
+  ! create the name for the database of the current slide and region
+  ! only master needs to save this
+  call create_name_database(prname,0,IREGION_CRUST_MANTLE,LOCAL_PATH)
+
+  ! reads topography and bathymetry file from saved database file
+  open(unit=27,file=prname(1:len_trim(prname))//'topo.bin', &
+        status='unknown',form='unformatted',action='read',iostat=ier)
+  if( ier /= 0 ) then
+    ! inform user
+    print*,'TOPOGRAPHY problem:'
+    print*,'error opening file: ',prname(1:len_trim(prname))//'topo.bin'
+    !print*,'please check if file exists and rerun solver'
+    !call exit_mpi(0,'error opening file for database topo')
+
+    ! read by original file
+    print*,'trying original topography file...'
+    call read_topo_bathy_file(ibathy_topo)
+
+    ! saves database topo file for next time
+    call save_topo_bathy_database(ibathy_topo,LOCAL_PATH)
+  else
+    ! database topo file exists
+    read(27) ibathy_topo
+    close(27)
+
+    ! user output
+    write(IMAIN,*) "  topography/bathymetry: min/max = ",minval(ibathy_topo),maxval(ibathy_topo)
+  endif
+
+  end subroutine read_topo_bathy_database
+
+!
+!-------------------------------------------------------------------------------------------------
+!
+
   subroutine get_topo_bathy(xlat,xlon,value,ibathy_topo)
 
 !
@@ -155,7 +243,8 @@
 
   ! longitude within range [0,360] degrees
   xlo = xlon
-  if(xlon < 0.d0) xlo = xlo + 360.d0
+  if(xlo < 0.d0) xlo = xlo + 360.d0
+  if(xlo > 360.d0) xlo = xlo - 360.d0
 
   ! compute number of samples per degree
   samples_per_degree_topo = dble(RESOLUTION_TOPO_FILE) / 60.d0

Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/read_compute_parameters.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/read_compute_parameters.f90	2013-07-01 18:39:32 UTC (rev 22481)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/read_compute_parameters.f90	2013-07-01 20:51:09 UTC (rev 22482)
@@ -44,7 +44,9 @@
                         MOVIE_VOLUME,MOVIE_COARSE,ATTENUATION_3D,RECEIVERS_CAN_BE_BURIED, &
                         PRINT_SOURCE_TIME_FUNCTION,SAVE_MESH_FILES, &
                         ATTENUATION,REFERENCE_1D_MODEL,THREE_D_MODEL,ABSORBING_CONDITIONS, &
-                        INCLUDE_CENTRAL_CUBE,INFLATE_CENTRAL_CUBE,LOCAL_PATH,MODEL,SIMULATION_TYPE,SAVE_FORWARD, &
+                        INCLUDE_CENTRAL_CUBE,INFLATE_CENTRAL_CUBE, &
+                        LOCAL_PATH,MODEL, &
+                        SIMULATION_TYPE,SAVE_FORWARD, &
                         NPROC,NPROCTOT,NEX_PER_PROC_XI,NEX_PER_PROC_ETA, &
                         NSPEC,NSPEC2D_XI,NSPEC2D_ETA,NSPEC2DMAX_XMIN_XMAX, &
                         NSPEC2DMAX_YMIN_YMAX,NSPEC2D_BOTTOM,NSPEC2D_TOP, &
@@ -150,7 +152,8 @@
   integer :: NT_DUMP_ATTENUATION
 
   ! reads in Par_file values
-  call read_parameter_file(OUTPUT_FILES,LOCAL_PATH,MODEL, &
+  call read_parameter_file(OUTPUT_FILES, &
+                          LOCAL_PATH,MODEL, &
                           NTSTEP_BETWEEN_OUTPUT_SEISMOS,NTSTEP_BETWEEN_READ_ADJSRC,NTSTEP_BETWEEN_FRAMES, &
                           NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS, &
                           NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE, &
@@ -165,8 +168,8 @@
                           RECEIVERS_CAN_BE_BURIED,PRINT_SOURCE_TIME_FUNCTION, &
                           SAVE_MESH_FILES,ATTENUATION,ABSORBING_CONDITIONS,SAVE_FORWARD, &
                           OUTPUT_SEISMOS_ASCII_TEXT,OUTPUT_SEISMOS_SAC_ALPHANUM,OUTPUT_SEISMOS_SAC_BINARY, &
-                          ROTATE_SEISMOGRAMS_RT,WRITE_SEISMOGRAMS_BY_MASTER,&
-                          SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE,NOISE_TOMOGRAPHY,&
+                          ROTATE_SEISMOGRAMS_RT,WRITE_SEISMOGRAMS_BY_MASTER, &
+                          SAVE_ALL_SEISMOS_IN_ONE_FILE,USE_BINARY_FOR_LARGE_FILE,NOISE_TOMOGRAPHY, &
                           SAVE_REGULAR_KL,PARTIAL_PHYS_DISPERSION_ONLY,UNDO_ATTENUATION,NT_DUMP_ATTENUATION)
 
   ! converts values to radians
@@ -210,7 +213,6 @@
                         RTOPDDOUBLEPRIME,RCMB,RICB,RMOHO_FICTITIOUS_IN_MESHER, &
                         R80_FICTITIOUS_IN_MESHER,RHO_TOP_OC,RHO_BOTTOM_OC,RHO_OCEANS)
 
-
   ! sets time step size and number of layers
   ! right distribution is determined based upon maximum value of NEX
   NEX_MAX = max(NEX_XI,NEX_ETA)
@@ -224,7 +226,7 @@
                           ONE_CRUST,HONOR_1D_SPHERICAL_MOHO,CASE_3D,CRUSTAL, &
                           ANISOTROPIC_INNER_CORE)
 
-  ! compute total number of time steps, rounded to next multiple of 100
+  ! initial guess : compute total number of time steps, rounded to next multiple of 100
   NSTEP = 100 * (int(RECORD_LENGTH_IN_MINUTES * 60.d0 / (100.d0*DT)) + 1)
 
 !! DK DK make sure NSTEP is a multiple of NT_DUMP_ATTENUATION
@@ -247,7 +249,6 @@
     HDUR_MOVIE = 1.2d0*max(240.d0/NEX_XI*18.d0*ANGULAR_WIDTH_XI_IN_DEGREES/90.d0, &
                            240.d0/NEX_ETA*18.d0*ANGULAR_WIDTH_ETA_IN_DEGREES/90.d0)
 
-
   ! checks parameters
   call rcp_check_parameters(NEX_XI,NEX_ETA,NPROC_XI,NPROC_ETA, &
                         NCHUNKS,NTSTEP_BETWEEN_OUTPUT_SEISMOS, &
@@ -868,10 +869,12 @@
     stop 'need six chunks to include central cube'
 
   ! check that sphere can be cut into slices without getting negative Jacobian
-  if(NEX_XI < 48) &
-    stop 'NEX_XI must be greater than 48 to cut the sphere into slices with positive Jacobian'
-  if(NEX_ETA < 48) &
-    stop 'NEX_ETA must be greater than 48 to cut the sphere into slices with positive Jacobian'
+  if(NCHUNKS == 6 ) then
+    if(NEX_XI < 48) &
+      stop 'NEX_XI must be greater than 48 to cut the sphere into slices with positive Jacobian'
+    if(NEX_ETA < 48) &
+      stop 'NEX_ETA must be greater than 48 to cut the sphere into slices with positive Jacobian'
+  endif
 
   ! check that topology is correct if more than two chunks
   if(NCHUNKS > 2 .and. NEX_XI /= NEX_ETA) &
@@ -880,9 +883,13 @@
   if(NCHUNKS > 2 .and. NPROC_XI /= NPROC_ETA) &
     stop 'must have NPROC_XI = NPROC_ETA for more than two chunks'
 
-  ! support for only one slice per chunk has been discontinued when there is more than one chunk
-  ! because it induces topological problems, and we are not interested in using small meshes
-  if(NCHUNKS > 1 .and. (NPROC_XI == 1 .or. NPROC_ETA == 1)) stop 'support for only one slice per chunk has been discontinued'
+  ! small meshes useful for testing, also for GPU version
+  if(NCHUNKS > 1 .and. (NPROC_XI == 1 .or. NPROC_ETA == 1) ) then
+    if( NUMFACES_SHARED < 4 ) &
+      stop 'NPROC_XI,NPROC_ETA==1: please set in constants.h NUMFACES_SHARED and NUMCORNERS_SHARED equal to 4 and recompile'
+    if( NUMCORNERS_SHARED < 4 ) &
+      stop 'NPROC_XI,NPROC_ETA==1: please set in constants.h NUMFACES_SHARED and NUMCORNERS_SHARED equal to 4 and recompile'
+  endif
 
   end subroutine rcp_check_parameters
 

Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/read_parameter_file.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/read_parameter_file.f90	2013-07-01 18:39:32 UTC (rev 22481)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/read_parameter_file.f90	2013-07-01 20:51:09 UTC (rev 22482)
@@ -33,7 +33,8 @@
 !!!!!! VERY IMPORTANT
 !!!!!! VERY IMPORTANT
 
-  subroutine read_parameter_file(OUTPUT_FILES,LOCAL_PATH,MODEL, &
+  subroutine read_parameter_file(OUTPUT_FILES, &
+                                LOCAL_PATH,MODEL, &
                                 NTSTEP_BETWEEN_OUTPUT_SEISMOS,NTSTEP_BETWEEN_READ_ADJSRC,NTSTEP_BETWEEN_FRAMES, &
                                 NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS, &
                                 NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE, &
@@ -56,7 +57,7 @@
 
   include "constants.h"
 
-! parameters read from parameter file
+  ! parameters read from parameter file
   integer NTSTEP_BETWEEN_OUTPUT_SEISMOS,NTSTEP_BETWEEN_READ_ADJSRC,NTSTEP_BETWEEN_FRAMES, &
           NTSTEP_BETWEEN_OUTPUT_INFO,NUMBER_OF_RUNS,NUMBER_OF_THIS_RUN,NCHUNKS,SIMULATION_TYPE, &
           MOVIE_VOLUME_TYPE,MOVIE_START,MOVIE_STOP, &
@@ -135,19 +136,14 @@
   ! define the velocity model
   call read_value_string(MODEL, 'model.MODEL', ierr)
   if (ierr /= 0) stop 'an error occurred while reading the parameter file: MODEL'
-
   call read_value_double_precision(RECORD_LENGTH_IN_MINUTES, 'solver.RECORD_LENGTH_IN_MINUTES', ierr)
   if (ierr /= 0) stop 'an error occurred while reading the parameter file: RECORD_LENGTH_IN_MINUTES'
-
   call read_value_logical(PARTIAL_PHYS_DISPERSION_ONLY, 'solver.PARTIAL_PHYS_DISPERSION_ONLY', ierr)
   if (ierr /= 0) stop 'an error occurred while reading the parameter file: PARTIAL_PHYS_DISPERSION_ONLY'
-
   call read_value_logical(UNDO_ATTENUATION, 'solver.UNDO_ATTENUATION', ierr)
   if (ierr /= 0) stop 'an error occurred while reading the parameter file: UNDO_ATTENUATION'
-
   call read_value_integer(NT_DUMP_ATTENUATION, 'solver.NT_DUMP_ATTENUATION', ierr)
   if (ierr /= 0) stop 'an error occurred while reading the parameter file: NT_DUMP_ATTENUATION'
-
   call read_value_logical(MOVIE_SURFACE, 'solver.MOVIE_SURFACE', ierr)
   if (ierr /= 0) stop 'an error occurred while reading the parameter file: MOVIE_SURFACE'
   call read_value_logical(MOVIE_VOLUME, 'solver.MOVIE_VOLUME', ierr)
@@ -216,3 +212,66 @@
 
   end subroutine read_parameter_file
 
+!
+!-------------------------------------------------------------------------------------------------
+!
+
+  subroutine read_gpu_mode(GPU_MODE)
+
+  implicit none
+  include "constants.h"
+
+  logical :: GPU_MODE
+
+  ! initializes flags
+  GPU_MODE = .false.
+
+  ! opens file Par_file
+  call open_parameter_file()
+
+  call read_value_logical(GPU_MODE, 'solver.GPU_MODE')
+
+  ! close parameter file
+  call close_parameter_file()
+
+  end subroutine read_gpu_mode
+
+!
+!-------------------------------------------------------------------------------------------------
+!
+  subroutine read_adios_parameters(ADIOS_ENABLED, ADIOS_FOR_FORWARD_ARRAYS, &
+      ADIOS_FOR_MPI_ARRAYS, ADIOS_FOR_ARRAYS_SOLVER, &
+      ADIOS_FOR_SOLVER_MESHFILES, ADIOS_FOR_AVS_DX)
+
+  implicit none
+  include "constants.h"
+
+  logical :: ADIOS_ENABLED, ADIOS_FOR_FORWARD_ARRAYS, ADIOS_FOR_MPI_ARRAYS, &
+      ADIOS_FOR_ARRAYS_SOLVER, ADIOS_FOR_SOLVER_MESHFILES, ADIOS_FOR_AVS_DX
+
+  ! initializes flags
+  ADIOS_ENABLED = .false.
+  ADIOS_FOR_FORWARD_ARRAYS = .false.
+  ADIOS_FOR_MPI_ARRAYS = .false.
+  ADIOS_FOR_ARRAYS_SOLVER = .false.
+  ADIOS_FOR_SOLVER_MESHFILES = .false.
+  ADIOS_FOR_AVS_DX = .false.
+  ! opens file Par_file
+  call open_parameter_file()
+  call read_value_logical(ADIOS_ENABLED, 'solver.ADIOS_ENABLED')
+  if (ADIOS_ENABLED) then
+    call read_value_logical(ADIOS_FOR_FORWARD_ARRAYS, &
+        'solver.ADIOS_FOR_FORWARD_ARRAYS')
+    call read_value_logical(ADIOS_FOR_MPI_ARRAYS, &
+        'solver.ADIOS_FOR_MPI_ARRAYS')
+    call read_value_logical(ADIOS_FOR_ARRAYS_SOLVER, &
+        'solver.ADIOS_FOR_ARRAYS_SOLVER')
+    call read_value_logical(ADIOS_FOR_SOLVER_MESHFILES, &
+        'solver.ADIOS_FOR_ARRAYS_SOLVER')
+    call read_value_logical(ADIOS_FOR_AVS_DX, &
+        'solver.ADIOS_FOR_AVS_DX')
+  endif
+  call close_parameter_file()
+
+  end subroutine read_adios_parameters
+

Modified: seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/save_header_file.f90
===================================================================
--- seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/save_header_file.f90	2013-07-01 18:39:32 UTC (rev 22481)
+++ seismo/3D/SPECFEM3D_GLOBE/trunk/src/shared/save_header_file.f90	2013-07-01 20:51:09 UTC (rev 22482)
@@ -29,12 +29,14 @@
 
   subroutine save_header_file(NSPEC,nglob,NEX_XI,NEX_ETA,NPROC,NPROCTOT, &
                         TRANSVERSE_ISOTROPY,ANISOTROPIC_3D_MANTLE,ANISOTROPIC_INNER_CORE, &
-                        ELLIPTICITY,GRAVITY,ROTATION,TOPOGRAPHY,OCEANS,ATTENUATION,ATTENUATION_3D, &
+                        ELLIPTICITY,GRAVITY,ROTATION,TOPOGRAPHY, &
+                        OCEANS,ATTENUATION,ATTENUATION_3D, &
                         ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES,NCHUNKS, &
                         INCLUDE_CENTRAL_CUBE,CENTER_LONGITUDE_IN_DEGREES, &
                         CENTER_LATITUDE_IN_DEGREES,GAMMA_ROTATION_AZIMUTH,NSOURCES,NSTEP,&
-                        static_memory_size,NGLOB1D_RADIAL, &
-                        NGLOB2DMAX_XMIN_XMAX,NGLOB2DMAX_YMIN_YMAX,NSPEC2D_TOP,NSPEC2D_BOTTOM, &
+                        static_memory_size, &
+                        NGLOB1D_RADIAL,NGLOB2DMAX_XMIN_XMAX,NGLOB2DMAX_YMIN_YMAX, &
+                        NSPEC2D_TOP,NSPEC2D_BOTTOM, &
                         NSPEC2DMAX_YMIN_YMAX,NSPEC2DMAX_XMIN_XMAX, &
                         NPROC_XI,NPROC_ETA, &
                         NSPECMAX_ANISO_IC,NSPECMAX_ISO_MANTLE,NSPECMAX_TISO_MANTLE, &
@@ -65,29 +67,13 @@
   double precision ANGULAR_WIDTH_XI_IN_DEGREES,ANGULAR_WIDTH_ETA_IN_DEGREES, &
           CENTER_LONGITUDE_IN_DEGREES,CENTER_LATITUDE_IN_DEGREES,GAMMA_ROTATION_AZIMUTH
 
-  double precision :: subtract_central_cube_elems,subtract_central_cube_points
-
-  character(len=150) HEADER_FILE
-
-! for regional code
-  double precision x,y,gamma,rgt,xi,eta
-  double precision x_top,y_top,z_top
-  double precision ANGULAR_WIDTH_XI_RAD,ANGULAR_WIDTH_ETA_RAD
-
-! rotation matrix from Euler angles
-  integer i,j,ix,iy,icorner
-  double precision rotation_matrix(3,3)
-  double precision vector_ori(3),vector_rotated(3)
-  double precision r_corner,theta_corner,phi_corner,lat,long,colat_corner
-
-! static memory size needed by the solver
+  ! static memory size needed by the solver
   double precision :: static_memory_size
 
-  integer :: att1,att2,att3,att4,att5,NCORNERSCHUNKS,NUM_FACES,NUM_MSG_TYPES
-
   integer, dimension(MAX_NUM_REGIONS) :: NGLOB1D_RADIAL,NGLOB2DMAX_XMIN_XMAX,NGLOB2DMAX_YMIN_YMAX, &
-                                    NSPEC2D_TOP,NSPEC2D_BOTTOM,NSPEC2DMAX_YMIN_YMAX,NSPEC2DMAX_XMIN_XMAX
+        NSPEC2D_TOP,NSPEC2D_BOTTOM,NSPEC2DMAX_YMIN_YMAX,NSPEC2DMAX_XMIN_XMAX
   integer :: NPROC_XI,NPROC_ETA
+  integer :: NCORNERSCHUNKS,NUM_FACES,NUM_MSG_TYPES
 
   integer :: NSPECMAX_ANISO_IC,NSPECMAX_ISO_MANTLE,NSPECMAX_TISO_MANTLE, &
          NSPECMAX_ANISO_MANTLE,NSPEC_CRUST_MANTLE_ATTENUAT, &
@@ -106,10 +92,26 @@
   integer :: SIMULATION_TYPE
   logical :: SAVE_FORWARD,MOVIE_VOLUME
 
+  ! local parameters
+  double precision :: subtract_central_cube_elems,subtract_central_cube_points
+  ! for regional code
+  double precision x,y,gamma,rgt,xi,eta
+  double precision x_top,y_top,z_top
+  double precision ANGULAR_WIDTH_XI_RAD,ANGULAR_WIDTH_ETA_RAD
+  ! rotation matrix from Euler angles
+  integer i,j,ix,iy,icorner
+  double precision rotation_matrix(3,3)
+  double precision vector_ori(3),vector_rotated(3)
+  double precision r_corner,theta_corner,phi_corner,lat,long,colat_corner
+  integer :: att1,att2,att3,att4,att5
+  integer :: ier
+  character(len=150) HEADER_FILE
 
-! copy number of elements and points in an include file for the solver
+  ! copy number of elements and points in an include file for the solver
   call get_value_string(HEADER_FILE, 'solver.HEADER_FILE', 'OUTPUT_FILES/values_from_mesher.h')
-  open(unit=IOUT,file=HEADER_FILE,status='unknown')
+  open(unit=IOUT,file=HEADER_FILE,status='unknown',iostat=ier)
+  if( ier /= 0 ) stop 'error opening OUTPUT_FILES/values_from_mesher.h'
+
   write(IOUT,*)
 
   write(IOUT,*) '!'
@@ -440,6 +442,7 @@
   write(IOUT,*) 'integer, parameter :: NPROC_ETA_VAL = ',NPROC_ETA
   write(IOUT,*) 'integer, parameter :: NCHUNKS_VAL = ',NCHUNKS
   write(IOUT,*) 'integer, parameter :: NPROCTOT_VAL = ',NPROCTOT
+  write(IOUT,*)
 
   write(IOUT,*) 'integer, parameter :: NGLOB2DMAX_XY_CM_VAL = ', &
             max(NGLOB2DMAX_XMIN_XMAX(IREGION_CRUST_MANTLE),NGLOB2DMAX_YMIN_YMAX(IREGION_CRUST_MANTLE))
@@ -474,11 +477,11 @@
     att4     = NSPEC(IREGION_CRUST_MANTLE)
     att5     = NSPEC(IREGION_INNER_CORE)
   else
-    att1     = 1
-    att2     = 1
-    att3     = 1
-    att4     = 1
-    att5     = 1
+     att1 = 1
+     att2 = 1
+     att3 = 1
+     att4 = 1
+     att5 = 1
   endif
 
   write(IOUT,*) 'integer, parameter :: ATT1 = ',att1



More information about the CIG-COMMITS mailing list