[cig-commits] r21215 - in seismo/2D/SPECFEM2D/trunk: EXAMPLES/Abel_Brest EXAMPLES/Gmsh_example_MPI EXAMPLES/Gmsh_example_serial EXAMPLES/INDUSTRIAL_FORMAT EXAMPLES/M2_UPPA EXAMPLES/Rayleigh_wave_no_crack EXAMPLES/Rayleigh_wave_with_crack EXAMPLES/Tape2007 EXAMPLES/Tape2007_kernel EXAMPLES/Tromp2005 EXAMPLES/Tromp2005_kernel EXAMPLES/acoustic_poroelastic EXAMPLES/attenuation EXAMPLES/canyon EXAMPLES/fluid_solid/fluid_solid_external_mesh EXAMPLES/fluid_solid/from_2000_Geophysics_paper_flat_ocean_bottom EXAMPLES/fluid_solid/from_2000_Geophysics_paper_sinusoidal_ocean_bottom EXAMPLES/global_Earth_ak135f EXAMPLES/init_plane EXAMPLES/noise_layered/model_0 EXAMPLES/noise_layered/model_1 EXAMPLES/noise_layered/model_2 EXAMPLES/noise_uniform EXAMPLES/salt_dome/CPML_homogeneous EXAMPLES/salt_dome/CPML_normal EXAMPLES/salt_dome/Stacey_homogeneous EXAMPLES/salt_dome/Stacey_normal EXAMPLES/semi_infinite_homo src/meshfem2D src/specfem2D

xie.zhinan at geodynamics.org xie.zhinan at geodynamics.org
Mon Jan 7 07:44:22 PST 2013


Author: xie.zhinan
Date: 2013-01-07 07:44:21 -0800 (Mon, 07 Jan 2013)
New Revision: 21215

Modified:
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/Abel_Brest/Par_file_Abel_Balanche_bathy_source_solid
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/Gmsh_example_MPI/Par_file_Gmsh_SqrCircles.in
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/Gmsh_example_serial/Par_file_Gmsh_SqrCircles.in
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/INDUSTRIAL_FORMAT/Par_file
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/M2_UPPA/Par_file_M2_UPPA
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/Rayleigh_wave_no_crack/Par_file_Rayleigh_2D
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/Rayleigh_wave_with_crack/Par_file_Rayleigh_2D
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tape2007/Par_file_Tape2007_132rec_checker
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tape2007/Par_file_Tape2007_onerec
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tape2007_kernel/Par_file_Tape2007_onerec
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tromp2005/Par_file_Tromp2005
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tromp2005/Par_file_Tromp2005_s100
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tromp2005_kernel/Par_file_Tromp2005
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/acoustic_poroelastic/Par_file_acoustic_poroelastic
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/attenuation/Par_file_attenuation_2D
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/canyon/Par_file_canyon
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/fluid_solid/fluid_solid_external_mesh/Par_file_fluid_solid
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/fluid_solid/from_2000_Geophysics_paper_flat_ocean_bottom/Par_file_fluid_solid
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/fluid_solid/from_2000_Geophysics_paper_sinusoidal_ocean_bottom/Par_file_fluid_solid
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/global_Earth_ak135f/Par_file
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/init_plane/Par_file_Slave
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/init_plane/Par_file_Slave_for
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/init_plane/Par_file_Slave_kernel
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_0/Par_file_fair
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_0/Par_file_good
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_1/Par_file_best
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_1/Par_file_fair
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_1/Par_file_good
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_2/Par_file_fair
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_2/Par_file_good
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_uniform/Par_file_noise_1
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_uniform/Par_file_noise_2
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_uniform/Par_file_noise_3
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/salt_dome/CPML_homogeneous/Par_file
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/salt_dome/CPML_normal/Par_file
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/salt_dome/Stacey_homogeneous/Par_file
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/salt_dome/Stacey_normal/Par_file
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/semi_infinite_homo/Par_file_elastic_2D
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/semi_infinite_homo/plot_points_per_wavelength_histogram.gnu
   seismo/2D/SPECFEM2D/trunk/EXAMPLES/semi_infinite_homo/points_per_wavelength_histogram_S_in_solid.txt
   seismo/2D/SPECFEM2D/trunk/src/meshfem2D/read_parameter_file.F90
   seismo/2D/SPECFEM2D/trunk/src/meshfem2D/save_databases.f90
   seismo/2D/SPECFEM2D/trunk/src/specfem2D/compute_forces_viscoelastic.F90
   seismo/2D/SPECFEM2D/trunk/src/specfem2D/read_databases.f90
   seismo/2D/SPECFEM2D/trunk/src/specfem2D/specfem2D.F90
