[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