[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