Log:
initial version of titled PML commited, please becarful to use it, since the current pml_init.F90 code using to define the pml parameter do not support titled mesh.


Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/Abel_Brest/Par_file_Abel_Balanche_bathy_source_solid
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/Abel_Brest/Par_file_Abel_Balanche_bathy_source_solid	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/Abel_Brest/Par_file_Abel_Balanche_bathy_source_solid	2013-01-07 15:44:21 UTC (rev 21215)
@@ -118,6 +118,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/Gmsh_example_MPI/Par_file_Gmsh_SqrCircles.in
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/Gmsh_example_MPI/Par_file_Gmsh_SqrCircles.in	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/Gmsh_example_MPI/Par_file_Gmsh_SqrCircles.in	2013-01-07 15:44:21 UTC (rev 21215)
@@ -114,6 +114,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .true.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/Gmsh_example_serial/Par_file_Gmsh_SqrCircles.in
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/Gmsh_example_serial/Par_file_Gmsh_SqrCircles.in	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/Gmsh_example_serial/Par_file_Gmsh_SqrCircles.in	2013-01-07 15:44:21 UTC (rev 21215)
@@ -114,6 +114,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .true.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/INDUSTRIAL_FORMAT/Par_file
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/INDUSTRIAL_FORMAT/Par_file	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/INDUSTRIAL_FORMAT/Par_file	2013-01-07 15:44:21 UTC (rev 21215)
@@ -112,6 +112,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/M2_UPPA/Par_file_M2_UPPA
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/M2_UPPA/Par_file_M2_UPPA	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/M2_UPPA/Par_file_M2_UPPA	2013-01-07 15:44:21 UTC (rev 21215)
@@ -112,6 +112,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/Rayleigh_wave_no_crack/Par_file_Rayleigh_2D
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/Rayleigh_wave_no_crack/Par_file_Rayleigh_2D	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/Rayleigh_wave_no_crack/Par_file_Rayleigh_2D	2013-01-07 15:44:21 UTC (rev 21215)
@@ -109,6 +109,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/Rayleigh_wave_with_crack/Par_file_Rayleigh_2D
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/Rayleigh_wave_with_crack/Par_file_Rayleigh_2D	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/Rayleigh_wave_with_crack/Par_file_Rayleigh_2D	2013-01-07 15:44:21 UTC (rev 21215)
@@ -113,6 +113,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tape2007/Par_file_Tape2007_132rec_checker
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tape2007/Par_file_Tape2007_132rec_checker	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tape2007/Par_file_Tape2007_132rec_checker	2013-01-07 15:44:21 UTC (rev 21215)
@@ -895,6 +895,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tape2007/Par_file_Tape2007_onerec
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tape2007/Par_file_Tape2007_onerec	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tape2007/Par_file_Tape2007_onerec	2013-01-07 15:44:21 UTC (rev 21215)
@@ -110,6 +110,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tape2007_kernel/Par_file_Tape2007_onerec
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tape2007_kernel/Par_file_Tape2007_onerec	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tape2007_kernel/Par_file_Tape2007_onerec	2013-01-07 15:44:21 UTC (rev 21215)
@@ -110,6 +110,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tromp2005/Par_file_Tromp2005
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tromp2005/Par_file_Tromp2005	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tromp2005/Par_file_Tromp2005	2013-01-07 15:44:21 UTC (rev 21215)
@@ -109,6 +109,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tromp2005/Par_file_Tromp2005_s100
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tromp2005/Par_file_Tromp2005_s100	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tromp2005/Par_file_Tromp2005_s100	2013-01-07 15:44:21 UTC (rev 21215)
@@ -109,6 +109,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tromp2005_kernel/Par_file_Tromp2005
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tromp2005_kernel/Par_file_Tromp2005	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/Tromp2005_kernel/Par_file_Tromp2005	2013-01-07 15:44:21 UTC (rev 21215)
@@ -109,6 +109,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/acoustic_poroelastic/Par_file_acoustic_poroelastic
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/acoustic_poroelastic/Par_file_acoustic_poroelastic	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/acoustic_poroelastic/Par_file_acoustic_poroelastic	2013-01-07 15:44:21 UTC (rev 21215)
@@ -118,6 +118,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/attenuation/Par_file_attenuation_2D
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/attenuation/Par_file_attenuation_2D	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/attenuation/Par_file_attenuation_2D	2013-01-07 15:44:21 UTC (rev 21215)
@@ -109,6 +109,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/canyon/Par_file_canyon
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/canyon/Par_file_canyon	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/canyon/Par_file_canyon	2013-01-07 15:44:21 UTC (rev 21215)
@@ -109,6 +109,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .true.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/fluid_solid/fluid_solid_external_mesh/Par_file_fluid_solid
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/fluid_solid/fluid_solid_external_mesh/Par_file_fluid_solid	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/fluid_solid/fluid_solid_external_mesh/Par_file_fluid_solid	2013-01-07 15:44:21 UTC (rev 21215)
@@ -114,6 +114,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/fluid_solid/from_2000_Geophysics_paper_flat_ocean_bottom/Par_file_fluid_solid
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/fluid_solid/from_2000_Geophysics_paper_flat_ocean_bottom/Par_file_fluid_solid	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/fluid_solid/from_2000_Geophysics_paper_flat_ocean_bottom/Par_file_fluid_solid	2013-01-07 15:44:21 UTC (rev 21215)
@@ -111,6 +111,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/fluid_solid/from_2000_Geophysics_paper_sinusoidal_ocean_bottom/Par_file_fluid_solid
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/fluid_solid/from_2000_Geophysics_paper_sinusoidal_ocean_bottom/Par_file_fluid_solid	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/fluid_solid/from_2000_Geophysics_paper_sinusoidal_ocean_bottom/Par_file_fluid_solid	2013-01-07 15:44:21 UTC (rev 21215)
@@ -111,6 +111,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/global_Earth_ak135f/Par_file
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/global_Earth_ak135f/Par_file	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/global_Earth_ak135f/Par_file	2013-01-07 15:44:21 UTC (rev 21215)
@@ -115,6 +115,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .false.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/init_plane/Par_file_Slave
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/init_plane/Par_file_Slave	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/init_plane/Par_file_Slave	2013-01-07 15:44:21 UTC (rev 21215)
@@ -110,6 +110,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/init_plane/Par_file_Slave_for
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/init_plane/Par_file_Slave_for	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/init_plane/Par_file_Slave_for	2013-01-07 15:44:21 UTC (rev 21215)
@@ -110,6 +110,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/init_plane/Par_file_Slave_kernel
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/init_plane/Par_file_Slave_kernel	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/init_plane/Par_file_Slave_kernel	2013-01-07 15:44:21 UTC (rev 21215)
@@ -110,6 +110,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_0/Par_file_fair
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_0/Par_file_fair	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_0/Par_file_fair	2013-01-07 15:44:21 UTC (rev 21215)
@@ -109,6 +109,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_0/Par_file_good
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_0/Par_file_good	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_0/Par_file_good	2013-01-07 15:44:21 UTC (rev 21215)
@@ -109,6 +109,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_1/Par_file_best
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_1/Par_file_best	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_1/Par_file_best	2013-01-07 15:44:21 UTC (rev 21215)
@@ -110,6 +110,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_1/Par_file_fair
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_1/Par_file_fair	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_1/Par_file_fair	2013-01-07 15:44:21 UTC (rev 21215)
@@ -110,6 +110,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_1/Par_file_good
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_1/Par_file_good	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_1/Par_file_good	2013-01-07 15:44:21 UTC (rev 21215)
@@ -110,6 +110,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_2/Par_file_fair
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_2/Par_file_fair	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_2/Par_file_fair	2013-01-07 15:44:21 UTC (rev 21215)
@@ -111,6 +111,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_2/Par_file_good
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_2/Par_file_good	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_layered/model_2/Par_file_good	2013-01-07 15:44:21 UTC (rev 21215)
@@ -111,6 +111,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_uniform/Par_file_noise_1
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_uniform/Par_file_noise_1	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_uniform/Par_file_noise_1	2013-01-07 15:44:21 UTC (rev 21215)
@@ -109,6 +109,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_uniform/Par_file_noise_2
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_uniform/Par_file_noise_2	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_uniform/Par_file_noise_2	2013-01-07 15:44:21 UTC (rev 21215)
@@ -109,6 +109,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_uniform/Par_file_noise_3
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_uniform/Par_file_noise_3	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/noise_uniform/Par_file_noise_3	2013-01-07 15:44:21 UTC (rev 21215)
@@ -109,6 +109,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/salt_dome/CPML_homogeneous/Par_file
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/salt_dome/CPML_homogeneous/Par_file	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/salt_dome/CPML_homogeneous/Par_file	2013-01-07 15:44:21 UTC (rev 21215)
@@ -116,6 +116,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .true.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .false.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/salt_dome/CPML_normal/Par_file
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/salt_dome/CPML_normal/Par_file	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/salt_dome/CPML_normal/Par_file	2013-01-07 15:44:21 UTC (rev 21215)
@@ -123,6 +123,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .true.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .false.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/salt_dome/Stacey_homogeneous/Par_file
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/salt_dome/Stacey_homogeneous/Par_file	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/salt_dome/Stacey_homogeneous/Par_file	2013-01-07 15:44:21 UTC (rev 21215)
@@ -24,7 +24,7 @@
 
 # time step parameters
 nt                              = 10000           # total number of time steps
-deltat                          = 4.25e-4         # duration of a time step (for the choice of deltat please refer to section 4.5 of the user manual)
+deltat                          = 4.25e-4         # duration of a time step (see section "How to choose the time step" of the manual for how to do this) (for the choice of deltat please refer to section 4.5 of the user manual)
 USER_T0                         = 0.0d0          # use this t0 as earliest starting time rather than the automatically calculated one
 time_stepping_scheme            = 1              # 1 = Newmark (2nd order), 2 = LDDRK4-6 (4th-order 6-stage low storage Runge-Kutta), 3 = classical RK4 4th-order 4-stage Runge-Kutta
 
@@ -116,6 +116,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .true.
 ADD_SPRING_TO_STACEY            = .true.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/salt_dome/Stacey_normal/Par_file
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/salt_dome/Stacey_normal/Par_file	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/salt_dome/Stacey_normal/Par_file	2013-01-07 15:44:21 UTC (rev 21215)
@@ -123,6 +123,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .false.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .true.
 ADD_SPRING_TO_STACEY            = .false.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/semi_infinite_homo/Par_file_elastic_2D
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/semi_infinite_homo/Par_file_elastic_2D	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/semi_infinite_homo/Par_file_elastic_2D	2013-01-07 15:44:21 UTC (rev 21215)
@@ -23,7 +23,7 @@
 p_sv                            = .true.         # set the type of calculation (P-SV or SH/membrane waves)
 
 # time step parameters
-nt                              = 15000           # total number of time steps
+nt                              = 1500           # total number of time steps
 deltat                          = 0.8e-3         # duration of a time step (see section "How to choose the time step" of the manual for how to do this)
 USER_T0                         = 0.15d0         # use this t0 as earliest starting time rather than the automatically calculated one
 time_stepping_scheme            = 1              # 1 = Newmark (2nd order), 2 = LDDRK4-6 (4th-order 6-stage low storage Runge-Kutta), 3 = classical 4th-order 4-stage Runge-Kutta
