[cig-commits] r20942 - in seismo/3D/SPECFEM3D/trunk: DATA OUTPUT_FILES examples/BENCHMARK_CLAERBOUT_ADJOINT/ACOUSTIC/DATA examples/BENCHMARK_CLAERBOUT_ADJOINT/ELASTIC/DATA examples/Mount_StHelens/DATA examples/homogeneous_halfspace_HEX27/DATA examples/homogeneous_halfspace_HEX8/DATA examples/homogeneous_poroelastic/DATA examples/layered_halfspace/DATA examples/meshfem3D_examples/many_interfaces/DATA examples/meshfem3D_examples/simple_model/DATA examples/meshfem3D_examples/socal1D/DATA examples/tomographic_model/DATA examples/waterlayered_halfspace/DATA src/generate_databases src/meshfem3D src/shared src/specfem3D
joseph.charles at geodynamics.org
joseph.charles at geodynamics.org
Fri Oct 26 12:06:43 PDT 2012
Author: joseph.charles
Date: 2012-10-26 12:06:43 -0700 (Fri, 26 Oct 2012)
New Revision: 20942
Added:
seismo/3D/SPECFEM3D/trunk/src/meshfem3D/read_mesh_parameter_file.f90
seismo/3D/SPECFEM3D/trunk/src/meshfem3D/read_value_mesh_parameters.f90
Removed:
seismo/3D/SPECFEM3D/trunk/OUTPUT_FILES/OUTPUT_FILES/
seismo/3D/SPECFEM3D/trunk/src/meshfem3D/read_parameter_file.f90
seismo/3D/SPECFEM3D/trunk/src/meshfem3D/read_value_parameters.f90
Modified:
seismo/3D/SPECFEM3D/trunk/DATA/Par_file
seismo/3D/SPECFEM3D/trunk/examples/BENCHMARK_CLAERBOUT_ADJOINT/ACOUSTIC/DATA/Par_file
seismo/3D/SPECFEM3D/trunk/examples/BENCHMARK_CLAERBOUT_ADJOINT/ELASTIC/DATA/Par_file
seismo/3D/SPECFEM3D/trunk/examples/Mount_StHelens/DATA/Par_file
seismo/3D/SPECFEM3D/trunk/examples/homogeneous_halfspace_HEX27/DATA/Par_file
seismo/3D/SPECFEM3D/trunk/examples/homogeneous_halfspace_HEX8/DATA/Par_file
seismo/3D/SPECFEM3D/trunk/examples/homogeneous_poroelastic/DATA/Par_file
seismo/3D/SPECFEM3D/trunk/examples/layered_halfspace/DATA/Par_file
seismo/3D/SPECFEM3D/trunk/examples/meshfem3D_examples/many_interfaces/DATA/Par_file
seismo/3D/SPECFEM3D/trunk/examples/meshfem3D_examples/simple_model/DATA/Par_file
seismo/3D/SPECFEM3D/trunk/examples/meshfem3D_examples/socal1D/DATA/Par_file
seismo/3D/SPECFEM3D/trunk/examples/tomographic_model/DATA/Par_file
seismo/3D/SPECFEM3D/trunk/examples/waterlayered_halfspace/DATA/Par_file
seismo/3D/SPECFEM3D/trunk/src/generate_databases/create_regions_mesh.f90
seismo/3D/SPECFEM3D/trunk/src/generate_databases/generate_databases.f90
seismo/3D/SPECFEM3D/trunk/src/generate_databases/generate_databases_par.f90
seismo/3D/SPECFEM3D/trunk/src/meshfem3D/Makefile.in
seismo/3D/SPECFEM3D/trunk/src/meshfem3D/check_mesh_quality.f90
seismo/3D/SPECFEM3D/trunk/src/meshfem3D/meshfem3D.f90
seismo/3D/SPECFEM3D/trunk/src/shared/combine_vol_data.f90
seismo/3D/SPECFEM3D/trunk/src/shared/constants.h.in
seismo/3D/SPECFEM3D/trunk/src/shared/create_movie_shakemap_AVS_DX_GMT.f90
seismo/3D/SPECFEM3D/trunk/src/shared/get_attenuation_model.f90
seismo/3D/SPECFEM3D/trunk/src/shared/get_jacobian_boundaries.f90
seismo/3D/SPECFEM3D/trunk/src/shared/get_shape2D.f90
seismo/3D/SPECFEM3D/trunk/src/shared/get_shape3D.f90
seismo/3D/SPECFEM3D/trunk/src/shared/hex_nodes.f90
seismo/3D/SPECFEM3D/trunk/src/shared/read_parameter_file.f90
seismo/3D/SPECFEM3D/trunk/src/shared/read_value_parameters.f90
seismo/3D/SPECFEM3D/trunk/src/shared/recompute_jacobian.f90
seismo/3D/SPECFEM3D/trunk/src/shared/smooth_vol_data.f90
seismo/3D/SPECFEM3D/trunk/src/shared/sum_kernels.f90
seismo/3D/SPECFEM3D/trunk/src/specfem3D/detect_mesh_surfaces.f90
seismo/3D/SPECFEM3D/trunk/src/specfem3D/initialize_simulation.f90
seismo/3D/SPECFEM3D/trunk/src/specfem3D/model_update.f90
seismo/3D/SPECFEM3D/trunk/src/specfem3D/prepare_timerun.F90
seismo/3D/SPECFEM3D/trunk/src/specfem3D/setup_movie_meshes.f90
seismo/3D/SPECFEM3D/trunk/src/specfem3D/specfem3D_par.f90
seismo/3D/SPECFEM3D/trunk/src/specfem3D/write_movie_output.f90
Log:
fixes a bug in NGNOD-related developments; moves parameters MOVIE_SURFACE, CREATE_SHAKEMAP, OLSEN_ATTENUATION_RATIO from constants.h.in to Par_file; gets rid of previous EXTERNAL_MESH_* flags and introduces instead a new parameter MOVIE_TYPE in Par_file. (beware: the activation of movie flags still needs to be tested!)
Modified: seismo/3D/SPECFEM3D/trunk/DATA/Par_file
===================================================================
--- seismo/3D/SPECFEM3D/trunk/DATA/Par_file 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/DATA/Par_file 2012-10-26 19:06:43 UTC (rev 20942)
@@ -48,13 +48,19 @@
# absorbing top surface (defined in mesh as 'free_surface_file')
ABSORB_INSTEAD_OF_FREE_SURFACE = .false.
+# Olsen's constant for Q_mu = constant * v_s attenuation rule
+OLSEN_ATTENUATION_RATIO = 0.05
+
# save AVS or OpenDX movies
+# MOVIE_TYPE = 1 to show the top surface
+# MOVIE_TYPE = 2 to show all the external faces of the mesh
+MOVIE_TYPE = 1
+CREATE_SHAKEMAP = .false.
MOVIE_SURFACE = .false.
MOVIE_VOLUME = .false.
-NTSTEP_BETWEEN_FRAMES = 200
-CREATE_SHAKEMAP = .false.
SAVE_DISPLACEMENT = .false.
USE_HIGHRES_FOR_MOVIES = .false.
+NTSTEP_BETWEEN_FRAMES = 200
HDUR_MOVIE = 0.0
# save AVS or OpenDX mesh files to check the mesh
Modified: seismo/3D/SPECFEM3D/trunk/examples/BENCHMARK_CLAERBOUT_ADJOINT/ACOUSTIC/DATA/Par_file
===================================================================
--- seismo/3D/SPECFEM3D/trunk/examples/BENCHMARK_CLAERBOUT_ADJOINT/ACOUSTIC/DATA/Par_file 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/examples/BENCHMARK_CLAERBOUT_ADJOINT/ACOUSTIC/DATA/Par_file 2012-10-26 19:06:43 UTC (rev 20942)
@@ -47,13 +47,19 @@
# absorbing top surface (defined in mesh as 'free_surface_file')
ABSORB_INSTEAD_OF_FREE_SURFACE = .false.
+# Olsen's constant for Q_mu = constant * v_s attenuation rule
+OLSEN_ATTENUATION_RATIO = 0.05
+
# save AVS or OpenDX movies
+# MOVIE_TYPE = 1 to show the top surface
+# MOVIE_TYPE = 2 to show all the external faces of the mesh
+MOVIE_TYPE = 1
+CREATE_SHAKEMAP = .false.
MOVIE_SURFACE = .false.
MOVIE_VOLUME = .false.
-NTSTEP_BETWEEN_FRAMES = 100
-CREATE_SHAKEMAP = .false.
-SAVE_DISPLACEMENT = .true.
+SAVE_DISPLACEMENT = .false.
USE_HIGHRES_FOR_MOVIES = .false.
+NTSTEP_BETWEEN_FRAMES = 200
HDUR_MOVIE = 0.0
# save AVS or OpenDX mesh files to check the mesh
Modified: seismo/3D/SPECFEM3D/trunk/examples/BENCHMARK_CLAERBOUT_ADJOINT/ELASTIC/DATA/Par_file
===================================================================
--- seismo/3D/SPECFEM3D/trunk/examples/BENCHMARK_CLAERBOUT_ADJOINT/ELASTIC/DATA/Par_file 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/examples/BENCHMARK_CLAERBOUT_ADJOINT/ELASTIC/DATA/Par_file 2012-10-26 19:06:43 UTC (rev 20942)
@@ -47,13 +47,19 @@
# absorbing top surface (defined in mesh as 'free_surface_file')
ABSORB_INSTEAD_OF_FREE_SURFACE = .false.
+# Olsen's constant for Q_mu = constant * v_s attenuation rule
+OLSEN_ATTENUATION_RATIO = 0.05
+
# save AVS or OpenDX movies
+# MOVIE_TYPE = 1 to show the top surface
+# MOVIE_TYPE = 2 to show all the external faces of the mesh
+MOVIE_TYPE = 1
+CREATE_SHAKEMAP = .false.
MOVIE_SURFACE = .false.
MOVIE_VOLUME = .false.
-NTSTEP_BETWEEN_FRAMES = 100
-CREATE_SHAKEMAP = .false.
-SAVE_DISPLACEMENT = .true.
+SAVE_DISPLACEMENT = .false.
USE_HIGHRES_FOR_MOVIES = .false.
+NTSTEP_BETWEEN_FRAMES = 200
HDUR_MOVIE = 0.0
# save AVS or OpenDX mesh files to check the mesh
Modified: seismo/3D/SPECFEM3D/trunk/examples/Mount_StHelens/DATA/Par_file
===================================================================
--- seismo/3D/SPECFEM3D/trunk/examples/Mount_StHelens/DATA/Par_file 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/examples/Mount_StHelens/DATA/Par_file 2012-10-26 19:06:43 UTC (rev 20942)
@@ -47,13 +47,19 @@
# absorbing top surface (defined in mesh as 'free_surface_file')
ABSORB_INSTEAD_OF_FREE_SURFACE = .false.
+# Olsen's constant for Q_mu = constant * v_s attenuation rule
+OLSEN_ATTENUATION_RATIO = 0.05
+
# save AVS or OpenDX movies
+# MOVIE_TYPE = 1 to show the top surface
+# MOVIE_TYPE = 2 to show all the external faces of the mesh
+MOVIE_TYPE = 1
+CREATE_SHAKEMAP = .false.
MOVIE_SURFACE = .false.
MOVIE_VOLUME = .false.
-NTSTEP_BETWEEN_FRAMES = 200
-CREATE_SHAKEMAP = .false.
SAVE_DISPLACEMENT = .false.
USE_HIGHRES_FOR_MOVIES = .false.
+NTSTEP_BETWEEN_FRAMES = 200
HDUR_MOVIE = 0.0
# save AVS or OpenDX mesh files to check the mesh
Modified: seismo/3D/SPECFEM3D/trunk/examples/homogeneous_halfspace_HEX27/DATA/Par_file
===================================================================
--- seismo/3D/SPECFEM3D/trunk/examples/homogeneous_halfspace_HEX27/DATA/Par_file 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/examples/homogeneous_halfspace_HEX27/DATA/Par_file 2012-10-26 19:06:43 UTC (rev 20942)
@@ -12,7 +12,7 @@
SUPPRESS_UTM_PROJECTION = .true.
# number of MPI processors
-NPROC = 4
+NPROC = 2
# time step parameters
NSTEP = 1000
@@ -23,7 +23,7 @@
# If you use our internal mesher, the only option is 8-node bricks (27-node elements are not supported)
# CUBIT does not support HEX27 elements either (it can generate them, but they are flat, i.e. identical to HEX8).
# To generate HEX27 elements with curvature properly taken into account, you can use Gmsh http://geuz.org/gmsh/
-NGNOD = 8
+NGNOD = 27
# models:
# available options are:
@@ -48,13 +48,19 @@
# absorbing top surface (defined in mesh as 'free_surface_file')
ABSORB_INSTEAD_OF_FREE_SURFACE = .false.
+# Olsen's constant for Q_mu = constant * v_s attenuation rule
+OLSEN_ATTENUATION_RATIO = 0.05
+
# save AVS or OpenDX movies
+# MOVIE_TYPE = 1 to show the top surface
+# MOVIE_TYPE = 2 to show all the external faces of the mesh
+MOVIE_TYPE = 1
+CREATE_SHAKEMAP = .false.
MOVIE_SURFACE = .false.
MOVIE_VOLUME = .false.
-NTSTEP_BETWEEN_FRAMES = 200
-CREATE_SHAKEMAP = .false.
SAVE_DISPLACEMENT = .false.
USE_HIGHRES_FOR_MOVIES = .false.
+NTSTEP_BETWEEN_FRAMES = 200
HDUR_MOVIE = 0.0
# save AVS or OpenDX mesh files to check the mesh
Modified: seismo/3D/SPECFEM3D/trunk/examples/homogeneous_halfspace_HEX8/DATA/Par_file
===================================================================
--- seismo/3D/SPECFEM3D/trunk/examples/homogeneous_halfspace_HEX8/DATA/Par_file 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/examples/homogeneous_halfspace_HEX8/DATA/Par_file 2012-10-26 19:06:43 UTC (rev 20942)
@@ -48,13 +48,19 @@
# absorbing top surface (defined in mesh as 'free_surface_file')
ABSORB_INSTEAD_OF_FREE_SURFACE = .false.
+# Olsen's constant for Q_mu = constant * v_s attenuation rule
+OLSEN_ATTENUATION_RATIO = 0.05
+
# save AVS or OpenDX movies
+# MOVIE_TYPE = 1 to show the top surface
+# MOVIE_TYPE = 2 to show all the external faces of the mesh
+MOVIE_TYPE = 1
+CREATE_SHAKEMAP = .false.
MOVIE_SURFACE = .false.
MOVIE_VOLUME = .false.
-NTSTEP_BETWEEN_FRAMES = 200
-CREATE_SHAKEMAP = .false.
SAVE_DISPLACEMENT = .false.
USE_HIGHRES_FOR_MOVIES = .false.
+NTSTEP_BETWEEN_FRAMES = 200
HDUR_MOVIE = 0.0
# save AVS or OpenDX mesh files to check the mesh
Modified: seismo/3D/SPECFEM3D/trunk/examples/homogeneous_poroelastic/DATA/Par_file
===================================================================
--- seismo/3D/SPECFEM3D/trunk/examples/homogeneous_poroelastic/DATA/Par_file 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/examples/homogeneous_poroelastic/DATA/Par_file 2012-10-26 19:06:43 UTC (rev 20942)
@@ -48,13 +48,19 @@
# absorbing top surface (defined in mesh as 'free_surface_file')
ABSORB_INSTEAD_OF_FREE_SURFACE = .false.
+# Olsen's constant for Q_mu = constant * v_s attenuation rule
+OLSEN_ATTENUATION_RATIO = 0.05
+
# save AVS or OpenDX movies
+# MOVIE_TYPE = 1 to show the top surface
+# MOVIE_TYPE = 2 to show all the external faces of the mesh
+MOVIE_TYPE = 1
+CREATE_SHAKEMAP = .false.
MOVIE_SURFACE = .false.
MOVIE_VOLUME = .false.
-NTSTEP_BETWEEN_FRAMES = 100
-CREATE_SHAKEMAP = .false.
SAVE_DISPLACEMENT = .false.
USE_HIGHRES_FOR_MOVIES = .false.
+NTSTEP_BETWEEN_FRAMES = 200
HDUR_MOVIE = 0.0
# save AVS or OpenDX mesh files to check the mesh
Modified: seismo/3D/SPECFEM3D/trunk/examples/layered_halfspace/DATA/Par_file
===================================================================
--- seismo/3D/SPECFEM3D/trunk/examples/layered_halfspace/DATA/Par_file 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/examples/layered_halfspace/DATA/Par_file 2012-10-26 19:06:43 UTC (rev 20942)
@@ -48,13 +48,19 @@
# absorbing top surface (defined in mesh as 'free_surface_file')
ABSORB_INSTEAD_OF_FREE_SURFACE = .false.
+# Olsen's constant for Q_mu = constant * v_s attenuation rule
+OLSEN_ATTENUATION_RATIO = 0.05
+
# save AVS or OpenDX movies
+# MOVIE_TYPE = 1 to show the top surface
+# MOVIE_TYPE = 2 to show all the external faces of the mesh
+MOVIE_TYPE = 1
+CREATE_SHAKEMAP = .false.
MOVIE_SURFACE = .false.
MOVIE_VOLUME = .false.
-NTSTEP_BETWEEN_FRAMES = 200
-CREATE_SHAKEMAP = .false.
SAVE_DISPLACEMENT = .false.
USE_HIGHRES_FOR_MOVIES = .false.
+NTSTEP_BETWEEN_FRAMES = 200
HDUR_MOVIE = 0.0
# save AVS or OpenDX mesh files to check the mesh
Modified: seismo/3D/SPECFEM3D/trunk/examples/meshfem3D_examples/many_interfaces/DATA/Par_file
===================================================================
--- seismo/3D/SPECFEM3D/trunk/examples/meshfem3D_examples/many_interfaces/DATA/Par_file 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/examples/meshfem3D_examples/many_interfaces/DATA/Par_file 2012-10-26 19:06:43 UTC (rev 20942)
@@ -48,13 +48,19 @@
# absorbing top surface (defined in mesh as 'free_surface_file')
ABSORB_INSTEAD_OF_FREE_SURFACE = .false.
+# Olsen's constant for Q_mu = constant * v_s attenuation rule
+OLSEN_ATTENUATION_RATIO = 0.05
+
# save AVS or OpenDX movies
-MOVIE_SURFACE = .true.
+# MOVIE_TYPE = 1 to show the top surface
+# MOVIE_TYPE = 2 to show all the external faces of the mesh
+MOVIE_TYPE = 1
+CREATE_SHAKEMAP = .false.
+MOVIE_SURFACE = .false.
MOVIE_VOLUME = .false.
-NTSTEP_BETWEEN_FRAMES = 200
-CREATE_SHAKEMAP = .false.
SAVE_DISPLACEMENT = .false.
USE_HIGHRES_FOR_MOVIES = .false.
+NTSTEP_BETWEEN_FRAMES = 200
HDUR_MOVIE = 0.0
# save AVS or OpenDX mesh files to check the mesh
Modified: seismo/3D/SPECFEM3D/trunk/examples/meshfem3D_examples/simple_model/DATA/Par_file
===================================================================
--- seismo/3D/SPECFEM3D/trunk/examples/meshfem3D_examples/simple_model/DATA/Par_file 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/examples/meshfem3D_examples/simple_model/DATA/Par_file 2012-10-26 19:06:43 UTC (rev 20942)
@@ -48,13 +48,19 @@
# absorbing top surface (defined in mesh as 'free_surface_file')
ABSORB_INSTEAD_OF_FREE_SURFACE = .false.
+# Olsen's constant for Q_mu = constant * v_s attenuation rule
+OLSEN_ATTENUATION_RATIO = 0.05
+
# save AVS or OpenDX movies
+# MOVIE_TYPE = 1 to show the top surface
+# MOVIE_TYPE = 2 to show all the external faces of the mesh
+MOVIE_TYPE = 1
+CREATE_SHAKEMAP = .false.
MOVIE_SURFACE = .false.
MOVIE_VOLUME = .false.
-NTSTEP_BETWEEN_FRAMES = 200
-CREATE_SHAKEMAP = .false.
SAVE_DISPLACEMENT = .false.
USE_HIGHRES_FOR_MOVIES = .false.
+NTSTEP_BETWEEN_FRAMES = 200
HDUR_MOVIE = 0.0
# save AVS or OpenDX mesh files to check the mesh
Modified: seismo/3D/SPECFEM3D/trunk/examples/meshfem3D_examples/socal1D/DATA/Par_file
===================================================================
--- seismo/3D/SPECFEM3D/trunk/examples/meshfem3D_examples/socal1D/DATA/Par_file 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/examples/meshfem3D_examples/socal1D/DATA/Par_file 2012-10-26 19:06:43 UTC (rev 20942)
@@ -48,13 +48,19 @@
# absorbing top surface (defined in mesh as 'free_surface_file')
ABSORB_INSTEAD_OF_FREE_SURFACE = .false.
+# Olsen's constant for Q_mu = constant * v_s attenuation rule
+OLSEN_ATTENUATION_RATIO = 0.05
+
# save AVS or OpenDX movies
+# MOVIE_TYPE = 1 to show the top surface
+# MOVIE_TYPE = 2 to show all the external faces of the mesh
+MOVIE_TYPE = 1
+CREATE_SHAKEMAP = .false.
MOVIE_SURFACE = .false.
MOVIE_VOLUME = .false.
-NTSTEP_BETWEEN_FRAMES = 200
-CREATE_SHAKEMAP = .false.
SAVE_DISPLACEMENT = .false.
USE_HIGHRES_FOR_MOVIES = .false.
+NTSTEP_BETWEEN_FRAMES = 200
HDUR_MOVIE = 0.0
# save AVS or OpenDX mesh files to check the mesh
Modified: seismo/3D/SPECFEM3D/trunk/examples/tomographic_model/DATA/Par_file
===================================================================
--- seismo/3D/SPECFEM3D/trunk/examples/tomographic_model/DATA/Par_file 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/examples/tomographic_model/DATA/Par_file 2012-10-26 19:06:43 UTC (rev 20942)
@@ -48,13 +48,19 @@
# absorbing top surface (defined in mesh as 'free_surface_file')
ABSORB_INSTEAD_OF_FREE_SURFACE = .false.
+# Olsen's constant for Q_mu = constant * v_s attenuation rule
+OLSEN_ATTENUATION_RATIO = 0.05
+
# save AVS or OpenDX movies
+# MOVIE_TYPE = 1 to show the top surface
+# MOVIE_TYPE = 2 to show all the external faces of the mesh
+MOVIE_TYPE = 1
+CREATE_SHAKEMAP = .false.
MOVIE_SURFACE = .false.
MOVIE_VOLUME = .false.
-NTSTEP_BETWEEN_FRAMES = 200
-CREATE_SHAKEMAP = .false.
SAVE_DISPLACEMENT = .false.
USE_HIGHRES_FOR_MOVIES = .false.
+NTSTEP_BETWEEN_FRAMES = 200
HDUR_MOVIE = 0.0
# save AVS or OpenDX mesh files to check the mesh
Modified: seismo/3D/SPECFEM3D/trunk/examples/waterlayered_halfspace/DATA/Par_file
===================================================================
--- seismo/3D/SPECFEM3D/trunk/examples/waterlayered_halfspace/DATA/Par_file 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/examples/waterlayered_halfspace/DATA/Par_file 2012-10-26 19:06:43 UTC (rev 20942)
@@ -48,13 +48,19 @@
# absorbing top surface (defined in mesh as 'free_surface_file')
ABSORB_INSTEAD_OF_FREE_SURFACE = .false.
+# Olsen's constant for Q_mu = constant * v_s attenuation rule
+OLSEN_ATTENUATION_RATIO = 0.05
+
# save AVS or OpenDX movies
+# MOVIE_TYPE = 1 to show the top surface
+# MOVIE_TYPE = 2 to show all the external faces of the mesh
+MOVIE_TYPE = 1
+CREATE_SHAKEMAP = .false.
MOVIE_SURFACE = .false.
MOVIE_VOLUME = .false.
-NTSTEP_BETWEEN_FRAMES = 100
-CREATE_SHAKEMAP = .false.
SAVE_DISPLACEMENT = .false.
USE_HIGHRES_FOR_MOVIES = .false.
+NTSTEP_BETWEEN_FRAMES = 200
HDUR_MOVIE = 0.0
# save AVS or OpenDX mesh files to check the mesh
Modified: seismo/3D/SPECFEM3D/trunk/src/generate_databases/create_regions_mesh.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/generate_databases/create_regions_mesh.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/generate_databases/create_regions_mesh.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -46,7 +46,7 @@
nodes_ibelm_xmin,nodes_ibelm_xmax,nodes_ibelm_ymin,nodes_ibelm_ymax,&
nodes_ibelm_bottom,nodes_ibelm_top, &
SAVE_MESH_FILES, &
- ANISOTROPY,NPROC,OCEANS, &
+ ANISOTROPY,NPROC,OCEANS,OLSEN_ATTENUATION_RATIO, &
ATTENUATION,USE_OLSEN_ATTENUATION, &
nspec2D_moho_ext,ibelm_moho,nodes_ibelm_moho
@@ -217,9 +217,9 @@
! saves binary mesh files for attenuation
if( ATTENUATION ) then
- call get_attenuation_model(myrank,nspec,USE_OLSEN_ATTENUATION, &
- mustore,rho_vs,qmu_attenuation_store, &
- ispec_is_elastic,min_resolved_period,prname)
+ call get_attenuation_model(myrank,nspec,USE_OLSEN_ATTENUATION,OLSEN_ATTENUATION_RATIO, &
+ mustore,rho_vs,qmu_attenuation_store, &
+ ispec_is_elastic,min_resolved_period,prname)
endif
! cleanup
@@ -617,7 +617,7 @@
integer :: nspec2D_moho_ext
integer, dimension(nspec2D_moho_ext) :: ibelm_moho
- integer, dimension(NGNOD2D_FOUR_CORNERS,nspec2D_moho_ext) :: nodes_ibelm_moho
+ integer, dimension(NGNOD2D,nspec2D_moho_ext) :: nodes_ibelm_moho
integer :: myrank,nspec
Modified: seismo/3D/SPECFEM3D/trunk/src/generate_databases/generate_databases.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/generate_databases/generate_databases.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/generate_databases/generate_databases.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -256,14 +256,14 @@
call read_parameter_file( NPROC,NTSTEP_BETWEEN_OUTPUT_SEISMOS,NSTEP,DT,NGNOD,NGNOD2D, &
UTM_PROJECTION_ZONE,SUPPRESS_UTM_PROJECTION, &
ATTENUATION,USE_OLSEN_ATTENUATION,LOCAL_PATH,NSOURCES, &
- OCEANS,TOPOGRAPHY,ANISOTROPY,ABSORBING_CONDITIONS, &
+ OCEANS,TOPOGRAPHY,ANISOTROPY,ABSORBING_CONDITIONS,MOVIE_TYPE, &
MOVIE_SURFACE,MOVIE_VOLUME,CREATE_SHAKEMAP,SAVE_DISPLACEMENT, &
NTSTEP_BETWEEN_FRAMES,USE_HIGHRES_FOR_MOVIES,HDUR_MOVIE, &
SAVE_MESH_FILES,PRINT_SOURCE_TIME_FUNCTION, &
NTSTEP_BETWEEN_OUTPUT_INFO,SIMULATION_TYPE,SAVE_FORWARD, &
NTSTEP_BETWEEN_READ_ADJSRC,NOISE_TOMOGRAPHY, &
USE_FORCE_POINT_SOURCE,ABSORB_INSTEAD_OF_FREE_SURFACE, &
- USE_RICKER_TIME_FUNCTION,IMODEL)
+ USE_RICKER_TIME_FUNCTION,OLSEN_ATTENUATION_RATIO,IMODEL)
! check that the code is running with the requested nb of processes
if(sizeprocs /= NPROC) then
@@ -304,8 +304,9 @@
write(IMAIN,*)
! check that the constants.h file is correct
- if(NGNOD /= 8 ) call exit_MPI(myrank,'volume elements should have 8 control nodes in our internal mesher')
- if(NGNOD2D /= 4) call exit_MPI(myrank,'surface elements should have 4 control nodes in our internal mesher')
+ if ( NGNOD /= 8 .and. NGNOD /= 27 ) then
+ stop 'elements should have 8 or 27 control nodes, please modify NGNOD in Par_file'
+ endif
write(IMAIN,'(a)',advance='no') ' velocity model: '
select case(IMODEL)
@@ -341,26 +342,14 @@
! for the number of standard linear solids for attenuation
if(N_SLS /= 3) call exit_MPI(myrank,'number of SLS must be 3')
- ! exclusive movie flags
- if( EXTERNAL_MESH_MOVIE_SURFACE .or. EXTERNAL_MESH_CREATE_SHAKEMAP ) then
- MOVIE_SURFACE = .false.
- CREATE_SHAKEMAP = .false.
- endif
-
! for noise simulations, we need to save movies at the surface (where the noise is generated)
! and thus we force MOVIE_SURFACE to be .true., in order to use variables defined for surface movies later
if ( NOISE_TOMOGRAPHY /= 0 ) then
+ MOVIE_TYPE = 1
MOVIE_SURFACE = .true.
- CREATE_SHAKEMAP = .false.
- if( ( EXTERNAL_MESH_MOVIE_SURFACE .or. EXTERNAL_MESH_CREATE_SHAKEMAP ) .and. myrank == 0 ) then
- write(IMAIN,*) 'error: when running noise simulations ( NOISE_TOMOGRAPHY /= 0 ),'
- write(IMAIN,*) ' we can NOT use EXTERNAL_MESH_MOVIE_SURFACE or EXTERNAL_MESH_CREATE_SHAKEMAP'
- write(IMAIN,*) ' change EXTERNAL_MESH_MOVIE_SURFACE & EXTERNAL_MESH_CREATE_SHAKEMAP in constant.h'
- call exit_MPI(myrank,'incompatible NOISE_TOMOGRAPHY, EXTERNAL_MESH_MOVIE_SURFACE, EXTERNAL_MESH_CREATE_SHAKEMAP')
- endif
+ USE_HIGHRES_FOR_MOVIES = .true. ! we need to save surface movie everywhere, i.e. at all GLL points on the surface
endif
-
if(myrank == 0) then
write(IMAIN,*)
Modified: seismo/3D/SPECFEM3D/trunk/src/generate_databases/generate_databases_par.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/generate_databases/generate_databases_par.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/generate_databases/generate_databases_par.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -56,18 +56,16 @@
! parameters read from parameter file
integer :: NTSTEP_BETWEEN_OUTPUT_SEISMOS,NSTEP,SIMULATION_TYPE
- integer :: NSOURCES,NGNOD,NGNOD2D
+ integer :: NSOURCES,NGNOD,NGNOD2D,MOVIE_TYPE
- double precision :: DT,HDUR_MOVIE
+ double precision :: DT,HDUR_MOVIE,OLSEN_ATTENUATION_RATIO
logical :: ATTENUATION,USE_OLSEN_ATTENUATION, &
- OCEANS,TOPOGRAPHY,SAVE_FORWARD,USE_FORCE_POINT_SOURCE
- logical :: ANISOTROPY,ABSORBING_CONDITIONS,SAVE_MESH_FILES
-
+ OCEANS,TOPOGRAPHY,SAVE_FORWARD,USE_FORCE_POINT_SOURCE
+ logical :: ANISOTROPY,ABSORBING_CONDITIONS,SAVE_MESH_FILES, &
+ ABSORB_INSTEAD_OF_FREE_SURFACE
logical :: USE_RICKER_TIME_FUNCTION,PRINT_SOURCE_TIME_FUNCTION
- logical :: ABSORB_INSTEAD_OF_FREE_SURFACE
-
logical :: MOVIE_SURFACE,MOVIE_VOLUME,CREATE_SHAKEMAP,SAVE_DISPLACEMENT, &
USE_HIGHRES_FOR_MOVIES
integer :: NTSTEP_BETWEEN_FRAMES,NTSTEP_BETWEEN_OUTPUT_INFO,NTSTEP_BETWEEN_READ_ADJSRC
Modified: seismo/3D/SPECFEM3D/trunk/src/meshfem3D/Makefile.in
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/meshfem3D/Makefile.in 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/meshfem3D/Makefile.in 2012-10-26 19:06:43 UTC (rev 20942)
@@ -45,10 +45,10 @@
FLAGS_NO_CHECK = @FLAGS_NO_CHECK@
FCFLAGS_f90 = @FCFLAGS_f90@
-FCCOMPILE_CHECK =@FCENV@ ${FC} ${FCFLAGS} $(FLAGS_CHECK)
-FCCOMPILE_NO_CHECK =@FCENV@ ${FC} ${FCFLAGS} $(FLAGS_NO_CHECK)
-MPIFCCOMPILE_CHECK =@FCENV@ ${MPIFC} ${FCFLAGS} $(FLAGS_CHECK)
-MPIFCCOMPILE_NO_CHECK =@FCENV@ ${MPIFC} ${FCFLAGS} $(FLAGS_NO_CHECK)
+FCCOMPILE_CHECK =@FCENV@ ${FC} ${FCFLAGS} $(FLAGS_CHECK) -I${SHARED}
+FCCOMPILE_NO_CHECK =@FCENV@ ${FC} ${FCFLAGS} $(FLAGS_NO_CHECK) -I${SHARED}
+MPIFCCOMPILE_CHECK =@FCENV@ ${MPIFC} ${FCFLAGS} $(FLAGS_CHECK) -I${SHARED}
+MPIFCCOMPILE_NO_CHECK =@FCENV@ ${MPIFC} ${FCFLAGS} $(FLAGS_NO_CHECK) -I${SHARED}
@COND_MPI_TRUE at FCLINK = $(MPIFCCOMPILE_NO_CHECK)
@COND_MPI_FALSE at FCLINK = $(FCCOMPILE_NO_CHECK)
@@ -79,11 +79,11 @@
@COND_PYRE_TRUE at COND_PYRE_OBJECTS = $O/PyxParameters.o $(PYRE_EXTRA_OBJECTS)
# objects toggled between the pure Fortran and Pyrized version
- at COND_PYRE_FALSE@COND_PYRE_OBJECTS = $O/read_value_parameters.o $O/get_value_parameters.o
+ at COND_PYRE_FALSE@COND_PYRE_OBJECTS = $O/read_value_mesh_parameters.o $O/get_value_parameters.o
libmeshfem_a_OBJECTS = \
$O/store_coords.o \
- $O/read_parameter_file.o \
+ $O/read_mesh_parameter_file.o \
$O/check_mesh_quality.o \
$O/compute_parameters.o \
$O/create_name_database.o \
@@ -101,8 +101,11 @@
$O/get_value_parameters.o \
$O/hex_nodes.o \
$O/meshfem3D.o \
+ $O/param_reader.cc.o \
+ $O/read_parameter_file.shared.o \
$O/read_topo_bathy_file.o \
- $O/read_value_parameters.o \
+ $O/read_value_mesh_parameters.o \
+ $O/read_value_parameters.shared.o \
$O/save_databases.o \
$O/utm_geo.o \
$(EMPTY_MACRO)
@@ -164,8 +167,21 @@
#### rule to build each .o file below
####
+###
+### not optimized flags (not dependent on values from mesher anymore)
+###
+$O/%.shared.o: $(SHARED)%.f90 $(SHARED)constants.h
+ ${FCCOMPILE_CHECK} -c -o $@ $<
+
###
+### C compilation
+###
+
+$O/%.cc.o: $(SHARED)%.c ../../config.h
+ ${CC} -c $(CFLAGS) $(MPI_INC) -o $@ $(SHARED)$< -I../../
+
+###
### MPI compilation without optimization
###
@@ -188,11 +204,11 @@
$O/exit_mpi.o: ${SHARED}constants.h ${SHARED}/exit_mpi.f90
${FCCOMPILE_CHECK} -c -o $O/exit_mpi.o ${SHARED}/exit_mpi.f90
-$O/read_parameter_file.o: ${SHARED}constants.h read_parameter_file.f90
- ${FCCOMPILE_CHECK} -c -o $O/read_parameter_file.o read_parameter_file.f90
+$O/read_mesh_parameter_file.o: ${SHARED}constants.h read_mesh_parameter_file.f90
+ ${FCCOMPILE_CHECK} -c -o $O/read_mesh_parameter_file.o read_mesh_parameter_file.f90
-$O/read_value_parameters.o: ${SHARED}constants.h read_value_parameters.f90
- ${FCCOMPILE_CHECK} -c -o $O/read_value_parameters.o read_value_parameters.f90
+$O/read_value_mesh_parameters.o: ${SHARED}constants.h read_value_mesh_parameters.f90
+ ${FCCOMPILE_CHECK} -c -o $O/read_value_mesh_parameters.o read_value_mesh_parameters.f90
$O/get_value_parameters.o: ${SHARED}constants.h get_value_parameters.f90
${FCCOMPILE_CHECK} -c -o $O/get_value_parameters.o get_value_parameters.f90
Modified: seismo/3D/SPECFEM3D/trunk/src/meshfem3D/check_mesh_quality.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/meshfem3D/check_mesh_quality.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/meshfem3D/check_mesh_quality.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -94,7 +94,23 @@
real(kind=CUSTOM_REAL),dimension(:),allocatable :: tmp1
integer:: ier,ipoin
+ ! parameters read from parameter file
+ integer NTSTEP_BETWEEN_OUTPUT_SEISMOS,NSTEP,UTM_PROJECTION_ZONE,SIMULATION_TYPE
+ integer NSOURCES,NTSTEP_BETWEEN_READ_ADJSRC,NOISE_TOMOGRAPHY
+ logical MOVIE_SURFACE,MOVIE_VOLUME,CREATE_SHAKEMAP,SAVE_DISPLACEMENT, &
+ USE_HIGHRES_FOR_MOVIES,SUPPRESS_UTM_PROJECTION
+ integer NTSTEP_BETWEEN_FRAMES,NTSTEP_BETWEEN_OUTPUT_INFO,NGNOD,NGNOD2D
+ double precision DT
+ double precision HDUR_MOVIE,OLSEN_ATTENUATION_RATIO
+ logical ATTENUATION,USE_OLSEN_ATTENUATION, &
+ OCEANS,TOPOGRAPHY,USE_FORCE_POINT_SOURCE
+ logical ABSORBING_CONDITIONS,SAVE_FORWARD,ABSORB_INSTEAD_OF_FREE_SURFACE
+ logical ANISOTROPY,SAVE_MESH_FILES,USE_RICKER_TIME_FUNCTION,PRINT_SOURCE_TIME_FUNCTION
+ character(len=256) LOCAL_PATH
+ integer NPROC
+ integer MOVIE_TYPE,IMODEL
+
if (myrank == 0) then
write(IMAIN,*) '**************************'
write(IMAIN,*) 'Checking mesh quality'
@@ -103,6 +119,21 @@
write(IMAIN,*) 'start computing the minimum and maximum edge size'
end if
+ ! read the parameter file
+ call read_parameter_file( NPROC,NTSTEP_BETWEEN_OUTPUT_SEISMOS,NSTEP,DT,NGNOD,NGNOD2D, &
+ UTM_PROJECTION_ZONE,SUPPRESS_UTM_PROJECTION, &
+ ATTENUATION,USE_OLSEN_ATTENUATION,LOCAL_PATH,NSOURCES, &
+ OCEANS,TOPOGRAPHY,ANISOTROPY,ABSORBING_CONDITIONS,MOVIE_TYPE, &
+ MOVIE_SURFACE,MOVIE_VOLUME,CREATE_SHAKEMAP,SAVE_DISPLACEMENT, &
+ NTSTEP_BETWEEN_FRAMES,USE_HIGHRES_FOR_MOVIES,HDUR_MOVIE, &
+ SAVE_MESH_FILES,PRINT_SOURCE_TIME_FUNCTION, &
+ NTSTEP_BETWEEN_OUTPUT_INFO,SIMULATION_TYPE,SAVE_FORWARD, &
+ NTSTEP_BETWEEN_READ_ADJSRC,NOISE_TOMOGRAPHY, &
+ USE_FORCE_POINT_SOURCE,ABSORB_INSTEAD_OF_FREE_SURFACE, &
+ USE_RICKER_TIME_FUNCTION,OLSEN_ATTENUATION_RATIO,IMODEL)
+
+ if(NGNOD /= 8) stop 'error: check_mesh_quality only supports NGNOD == 8 for now'
+
! ************* compute min and max of skewness and ratios ******************
! erase minimum and maximum of quality numbers
Modified: seismo/3D/SPECFEM3D/trunk/src/meshfem3D/meshfem3D.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/meshfem3D/meshfem3D.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/meshfem3D/meshfem3D.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -263,7 +263,7 @@
! addressing for all the slices
integer, dimension(:), allocatable :: iproc_xi_slice,iproc_eta_slice
-! parameters read from parameter file
+! parameters read from mesh parameter file
integer NEX_XI,NEX_ETA,NPROC_XI,NPROC_ETA,UTM_PROJECTION_ZONE
double precision UTM_X_MIN,UTM_X_MAX,UTM_Y_MIN,UTM_Y_MAX
@@ -329,6 +329,20 @@
! second dimension : #rho #vp #vs #Q_flag #anisotropy_flag #domain_id
double precision , dimension(:,:), pointer :: material_properties
+ ! parameters read from parameter file
+ integer NTSTEP_BETWEEN_OUTPUT_SEISMOS,NSTEP,SIMULATION_TYPE
+ integer NSOURCES,NTSTEP_BETWEEN_READ_ADJSRC,NOISE_TOMOGRAPHY
+ logical MOVIE_SURFACE,MOVIE_VOLUME,CREATE_SHAKEMAP,SAVE_DISPLACEMENT, &
+ USE_HIGHRES_FOR_MOVIES
+ integer NTSTEP_BETWEEN_FRAMES,NTSTEP_BETWEEN_OUTPUT_INFO,NGNOD,NGNOD2D
+ double precision DT
+ double precision HDUR_MOVIE,OLSEN_ATTENUATION_RATIO
+ logical ATTENUATION,USE_OLSEN_ATTENUATION, &
+ OCEANS,TOPOGRAPHY,USE_FORCE_POINT_SOURCE
+ logical ABSORBING_CONDITIONS,SAVE_FORWARD,ABSORB_INSTEAD_OF_FREE_SURFACE
+ logical ANISOTROPY,SAVE_MESH_FILES,USE_RICKER_TIME_FUNCTION,PRINT_SOURCE_TIME_FUNCTION
+ integer MOVIE_TYPE,IMODEL
+
! ************** PROGRAM STARTS HERE **************
! sizeprocs returns number of processes started (should be equal to NPROC).
@@ -356,8 +370,22 @@
write(IMAIN,*)
endif
- ! nullify(subregions,material_properties)
- call read_parameter_file(LATITUDE_MIN,LATITUDE_MAX,LONGITUDE_MIN,LONGITUDE_MAX, &
+! read the parameter file
+ call read_parameter_file( NPROC,NTSTEP_BETWEEN_OUTPUT_SEISMOS,NSTEP,DT,NGNOD,NGNOD2D, &
+ UTM_PROJECTION_ZONE,SUPPRESS_UTM_PROJECTION, &
+ ATTENUATION,USE_OLSEN_ATTENUATION,LOCAL_PATH,NSOURCES, &
+ OCEANS,TOPOGRAPHY,ANISOTROPY,ABSORBING_CONDITIONS,MOVIE_TYPE, &
+ MOVIE_SURFACE,MOVIE_VOLUME,CREATE_SHAKEMAP,SAVE_DISPLACEMENT, &
+ NTSTEP_BETWEEN_FRAMES,USE_HIGHRES_FOR_MOVIES,HDUR_MOVIE, &
+ SAVE_MESH_FILES,PRINT_SOURCE_TIME_FUNCTION, &
+ NTSTEP_BETWEEN_OUTPUT_INFO,SIMULATION_TYPE,SAVE_FORWARD, &
+ NTSTEP_BETWEEN_READ_ADJSRC,NOISE_TOMOGRAPHY, &
+ USE_FORCE_POINT_SOURCE,ABSORB_INSTEAD_OF_FREE_SURFACE, &
+ USE_RICKER_TIME_FUNCTION,OLSEN_ATTENUATION_RATIO,IMODEL)
+
+! read the mesh parameter file
+! nullify(subregions,material_properties)
+ call read_mesh_parameter_file(LATITUDE_MIN,LATITUDE_MAX,LONGITUDE_MIN,LONGITUDE_MAX, &
UTM_X_MIN,UTM_X_MAX,UTM_Y_MIN,UTM_Y_MAX,Z_DEPTH_BLOCK, &
NEX_XI,NEX_ETA,NPROC_XI,NPROC_ETA,UTM_PROJECTION_ZONE, &
LOCAL_PATH,SUPPRESS_UTM_PROJECTION,&
@@ -382,7 +410,7 @@
max_npy_interface = -1
! read number of interfaces
- call read_value_integer(IIN,DONT_IGNORE_JUNK,number_of_interfaces,'NINTERFACES')
+ call read_value_integer_mesh(IIN,DONT_IGNORE_JUNK,number_of_interfaces,'NINTERFACES')
if(number_of_interfaces < 1) stop 'error: not enough interfaces (minimum is 1, for topography)'
! loop on all the interfaces
@@ -407,7 +435,7 @@
do ilayer = 1,number_of_layers
! read number of spectral elements in vertical direction in this layer
- call read_value_integer(IIN,DONT_IGNORE_JUNK,ner_layer(ilayer),'NER_LAYER')
+ call read_value_integer_mesh(IIN,DONT_IGNORE_JUNK,ner_layer(ilayer),'NER_LAYER')
if(ner_layer(ilayer) < 1) stop 'not enough spectral elements along Z in layer (minimum is 1)'
enddo
@@ -513,8 +541,8 @@
endif
! check that the constants.h file is correct
- if(NGNOD_EIGHT_CORNERS /= 8) call exit_MPI(myrank,'volume elements should have 8 control nodes in our internal mesher')
- if(NGNOD2D_FOUR_CORNERS /= 4) call exit_MPI(myrank,'surface elements should have 4 control nodes in our internal mesher')
+ if(NGNOD /= 8) call exit_MPI(myrank,'volume elements should have 8 control nodes in our internal mesher')
+ if(NGNOD2D /= 4) call exit_MPI(myrank,'surface elements should have 4 control nodes in our internal mesher')
! check that reals are either 4 or 8 bytes
if(CUSTOM_REAL /= SIZE_REAL .and. CUSTOM_REAL /= SIZE_DOUBLE) call exit_MPI(myrank,'wrong size of CUSTOM_REAL for reals')
@@ -601,7 +629,7 @@
if( ier /= 0 ) stop 'error allocating array interface_top'
! read number of interfaces
- call read_value_integer(IIN,DONT_IGNORE_JUNK,number_of_interfaces,'NINTERFACES')
+ call read_value_integer_mesh(IIN,DONT_IGNORE_JUNK,number_of_interfaces,'NINTERFACES')
SUPPRESS_UTM_PROJECTION_BOTTOM = SUPPRESS_UTM_PROJECTION
npx_interface_bottom = 2
@@ -627,7 +655,7 @@
//interface_top_file,status='old')
do iy=1,npy_interface_top
do ix=1,npx_interface_top
- call read_value_double_precision(45,DONT_IGNORE_JUNK,interface_top(ix,iy),'Z_INTERFACE_TOP')
+ call read_value_dble_precision_mesh(45,DONT_IGNORE_JUNK,interface_top(ix,iy),'Z_INTERFACE_TOP')
enddo
enddo
close(45)
Added: seismo/3D/SPECFEM3D/trunk/src/meshfem3D/read_mesh_parameter_file.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/meshfem3D/read_mesh_parameter_file.f90 (rev 0)
+++ seismo/3D/SPECFEM3D/trunk/src/meshfem3D/read_mesh_parameter_file.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -0,0 +1,209 @@
+!=====================================================================
+!
+! S p e c f e m 3 D V e r s i o n 2 . 1
+! ---------------------------------------
+!
+! Main authors: Dimitri Komatitsch and Jeroen Tromp
+! Princeton University, USA and CNRS / INRIA / University of Pau
+! (c) Princeton University / California Institute of Technology and CNRS / INRIA / University of Pau
+! July 2012
+!
+! This program is free software; you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by
+! the Free Software Foundation; either version 2 of the License, or
+! (at your option) any later version.
+!
+! This program is distributed in the hope that it will be useful,
+! but WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+! GNU General Public License for more details.
+!
+! You should have received a copy of the GNU General Public License along
+! with this program; if not, write to the Free Software Foundation, Inc.,
+! 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+!
+!=====================================================================
+
+module readParFile
+contains
+
+ subroutine read_mesh_parameter_file(LATITUDE_MIN,LATITUDE_MAX,LONGITUDE_MIN,LONGITUDE_MAX, &
+ UTM_X_MIN,UTM_X_MAX,UTM_Y_MIN,UTM_Y_MAX,Z_DEPTH_BLOCK, &
+ NEX_XI,NEX_ETA,NPROC_XI,NPROC_ETA,UTM_PROJECTION_ZONE, &
+ LOCAL_PATH,SUPPRESS_UTM_PROJECTION,&
+ INTERFACES_FILE,NSUBREGIONS,subregions,NMATERIALS,material_properties,&
+ CREATE_ABAQUS_FILES,CREATE_DX_FILES,CREATE_VTK_FILES, &
+ USE_REGULAR_MESH,NDOUBLINGS,ner_doublings)
+
+ implicit none
+
+ include "constants.h"
+
+ integer NEX_XI,NEX_ETA,NPROC_XI,NPROC_ETA,UTM_PROJECTION_ZONE
+
+ double precision UTM_X_MIN,UTM_X_MAX,UTM_Y_MIN,UTM_Y_MAX,Z_DEPTH_BLOCK, UTM_MAX
+ double precision LATITUDE_MIN,LATITUDE_MAX,LONGITUDE_MIN,LONGITUDE_MAX
+
+ logical SUPPRESS_UTM_PROJECTION,USE_REGULAR_MESH
+ logical CREATE_ABAQUS_FILES,CREATE_DX_FILES,CREATE_VTK_FILES
+
+ integer NDOUBLINGS
+ integer, dimension(2) :: ner_doublings
+
+ character(len=256) LOCAL_PATH
+ character(len=50) INTERFACES_FILE
+
+! local variables
+ integer NEX_MAX
+
+ double precision DEPTH_BLOCK_KM!,RECORD_LENGTH_IN_SECONDS,hdur,minval_hdur
+
+! character(len=256) dummystring
+ integer ierr
+ integer, external :: err_occurred_mesh
+
+! subregions parameters
+ integer NSUBREGIONS
+ integer ix_beg_region,ix_end_region,iy_beg_region,iy_end_region
+ integer iz_beg_region,iz_end_region,imaterial_number
+! definition of the different regions of the model in the mesh (nx,ny,nz)
+! #1 #2 : nx_begining,nx_end
+! #3 #4 : ny_begining,ny_end
+! #5 #6 : nz_begining,nz_end
+! #7 : material number
+ integer, dimension(:,:), pointer :: subregions
+
+! material properties
+ integer NMATERIALS
+ double precision rho,vp,vs,Q_flag,anisotropy_flag,domain_id
+! first dimension : material_id
+! second dimension : #rho #vp #vs #Q_flag #anisotropy_flag #domain_id
+ double precision, dimension(:,:), pointer :: material_properties
+
+ integer i,ireg,imat,idoubl
+
+! open parameter file Mesh_Par_file
+ call open_parameter_file_mesh()
+
+ call read_value_dble_precision_mesh(IIN,IGNORE_JUNK,LATITUDE_MIN, 'mesher.LATITUDE_MIN')
+ if(err_occurred_mesh() /= 0) return
+ call read_value_dble_precision_mesh(IIN,IGNORE_JUNK,LATITUDE_MAX, 'mesher.LATITUDE_MAX')
+ if(err_occurred_mesh() /= 0) return
+ call read_value_dble_precision_mesh(IIN,IGNORE_JUNK,LONGITUDE_MIN, 'mesher.LONGITUDE_MIN')
+ if(err_occurred_mesh() /= 0) return
+ call read_value_dble_precision_mesh(IIN,IGNORE_JUNK,LONGITUDE_MAX, 'mesher.LONGITUDE_MAX')
+ if(err_occurred_mesh() /= 0) return
+ call read_value_dble_precision_mesh(IIN,IGNORE_JUNK,DEPTH_BLOCK_KM, 'mesher.DEPTH_BLOCK_KM')
+ if(err_occurred_mesh() /= 0) return
+ call read_value_integer_mesh(IIN,IGNORE_JUNK,UTM_PROJECTION_ZONE, 'mesher.UTM_PROJECTION_ZONE')
+ if(err_occurred_mesh() /= 0) return
+ call read_value_logical_mesh(IIN,IGNORE_JUNK,SUPPRESS_UTM_PROJECTION, 'mesher.SUPPRESS_UTM_PROJECTION')
+ if(err_occurred_mesh() /= 0) return
+
+ call read_value_string_mesh(IIN,IGNORE_JUNK,INTERFACES_FILE, 'mesher.INTERFACES_FILE')
+ if(err_occurred_mesh() /= 0) return
+
+ call read_value_integer_mesh(IIN,IGNORE_JUNK,NEX_XI, 'mesher.NEX_XI')
+ if(err_occurred_mesh() /= 0) return
+ call read_value_integer_mesh(IIN,IGNORE_JUNK,NEX_ETA, 'mesher.NEX_ETA')
+ if(err_occurred_mesh() /= 0) return
+ call read_value_integer_mesh(IIN,IGNORE_JUNK,NPROC_XI, 'mesher.NPROC_XI')
+ if(err_occurred_mesh() /= 0) return
+ call read_value_integer_mesh(IIN,IGNORE_JUNK,NPROC_ETA, 'mesher.NPROC_ETA')
+ if(err_occurred_mesh() /= 0) return
+
+
+! convert model size to UTM coordinates and depth of mesh to meters
+ call utm_geo(LONGITUDE_MIN,LATITUDE_MIN,UTM_X_MIN,UTM_Y_MIN,UTM_PROJECTION_ZONE,ILONGLAT2UTM,SUPPRESS_UTM_PROJECTION)
+ call utm_geo(LONGITUDE_MAX,LATITUDE_MAX,UTM_X_MAX,UTM_Y_MAX,UTM_PROJECTION_ZONE,ILONGLAT2UTM,SUPPRESS_UTM_PROJECTION)
+
+ Z_DEPTH_BLOCK = - dabs(DEPTH_BLOCK_KM) * 1000.d0
+
+! check that parameters computed are consistent
+ if(UTM_X_MIN >= UTM_X_MAX) stop 'horizontal dimension of UTM block incorrect'
+ if(UTM_Y_MIN >= UTM_Y_MAX) stop 'vertical dimension of UTM block incorrect'
+
+! set time step and radial distribution of elements
+! right distribution is determined based upon maximum value of NEX
+ NEX_MAX = max(NEX_XI,NEX_ETA)
+ UTM_MAX = max(UTM_Y_MAX-UTM_Y_MIN, UTM_X_MAX-UTM_X_MIN)/1000.0 ! in KM
+
+ call read_value_logical_mesh(IIN,IGNORE_JUNK,USE_REGULAR_MESH, 'mesher.USE_REGULAR_MESH')
+ if(err_occurred_mesh() /= 0) return
+ call read_value_integer_mesh(IIN,IGNORE_JUNK,NDOUBLINGS, 'mesher.NDOUBLINGS')
+ if(err_occurred_mesh() /= 0) return
+ call read_value_integer_mesh(IIN,IGNORE_JUNK,ner_doublings(1), 'mesher.NZ_DOUGLING_1')
+ if(err_occurred_mesh() /= 0) return
+ call read_value_integer_mesh(IIN,IGNORE_JUNK,ner_doublings(2), 'mesher.NZ_DOUGLING_2')
+ if(err_occurred_mesh() /= 0) return
+
+ if(ner_doublings(1) < ner_doublings(2) .and. NDOUBLINGS == 2) then
+ idoubl = ner_doublings(1)
+ ner_doublings(1) = ner_doublings(2)
+ ner_doublings(2) = idoubl
+ end if
+
+
+
+ call read_value_logical_mesh(IIN,IGNORE_JUNK,CREATE_ABAQUS_FILES, 'mesher.CREATE_ABAQUS_FILES')
+ if(err_occurred_mesh() /= 0) return
+ call read_value_logical_mesh(IIN,IGNORE_JUNK,CREATE_DX_FILES, 'mesher.CREATE_DX_FILES')
+ if(err_occurred_mesh() /= 0) return
+ call read_value_logical_mesh(IIN,IGNORE_JUNK,CREATE_VTK_FILES, 'mesher.CREATE_VTK_FILES')
+ if(err_occurred_mesh() /= 0) return
+
+! file in which we store the databases
+ call read_value_string_mesh(IIN,IGNORE_JUNK,LOCAL_PATH, 'LOCAL_PATH')
+ if(err_occurred_mesh() /= 0) return
+
+! read number of materials
+ call read_value_integer_mesh(IIN,IGNORE_JUNK,NMATERIALS, 'mesher.NMATERIALS')
+ if(err_occurred_mesh() /= 0) return
+
+! read materials properties
+ allocate(material_properties(NMATERIALS,6),stat=ierr)
+ if(ierr /= 0) print*,"Allocation error of material_properties"
+
+ do imat =1,NMATERIALS
+ call read_material_parameters(IIN,i,rho,vp,vs,Q_flag,anisotropy_flag,domain_id)
+ if (i /= imat) stop "Incorrect material ID"
+ if(rho <= 0.d0 .or. vp <= 0.d0 .or. vs < 0.d0) stop 'negative value of velocity or density'
+ material_properties(imat,1) = rho
+ material_properties(imat,2) = vp
+ material_properties(imat,3) = vs
+ material_properties(imat,4) = Q_flag
+ material_properties(imat,5) = anisotropy_flag
+ material_properties(imat,6) = domain_id
+ end do
+
+! read number of subregions
+ call read_value_integer_mesh(IIN,IGNORE_JUNK,NSUBREGIONS, 'mesher.NSUBREGIONS')
+ if(err_occurred_mesh() /= 0) return
+
+! read subregions properties
+ allocate(subregions(NSUBREGIONS,7),stat=ierr)
+ if(ierr /= 0) print*,"Allocation error of subregions"
+ do ireg =1,NSUBREGIONS
+ call read_region_parameters(IIN,ix_beg_region,ix_end_region,iy_beg_region,iy_end_region,&
+ iz_beg_region,iz_end_region,imaterial_number)
+ if(ix_beg_region < 1) stop 'XI coordinate of region negative!'
+ if(ix_end_region > NEX_XI) stop 'XI coordinate of region too high!'
+ if(iy_beg_region < 1) stop 'ETA coordinate of region negative!'
+ if(iy_end_region > NEX_ETA) stop 'ETA coordinate of region too high!'
+ if(iz_beg_region < 1) stop 'Z coordinate of region negative!'
+
+ subregions(ireg,1) = ix_beg_region
+ subregions(ireg,2) = ix_end_region
+ subregions(ireg,3) = iy_beg_region
+ subregions(ireg,4) = iy_end_region
+ subregions(ireg,5) = iz_beg_region
+ subregions(ireg,6) = iz_end_region
+ subregions(ireg,7) = imaterial_number
+ end do
+
+! close parameter file
+ call close_parameter_file_mesh()
+
+ end subroutine read_mesh_parameter_file
+
+end module readParFile
Deleted: seismo/3D/SPECFEM3D/trunk/src/meshfem3D/read_parameter_file.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/meshfem3D/read_parameter_file.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/meshfem3D/read_parameter_file.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -1,210 +0,0 @@
-!=====================================================================
-!
-! S p e c f e m 3 D V e r s i o n 2 . 1
-! ---------------------------------------
-!
-! Main authors: Dimitri Komatitsch and Jeroen Tromp
-! Princeton University, USA and CNRS / INRIA / University of Pau
-! (c) Princeton University / California Institute of Technology and CNRS / INRIA / University of Pau
-! July 2012
-!
-! This program is free software; you can redistribute it and/or modify
-! it under the terms of the GNU General Public License as published by
-! the Free Software Foundation; either version 2 of the License, or
-! (at your option) any later version.
-!
-! This program is distributed in the hope that it will be useful,
-! but WITHOUT ANY WARRANTY; without even the implied warranty of
-! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-! GNU General Public License for more details.
-!
-! You should have received a copy of the GNU General Public License along
-! with this program; if not, write to the Free Software Foundation, Inc.,
-! 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-!
-!=====================================================================
-
-module readParFile
-contains
-
- subroutine read_parameter_file(LATITUDE_MIN,LATITUDE_MAX,LONGITUDE_MIN,LONGITUDE_MAX, &
- UTM_X_MIN,UTM_X_MAX,UTM_Y_MIN,UTM_Y_MAX,Z_DEPTH_BLOCK, &
- NEX_XI,NEX_ETA,NPROC_XI,NPROC_ETA,UTM_PROJECTION_ZONE, &
- LOCAL_PATH,SUPPRESS_UTM_PROJECTION,&
- INTERFACES_FILE,NSUBREGIONS,subregions,NMATERIALS,material_properties,&
- CREATE_ABAQUS_FILES,CREATE_DX_FILES,CREATE_VTK_FILES, &
- USE_REGULAR_MESH,NDOUBLINGS,ner_doublings)
-
- implicit none
-
- include "constants.h"
-
- integer NEX_XI,NEX_ETA,NPROC_XI,NPROC_ETA,UTM_PROJECTION_ZONE
-
- double precision UTM_X_MIN,UTM_X_MAX,UTM_Y_MIN,UTM_Y_MAX,Z_DEPTH_BLOCK, UTM_MAX
- double precision LATITUDE_MIN,LATITUDE_MAX,LONGITUDE_MIN,LONGITUDE_MAX
-
- logical SUPPRESS_UTM_PROJECTION,USE_REGULAR_MESH
- logical CREATE_ABAQUS_FILES,CREATE_DX_FILES,CREATE_VTK_FILES
-
- integer NDOUBLINGS
- integer, dimension(2) :: ner_doublings
-
- character(len=256) LOCAL_PATH
- character(len=50) INTERFACES_FILE
-
-! local variables
- integer NEX_MAX
-
- double precision DEPTH_BLOCK_KM!,RECORD_LENGTH_IN_SECONDS,hdur,minval_hdur
-
-! character(len=256) dummystring
- integer ierr
- integer, external :: err_occurred
-
-! subregions parameters
- integer NSUBREGIONS
- integer ix_beg_region,ix_end_region,iy_beg_region,iy_end_region
- integer iz_beg_region,iz_end_region,imaterial_number
-! definition of the different regions of the model in the mesh (nx,ny,nz)
-! #1 #2 : nx_begining,nx_end
-! #3 #4 : ny_begining,ny_end
-! #5 #6 : nz_begining,nz_end
-! #7 : material number
- integer, dimension(:,:), pointer :: subregions
-
-! material properties
- integer NMATERIALS
- double precision rho,vp,vs,Q_flag,anisotropy_flag,domain_id
-! first dimension : material_id
-! second dimension : #rho #vp #vs #Q_flag #anisotropy_flag #domain_id
- double precision, dimension(:,:), pointer :: material_properties
-
- integer i,ireg,imat,idoubl
-
-! open parameter file
- open(unit=IIN,file=MF_IN_DATA_FILES_PATH(1:len_trim(MF_IN_DATA_FILES_PATH)) &
- //'Mesh_Par_file',status='old',action='read')
-
- call read_value_double_precision(IIN,IGNORE_JUNK,LATITUDE_MIN, 'mesher.LATITUDE_MIN')
- if(err_occurred() /= 0) return
- call read_value_double_precision(IIN,IGNORE_JUNK,LATITUDE_MAX, 'mesher.LATITUDE_MAX')
- if(err_occurred() /= 0) return
- call read_value_double_precision(IIN,IGNORE_JUNK,LONGITUDE_MIN, 'mesher.LONGITUDE_MIN')
- if(err_occurred() /= 0) return
- call read_value_double_precision(IIN,IGNORE_JUNK,LONGITUDE_MAX, 'mesher.LONGITUDE_MAX')
- if(err_occurred() /= 0) return
- call read_value_double_precision(IIN,IGNORE_JUNK,DEPTH_BLOCK_KM, 'mesher.DEPTH_BLOCK_KM')
- if(err_occurred() /= 0) return
- call read_value_integer(IIN,IGNORE_JUNK,UTM_PROJECTION_ZONE, 'mesher.UTM_PROJECTION_ZONE')
- if(err_occurred() /= 0) return
- call read_value_logical(IIN,IGNORE_JUNK,SUPPRESS_UTM_PROJECTION, 'mesher.SUPPRESS_UTM_PROJECTION')
- if(err_occurred() /= 0) return
-
- call read_value_string(IIN,IGNORE_JUNK,INTERFACES_FILE, 'mesher.INTERFACES_FILE')
- if(err_occurred() /= 0) return
-
- call read_value_integer(IIN,IGNORE_JUNK,NEX_XI, 'mesher.NEX_XI')
- if(err_occurred() /= 0) return
- call read_value_integer(IIN,IGNORE_JUNK,NEX_ETA, 'mesher.NEX_ETA')
- if(err_occurred() /= 0) return
- call read_value_integer(IIN,IGNORE_JUNK,NPROC_XI, 'mesher.NPROC_XI')
- if(err_occurred() /= 0) return
- call read_value_integer(IIN,IGNORE_JUNK,NPROC_ETA, 'mesher.NPROC_ETA')
- if(err_occurred() /= 0) return
-
-
-! convert model size to UTM coordinates and depth of mesh to meters
- call utm_geo(LONGITUDE_MIN,LATITUDE_MIN,UTM_X_MIN,UTM_Y_MIN,UTM_PROJECTION_ZONE,ILONGLAT2UTM,SUPPRESS_UTM_PROJECTION)
- call utm_geo(LONGITUDE_MAX,LATITUDE_MAX,UTM_X_MAX,UTM_Y_MAX,UTM_PROJECTION_ZONE,ILONGLAT2UTM,SUPPRESS_UTM_PROJECTION)
-
- Z_DEPTH_BLOCK = - dabs(DEPTH_BLOCK_KM) * 1000.d0
-
-! check that parameters computed are consistent
- if(UTM_X_MIN >= UTM_X_MAX) stop 'horizontal dimension of UTM block incorrect'
- if(UTM_Y_MIN >= UTM_Y_MAX) stop 'vertical dimension of UTM block incorrect'
-
-! set time step and radial distribution of elements
-! right distribution is determined based upon maximum value of NEX
- NEX_MAX = max(NEX_XI,NEX_ETA)
- UTM_MAX = max(UTM_Y_MAX-UTM_Y_MIN, UTM_X_MAX-UTM_X_MIN)/1000.0 ! in KM
-
- call read_value_logical(IIN,IGNORE_JUNK,USE_REGULAR_MESH, 'mesher.USE_REGULAR_MESH')
- if(err_occurred() /= 0) return
- call read_value_integer(IIN,IGNORE_JUNK,NDOUBLINGS, 'mesher.NDOUBLINGS')
- if(err_occurred() /= 0) return
- call read_value_integer(IIN,IGNORE_JUNK,ner_doublings(1), 'mesher.NZ_DOUGLING_1')
- if(err_occurred() /= 0) return
- call read_value_integer(IIN,IGNORE_JUNK,ner_doublings(2), 'mesher.NZ_DOUGLING_2')
- if(err_occurred() /= 0) return
-
- if(ner_doublings(1) < ner_doublings(2) .and. NDOUBLINGS == 2) then
- idoubl = ner_doublings(1)
- ner_doublings(1) = ner_doublings(2)
- ner_doublings(2) = idoubl
- end if
-
-
-
- call read_value_logical(IIN,IGNORE_JUNK,CREATE_ABAQUS_FILES, 'mesher.CREATE_ABAQUS_FILES')
- if(err_occurred() /= 0) return
- call read_value_logical(IIN,IGNORE_JUNK,CREATE_DX_FILES, 'mesher.CREATE_DX_FILES')
- if(err_occurred() /= 0) return
- call read_value_logical(IIN,IGNORE_JUNK,CREATE_VTK_FILES, 'mesher.CREATE_VTK_FILES')
- if(err_occurred() /= 0) return
-
-! file in which we store the databases
- call read_value_string(IIN,IGNORE_JUNK,LOCAL_PATH, 'LOCAL_PATH')
- if(err_occurred() /= 0) return
-
-! read number of materials
- call read_value_integer(IIN,IGNORE_JUNK,NMATERIALS, 'mesher.NMATERIALS')
- if(err_occurred() /= 0) return
-
-! read materials properties
- allocate(material_properties(NMATERIALS,6),stat=ierr)
- if(ierr /= 0) print*,"Allocation error of material_properties"
-
- do imat =1,NMATERIALS
- call read_material_parameters(IIN,i,rho,vp,vs,Q_flag,anisotropy_flag,domain_id)
- if (i /= imat) stop "Incorrect material ID"
- if(rho <= 0.d0 .or. vp <= 0.d0 .or. vs < 0.d0) stop 'negative value of velocity or density'
- material_properties(imat,1) = rho
- material_properties(imat,2) = vp
- material_properties(imat,3) = vs
- material_properties(imat,4) = Q_flag
- material_properties(imat,5) = anisotropy_flag
- material_properties(imat,6) = domain_id
- end do
-
-! read number of subregions
- call read_value_integer(IIN,IGNORE_JUNK,NSUBREGIONS, 'mesher.NSUBREGIONS')
- if(err_occurred() /= 0) return
-
-! read subregions properties
- allocate(subregions(NSUBREGIONS,7),stat=ierr)
- if(ierr /= 0) print*,"Allocation error of subregions"
- do ireg =1,NSUBREGIONS
- call read_region_parameters(IIN,ix_beg_region,ix_end_region,iy_beg_region,iy_end_region,&
- iz_beg_region,iz_end_region,imaterial_number)
- if(ix_beg_region < 1) stop 'XI coordinate of region negative!'
- if(ix_end_region > NEX_XI) stop 'XI coordinate of region too high!'
- if(iy_beg_region < 1) stop 'ETA coordinate of region negative!'
- if(iy_end_region > NEX_ETA) stop 'ETA coordinate of region too high!'
- if(iz_beg_region < 1) stop 'Z coordinate of region negative!'
-
- subregions(ireg,1) = ix_beg_region
- subregions(ireg,2) = ix_end_region
- subregions(ireg,3) = iy_beg_region
- subregions(ireg,4) = iy_end_region
- subregions(ireg,5) = iz_beg_region
- subregions(ireg,6) = iz_end_region
- subregions(ireg,7) = imaterial_number
- end do
-
-! close parameter file
- close(IIN)
-
- end subroutine read_parameter_file
-
-end module readParFile
Added: seismo/3D/SPECFEM3D/trunk/src/meshfem3D/read_value_mesh_parameters.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/meshfem3D/read_value_mesh_parameters.f90 (rev 0)
+++ seismo/3D/SPECFEM3D/trunk/src/meshfem3D/read_value_mesh_parameters.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -0,0 +1,252 @@
+!=====================================================================
+!
+! S p e c f e m 3 D V e r s i o n 2 . 1
+! ---------------------------------------
+!
+! Main authors: Dimitri Komatitsch and Jeroen Tromp
+! Princeton University, USA and CNRS / INRIA / University of Pau
+! (c) Princeton University / California Institute of Technology and CNRS / INRIA / University of Pau
+! July 2012
+!
+! This program is free software; you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by
+! the Free Software Foundation; either version 2 of the License, or
+! (at your option) any later version.
+!
+! This program is distributed in the hope that it will be useful,
+! but WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+! GNU General Public License for more details.
+!
+! You should have received a copy of the GNU General Public License along
+! with this program; if not, write to the Free Software Foundation, Inc.,
+! 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+!
+!=====================================================================
+
+! read values from parameter file, ignoring white lines and comments
+
+ subroutine read_value_integer_mesh(iunit,ignore_junk,value_to_read, name)
+
+ implicit none
+
+ logical ignore_junk
+ integer iunit
+ integer value_to_read
+ character(len=*) name
+ character(len=100) string_read
+
+ call unused_string(name)
+
+ call read_next_line(iunit,ignore_junk,string_read)
+ read(string_read,*) value_to_read
+
+ end subroutine read_value_integer_mesh
+
+!--------------------
+
+ subroutine read_value_dble_precision_mesh(iunit,ignore_junk,value_to_read, name)
+
+ implicit none
+
+ logical ignore_junk
+ integer iunit
+ double precision value_to_read
+ character(len=*) name
+ character(len=100) string_read
+
+ call unused_string(name)
+
+ call read_next_line(iunit,ignore_junk,string_read)
+ read(string_read,*) value_to_read
+
+ end subroutine read_value_dble_precision_mesh
+
+!--------------------
+
+ subroutine read_value_logical_mesh(iunit,ignore_junk,value_to_read, name)
+
+ implicit none
+
+ logical ignore_junk
+ logical value_to_read
+ integer iunit
+ character(len=*) name
+ character(len=100) string_read
+
+ call unused_string(name)
+
+ call read_next_line(iunit,ignore_junk,string_read)
+ read(string_read,*) value_to_read
+
+ end subroutine read_value_logical_mesh
+
+!--------------------
+
+ subroutine read_value_string_mesh(iunit,ignore_junk,value_to_read, name)
+
+ implicit none
+
+ logical ignore_junk
+ integer iunit
+ character(len=*) value_to_read
+ character(len=*) name
+ character(len=100) string_read
+
+ call unused_string(name)
+
+ call read_next_line(iunit,ignore_junk,string_read)
+ value_to_read = string_read
+
+ end subroutine read_value_string_mesh
+
+!--------------------
+
+ subroutine read_interface_parameters(iunit,SUPPRESS_UTM_PROJECTION,interface_top_file, &
+ npx_interface,npy_interface,&
+ orig_x_interface,orig_y_interface,spacing_x_interface,spacing_y_interface)
+
+ implicit none
+
+ include "constants.h"
+
+ logical SUPPRESS_UTM_PROJECTION
+ integer iunit
+ integer npx_interface,npy_interface
+ double precision orig_x_interface,orig_y_interface
+ double precision spacing_x_interface,spacing_y_interface
+ character(len=50) interface_top_file
+ character(len=100) string_read
+
+ call read_next_line(iunit,DONT_IGNORE_JUNK,string_read)
+ read(string_read,*) SUPPRESS_UTM_PROJECTION,npx_interface,npy_interface,&
+ orig_x_interface,orig_y_interface,spacing_x_interface,spacing_y_interface
+ call read_value_string_mesh(iunit,DONT_IGNORE_JUNK,interface_top_file,'INTERFACE_TOP')
+ end subroutine read_interface_parameters
+
+!--------------------
+
+ subroutine read_material_parameters(iunit,i,rho,vp,vs,Q_flag,anisotropy_flag,domain_id)
+
+ implicit none
+
+ include "constants.h"
+
+ integer iunit
+ integer i
+ double precision rho,vp,vs,Q_flag,anisotropy_flag,domain_id
+ character(len=100) string_read
+
+ call read_next_line(iunit,DONT_IGNORE_JUNK,string_read)
+ read(string_read,*) i,rho,vp,vs,Q_flag,anisotropy_flag,domain_id
+
+ end subroutine read_material_parameters
+
+!--------------------
+
+ subroutine read_region_parameters(iunit,ix_beg_region,ix_end_region,iy_beg_region,iy_end_region,&
+ iz_beg_region,iz_end_region,imaterial_number)
+
+ implicit none
+
+ include "constants.h"
+
+ integer iunit
+ integer ix_beg_region,ix_end_region,iy_beg_region,iy_end_region
+ integer iz_beg_region,iz_end_region,imaterial_number
+ character(len=100) string_read
+
+ call read_next_line(iunit,DONT_IGNORE_JUNK,string_read)
+ read(string_read,*) ix_beg_region,ix_end_region,iy_beg_region,iy_end_region,&
+ iz_beg_region,iz_end_region,imaterial_number
+
+ end subroutine read_region_parameters
+
+!--------------------
+
+ subroutine read_next_line(iunit,suppress_junk,string_read)
+
+ implicit none
+
+ include "constants.h"
+
+
+ logical suppress_junk
+ character(len=100) string_read
+ integer index_equal_sign,ios,iunit
+
+ do
+ read(unit=iunit,fmt="(a100)",iostat=ios) string_read
+ if(ios /= 0) stop 'error while reading parameter file'
+
+! suppress leading white spaces, if any
+ string_read = adjustl(string_read)
+
+! suppress trailing carriage return (ASCII code 13) if any (e.g. if input text file coming from Windows/DOS)
+ if(index(string_read,achar(13)) > 0) string_read = string_read(1:index(string_read,achar(13))-1)
+
+! exit loop when we find the first line that is not a comment or a white line
+ if(len_trim(string_read) == 0) cycle
+ if(string_read(1:1) /= '#') exit
+
+ enddo
+
+! suppress trailing white spaces, if any
+ string_read = string_read(1:len_trim(string_read))
+
+! suppress trailing comments, if any
+ if(index(string_read,'#') > 0) string_read = string_read(1:index(string_read,'#')-1)
+
+ if(suppress_junk) then
+! suppress leading junk (up to the first equal sign, included)
+ index_equal_sign = index(string_read,'=')
+ if(index_equal_sign <= 1 .or. index_equal_sign == len_trim(string_read)) stop 'incorrect syntax detected in Mesh_Par_file'
+ string_read = string_read(index_equal_sign + 1:len_trim(string_read))
+ end if
+
+! suppress leading and trailing white spaces again, if any, after having suppressed the leading junk
+ string_read = adjustl(string_read)
+ string_read = string_read(1:len_trim(string_read))
+
+ end subroutine read_next_line
+
+!--------------------
+
+ subroutine open_parameter_file_mesh
+
+ include "constants.h"
+
+ open(unit=IIN,file=MF_IN_DATA_FILES_PATH(1:len_trim(MF_IN_DATA_FILES_PATH)) &
+ //'Mesh_Par_file',status='old',action='read')
+
+ end subroutine open_parameter_file_mesh
+
+!--------------------
+
+ subroutine close_parameter_file_mesh
+
+ include "constants.h"
+
+ close(IIN)
+
+ end subroutine close_parameter_file_mesh
+
+!--------------------
+
+ integer function err_occurred_mesh()
+
+ err_occurred_mesh = 0
+
+ end function err_occurred_mesh
+
+!--------------------
+
+! dummy subroutine to avoid warnings about variable not used in other subroutines
+ subroutine unused_string(s)
+
+ character(len=*) s
+
+ if (len(s) == 1) continue
+
+ end subroutine unused_string
+
Deleted: seismo/3D/SPECFEM3D/trunk/src/meshfem3D/read_value_parameters.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/meshfem3D/read_value_parameters.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/meshfem3D/read_value_parameters.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -1,252 +0,0 @@
-!=====================================================================
-!
-! S p e c f e m 3 D V e r s i o n 2 . 1
-! ---------------------------------------
-!
-! Main authors: Dimitri Komatitsch and Jeroen Tromp
-! Princeton University, USA and CNRS / INRIA / University of Pau
-! (c) Princeton University / California Institute of Technology and CNRS / INRIA / University of Pau
-! July 2012
-!
-! This program is free software; you can redistribute it and/or modify
-! it under the terms of the GNU General Public License as published by
-! the Free Software Foundation; either version 2 of the License, or
-! (at your option) any later version.
-!
-! This program is distributed in the hope that it will be useful,
-! but WITHOUT ANY WARRANTY; without even the implied warranty of
-! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-! GNU General Public License for more details.
-!
-! You should have received a copy of the GNU General Public License along
-! with this program; if not, write to the Free Software Foundation, Inc.,
-! 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-!
-!=====================================================================
-
-! read values from parameter file, ignoring white lines and comments
-
- subroutine read_value_integer(iunit,ignore_junk,value_to_read, name)
-
- implicit none
-
- logical ignore_junk
- integer iunit
- integer value_to_read
- character(len=*) name
- character(len=100) string_read
-
- call unused_string(name)
-
- call read_next_line(iunit,ignore_junk,string_read)
- read(string_read,*) value_to_read
-
- end subroutine read_value_integer
-
-!--------------------
-
- subroutine read_value_double_precision(iunit,ignore_junk,value_to_read, name)
-
- implicit none
-
- logical ignore_junk
- integer iunit
- double precision value_to_read
- character(len=*) name
- character(len=100) string_read
-
- call unused_string(name)
-
- call read_next_line(iunit,ignore_junk,string_read)
- read(string_read,*) value_to_read
-
- end subroutine read_value_double_precision
-
-!--------------------
-
- subroutine read_value_logical(iunit,ignore_junk,value_to_read, name)
-
- implicit none
-
- logical ignore_junk
- logical value_to_read
- integer iunit
- character(len=*) name
- character(len=100) string_read
-
- call unused_string(name)
-
- call read_next_line(iunit,ignore_junk,string_read)
- read(string_read,*) value_to_read
-
- end subroutine read_value_logical
-
-!--------------------
-
- subroutine read_value_string(iunit,ignore_junk,value_to_read, name)
-
- implicit none
-
- logical ignore_junk
- integer iunit
- character(len=*) value_to_read
- character(len=*) name
- character(len=100) string_read
-
- call unused_string(name)
-
- call read_next_line(iunit,ignore_junk,string_read)
- value_to_read = string_read
-
- end subroutine read_value_string
-
-!--------------------
-
- subroutine read_interface_parameters(iunit,SUPPRESS_UTM_PROJECTION,interface_top_file, &
- npx_interface,npy_interface,&
- orig_x_interface,orig_y_interface,spacing_x_interface,spacing_y_interface)
-
- implicit none
-
- include "constants.h"
-
- logical SUPPRESS_UTM_PROJECTION
- integer iunit
- integer npx_interface,npy_interface
- double precision orig_x_interface,orig_y_interface
- double precision spacing_x_interface,spacing_y_interface
- character(len=50) interface_top_file
- character(len=100) string_read
-
- call read_next_line(iunit,DONT_IGNORE_JUNK,string_read)
- read(string_read,*) SUPPRESS_UTM_PROJECTION,npx_interface,npy_interface,&
- orig_x_interface,orig_y_interface,spacing_x_interface,spacing_y_interface
- call read_value_string(iunit,DONT_IGNORE_JUNK,interface_top_file,'INTERFACE_TOP')
- end subroutine read_interface_parameters
-
-!--------------------
-
- subroutine read_material_parameters(iunit,i,rho,vp,vs,Q_flag,anisotropy_flag,domain_id)
-
- implicit none
-
- include "constants.h"
-
- integer iunit
- integer i
- double precision rho,vp,vs,Q_flag,anisotropy_flag,domain_id
- character(len=100) string_read
-
- call read_next_line(iunit,DONT_IGNORE_JUNK,string_read)
- read(string_read,*) i,rho,vp,vs,Q_flag,anisotropy_flag,domain_id
-
- end subroutine read_material_parameters
-
-!--------------------
-
- subroutine read_region_parameters(iunit,ix_beg_region,ix_end_region,iy_beg_region,iy_end_region,&
- iz_beg_region,iz_end_region,imaterial_number)
-
- implicit none
-
- include "constants.h"
-
- integer iunit
- integer ix_beg_region,ix_end_region,iy_beg_region,iy_end_region
- integer iz_beg_region,iz_end_region,imaterial_number
- character(len=100) string_read
-
- call read_next_line(iunit,DONT_IGNORE_JUNK,string_read)
- read(string_read,*) ix_beg_region,ix_end_region,iy_beg_region,iy_end_region,&
- iz_beg_region,iz_end_region,imaterial_number
-
- end subroutine read_region_parameters
-
-!--------------------
-
- subroutine read_next_line(iunit,suppress_junk,string_read)
-
- implicit none
-
- include "constants.h"
-
-
- logical suppress_junk
- character(len=100) string_read
- integer index_equal_sign,ios,iunit
-
- do
- read(unit=iunit,fmt="(a100)",iostat=ios) string_read
- if(ios /= 0) stop 'error while reading parameter file'
-
-! suppress leading white spaces, if any
- string_read = adjustl(string_read)
-
-! suppress trailing carriage return (ASCII code 13) if any (e.g. if input text file coming from Windows/DOS)
- if(index(string_read,achar(13)) > 0) string_read = string_read(1:index(string_read,achar(13))-1)
-
-! exit loop when we find the first line that is not a comment or a white line
- if(len_trim(string_read) == 0) cycle
- if(string_read(1:1) /= '#') exit
-
- enddo
-
-! suppress trailing white spaces, if any
- string_read = string_read(1:len_trim(string_read))
-
-! suppress trailing comments, if any
- if(index(string_read,'#') > 0) string_read = string_read(1:index(string_read,'#')-1)
-
- if(suppress_junk) then
-! suppress leading junk (up to the first equal sign, included)
- index_equal_sign = index(string_read,'=')
- if(index_equal_sign <= 1 .or. index_equal_sign == len_trim(string_read)) stop 'incorrect syntax detected in Mesh_Par_file'
- string_read = string_read(index_equal_sign + 1:len_trim(string_read))
- end if
-
-! suppress leading and trailing white spaces again, if any, after having suppressed the leading junk
- string_read = adjustl(string_read)
- string_read = string_read(1:len_trim(string_read))
-
- end subroutine read_next_line
-
-!--------------------
-
- subroutine open_parameter_file
-
- include "constants.h"
-
- open(unit=IIN,file=MF_IN_DATA_FILES_PATH(1:len_trim(MF_IN_DATA_FILES_PATH)) &
- //'Mesh_Par_file',status='old',action='read')
-
- end subroutine open_parameter_file
-
-!--------------------
-
- subroutine close_parameter_file
-
- include "constants.h"
-
- close(IIN)
-
- end subroutine close_parameter_file
-
-!--------------------
-
- integer function err_occurred()
-
- err_occurred = 0
-
- end function err_occurred
-
-!--------------------
-
-! dummy subroutine to avoid warnings about variable not used in other subroutines
- subroutine unused_string(s)
-
- character(len=*) s
-
- if (len(s) == 1) continue
-
- end subroutine unused_string
-
Modified: seismo/3D/SPECFEM3D/trunk/src/shared/combine_vol_data.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/shared/combine_vol_data.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/shared/combine_vol_data.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -89,11 +89,11 @@
! for read_parameter_files
double precision :: DT
- double precision :: HDUR_MOVIE
+ double precision :: HDUR_MOVIE,OLSEN_ATTENUATION_RATIO
integer :: NPROC,NTSTEP_BETWEEN_OUTPUT_SEISMOS,NSTEP, &
UTM_PROJECTION_ZONE,SIMULATION_TYPE,NGNOD,NGNOD2D
integer :: NSOURCES,NTSTEP_BETWEEN_READ_ADJSRC,NOISE_TOMOGRAPHY
- integer :: NTSTEP_BETWEEN_FRAMES,NTSTEP_BETWEEN_OUTPUT_INFO
+ integer :: NTSTEP_BETWEEN_FRAMES,NTSTEP_BETWEEN_OUTPUT_INFO,MOVIE_TYPE
logical :: MOVIE_SURFACE,MOVIE_VOLUME,CREATE_SHAKEMAP,SAVE_DISPLACEMENT, &
USE_HIGHRES_FOR_MOVIES,SUPPRESS_UTM_PROJECTION
logical :: ATTENUATION,USE_OLSEN_ATTENUATION, &
@@ -176,14 +176,14 @@
call read_parameter_file( NPROC,NTSTEP_BETWEEN_OUTPUT_SEISMOS,NSTEP,DT,NGNOD,NGNOD2D, &
UTM_PROJECTION_ZONE,SUPPRESS_UTM_PROJECTION, &
ATTENUATION,USE_OLSEN_ATTENUATION,LOCAL_PATH,NSOURCES, &
- OCEANS,TOPOGRAPHY,ANISOTROPY,ABSORBING_CONDITIONS, &
+ OCEANS,TOPOGRAPHY,ANISOTROPY,ABSORBING_CONDITIONS,MOVIE_TYPE, &
MOVIE_SURFACE,MOVIE_VOLUME,CREATE_SHAKEMAP,SAVE_DISPLACEMENT, &
NTSTEP_BETWEEN_FRAMES,USE_HIGHRES_FOR_MOVIES,HDUR_MOVIE, &
SAVE_MESH_FILES,PRINT_SOURCE_TIME_FUNCTION, &
NTSTEP_BETWEEN_OUTPUT_INFO,SIMULATION_TYPE,SAVE_FORWARD, &
NTSTEP_BETWEEN_READ_ADJSRC,NOISE_TOMOGRAPHY, &
USE_FORCE_POINT_SOURCE,ABSORB_INSTEAD_OF_FREE_SURFACE, &
- USE_RICKER_TIME_FUNCTION,IMODEL)
+ USE_RICKER_TIME_FUNCTION,OLSEN_ATTENUATION_RATIO,IMODEL)
print *, 'Slice list: '
print *, node_list(1:num_node)
Modified: seismo/3D/SPECFEM3D/trunk/src/shared/constants.h.in
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/shared/constants.h.in 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/shared/constants.h.in 2012-10-26 19:06:43 UTC (rev 20942)
@@ -210,13 +210,9 @@
!!
!!-----------------------------------------------------------
-! shakemaps and movies can not be generated during the same run. Mutually exclusive.
- logical, parameter :: EXTERNAL_MESH_MOVIE_SURFACE = .false.
- logical, parameter :: EXTERNAL_MESH_CREATE_SHAKEMAP = .false.
-
! plots VTK cross-section planes instead of model surface
! (EXPERIMENTAL feature)
-! (requires EXTERNAL_MESH_MOVIE_SURFACE set to true)
+! (requires MOVIE_SURFACE set to .true. in Par_file)
logical, parameter :: PLOT_CROSS_SECTIONS = .false.
real(kind=CUSTOM_REAL),parameter :: CROSS_SECTION_X = 67000.0
real(kind=CUSTOM_REAL),parameter :: CROSS_SECTION_Y = 65500.0
@@ -274,10 +270,6 @@
integer, parameter :: NGNOD_EIGHT_CORNERS = 8
integer, parameter :: NGNOD2D_FOUR_CORNERS = 4
-! this to deal with curvature (i.e. HEX27 elements)
- integer, parameter :: NGNOD_TWENTY_SEVEN_CORNERS = 27
- integer, parameter :: NGNOD2D_NINE_CORNERS = 9
-
! number of points in each AVS or OpenDX quadrangular cell for movies
integer, parameter :: NGNOD2D_FOUR_CORNERS_AVS_DX = NGNOD2D_FOUR_CORNERS
@@ -294,9 +286,6 @@
! tiny real value declared independently of the machine
real(kind=CUSTOM_REAL), parameter :: TINYVAL_SNGL = 1.e-25_CUSTOM_REAL
-! Olsen's constant for Q_mu = constant * v_s attenuation rule
- real, parameter :: OLSEN_ATTENUATION_RATIO = 0.05
-
! number of standard linear solids in parallel for attenuation
integer, parameter :: N_SLS = 3
Modified: seismo/3D/SPECFEM3D/trunk/src/shared/create_movie_shakemap_AVS_DX_GMT.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/shared/create_movie_shakemap_AVS_DX_GMT.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/shared/create_movie_shakemap_AVS_DX_GMT.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -90,7 +90,7 @@
USE_HIGHRES_FOR_MOVIES,SUPPRESS_UTM_PROJECTION
integer NTSTEP_BETWEEN_FRAMES,NTSTEP_BETWEEN_OUTPUT_INFO,NGNOD,NGNOD2D
double precision DT
- double precision HDUR_MOVIE
+ double precision HDUR_MOVIE,OLSEN_ATTENUATION_RATIO
logical ATTENUATION,USE_OLSEN_ATTENUATION, &
OCEANS,TOPOGRAPHY,USE_FORCE_POINT_SOURCE
logical ABSORBING_CONDITIONS,SAVE_FORWARD,ABSORB_INSTEAD_OF_FREE_SURFACE
@@ -98,7 +98,7 @@
character(len=256) OUTPUT_FILES,LOCAL_PATH
integer NPROC
integer ier
- integer IMODEL
+ integer MOVIE_TYPE,IMODEL
!--------------------------------------------
!!!! NL NL for external meshes
@@ -130,14 +130,14 @@
call read_parameter_file(NPROC,NTSTEP_BETWEEN_OUTPUT_SEISMOS,NSTEP,DT,NGNOD,NGNOD2D, &
UTM_PROJECTION_ZONE,SUPPRESS_UTM_PROJECTION, &
ATTENUATION,USE_OLSEN_ATTENUATION,LOCAL_PATH,NSOURCES, &
- OCEANS,TOPOGRAPHY,ANISOTROPY,ABSORBING_CONDITIONS, &
+ OCEANS,TOPOGRAPHY,ANISOTROPY,ABSORBING_CONDITIONS,MOVIE_TYPE, &
MOVIE_SURFACE,MOVIE_VOLUME,CREATE_SHAKEMAP,SAVE_DISPLACEMENT, &
NTSTEP_BETWEEN_FRAMES,USE_HIGHRES_FOR_MOVIES,HDUR_MOVIE, &
SAVE_MESH_FILES,PRINT_SOURCE_TIME_FUNCTION, &
NTSTEP_BETWEEN_OUTPUT_INFO,SIMULATION_TYPE,SAVE_FORWARD, &
NTSTEP_BETWEEN_READ_ADJSRC,NOISE_TOMOGRAPHY, &
USE_FORCE_POINT_SOURCE,ABSORB_INSTEAD_OF_FREE_SURFACE, &
- USE_RICKER_TIME_FUNCTION,IMODEL)
+ USE_RICKER_TIME_FUNCTION,OLSEN_ATTENUATION_RATIO,IMODEL)
! get the base pathname for output files
call get_value_string(OUTPUT_FILES, 'OUTPUT_FILES', OUTPUT_FILES_PATH(1:len_trim(OUTPUT_FILES_PATH)))
Modified: seismo/3D/SPECFEM3D/trunk/src/shared/get_attenuation_model.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/shared/get_attenuation_model.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/shared/get_attenuation_model.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -25,7 +25,7 @@
!=====================================================================
- subroutine get_attenuation_model_olsen( vs_val, Q_mu )
+ subroutine get_attenuation_model_olsen(vs_val,Q_mu,OLSEN_ATTENUATION_RATIO)
! uses scaling rule similar to Olsen et al. (2003) to determine attenuation medium
!
@@ -42,6 +42,7 @@
real(kind=CUSTOM_REAL) :: vs_val
double precision :: Q_mu
+ double precision :: OLSEN_ATTENUATION_RATIO
!local parameters
integer :: int_Q_mu
@@ -111,9 +112,9 @@
!-------------------------------------------------------------------------------------------------
!
- subroutine get_attenuation_model(myrank,nspec,USE_OLSEN_ATTENUATION, &
- mustore,rho_vs,qmu_attenuation_store, &
- ispec_is_elastic,min_resolved_period,prname)
+ subroutine get_attenuation_model(myrank,nspec,USE_OLSEN_ATTENUATION,OLSEN_ATTENUATION_RATIO, &
+ mustore,rho_vs,qmu_attenuation_store, &
+ ispec_is_elastic,min_resolved_period,prname)
! precalculates attenuation arrays and stores arrays into files
@@ -121,6 +122,7 @@
include "constants.h"
+ double precision :: OLSEN_ATTENUATION_RATIO
integer :: myrank,nspec
logical :: USE_OLSEN_ATTENUATION
@@ -203,7 +205,7 @@
if(USE_OLSEN_ATTENUATION) then
! use scaling rule similar to Olsen et al. (2003)
vs_val = mustore(i,j,k,ispec) / rho_vs(i,j,k,ispec)
- call get_attenuation_model_olsen( vs_val, Q_mu )
+ call get_attenuation_model_olsen(vs_val,Q_mu,OLSEN_ATTENUATION_RATIO)
else
! takes Q set in (CUBIT) mesh
Q_mu = qmu_attenuation_store(i,j,k,ispec)
Modified: seismo/3D/SPECFEM3D/trunk/src/shared/get_jacobian_boundaries.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/shared/get_jacobian_boundaries.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/shared/get_jacobian_boundaries.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -62,7 +62,7 @@
double precision xelm(NGNOD2D),yelm(NGNOD2D),zelm(NGNOD2D)
! check that the parameter file is correct
- if(NGNOD2D /= NGNOD2D_FOUR_CORNERS .and. NGNOD2D /= NGNOD2D_NINE_CORNERS) &
+ if(NGNOD2D /= 4 .and. NGNOD2D /= 9) &
call exit_MPI(myrank,'surface elements should have 4 or 9 control nodes')
select case ( iface )
@@ -81,7 +81,7 @@
yelm(4)=ystore_dummy( ibool(1,1,NGLLZ,ispec) )
zelm(4)=zstore_dummy( ibool(1,1,NGLLZ,ispec) )
- if(NGNOD2D == NGNOD2D_NINE_CORNERS) then
+ if(NGNOD2D == 9) then
xelm(5)=xstore_dummy( ibool(1,(NGLLY+1)/2,1,ispec) )
yelm(5)=ystore_dummy( ibool(1,(NGLLY+1)/2,1,ispec) )
zelm(5)=zstore_dummy( ibool(1,(NGLLY+1)/2,1,ispec) )
@@ -118,7 +118,7 @@
yelm(4)=ystore_dummy( ibool(NGLLX,1,NGLLZ,ispec) )
zelm(4)=zstore_dummy( ibool(NGLLX,1,NGLLZ,ispec) )
- if(NGNOD2D == NGNOD2D_NINE_CORNERS) then
+ if(NGNOD2D == 9) then
xelm(5)=xstore_dummy( ibool(NGLLX,(NGLLY+1)/2,1,ispec) )
yelm(5)=ystore_dummy( ibool(NGLLX,(NGLLY+1)/2,1,ispec) )
zelm(5)=zstore_dummy( ibool(NGLLX,(NGLLY+1)/2,1,ispec) )
@@ -155,7 +155,7 @@
yelm(4)=ystore_dummy( ibool(1,1,NGLLZ,ispec) )
zelm(4)=zstore_dummy( ibool(1,1,NGLLZ,ispec) )
- if(NGNOD2D == NGNOD2D_NINE_CORNERS) then
+ if(NGNOD2D == 9) then
xelm(5)=xstore_dummy( ibool((NGLLX+1)/2,1,1,ispec) )
yelm(5)=ystore_dummy( ibool((NGLLX+1)/2,1,1,ispec) )
zelm(5)=zstore_dummy( ibool((NGLLX+1)/2,1,1,ispec) )
@@ -192,7 +192,7 @@
yelm(4)=ystore_dummy( ibool(1,NGLLY,NGLLZ,ispec) )
zelm(4)=zstore_dummy( ibool(1,NGLLY,NGLLZ,ispec) )
- if(NGNOD2D == NGNOD2D_NINE_CORNERS) then
+ if(NGNOD2D == 9) then
xelm(5)=xstore_dummy( ibool((NGLLX+1)/2,NGLLY,1,ispec) )
yelm(5)=ystore_dummy( ibool((NGLLX+1)/2,NGLLY,1,ispec) )
zelm(5)=zstore_dummy( ibool((NGLLX+1)/2,NGLLY,1,ispec) )
@@ -230,7 +230,7 @@
yelm(4)=ystore_dummy( ibool(1,NGLLY,1,ispec) )
zelm(4)=zstore_dummy( ibool(1,NGLLY,1,ispec) )
- if(NGNOD2D == NGNOD2D_NINE_CORNERS) then
+ if(NGNOD2D == 9) then
xelm(5)=xstore_dummy( ibool((NGLLX+1)/2,1,1,ispec) )
yelm(5)=ystore_dummy( ibool((NGLLX+1)/2,1,1,ispec) )
zelm(5)=zstore_dummy( ibool((NGLLX+1)/2,1,1,ispec) )
@@ -267,7 +267,7 @@
yelm(4)=ystore_dummy( ibool(1,NGLLY,NGLLZ,ispec) )
zelm(4)=zstore_dummy( ibool(1,NGLLY,NGLLZ,ispec) )
- if(NGNOD2D == NGNOD2D_NINE_CORNERS) then
+ if(NGNOD2D == 9) then
xelm(5)=xstore_dummy( ibool((NGLLX+1)/2,1,NGLLZ,ispec) )
yelm(5)=ystore_dummy( ibool((NGLLX+1)/2,1,NGLLZ,ispec) )
zelm(5)=zstore_dummy( ibool((NGLLX+1)/2,1,NGLLZ,ispec) )
Modified: seismo/3D/SPECFEM3D/trunk/src/shared/get_shape2D.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/shared/get_shape2D.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/shared/get_shape2D.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -51,12 +51,12 @@
double precision sumshape,sumdershapexi,sumdershapeeta
! check that the parameter file is correct
- if(NGNOD /= NGNOD_EIGHT_CORNERS .and. NGNOD /= NGNOD_TWENTY_SEVEN_CORNERS) &
+ if(NGNOD /= 8 .and. NGNOD /= 27) &
call exit_MPI(myrank,'volume elements should have 8 or 27 control nodes')
- if(NGNOD2D /= NGNOD2D_FOUR_CORNERS .and. NGNOD2D /= NGNOD2D_NINE_CORNERS) &
+ if(NGNOD2D /= 4 .and. NGNOD2D /= 9) &
call exit_MPI(myrank,'surface elements should have 4 or 9 control nodes')
- if(NGNOD2D == NGNOD2D_FOUR_CORNERS) then
+ if(NGNOD2D == 4) then
! generate the 2D shape functions and their derivatives (4 nodes)
do i=1,NGLLA
@@ -161,7 +161,7 @@
double precision l1pxi,l2pxi,l3pxi,l1peta,l2peta,l3peta
! check that the parameter file is correct
- if( NGNOD2D /= NGNOD2D_NINE_CORNERS) stop 'surface elements should have 9 control nodes'
+ if( NGNOD2D /= 9 ) stop 'surface elements should have 9 control nodes'
! generate the 2D shape functions and their derivatives (9 nodes)
do i=1,NGLLA
Modified: seismo/3D/SPECFEM3D/trunk/src/shared/get_shape3D.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/shared/get_shape3D.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/shared/get_shape3D.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -55,7 +55,7 @@
double precision, parameter :: ONE_EIGHTH = 0.125d0
! check that the parameter file is correct
- if(NGNOD /= NGNOD_EIGHT_CORNERS .and. NGNOD /= NGNOD_TWENTY_SEVEN_CORNERS) &
+ if(NGNOD /= 8 .and. NGNOD /= 27) &
call exit_MPI(myrank,'volume elements should have 8 or 27 control nodes')
! ***
@@ -71,7 +71,7 @@
gamma = zigll(k)
!--- case of a 3D 8-node element (Dhatt-Touzot p. 115)
- if(NGNOD == NGNOD_EIGHT_CORNERS) then
+ if(NGNOD == 8) then
ra1 = one + xi
ra2 = one - xi
@@ -189,13 +189,13 @@
integer :: ia
! check that the parameter file is correct
- if(NGNOD /= NGNOD_EIGHT_CORNERS .and. NGNOD /= NGNOD_TWENTY_SEVEN_CORNERS) &
+ if(NGNOD /= 8 .and. NGNOD /= 27) &
call exit_MPI(myrank,'volume elements should have 8 or 27 control nodes')
! shape functions
!--- case of a 3D 8-node element (Dhatt-Touzot p. 115)
- if(NGNOD == NGNOD_EIGHT_CORNERS) then
+ if(NGNOD == 8) then
ra1 = one + xi
ra2 = one - xi
Modified: seismo/3D/SPECFEM3D/trunk/src/shared/hex_nodes.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/shared/hex_nodes.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/shared/hex_nodes.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -36,7 +36,7 @@
! define the topology of the hexahedral elements
! check that the parameter file is correct
- if(NGNOD /= NGNOD_EIGHT_CORNERS .and. NGNOD /= NGNOD_TWENTY_SEVEN_CORNERS) &
+ if(NGNOD /= 8 .and. NGNOD /= 27) &
stop 'volume elements should have 8 or 27 control nodes'
! corner nodes
@@ -72,7 +72,7 @@
iaddy(8)=2
iaddz(8)=2
- if(NGNOD == NGNOD_TWENTY_SEVEN_CORNERS) then
+ if(NGNOD == 27) then
! note: put further initialization into subroutine to avoid compilation errors
! in case NGNOD == 8
Modified: seismo/3D/SPECFEM3D/trunk/src/shared/read_parameter_file.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/shared/read_parameter_file.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/shared/read_parameter_file.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -27,13 +27,13 @@
subroutine read_parameter_file( NPROC,NTSTEP_BETWEEN_OUTPUT_SEISMOS,NSTEP,DT,NGNOD,NGNOD2D, &
UTM_PROJECTION_ZONE,SUPPRESS_UTM_PROJECTION, &
ATTENUATION,USE_OLSEN_ATTENUATION,LOCAL_PATH,NSOURCES, &
- OCEANS,TOPOGRAPHY,ANISOTROPY,ABSORBING_CONDITIONS, &
+ OCEANS,TOPOGRAPHY,ANISOTROPY,ABSORBING_CONDITIONS,MOVIE_TYPE, &
MOVIE_SURFACE,MOVIE_VOLUME,CREATE_SHAKEMAP,SAVE_DISPLACEMENT, &
NTSTEP_BETWEEN_FRAMES,USE_HIGHRES_FOR_MOVIES,HDUR_MOVIE, &
SAVE_MESH_FILES,PRINT_SOURCE_TIME_FUNCTION,NTSTEP_BETWEEN_OUTPUT_INFO, &
SIMULATION_TYPE,SAVE_FORWARD,NTSTEP_BETWEEN_READ_ADJSRC,NOISE_TOMOGRAPHY, &
USE_FORCE_POINT_SOURCE,ABSORB_INSTEAD_OF_FREE_SURFACE, &
- USE_RICKER_TIME_FUNCTION,IMODEL)
+ USE_RICKER_TIME_FUNCTION,OLSEN_ATTENUATION_RATIO,IMODEL)
implicit none
@@ -41,10 +41,10 @@
integer NPROC,NTSTEP_BETWEEN_OUTPUT_SEISMOS,NSTEP,SIMULATION_TYPE, NTSTEP_BETWEEN_READ_ADJSRC
integer NSOURCES,NTSTEP_BETWEEN_FRAMES,NTSTEP_BETWEEN_OUTPUT_INFO,UTM_PROJECTION_ZONE
- integer NOISE_TOMOGRAPHY,NGNOD,NGNOD2D
+ integer NOISE_TOMOGRAPHY,NGNOD,NGNOD2D,MOVIE_TYPE
integer IMODEL
- double precision DT,HDUR_MOVIE
+ double precision DT,HDUR_MOVIE,OLSEN_ATTENUATION_RATIO
logical ATTENUATION,USE_OLSEN_ATTENUATION,OCEANS,TOPOGRAPHY,ABSORBING_CONDITIONS,SAVE_FORWARD
logical MOVIE_SURFACE,MOVIE_VOLUME,CREATE_SHAKEMAP,SAVE_DISPLACEMENT,USE_HIGHRES_FOR_MOVIES
@@ -122,18 +122,22 @@
if(err_occurred() /= 0) return
call read_value_logical(ABSORB_INSTEAD_OF_FREE_SURFACE, 'model.ABSORB_INSTEAD_OF_FREE_SURFACE')
if(err_occurred() /= 0) return
+ call read_value_double_precision(OLSEN_ATTENUATION_RATIO, 'model.OLSEN_ATTENUATION_RATIO')
+ if(err_occurred() /= 0) return
+ call read_value_integer(MOVIE_TYPE, 'solver.MOVIE_TYPE')
+ if(err_occurred() /= 0) return
+ call read_value_logical(CREATE_SHAKEMAP, 'solver.CREATE_SHAKEMAP')
+ if(err_occurred() /= 0) return
call read_value_logical(MOVIE_SURFACE, 'solver.MOVIE_SURFACE')
if(err_occurred() /= 0) return
call read_value_logical(MOVIE_VOLUME, 'solver.MOVIE_VOLUME')
if(err_occurred() /= 0) return
- call read_value_integer(NTSTEP_BETWEEN_FRAMES, 'solver.NTSTEP_BETWEEN_FRAMES')
- if(err_occurred() /= 0) return
- call read_value_logical(CREATE_SHAKEMAP, 'solver.CREATE_SHAKEMAP')
- if(err_occurred() /= 0) return
call read_value_logical(SAVE_DISPLACEMENT, 'solver.SAVE_DISPLACEMENT')
if(err_occurred() /= 0) return
call read_value_logical(USE_HIGHRES_FOR_MOVIES, 'solver.USE_HIGHRES_FOR_MOVIES')
if(err_occurred() /= 0) return
+ call read_value_integer(NTSTEP_BETWEEN_FRAMES, 'solver.NTSTEP_BETWEEN_FRAMES')
+ if(err_occurred() /= 0) return
call read_value_double_precision(HDUR_MOVIE, 'solver.HDUR_MOVIE')
if(err_occurred() /= 0) return
call read_value_logical(SAVE_MESH_FILES, 'mesher.SAVE_MESH_FILES')
@@ -158,14 +162,19 @@
! checks number of nodes for 2D and 3D shape functions for quadrilaterals and hexahedra
! curvature (i.e. HEX27 elements) is not handled by our internal mesher, for that use Gmsh (CUBIT does not handle it either)
- if ( NGNOD == NGNOD_EIGHT_CORNERS ) then
- NGNOD2D = NGNOD2D_FOUR_CORNERS
- else if ( NGNOD == NGNOD_TWENTY_SEVEN_CORNERS ) then
- NGNOD2D = NGNOD2D_NINE_CORNERS
- else if ( NGNOD /= NGNOD_EIGHT_CORNERS .and. NGNOD /= NGNOD_TWENTY_SEVEN_CORNERS ) then
- stop 'elements should have 8 or 27 control nodes, please modify Par_file and recompile solver'
+ if ( NGNOD == 8 ) then
+ NGNOD2D = 4
+ else if ( NGNOD == 27 ) then
+ NGNOD2D = 9
+ else if ( NGNOD /= 8 .and. NGNOD /= 27 ) then
+ stop 'elements should have 8 or 27 control nodes, please modify NGNOD in Par_file'
endif
+ ! checks the MOVIE_TYPE parameter
+ if ( MOVIE_TYPE /= 1 .and. MOVIE_TYPE /= 2 ) then
+ stop 'error: MOVIE_TYPE must be either 1 or 2'
+ endif
+
! noise simulations:
! double the number of time steps, if running noise simulations (+/- branches)
if ( NOISE_TOMOGRAPHY /= 0 ) NSTEP = 2*NSTEP-1
@@ -183,16 +192,9 @@
! for noise simulations, we need to save movies at the surface (where the noise is generated)
! and thus we force MOVIE_SURFACE to be .true., in order to use variables defined for surface movies later
if ( NOISE_TOMOGRAPHY /= 0 ) then
+ MOVIE_TYPE = 1
MOVIE_SURFACE = .true.
- CREATE_SHAKEMAP = .false. ! CREATE_SHAKEMAP and MOVIE_SURFACE cannot be both .true.
USE_HIGHRES_FOR_MOVIES = .true. ! we need to save surface movie everywhere, i.e. at all GLL points on the surface
- ! since there are several flags involving surface movies, check compatability
- if ( EXTERNAL_MESH_MOVIE_SURFACE .or. EXTERNAL_MESH_CREATE_SHAKEMAP ) then
- print*, 'error: when running noise simulations ( NOISE_TOMOGRAPHY /= 0 ),'
- print*, ' we can NOT use EXTERNAL_MESH_MOVIE_SURFACE or EXTERNAL_MESH_CREATE_SHAKEMAP'
- print*, ' change EXTERNAL_MESH_MOVIE_SURFACE & EXTERNAL_MESH_CREATE_SHAKEMAP in constant.h'
- stop 'incompatible NOISE_TOMOGRAPHY, EXTERNAL_MESH_MOVIE_SURFACE, EXTERNAL_MESH_CREATE_SHAKEMAP'
- endif
endif
if (USE_FORCE_POINT_SOURCE) then
Modified: seismo/3D/SPECFEM3D/trunk/src/shared/read_value_parameters.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/shared/read_value_parameters.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/shared/read_value_parameters.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -25,7 +25,6 @@
!=====================================================================
! read values from parameter file, ignoring white lines and comments
-
subroutine read_value_integer(value_to_read, name)
implicit none
@@ -288,3 +287,4 @@
!
! end subroutine unused_string
!
+
Modified: seismo/3D/SPECFEM3D/trunk/src/shared/recompute_jacobian.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/shared/recompute_jacobian.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/shared/recompute_jacobian.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -58,9 +58,9 @@
! recompute jacobian for any (xi,eta,gamma) point, not necessarily a GLL point
! check that the parameter file is correct
- if(NGNOD /= NGNOD_EIGHT_CORNERS .and. NGNOD /= NGNOD_TWENTY_SEVEN_CORNERS) &
+ if(NGNOD /= 8 .and. NGNOD /= 27) &
stop 'elements should have 8 or 27 control nodes'
- if(NGNOD == NGNOD_EIGHT_CORNERS) then
+ if(NGNOD == 8) then
! ***
! *** create the 3D shape functions and the Jacobian for an 8-node element
Modified: seismo/3D/SPECFEM3D/trunk/src/shared/smooth_vol_data.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/shared/smooth_vol_data.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/shared/smooth_vol_data.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -97,7 +97,7 @@
! for read_parameter_files
double precision :: DT
- double precision :: HDUR_MOVIE
+ double precision :: HDUR_MOVIE,OLSEN_ATTENUATION_RATIO
integer :: NPROC,NTSTEP_BETWEEN_OUTPUT_SEISMOS,NSTEP, &
UTM_PROJECTION_ZONE,SIMULATION_TYPE,NGNOD,NGNOD2D
integer :: NSOURCES,NTSTEP_BETWEEN_READ_ADJSRC,NOISE_TOMOGRAPHY
@@ -109,7 +109,7 @@
logical :: ABSORBING_CONDITIONS,SAVE_FORWARD,ABSORB_INSTEAD_OF_FREE_SURFACE
logical :: ANISOTROPY,SAVE_MESH_FILES,USE_RICKER_TIME_FUNCTION,PRINT_SOURCE_TIME_FUNCTION
character(len=256) LOCAL_PATH
- integer :: IMODEL
+ integer :: MOVIE_TYPE,IMODEL
! smoothing parameters
character(len=256) :: ks_file
@@ -214,14 +214,14 @@
call read_parameter_file( NPROC,NTSTEP_BETWEEN_OUTPUT_SEISMOS,NSTEP,DT,NGNOD,NGNOD2D, &
UTM_PROJECTION_ZONE,SUPPRESS_UTM_PROJECTION, &
ATTENUATION,USE_OLSEN_ATTENUATION,LOCAL_PATH,NSOURCES, &
- OCEANS,TOPOGRAPHY,ANISOTROPY,ABSORBING_CONDITIONS, &
+ OCEANS,TOPOGRAPHY,ANISOTROPY,ABSORBING_CONDITIONS,MOVIE_TYPE, &
MOVIE_SURFACE,MOVIE_VOLUME,CREATE_SHAKEMAP,SAVE_DISPLACEMENT, &
NTSTEP_BETWEEN_FRAMES,USE_HIGHRES_FOR_MOVIES,HDUR_MOVIE, &
SAVE_MESH_FILES,PRINT_SOURCE_TIME_FUNCTION, &
NTSTEP_BETWEEN_OUTPUT_INFO,SIMULATION_TYPE,SAVE_FORWARD, &
NTSTEP_BETWEEN_READ_ADJSRC,NOISE_TOMOGRAPHY, &
USE_FORCE_POINT_SOURCE,ABSORB_INSTEAD_OF_FREE_SURFACE, &
- USE_RICKER_TIME_FUNCTION,IMODEL)
+ USE_RICKER_TIME_FUNCTION,OLSEN_ATTENUATION_RATIO,IMODEL)
! checks if number of MPI process as specified
if (sizeprocs /= NPROC) then
Modified: seismo/3D/SPECFEM3D/trunk/src/shared/sum_kernels.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/shared/sum_kernels.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/shared/sum_kernels.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -103,12 +103,12 @@
! for read_parameter_files
double precision :: DT
- double precision :: HDUR_MOVIE
+ double precision :: HDUR_MOVIE,OLSEN_ATTENUATION_RATIO
integer :: NPROC,NTSTEP_BETWEEN_OUTPUT_SEISMOS,NSTEP, &
UTM_PROJECTION_ZONE,SIMULATION_TYPE,NGNOD,NGNOD2D
integer :: NSOURCES,NTSTEP_BETWEEN_READ_ADJSRC,NOISE_TOMOGRAPHY
integer :: NTSTEP_BETWEEN_FRAMES,NTSTEP_BETWEEN_OUTPUT_INFO
- integer :: IMODEL
+ integer :: MOVIE_TYPE,IMODEL
logical :: MOVIE_SURFACE,MOVIE_VOLUME,CREATE_SHAKEMAP,SAVE_DISPLACEMENT, &
USE_HIGHRES_FOR_MOVIES,SUPPRESS_UTM_PROJECTION
logical :: ATTENUATION,USE_OLSEN_ATTENUATION, &
@@ -153,14 +153,14 @@
call read_parameter_file( NPROC,NTSTEP_BETWEEN_OUTPUT_SEISMOS,NSTEP,DT,NGNOD,NGNOD2D, &
UTM_PROJECTION_ZONE,SUPPRESS_UTM_PROJECTION, &
ATTENUATION,USE_OLSEN_ATTENUATION,LOCAL_PATH,NSOURCES, &
- OCEANS,TOPOGRAPHY,ANISOTROPY,ABSORBING_CONDITIONS, &
+ OCEANS,TOPOGRAPHY,ANISOTROPY,ABSORBING_CONDITIONS,MOVIE_TYPE, &
MOVIE_SURFACE,MOVIE_VOLUME,CREATE_SHAKEMAP,SAVE_DISPLACEMENT, &
NTSTEP_BETWEEN_FRAMES,USE_HIGHRES_FOR_MOVIES,HDUR_MOVIE, &
SAVE_MESH_FILES,PRINT_SOURCE_TIME_FUNCTION, &
NTSTEP_BETWEEN_OUTPUT_INFO,SIMULATION_TYPE,SAVE_FORWARD, &
NTSTEP_BETWEEN_READ_ADJSRC,NOISE_TOMOGRAPHY, &
USE_FORCE_POINT_SOURCE,ABSORB_INSTEAD_OF_FREE_SURFACE, &
- USE_RICKER_TIME_FUNCTION,IMODEL)
+ USE_RICKER_TIME_FUNCTION,OLSEN_ATTENUATION_RATIO,IMODEL)
! checks if number of MPI process as specified
if (sizeprocs /= NPROC) then
Modified: seismo/3D/SPECFEM3D/trunk/src/specfem3D/detect_mesh_surfaces.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/specfem3D/detect_mesh_surfaces.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/specfem3D/detect_mesh_surfaces.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -41,8 +41,7 @@
if( ier /= 0 ) stop 'error allocating array for mesh surface'
! determines model surface
- if (.not. RECVS_CAN_BE_BURIED_EXT_MESH .or. &
- EXTERNAL_MESH_MOVIE_SURFACE .or. EXTERNAL_MESH_CREATE_SHAKEMAP) then
+ if (.not. RECVS_CAN_BE_BURIED_EXT_MESH .or. MOVIE_TYPE == 2) then
! returns surface points/elements
! in ispec_is_surface_external_mesh / iglob_is_surface_external_mesh and
@@ -59,8 +58,7 @@
endif
! takes cross-section surfaces instead
- if( (EXTERNAL_MESH_MOVIE_SURFACE .or. EXTERNAL_MESH_CREATE_SHAKEMAP) &
- .and. PLOT_CROSS_SECTIONS ) then
+ if( MOVIE_TYPE == 2 .and. PLOT_CROSS_SECTIONS ) then
call detect_surface_cross_section(NPROC,NGLOB_AB,NSPEC_AB,ibool,&
ispec_is_surface_external_mesh, &
iglob_is_surface_external_mesh, &
@@ -89,10 +87,7 @@
endif
! handles movies and shakemaps
- if( EXTERNAL_MESH_MOVIE_SURFACE .or. &
- EXTERNAL_MESH_CREATE_SHAKEMAP .or. &
- MOVIE_SURFACE .or. &
- CREATE_SHAKEMAP ) then
+ if( MOVIE_SURFACE .or. CREATE_SHAKEMAP ) then
call setup_movie_meshes()
endif
Modified: seismo/3D/SPECFEM3D/trunk/src/specfem3D/initialize_simulation.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/specfem3D/initialize_simulation.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/specfem3D/initialize_simulation.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -41,14 +41,14 @@
call read_parameter_file( NPROC,NTSTEP_BETWEEN_OUTPUT_SEISMOS,NSTEP,DT,NGNOD,NGNOD2D, &
UTM_PROJECTION_ZONE,SUPPRESS_UTM_PROJECTION, &
ATTENUATION,USE_OLSEN_ATTENUATION,LOCAL_PATH,NSOURCES, &
- OCEANS,TOPOGRAPHY,ANISOTROPY,ABSORBING_CONDITIONS, &
+ OCEANS,TOPOGRAPHY,ANISOTROPY,ABSORBING_CONDITIONS,MOVIE_TYPE, &
MOVIE_SURFACE,MOVIE_VOLUME,CREATE_SHAKEMAP,SAVE_DISPLACEMENT, &
NTSTEP_BETWEEN_FRAMES,USE_HIGHRES_FOR_MOVIES,HDUR_MOVIE, &
SAVE_MESH_FILES,PRINT_SOURCE_TIME_FUNCTION, &
NTSTEP_BETWEEN_OUTPUT_INFO,SIMULATION_TYPE,SAVE_FORWARD, &
NTSTEP_BETWEEN_READ_ADJSRC,NOISE_TOMOGRAPHY, &
USE_FORCE_POINT_SOURCE,ABSORB_INSTEAD_OF_FREE_SURFACE, &
- USE_RICKER_TIME_FUNCTION,IMODEL)
+ USE_RICKER_TIME_FUNCTION,OLSEN_ATTENUATION_RATIO,IMODEL)
! GPU_MODE is in par_file
call read_gpu_mode(GPU_MODE,GRAVITY)
@@ -290,16 +290,6 @@
endif
endif
- ! exclusive movie flags
- if( EXTERNAL_MESH_MOVIE_SURFACE .or. EXTERNAL_MESH_CREATE_SHAKEMAP ) then
- if( EXTERNAL_MESH_MOVIE_SURFACE .and. EXTERNAL_MESH_CREATE_SHAKEMAP ) &
- stop 'EXTERNAL_MESH_MOVIE_SURFACE and EXTERNAL_MESH_MOVIE_SURFACE cannot be both true'
- if( MOVIE_SURFACE ) &
- stop 'MOVIE_SURFACE cannot be used when EXTERNAL_MESH_MOVIE_SURFACE or EXTERNAL_MESH_CREATE_SHAKEMAP is true'
- if( CREATE_SHAKEMAP ) &
- stop 'CREATE_SHAKEMAP cannot be used when EXTERNAL_MESH_MOVIE_SURFACE or EXTERNAL_MESH_CREATE_SHAKEMAP is true'
- endif
-
! checks directories
if( myrank == 0 ) then
! tests if OUTPUT_FILES directory exists
Modified: seismo/3D/SPECFEM3D/trunk/src/specfem3D/model_update.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/specfem3D/model_update.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/specfem3D/model_update.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -955,7 +955,7 @@
endif
if( ATTENUATION ) then
- call get_attenuation_model(myrank,NSPEC,USE_OLSEN_ATTENUATION, &
+ call get_attenuation_model(myrank,NSPEC,USE_OLSEN_ATTENUATION,OLSEN_ATTENUATION_RATIO, &
mustore_new,rho_vs_new,qmu_attenuation_store, &
ispec_is_elastic,min_resolved_period,prname_new)
endif
Modified: seismo/3D/SPECFEM3D/trunk/src/specfem3D/prepare_timerun.F90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/specfem3D/prepare_timerun.F90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/specfem3D/prepare_timerun.F90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -131,8 +131,7 @@
implicit none
! flag for any movie simulation
- if( EXTERNAL_MESH_MOVIE_SURFACE .or. EXTERNAL_MESH_CREATE_SHAKEMAP .or. &
- MOVIE_SURFACE .or. CREATE_SHAKEMAP .or. MOVIE_VOLUME .or. PNM_GIF_IMAGE ) then
+ if( MOVIE_SURFACE .or. CREATE_SHAKEMAP .or. MOVIE_VOLUME .or. PNM_GIF_IMAGE ) then
MOVIE_SIMULATION = .true.
else
MOVIE_SIMULATION = .false.
Modified: seismo/3D/SPECFEM3D/trunk/src/specfem3D/setup_movie_meshes.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/specfem3D/setup_movie_meshes.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/specfem3D/setup_movie_meshes.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -127,7 +127,7 @@
endif
! stores global indices of GLL points on the surface to array faces_surface_ext_mesh
- if( EXTERNAL_MESH_MOVIE_SURFACE .or. EXTERNAL_MESH_CREATE_SHAKEMAP ) then
+ if( MOVIE_TYPE == 2 ) then
allocate( faces_surface_ext_mesh_ispec(nfaces_surface_ext_mesh),stat=ier)
if( ier /= 0 ) stop 'error allocating array faces_surface_ext_mesh_ispec'
@@ -266,7 +266,7 @@
print*,'error number of movie faces: ',nfaces_surface_ext_mesh,nfaces_org
call exit_mpi(myrank,'error number of faces')
endif
- endif
+ endif ! MOVIE_TYPE == 2
! user output
if (myrank == 0) then
Modified: seismo/3D/SPECFEM3D/trunk/src/specfem3D/specfem3D_par.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/specfem3D/specfem3D_par.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/specfem3D/specfem3D_par.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -166,7 +166,7 @@
integer :: NTSTEP_BETWEEN_OUTPUT_SEISMOS,NSTEP,UTM_PROJECTION_ZONE
integer :: IMODEL,NGNOD,NGNOD2D
- double precision :: DT
+ double precision :: DT,OLSEN_ATTENUATION_RATIO
logical :: ATTENUATION,USE_OLSEN_ATTENUATION, &
OCEANS,TOPOGRAPHY,ABSORBING_CONDITIONS,ANISOTROPY, &
@@ -573,10 +573,9 @@
! movie parameters
double precision :: HDUR_MOVIE
- integer :: NTSTEP_BETWEEN_FRAMES
+ integer :: NTSTEP_BETWEEN_FRAMES,MOVIE_TYPE
logical :: MOVIE_SURFACE,MOVIE_VOLUME,CREATE_SHAKEMAP,SAVE_DISPLACEMENT, &
USE_HIGHRES_FOR_MOVIES
-
logical :: MOVIE_SIMULATION
end module specfem_par_movie
Modified: seismo/3D/SPECFEM3D/trunk/src/specfem3D/write_movie_output.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/specfem3D/write_movie_output.f90 2012-10-26 17:24:29 UTC (rev 20941)
+++ seismo/3D/SPECFEM3D/trunk/src/specfem3D/write_movie_output.f90 2012-10-26 19:06:43 UTC (rev 20942)
@@ -37,52 +37,49 @@
! gets resulting array values onto CPU
if(GPU_MODE .and. &
( &
- EXTERNAL_MESH_CREATE_SHAKEMAP .or. &
CREATE_SHAKEMAP .or. &
( MOVIE_SURFACE .and. mod(it,NTSTEP_BETWEEN_FRAMES) == 0) .or. &
( MOVIE_VOLUME .and. mod(it,NTSTEP_BETWEEN_FRAMES) == 0) .or. &
( PNM_GIF_IMAGE .and. mod(it,NTSTEP_BETWEEN_FRAMES) == 0) &
) ) then
! acoustic domains
- if( ACOUSTIC_SIMULATION ) then
+ if ( ACOUSTIC_SIMULATION ) then
! transfers whole fields
call transfer_fields_ac_from_device(NGLOB_AB,potential_acoustic, &
potential_dot_acoustic,potential_dot_dot_acoustic,Mesh_pointer)
endif
! elastic domains
- if( ELASTIC_SIMULATION ) then
+ if ( ELASTIC_SIMULATION ) then
! transfers whole fields
call transfer_fields_el_from_device(NDIM*NGLOB_AB,displ,veloc, accel, Mesh_pointer)
endif
endif
- ! shakemap creation
- if (EXTERNAL_MESH_CREATE_SHAKEMAP) then
- call wmo_create_shakemap_em()
- endif
-
- ! movie file creation
- if(EXTERNAL_MESH_MOVIE_SURFACE .and. mod(it,NTSTEP_BETWEEN_FRAMES) == 0) then
- call wmo_create_movie_surface_em()
- endif
-
! saves MOVIE on the SURFACE
- if(MOVIE_SURFACE .and. mod(it,NTSTEP_BETWEEN_FRAMES) == 0) then
- call wmo_movie_surface_output_o()
+ if (MOVIE_SURFACE .and. mod(it,NTSTEP_BETWEEN_FRAMES) == 0) then
+ if (MOVIE_TYPE == 1) then
+ call wmo_movie_surface_output_o()
+ else if (MOVIE_TYPE == 2) then
+ call wmo_create_movie_surface_em()
+ endif
endif
! computes SHAKING INTENSITY MAP
- if(CREATE_SHAKEMAP) then
- call wmo_create_shakemap_o()
+ if (CREATE_SHAKEMAP) then
+ if (MOVIE_TYPE == 1) then
+ call wmo_create_shakemap_o()
+ else if (MOVIE_TYPE == 2) then
+ call wmo_create_shakemap_em()
+ endif
endif
! saves MOVIE in full 3D MESH
- if(MOVIE_VOLUME .and. mod(it,NTSTEP_BETWEEN_FRAMES) == 0) then
+ if (MOVIE_VOLUME .and. mod(it,NTSTEP_BETWEEN_FRAMES) == 0) then
call wmo_movie_volume_output()
endif
! creates cross-section GIF image
- if(PNM_GIF_IMAGE .and. mod(it,NTSTEP_BETWEEN_FRAMES) == 0 ) then
+ if (PNM_GIF_IMAGE .and. mod(it,NTSTEP_BETWEEN_FRAMES) == 0 ) then
call write_PNM_GIF_create_image()
endif
More information about the CIG-COMMITS
mailing list