[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