@@ -109,6 +109,8 @@
 # absorbing boundary active or not
 PML_BOUNDARY_CONDITIONS         = .true.
 NELEM_PML_THICKNESS             = 3
+ROTATE_PML_ACTIVATE             = .false.
+ROTATE_PML_ANGLE                = 30.
 STACEY_ABSORBING_CONDITIONS     = .false.
 ADD_SPRING_TO_STACEY            = .false.
 

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/semi_infinite_homo/plot_points_per_wavelength_histogram.gnu
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/semi_infinite_homo/plot_points_per_wavelength_histogram.gnu	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/semi_infinite_homo/plot_points_per_wavelength_histogram.gnu	2013-01-07 15:44:21 UTC (rev 21215)
@@ -1,9 +1,9 @@
  set term x11
  #set term gif
- #set output "points_per_wavelength_histogram_P_in_fluid.gif"
- 
- set boxwidth   1.5000000E-02
- set xlabel "Range of min number of points per P wavelength in fluid"
+ #set output "points_per_wavelength_histogram_S_in_solid.gif"
+
+ set boxwidth   8.66025034E-03
+ set xlabel "Range of min number of points per S wavelength in solid"
  set ylabel "Percentage of elements (%)"
- plot "points_per_wavelength_histogram_P_in_fluid.txt" with boxes
+ plot "points_per_wavelength_histogram_S_in_solid.txt" with boxes
  pause -1 "hit any key..."

Modified: seismo/2D/SPECFEM2D/trunk/EXAMPLES/semi_infinite_homo/points_per_wavelength_histogram_S_in_solid.txt
===================================================================
--- seismo/2D/SPECFEM2D/trunk/EXAMPLES/semi_infinite_homo/points_per_wavelength_histogram_S_in_solid.txt	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/EXAMPLES/semi_infinite_homo/points_per_wavelength_histogram_S_in_solid.txt	2013-01-07 15:44:21 UTC (rev 21215)
@@ -1,20 +1,20 @@
-   8.5779819         0.0000000    
-   8.5866432         0.0000000    
-   8.5953026         0.0000000    
-   8.6039639         0.0000000    
-   8.6126232         0.0000000    
-   8.6212845         0.0000000    
-   8.6299438         0.0000000    
-   8.6386051         0.0000000    
-   8.6472645         0.0000000    
-   8.6559258         14.000000    
-   8.6645851         86.000000    
-   8.6732445         0.0000000    
-   8.6819057         0.0000000    
-   8.6905651         0.0000000    
-   8.6992264         0.0000000    
-   8.7078857         0.0000000    
-   8.7165470         0.0000000    
-   8.7252064         0.0000000    
-   8.7338676         0.0000000    
-   8.7425270         0.0000000    
+   8.5779781         0.0000000    
+   8.5866375         0.0000000    
+   8.5952988         0.0000000    
+   8.6039581         0.0000000    
+   8.6126194         0.0000000    
+   8.6212788         0.0000000    
+   8.6299400         0.0000000    
+   8.6385994         0.0000000    
+   8.6472588         0.0000000    
+   8.6559200         14.000000    
+   8.6645794         86.000000    
+   8.6732407         0.0000000    
+   8.6819000         0.0000000    
+   8.6905613         0.0000000    
+   8.6992207         0.0000000    
+   8.7078819         0.0000000    
+   8.7165413         0.0000000    
+   8.7252026         0.0000000    
+   8.7338619         0.0000000    
+   8.7425232         0.0000000    

Modified: seismo/2D/SPECFEM2D/trunk/src/meshfem2D/read_parameter_file.F90
===================================================================
--- seismo/2D/SPECFEM2D/trunk/src/meshfem2D/read_parameter_file.F90	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/src/meshfem2D/read_parameter_file.F90	2013-01-07 15:44:21 UTC (rev 21215)
@@ -101,7 +101,8 @@
 
   integer :: NSTEP_BETWEEN_OUTPUT_INFO,NSTEP_BETWEEN_OUTPUT_SEISMOS,NSTEP_BETWEEN_OUTPUT_IMAGES,NSTEP_BETWEEN_OUTPUT_WAVE_DUMPS, &
              subsamp_seismos,imagetype_JPEG,imagetype_wavefield_dumps,NELEM_PML_THICKNESS
-  logical :: output_postscript_snapshot,output_color_image,PML_BOUNDARY_CONDITIONS
+  logical :: output_postscript_snapshot,output_color_image,PML_BOUNDARY_CONDITIONS,ROTATE_PML_ACTIVATE 
+  double precision :: ROTATE_PML_ANGLE 
   integer :: imagetype_postscript
   double precision :: cutsnaps
   logical :: meshvect,modelvect,boundvect,interpol
@@ -460,6 +461,12 @@
   call read_value_integer_p(NELEM_PML_THICKNESS, 'solver.NELEM_PML_THICKNESS')
   if(err_occurred() /= 0) stop 'error reading parameter 33zb in Par_file'
 
+  call read_value_logical_p(ROTATE_PML_ACTIVATE, 'solver.ROTATE_PML_ACTIVATE')  
+  if(err_occurred() /= 0) stop 'error reading parameter 51a in Par_file'
+
+  call read_value_double_precision_p(ROTATE_PML_ANGLE, 'solver.ROTATE_PML_ANGLE') 
+  if(err_occurred() /= 0) stop 'error reading parameter 51a in Par_file'
+
   ! boolean defining whether to use any absorbing boundaries
   call read_value_logical_p(any_abs, 'solver.STACEY_ABSORBING_CONDITIONS')
   if(err_occurred() /= 0) stop 'error reading parameter 51a in Par_file'

Modified: seismo/2D/SPECFEM2D/trunk/src/meshfem2D/save_databases.f90
===================================================================
--- seismo/2D/SPECFEM2D/trunk/src/meshfem2D/save_databases.f90	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/src/meshfem2D/save_databases.f90	2013-01-07 15:44:21 UTC (rev 21215)
@@ -119,6 +119,12 @@
     write(15,*) 'PML_BOUNDARY_CONDITIONS'
     write(15,*) PML_BOUNDARY_CONDITIONS
 
+    write(15,*) 'ROTATE_PML_ACTIVATE' 
+    write(15,*) ROTATE_PML_ACTIVATE   
+
+    write(15,*) 'ROTATE_PML_ANGLE' 
+    write(15,*) ROTATE_PML_ANGLE   
+
     write(15,*) 'read_external_mesh'
     write(15,*) read_external_mesh
 

Modified: seismo/2D/SPECFEM2D/trunk/src/specfem2D/compute_forces_viscoelastic.F90
===================================================================
--- seismo/2D/SPECFEM2D/trunk/src/specfem2D/compute_forces_viscoelastic.F90	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/src/specfem2D/compute_forces_viscoelastic.F90	2013-01-07 15:44:21 UTC (rev 21215)
@@ -66,10 +66,12 @@
      is_PML,nspec_PML,spec_to_PML,region_CPML, &
      K_x_store,K_z_store,d_x_store,d_z_store,alpha_x_store,alpha_z_store, &
      rmemory_displ_elastic,rmemory_dux_dx,rmemory_dux_dz,rmemory_duz_dx,rmemory_duz_dz, &
+     rmemory_dux_dx_prime,rmemory_dux_dz_prime,rmemory_duz_dx_prime,rmemory_duz_dz_prime, &
      rmemory_displ_elastic_LDDRK,rmemory_dux_dx_LDDRK,rmemory_dux_dz_LDDRK,& 
      rmemory_duz_dx_LDDRK,rmemory_duz_dz_LDDRK, &  
-     PML_BOUNDARY_CONDITIONS)
+     PML_BOUNDARY_CONDITIONS,ROTATE_PML_ACTIVATE,ROTATE_PML_ANGLE)  
 
+
   ! compute forces for the elastic elements
 
   implicit none
@@ -163,11 +165,14 @@
   ! spatial derivatives
   real(kind=CUSTOM_REAL) :: dux_dxi,dux_dgamma,duy_dxi,duy_dgamma,duz_dxi,duz_dgamma
   real(kind=CUSTOM_REAL) :: dux_dxl,duy_dxl,duz_dxl,dux_dzl,duy_dzl,duz_dzl
+  real(kind=CUSTOM_REAL) :: dux_dxl_prime,duy_dxl_prime,duz_dxl_prime,dux_dzl_prime,duy_dzl_prime,duz_dzl_prime 
+  real(kind=CUSTOM_REAL) :: theta,ct,st 
   real(kind=CUSTOM_REAL) :: b_dux_dxi,b_dux_dgamma,b_duy_dxi,b_duy_dgamma,b_duz_dxi,b_duz_dgamma
   real(kind=CUSTOM_REAL) :: b_dux_dxl,b_duy_dxl,b_duz_dxl,b_dux_dzl,b_duy_dzl,b_duz_dzl
   real(kind=CUSTOM_REAL) :: dsxx,dsxz,dszz
   real(kind=CUSTOM_REAL) :: b_dsxx,b_dsxz,b_dszz
   real(kind=CUSTOM_REAL) :: sigma_xx,sigma_xy,sigma_xz,sigma_zy,sigma_zz,sigma_zx
+  real(kind=CUSTOM_REAL) :: sigma_xx_prime,sigma_xy_prime,sigma_xz_prime,sigma_zy_prime,sigma_zz_prime,sigma_zx_prime 
   real(kind=CUSTOM_REAL) :: b_sigma_xx,b_sigma_xy,b_sigma_xz,b_sigma_zy,b_sigma_zz,b_sigma_zx
   real(kind=CUSTOM_REAL) :: nx,nz,vx,vy,vz,vn,rho_vp,rho_vs,tx,ty,tz,weight,xxi,zxi,xgamma,zgamma,jacobian1D
   real(kind=CUSTOM_REAL) :: displx,disply,displz,displn,spring_position,displtx,displty,displtz
@@ -220,12 +225,15 @@
   integer, dimension(nspec) :: region_CPML
   logical, dimension(nspec) :: is_PML
   integer, dimension(nspec) :: spec_to_PML
-  logical :: PML_BOUNDARY_CONDITIONS
+  logical :: PML_BOUNDARY_CONDITIONS,ROTATE_PML_ACTIVATE 
+  double precision ROTATE_PML_ANGLE                      
 
   real(kind=CUSTOM_REAL), dimension(2,3,NGLLX,NGLLZ,nspec_PML) :: rmemory_displ_elastic
   real(kind=CUSTOM_REAL), dimension(2,3,NGLLX,NGLLZ,nspec_PML) :: rmemory_displ_elastic_LDDRK
   real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLZ,nspec_PML) :: &
     rmemory_dux_dx,rmemory_dux_dz,rmemory_duz_dx,rmemory_duz_dz
+  real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLZ,nspec_PML) :: &   
+    rmemory_dux_dx_prime,rmemory_dux_dz_prime,rmemory_duz_dx_prime,rmemory_duz_dz_prime
   real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLZ,nspec_PML) :: &
     rmemory_dux_dx_LDDRK,rmemory_dux_dz_LDDRK,rmemory_duz_dx_LDDRK,rmemory_duz_dz_LDDRK
   real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLZ,nspec_PML) :: &
@@ -432,14 +440,33 @@
                       coef1 = deltat / 2.0d0
                       coef2 = deltat / 2.0d0
                     end if
+
+                    if(ROTATE_PML_ACTIVATE)then
                     !! DK DK new from Wang eq (21)
                     rmemory_dux_dx(i,j,ispec_PML) = coef0 * rmemory_dux_dx(i,j,ispec_PML) &
                     + PML_dux_dxl_new(i,j,ispec_PML) * coef1 + PML_dux_dxl(i,j,ispec_PML) * coef2
 
                     !! DK DK new from Wang eq (21)
+                    rmemory_dux_dz(i,j,ispec_PML) = coef0 * rmemory_dux_dz(i,j,ispec_PML) &
+                    + PML_dux_dzl_new(i,j,ispec_PML) * coef1 + PML_dux_dzl(i,j,ispec_PML) * coef2
+
+                    !! DK DK new from Wang eq (21)
                     rmemory_duz_dx(i,j,ispec_PML) = coef0 * rmemory_duz_dx(i,j,ispec_PML) &
                     + PML_duz_dxl_new(i,j,ispec_PML) * coef1 + PML_duz_dxl(i,j,ispec_PML) * coef2
 
+                    !! DK DK new from Wang eq (21)
+                    rmemory_duz_dz(i,j,ispec_PML) = coef0 * rmemory_duz_dz(i,j,ispec_PML) &
+                    + PML_duz_dzl_new(i,j,ispec_PML) * coef1 + PML_duz_dzl(i,j,ispec_PML) * coef2
+                    else
+                    !! DK DK new from Wang eq (21)
+                    rmemory_dux_dx(i,j,ispec_PML) = coef0 * rmemory_dux_dx(i,j,ispec_PML) &
+                    + PML_dux_dxl_new(i,j,ispec_PML) * coef1 + PML_dux_dxl(i,j,ispec_PML) * coef2
+
+                    !! DK DK new from Wang eq (21)
+                    rmemory_duz_dx(i,j,ispec_PML) = coef0 * rmemory_duz_dx(i,j,ispec_PML) &
+                    + PML_duz_dxl_new(i,j,ispec_PML) * coef1 + PML_duz_dxl(i,j,ispec_PML) * coef2
+                    endif
+
                     endif 
 
                     if(stage_time_scheme == 6) then 
@@ -454,10 +481,17 @@
                      rmemory_duz_dx(i,j,ispec_PML) = rmemory_duz_dx(i,j,ispec_PML) + &
                      beta_LDDRK(i_stage) * rmemory_duz_dx_LDDRK(i,j,ispec_PML)
 
-                    end if  
-
+                    end if 
+ 
+                    if(ROTATE_PML_ACTIVATE)then
                     dux_dxl = PML_dux_dxl(i,j,ispec_PML)  + A8 * rmemory_dux_dx(i,j,ispec_PML)
+                    dux_dzl = PML_dux_dzl(i,j,ispec_PML)  + A8 * rmemory_dux_dz(i,j,ispec_PML)
                     duz_dxl = PML_duz_dxl(i,j,ispec_PML)  + A8 * rmemory_duz_dx(i,j,ispec_PML)
+                    duz_dzl = PML_duz_dzl(i,j,ispec_PML)  + A8 * rmemory_duz_dz(i,j,ispec_PML)
+                    else
+                    dux_dxl = PML_dux_dxl(i,j,ispec_PML)  + A8 * rmemory_dux_dx(i,j,ispec_PML)
+                    duz_dxl = PML_duz_dxl(i,j,ispec_PML)  + A8 * rmemory_duz_dx(i,j,ispec_PML)
+                    endif
 
 
 
@@ -477,13 +511,31 @@
                       coef2 = deltat / 2.0d0
                     end if
 
+                    if(ROTATE_PML_ACTIVATE)then
                     !! DK DK new from Wang eq (21)
+                    rmemory_dux_dx_prime(i,j,ispec_PML) = coef0 * rmemory_dux_dx_prime(i,j,ispec_PML) &
+                    + PML_dux_dxl_new(i,j,ispec_PML) *coef1 + PML_dux_dxl(i,j,ispec_PML) * coef2
+
+                    !! DK DK new from Wang eq (21)
+                    rmemory_dux_dz_prime(i,j,ispec_PML) = coef0 * rmemory_dux_dz_prime(i,j,ispec_PML) &
+                    + PML_dux_dzl_new(i,j,ispec_PML) *coef1 + PML_dux_dzl(i,j,ispec_PML) * coef2
+
+                    !! DK DK new from Wang eq (21)
+                    rmemory_duz_dx_prime(i,j,ispec_PML) = coef0 * rmemory_duz_dx_prime(i,j,ispec_PML) &
+                    + PML_duz_dxl_new(i,j,ispec_PML) *coef1 + PML_duz_dxl(i,j,ispec_PML) * coef2
+
+                    !! DK DK new from Wang eq (21)
+                    rmemory_duz_dz_prime(i,j,ispec_PML) = coef0 * rmemory_duz_dz_prime(i,j,ispec_PML) &
+                    + PML_duz_dzl_new(i,j,ispec_PML) *coef1 + PML_duz_dzl(i,j,ispec_PML) * coef2
+                    else
+                    !! DK DK new from Wang eq (21)
                     rmemory_dux_dz(i,j,ispec_PML) = coef0 * rmemory_dux_dz(i,j,ispec_PML) &
                     + PML_dux_dzl_new(i,j,ispec_PML) *coef1 + PML_dux_dzl(i,j,ispec_PML) * coef2
 
                     !! DK DK new from Wang eq (21)
                     rmemory_duz_dz(i,j,ispec_PML) = coef0 * rmemory_duz_dz(i,j,ispec_PML) &
                     + PML_duz_dzl_new(i,j,ispec_PML) *coef1 + PML_duz_dzl(i,j,ispec_PML) * coef2
+                    endif
 
                     end if
 
@@ -499,8 +551,15 @@
                      beta_LDDRK(i_stage) * rmemory_duz_dz_LDDRK(i,j,ispec_PML)
                     end if 
 
+                    if(ROTATE_PML_ACTIVATE)then
+                    dux_dxl_prime = PML_dux_dxl(i,j,ispec_PML)  + A5 * rmemory_dux_dx_prime(i,j,ispec_PML)
+                    dux_dzl_prime = PML_dux_dzl(i,j,ispec_PML)  + A5 * rmemory_dux_dz_prime(i,j,ispec_PML)
+                    duz_dxl_prime = PML_duz_dxl(i,j,ispec_PML)  + A5 * rmemory_duz_dx_prime(i,j,ispec_PML)
+                    duz_dzl_prime = PML_duz_dzl(i,j,ispec_PML)  + A5 * rmemory_duz_dz_prime(i,j,ispec_PML)
+                    else
                     dux_dzl = PML_dux_dzl(i,j,ispec_PML)  + A5 * rmemory_dux_dz(i,j,ispec_PML)
                     duz_dzl = PML_duz_dzl(i,j,ispec_PML)  + A5 * rmemory_duz_dz(i,j,ispec_PML)
+                    endif
 
 
 
@@ -530,13 +589,31 @@
                       coef2 = deltat / 2.0d0
                     end if
 
+                    if(ROTATE_PML_ACTIVATE)then
                     !! DK DK new from Wang eq (21)
+                    rmemory_dux_dx(i,j,ispec_PML) = coef0 * rmemory_dux_dx(i,j,ispec_PML) &
+                    + PML_dux_dxl_new(i,j,ispec_PML) * coef1 + PML_dux_dxl(i,j,ispec_PML) * coef2
+
+                    !! DK DK new from Wang eq (21)
+                    rmemory_dux_dz(i,j,ispec_PML) = coef0 * rmemory_dux_dz(i,j,ispec_PML) &
+                    + PML_dux_dzl_new(i,j,ispec_PML) * coef1 + PML_dux_dzl(i,j,ispec_PML) * coef2
+
+                    !! DK DK new from Wang eq (21)
+                    rmemory_duz_dx(i,j,ispec_PML) = coef0 * rmemory_duz_dx(i,j,ispec_PML) &
+                    + PML_duz_dxl_new(i,j,ispec_PML) * coef1 + PML_duz_dxl(i,j,ispec_PML) * coef2
+
+                    !! DK DK new from Wang eq (21)
+                    rmemory_duz_dz(i,j,ispec_PML) = coef0 * rmemory_duz_dz(i,j,ispec_PML) &
+                    + PML_duz_dzl_new(i,j,ispec_PML) * coef1 + PML_duz_dzl(i,j,ispec_PML) * coef2
+                    else
+                    !! DK DK new from Wang eq (21)
                     rmemory_dux_dx(i,j,ispec_PML) = coef0*rmemory_dux_dx(i,j,ispec_PML) &
                     + PML_dux_dxl_new(i,j,ispec_PML) * coef1 + PML_dux_dxl(i,j,ispec_PML) * coef2
 
                     !! DK DK new from Wang eq (21)
                     rmemory_duz_dx(i,j,ispec_PML) = coef0*rmemory_duz_dx(i,j,ispec_PML) &
                     + PML_duz_dxl_new(i,j,ispec_PML) * coef1 + PML_duz_dxl(i,j,ispec_PML) * coef2
+                    endif
 
                     end if
 
@@ -552,8 +629,15 @@
                      beta_LDDRK(i_stage) * rmemory_duz_dx_LDDRK(i,j,ispec_PML)
                     end if  
 
+                    if(ROTATE_PML_ACTIVATE)then
                     dux_dxl = PML_dux_dxl(i,j,ispec_PML)  + A8 * rmemory_dux_dx(i,j,ispec_PML)
+                    dux_dzl = PML_dux_dzl(i,j,ispec_PML)  + A8 * rmemory_dux_dz(i,j,ispec_PML)
                     duz_dxl = PML_duz_dxl(i,j,ispec_PML)  + A8 * rmemory_duz_dx(i,j,ispec_PML)
+                    duz_dzl = PML_duz_dzl(i,j,ispec_PML)  + A8 * rmemory_duz_dz(i,j,ispec_PML)
+                    else
+                    dux_dxl = PML_dux_dxl(i,j,ispec_PML)  + A8 * rmemory_dux_dx(i,j,ispec_PML)
+                    duz_dxl = PML_duz_dxl(i,j,ispec_PML)  + A8 * rmemory_duz_dx(i,j,ispec_PML)
+                    endif
 
 
 
@@ -576,13 +660,35 @@
                       coef2 = deltat / 2.0d0
                     end if
 
+                    if(ROTATE_PML_ACTIVATE)then
+
                     !! DK DK new from Wang eq (21)
+                    rmemory_dux_dx_prime(i,j,ispec_PML) = coef0 * rmemory_dux_dx_prime(i,j,ispec_PML) &
+                    + PML_dux_dxl_new(i,j,ispec_PML) *coef1 + PML_dux_dxl(i,j,ispec_PML) * coef2
+
+                    !! DK DK new from Wang eq (21)
+                    rmemory_dux_dz_prime(i,j,ispec_PML) = coef0 * rmemory_dux_dz_prime(i,j,ispec_PML) &
+                    + PML_dux_dzl_new(i,j,ispec_PML) *coef1 + PML_dux_dzl(i,j,ispec_PML) * coef2
+
+                    !! DK DK new from Wang eq (21)
+                    rmemory_duz_dx_prime(i,j,ispec_PML) = coef0 * rmemory_duz_dx_prime(i,j,ispec_PML) &
+                    + PML_duz_dxl_new(i,j,ispec_PML) *coef1 + PML_duz_dxl(i,j,ispec_PML) * coef2
+
+                    !! DK DK new from Wang eq (21)
+                    rmemory_duz_dz_prime(i,j,ispec_PML) = coef0 * rmemory_duz_dz_prime(i,j,ispec_PML) &
+                    + PML_duz_dzl_new(i,j,ispec_PML) *coef1 + PML_duz_dzl(i,j,ispec_PML) * coef2
+
+                    else
+
+                    !! DK DK new from Wang eq (21)
                     rmemory_dux_dz(i,j,ispec_PML) = coef0 * rmemory_dux_dz(i,j,ispec_PML) &
                     + PML_dux_dzl_new(i,j,ispec_PML) *coef1 + PML_dux_dzl(i,j,ispec_PML) * coef2
 
                     !! DK DK new from Wang eq (21)
                     rmemory_duz_dz(i,j,ispec_PML) = coef0 * rmemory_duz_dz(i,j,ispec_PML) &
                     + PML_duz_dzl_new(i,j,ispec_PML) *coef1 + PML_duz_dzl(i,j,ispec_PML) * coef2
+                    endif
+
                     end if
 
                     if(stage_time_scheme == 6) then  
@@ -597,8 +703,15 @@
                      beta_LDDRK(i_stage) * rmemory_duz_dz_LDDRK(i,j,ispec_PML)
                     end if   
 
+                    if(ROTATE_PML_ACTIVATE)then
+                    dux_dxl_prime = PML_dux_dxl(i,j,ispec_PML)  + A5 * rmemory_dux_dx_prime(i,j,ispec_PML)
+                    dux_dzl_prime = PML_dux_dzl(i,j,ispec_PML)  + A5 * rmemory_dux_dz_prime(i,j,ispec_PML)
+                    duz_dxl_prime = PML_duz_dxl(i,j,ispec_PML)  + A5 * rmemory_duz_dx_prime(i,j,ispec_PML)
+                    duz_dzl_prime = PML_duz_dzl(i,j,ispec_PML)  + A5 * rmemory_duz_dz_prime(i,j,ispec_PML)
+                    else
                     dux_dzl = PML_dux_dzl(i,j,ispec_PML)  + A5 * rmemory_dux_dz(i,j,ispec_PML)
                     duz_dzl = PML_duz_dzl(i,j,ispec_PML)  + A5 * rmemory_duz_dz(i,j,ispec_PML)
+                    endif
 
 
 
@@ -621,14 +734,32 @@
                       coef2 = deltat / 2.0d0
                     end if
 
+                    if(ROTATE_PML_ACTIVATE)then
+                    !! DK DK new from Wang eq (21)
+                    rmemory_dux_dx(i,j,ispec_PML) = coef0 * rmemory_dux_dx(i,j,ispec_PML) &
+                    + PML_dux_dxl_new(i,j,ispec_PML) * coef1 + PML_dux_dxl(i,j,ispec_PML) * coef2
 
                     !! DK DK new from Wang eq (21)
+                    rmemory_dux_dz(i,j,ispec_PML) = coef0 * rmemory_dux_dz(i,j,ispec_PML) &
+                    + PML_dux_dzl_new(i,j,ispec_PML) * coef1 + PML_dux_dzl(i,j,ispec_PML) * coef2
+
+                    !! DK DK new from Wang eq (21)
+                    rmemory_duz_dx(i,j,ispec_PML) = coef0 * rmemory_duz_dx(i,j,ispec_PML) &
+                    + PML_duz_dxl_new(i,j,ispec_PML) * coef1 + PML_duz_dxl(i,j,ispec_PML) * coef2
+
+                    !! DK DK new from Wang eq (21)
+                    rmemory_duz_dz(i,j,ispec_PML) = coef0 * rmemory_duz_dz(i,j,ispec_PML) &
+                    + PML_duz_dzl_new(i,j,ispec_PML) * coef1 + PML_duz_dzl(i,j,ispec_PML) * coef2
+                    else
+                    !! DK DK new from Wang eq (21)
                     rmemory_dux_dx(i,j,ispec_PML) = coef0*rmemory_dux_dx(i,j,ispec_PML) &
                     + PML_dux_dxl_new(i,j,ispec_PML) * coef1 + PML_dux_dxl(i,j,ispec_PML) * coef2
 
                     !! DK DK new from Wang eq (21)
                     rmemory_duz_dx(i,j,ispec_PML) = coef0*rmemory_duz_dx(i,j,ispec_PML) &
                     + PML_duz_dxl_new(i,j,ispec_PML) * coef1 + PML_duz_dxl(i,j,ispec_PML) * coef2
+                    endif
+
                     end if  
 
                     if(stage_time_scheme == 6) then   
@@ -643,8 +774,15 @@
                      beta_LDDRK(i_stage) * rmemory_duz_dx_LDDRK(i,j,ispec_PML)
                     end if  
 
+                    if(ROTATE_PML_ACTIVATE)then
+                    dux_dxl = PML_dux_dxl(i,j,ispec_PML)  + A7 * rmemory_dux_dx(i,j,ispec_PML)
+                    dux_dzl = PML_dux_dzl(i,j,ispec_PML)  + A7 * rmemory_dux_dz(i,j,ispec_PML)
+                    duz_dxl = PML_duz_dxl(i,j,ispec_PML)  + A7 * rmemory_duz_dx(i,j,ispec_PML)
+                    duz_dzl = PML_duz_dzl(i,j,ispec_PML)  + A7 * rmemory_duz_dz(i,j,ispec_PML)
+                    else
                     dux_dxl = dux_dxl  + A7 * rmemory_dux_dx(i,j,ispec_PML)
                     duz_dxl = duz_dxl  + A7 * rmemory_duz_dx(i,j,ispec_PML)
+                    endif
 
 
 
@@ -663,13 +801,32 @@
                       coef2 = deltat / 2.0d0
                     end if
 
+                    if(ROTATE_PML_ACTIVATE)then
                     !! DK DK new from Wang eq (21)
+                    rmemory_dux_dx_prime(i,j,ispec_PML) = coef0 * rmemory_dux_dx_prime(i,j,ispec_PML) &
+                    + PML_dux_dxl_new(i,j,ispec_PML) *coef1 + PML_dux_dxl(i,j,ispec_PML) * coef2
+
+                    !! DK DK new from Wang eq (21)
+                    rmemory_dux_dz_prime(i,j,ispec_PML) = coef0 * rmemory_dux_dz_prime(i,j,ispec_PML) &
+                    + PML_dux_dzl_new(i,j,ispec_PML) *coef1 + PML_dux_dzl(i,j,ispec_PML) * coef2
+
+                    !! DK DK new from Wang eq (21)
+                    rmemory_duz_dx_prime(i,j,ispec_PML) = coef0 * rmemory_duz_dx_prime(i,j,ispec_PML) &
+                    + PML_duz_dxl_new(i,j,ispec_PML) *coef1 + PML_duz_dxl(i,j,ispec_PML) * coef2
+
+                    !! DK DK new from Wang eq (21)
+                    rmemory_duz_dz_prime(i,j,ispec_PML) = coef0 * rmemory_duz_dz_prime(i,j,ispec_PML) &
+                    + PML_duz_dzl_new(i,j,ispec_PML) *coef1 + PML_duz_dzl(i,j,ispec_PML) * coef2
+                    else
+                    !! DK DK new from Wang eq (21)
                     rmemory_dux_dz(i,j,ispec_PML) = coef0 * rmemory_dux_dz(i,j,ispec_PML) &
                     + PML_dux_dzl_new(i,j,ispec_PML) *coef1 + PML_dux_dzl(i,j,ispec_PML) * coef2
 
                     !! DK DK new from Wang eq (21)
                     rmemory_duz_dz(i,j,ispec_PML) = coef0 * rmemory_duz_dz(i,j,ispec_PML) &
                     + PML_duz_dzl_new(i,j,ispec_PML) *coef1 + PML_duz_dzl(i,j,ispec_PML) * coef2
+                    endif
+
                     end if
 
                     if(stage_time_scheme == 6) then 
@@ -684,8 +841,15 @@
                      beta_LDDRK(i_stage) * rmemory_duz_dz_LDDRK(i,j,ispec_PML)
                     end if 
 
+                    if(ROTATE_PML_ACTIVATE)then
+                    dux_dxl_prime = PML_dux_dxl(i,j,ispec_PML)  + A6 * rmemory_dux_dx_prime(i,j,ispec_PML)
+                    dux_dzl_prime = PML_dux_dzl(i,j,ispec_PML)  + A6 * rmemory_dux_dz_prime(i,j,ispec_PML)
+                    duz_dxl_prime = PML_duz_dxl(i,j,ispec_PML)  + A6 * rmemory_duz_dx_prime(i,j,ispec_PML)
+                    duz_dzl_prime = PML_duz_dzl(i,j,ispec_PML)  + A6 * rmemory_duz_dz_prime(i,j,ispec_PML)
+                    else
                     dux_dzl = dux_dzl  + A6 * rmemory_dux_dz(i,j,ispec_PML)
                     duz_dzl = duz_dzl  + A6 * rmemory_duz_dz(i,j,ispec_PML)
+                    endif
 
 
 
@@ -778,10 +942,47 @@
 
                  if(PML_BOUNDARY_CONDITIONS .and. is_PML(ispec)) then
                      ispec_PML=spec_to_PML(ispec)
+                     if(ROTATE_PML_ACTIVATE)then
+                     theta = -ROTATE_PML_ANGLE/180.d0*Pi
+                     if(it==1)write(*,*)theta,ROTATE_PML_ACTIVATE,cos(theta),sin(theta)
+                     ct=cos(theta)
+                     st=sin(theta)
+                     sigma_xx_prime = lambdaplus2mu_unrelaxed_elastic*(ct**2*dux_dxl+ct*st*duz_dxl+ct*st*dux_dzl+st**2*duz_dzl) &
+                                      + lambdal_unrelaxed_elastic*(st**2*PML_dux_dxl(i,j,ispec_PML)&
+                                                                   -ct*st*PML_duz_dxl(i,j,ispec_PML)&
+                                                                   -ct*st*PML_dux_dzl(i,j,ispec_PML)&
+                                                                   +ct**2*PML_duz_dzl(i,j,ispec_PML))
+
+                     sigma_xz_prime = mul_unrelaxed_elastic * (-ct*st*dux_dxl+ct**2*duz_dxl-st**2*dux_dzl+ct*st*duz_dzl) &
+                                      +mul_unrelaxed_elastic * (-ct*st*PML_dux_dxl(i,j,ispec_PML)&
+                                                                   -st**2*PML_duz_dxl(i,j,ispec_PML)&
+                                                                   +ct**2*PML_dux_dzl(i,j,ispec_PML)&
+                                                                   +ct*st*PML_duz_dzl(i,j,ispec_PML))
+
+                     sigma_zx_prime = mul_unrelaxed_elastic * (-ct*st*PML_dux_dxl(i,j,ispec_PML)&
+                                                                   +ct**2*PML_duz_dxl(i,j,ispec_PML)&
+                                                                   -st**2*PML_dux_dzl(i,j,ispec_PML)&
+                                                                   +ct*st*PML_duz_dzl(i,j,ispec_PML)) &
+                                      +mul_unrelaxed_elastic * (-ct*st*dux_dxl_prime-st**2*duz_dxl_prime &
+                                                                 +ct**2*dux_dzl_prime+ct*st*duz_dzl_prime)
+
+                     sigma_zz_prime = lambdaplus2mu_unrelaxed_elastic*(st**2*dux_dxl_prime-ct*st*duz_dxl_prime&
+                                                                       -ct*st*dux_dzl_prime+ct**2*duz_dzl_prime) &
+                                      + lambdal_unrelaxed_elastic*(ct**2*PML_dux_dxl(i,j,ispec_PML)&
+                                                                   +ct*st*PML_duz_dxl(i,j,ispec_PML)&
+                                                                   +ct*st*PML_dux_dzl(i,j,ispec_PML)&
+                                                                   +st**2*PML_duz_dzl(i,j,ispec_PML))
+
+                     sigma_xx = ct**2*sigma_xx_prime-ct*st*sigma_xz_prime-ct*st*sigma_zx_prime+st**2*sigma_zz_prime
+                     sigma_xz = ct*st*sigma_xx_prime+ct**2*sigma_xz_prime-st**2*sigma_zx_prime-ct*st*sigma_zz_prime
+                     sigma_zx = ct*st*sigma_xx_prime-st**2*sigma_xz_prime+ct**2*sigma_zx_prime-ct*st*sigma_zz_prime
+                     sigma_zz = st**2*sigma_xx_prime+ct*st*sigma_xz_prime+ct*st*sigma_zx_prime+ct**2*sigma_zz_prime
+                     else
                      sigma_xx = lambdaplus2mu_unrelaxed_elastic*dux_dxl + lambdal_unrelaxed_elastic*PML_duz_dzl(i,j,ispec_PML)
                      sigma_zz = lambdaplus2mu_unrelaxed_elastic*duz_dzl + lambdal_unrelaxed_elastic*PML_dux_dxl(i,j,ispec_PML)
                      sigma_zx = mul_unrelaxed_elastic * (PML_duz_dxl(i,j,ispec_PML) + dux_dzl)
                      sigma_xz = mul_unrelaxed_elastic * (PML_dux_dzl(i,j,ispec_PML) + duz_dxl)
+                     endif
                  endif
 
                  if(SIMULATION_TYPE == 2) then ! Adjoint calculation, backward wavefield

Modified: seismo/2D/SPECFEM2D/trunk/src/specfem2D/read_databases.f90
===================================================================
--- seismo/2D/SPECFEM2D/trunk/src/specfem2D/read_databases.f90	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/src/specfem2D/read_databases.f90	2013-01-07 15:44:21 UTC (rev 21215)
@@ -46,7 +46,7 @@
   subroutine read_databases_init(myrank,ipass, &
                   simulation_title,SIMULATION_TYPE,NOISE_TOMOGRAPHY,SAVE_FORWARD,npgeo,nproc, &
                   output_grid_Gnuplot,interpol,NSTEP_BETWEEN_OUTPUT_INFO,NSTEP_BETWEEN_OUTPUT_SEISMOS,NSTEP_BETWEEN_OUTPUT_IMAGES, &
-                  PML_BOUNDARY_CONDITIONS,NELEM_PML_THICKNESS, &
+                  PML_BOUNDARY_CONDITIONS,ROTATE_PML_ACTIVATE,ROTATE_PML_ANGLE,NELEM_PML_THICKNESS, &
                   NSTEP_BETWEEN_OUTPUT_WAVE_DUMPS,subsamp_seismos,imagetype_JPEG,imagetype_wavefield_dumps, &
                   output_postscript_snapshot,output_color_image,colors,numbers, &
                   meshvect,modelvect,boundvect,cutsnaps,subsamp_postscript,sizemax_arrows, &
@@ -75,9 +75,9 @@
   logical :: meshvect,modelvect,boundvect,initialfield,add_Bielak_conditions, &
     assign_external_model,READ_EXTERNAL_SEP_FILE, &
     output_grid_ASCII,output_energy,output_wavefield_dumps,p_sv,use_binary_for_wavefield_dumps
-  logical :: ATTENUATION_VISCOELASTIC_SOLID,ATTENUATION_PORO_FLUID_PART,PML_BOUNDARY_CONDITIONS, &
+  logical :: ATTENUATION_VISCOELASTIC_SOLID,ATTENUATION_PORO_FLUID_PART,PML_BOUNDARY_CONDITIONS,ROTATE_PML_ACTIVATE, & 
              save_ASCII_seismograms,save_binary_seismograms_single,save_binary_seismograms_double,DRAW_SOURCES_AND_RECEIVERS
-
+  double precision :: ROTATE_PML_ANGLE 
   double precision :: cutsnaps,sizemax_arrows,anglerec
   double precision :: Q0,freq0
   double precision :: deltat
@@ -187,6 +187,12 @@
   read(IIN,"(a80)") datlin
   read(IIN,*) PML_BOUNDARY_CONDITIONS
 
+  read(IIN,"(a80)") datlin          
+  read(IIN,*) ROTATE_PML_ACTIVATE   
+
+  read(IIN,"(a80)") datlin          
+  read(IIN,*) ROTATE_PML_ANGLE      
+
   read(IIN,"(a80)") datlin
   read(IIN,*) read_external_mesh
 

Modified: seismo/2D/SPECFEM2D/trunk/src/specfem2D/specfem2D.F90
===================================================================
--- seismo/2D/SPECFEM2D/trunk/src/specfem2D/specfem2D.F90	2013-01-07 10:58:06 UTC (rev 21214)
+++ seismo/2D/SPECFEM2D/trunk/src/specfem2D/specfem2D.F90	2013-01-07 15:44:21 UTC (rev 21215)
@@ -564,8 +564,10 @@
   logical interpol,meshvect,modelvect,boundvect,assign_external_model,initialfield, &
     output_grid_ASCII,output_grid_Gnuplot,ATTENUATION_VISCOELASTIC_SOLID,output_postscript_snapshot,output_color_image, &
     plot_lowerleft_corner_only,add_Bielak_conditions,output_energy,READ_EXTERNAL_SEP_FILE, &
-    output_wavefield_dumps,use_binary_for_wavefield_dumps,PML_BOUNDARY_CONDITIONS
+    output_wavefield_dumps,use_binary_for_wavefield_dumps,PML_BOUNDARY_CONDITIONS,ROTATE_PML_ACTIVATE 
 
+  double precision :: ROTATE_PML_ANGLE 
+
 !! DK DK for CPML_element_file
   logical :: read_external_mesh
 
@@ -1007,6 +1009,9 @@
   real(kind=CUSTOM_REAL), dimension(:,:,:), allocatable :: &
    rmemory_dux_dx,rmemory_duz_dx,rmemory_dux_dz,rmemory_duz_dz
 
+  real(kind=CUSTOM_REAL), dimension(:,:,:), allocatable :: &                            
+   rmemory_dux_dx_prime,rmemory_duz_dx_prime,rmemory_dux_dz_prime,rmemory_duz_dz_prime  
+
   real(kind=CUSTOM_REAL), dimension(:,:,:), allocatable :: &
    rmemory_dux_dx_LDDRK,rmemory_duz_dx_LDDRK,rmemory_dux_dz_LDDRK,rmemory_duz_dz_LDDRK
 
@@ -1047,7 +1052,7 @@
   call read_databases_init(myrank,ipass, &
                   simulation_title,SIMULATION_TYPE,NOISE_TOMOGRAPHY,SAVE_FORWARD,npgeo,nproc_read_from_database, &
                   output_grid_Gnuplot,interpol,NSTEP_BETWEEN_OUTPUT_INFO,NSTEP_BETWEEN_OUTPUT_SEISMOS, &
-                  NSTEP_BETWEEN_OUTPUT_IMAGES,PML_BOUNDARY_CONDITIONS,NELEM_PML_THICKNESS, &
+                  NSTEP_BETWEEN_OUTPUT_IMAGES,PML_BOUNDARY_CONDITIONS,ROTATE_PML_ACTIVATE,ROTATE_PML_ANGLE,NELEM_PML_THICKNESS, &
                   NSTEP_BETWEEN_OUTPUT_WAVE_DUMPS,subsamp_seismos, &
                   imagetype_JPEG,imagetype_wavefield_dumps, &
                   output_postscript_snapshot,output_color_image,colors,numbers, &
@@ -1062,6 +1067,7 @@
                   POWER_DISPLAY_COLOR,PERFORM_CUTHILL_MCKEE,SU_FORMAT,USER_T0, time_stepping_scheme, &
                   ADD_SPRING_TO_STACEY,ADD_PERIODIC_CONDITIONS,PERIODIC_horiz_dist,PERIODIC_DETECT_TOL,&
                   read_external_mesh)
+
   if(nproc_read_from_database < 1) stop 'should have nproc_read_from_database >= 1'
   if(SIMULATION_TYPE == 2 .and.(time_stepping_scheme == 2 .or. time_stepping_scheme == 3)) &
                                   stop 'RK and LDDRK time scheme not supported for adjoint inversion'
@@ -2936,6 +2942,17 @@
         allocate(rmemory_duz_dz(NGLLX,NGLLZ,nspec_PML),stat=ier)
         if(ier /= 0) stop 'error: not enough memory to allocate array rmemory_duz_dz'
 
+        if(ROTATE_PML_ACTIVATE)then  
+          allocate(rmemory_dux_dx_prime(NGLLX,NGLLZ,nspec_PML),stat=ier)
+          if(ier /= 0) stop 'error: not enough memory to allocate array rmemory_dux_dx_prime'
+          allocate(rmemory_dux_dz_prime(NGLLX,NGLLZ,nspec_PML),stat=ier)
+          if(ier /= 0) stop 'error: not enough memory to allocate array rmemory_dux_dz_prime'
+          allocate(rmemory_duz_dx_prime(NGLLX,NGLLZ,nspec_PML),stat=ier)
+          if(ier /= 0) stop 'error: not enough memory to allocate array rmemory_duz_dx_prime'
+          allocate(rmemory_duz_dz_prime(NGLLX,NGLLZ,nspec_PML),stat=ier)
+          if(ier /= 0) stop 'error: not enough memory to allocate array rmemory_duz_dz_prime'
+        endif
+
         if(time_stepping_scheme == 2)then
           allocate(rmemory_displ_elastic_LDDRK(2,3,NGLLX,NGLLZ,nspec_PML),stat=ier) 
           if(ier /= 0) stop 'error: not enough memory to allocate array rmemory_displ_elastic' 
@@ -2961,6 +2978,13 @@
         rmemory_duz_dx(:,:,:) = ZERO
         rmemory_duz_dz(:,:,:) = ZERO
 
+        if(ROTATE_PML_ACTIVATE)then 
+          rmemory_dux_dx_prime(:,:,:) = ZERO
+          rmemory_dux_dz_prime(:,:,:) = ZERO
+          rmemory_duz_dx_prime(:,:,:) = ZERO
+          rmemory_duz_dz_prime(:,:,:) = ZERO
+        endif
+
         if(time_stepping_scheme == 2)then
         rmemory_displ_elastic_LDDRK(:,:,:,:,:) = ZERO
         rmemory_dux_dx_LDDRK(:,:,:) = ZERO
@@ -2977,6 +3001,12 @@
         allocate(rmemory_duz_dx(1,1,1))
         allocate(rmemory_duz_dz(1,1,1))
 
+        allocate(rmemory_dux_dx_prime(1,1,1)) 
+        allocate(rmemory_dux_dz_prime(1,1,1))
+        allocate(rmemory_duz_dx_prime(1,1,1))
+        allocate(rmemory_duz_dz_prime(1,1,1))
+       
+
         if(time_stepping_scheme == 2)then
         allocate(rmemory_displ_elastic_LDDRK(1,1,1,1,1))
         allocate(rmemory_dux_dx_LDDRK(1,1,1))
@@ -3031,6 +3061,12 @@
       allocate(rmemory_dux_dz(1,1,1))
       allocate(rmemory_duz_dx(1,1,1))
       allocate(rmemory_duz_dz(1,1,1))
+
+      allocate(rmemory_dux_dx_prime(1,1,1)) 
+      allocate(rmemory_dux_dz_prime(1,1,1))
+      allocate(rmemory_duz_dx_prime(1,1,1))
+      allocate(rmemory_duz_dz_prime(1,1,1))
+
       allocate(rmemory_displ_elastic(1,1,1,1,1))
 
       allocate(rmemory_displ_elastic_LDDRK(1,1,1,1,1))
@@ -5523,10 +5559,12 @@
                is_PML,nspec_PML,spec_to_PML,region_CPML, &
                K_x_store,K_z_store,d_x_store,d_z_store,alpha_x_store,alpha_z_store, &
                rmemory_displ_elastic,rmemory_dux_dx,rmemory_dux_dz,rmemory_duz_dx,rmemory_duz_dz, &
+               rmemory_dux_dx_prime,rmemory_dux_dz_prime,rmemory_duz_dx_prime,rmemory_duz_dz_prime, &
                rmemory_displ_elastic_LDDRK,rmemory_dux_dx_LDDRK,rmemory_dux_dz_LDDRK,&
                rmemory_duz_dx_LDDRK,rmemory_duz_dz_LDDRK, &
-               PML_BOUNDARY_CONDITIONS)
+               PML_BOUNDARY_CONDITIONS,ROTATE_PML_ACTIVATE,ROTATE_PML_ANGLE)  
 
+
       if(anyabs .and. SAVE_FORWARD .and. SIMULATION_TYPE == 1) then
         !--- left absorbing boundary
         if(nspec_left >0) then



More information about the CIG-COMMITS mailing list