[cig-commits] r21151 - seismo/3D/SPECFEM3D/trunk/src/specfem3D
surendra at geodynamics.org
surendra at geodynamics.org
Thu Dec 13 18:04:35 PST 2012
Author: surendra
Date: 2012-12-13 18:04:35 -0800 (Thu, 13 Dec 2012)
New Revision: 21151
Modified:
seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_elastic_Dev.f90
seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_elastic_Dev2.f90
seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_elastic_Dev_openmp.f90
Log:
Added Kelvin-Vogit damping parameter for computations with Deville products
Modified: seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_elastic_Dev.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_elastic_Dev.f90 2012-12-14 01:58:49 UTC (rev 21150)
+++ seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_elastic_Dev.f90 2012-12-14 02:04:35 UTC (rev 21151)
@@ -58,6 +58,8 @@
use constants,only: CUSTOM_REAL,NGLLX,NGLLY,NGLLZ,NDIM, &
N_SLS,SAVE_MOHO_MESH, &
ONE_THIRD,FOUR_THIRDS,m1,m2
+ use fault_solver_dynamic, only : Kelvin_Voigt_eta
+
implicit none
integer :: NSPEC_AB,NGLOB_AB
@@ -217,6 +219,8 @@
integer ispec,iglob,ispec_p,num_elements
integer i,j,k
+ real(kind=CUSTOM_REAL) :: eta
+
imodulo_N_SLS = mod(N_SLS,3)
! choses inner/outer elements
@@ -240,18 +244,35 @@
endif
endif ! adjoint
+ ! Kelvin Voigt damping: artificial viscosity around dynamic faults
+
! stores displacment values in local array
- do k=1,NGLLZ
- do j=1,NGLLY
+ if (allocated(Kelvin_Voigt_eta)) then
+ eta = Kelvin_Voigt_eta(ispec)
+ do k=1,NGLLZ
+ do j=1,NGLLY
do i=1,NGLLX
- iglob = ibool(i,j,k,ispec)
- dummyx_loc(i,j,k) = displ(1,iglob)
- dummyy_loc(i,j,k) = displ(2,iglob)
- dummyz_loc(i,j,k) = displ(3,iglob)
+ iglob = ibool(i,j,k,ispec)
+ dummyx_loc(i,j,k) = displ(1,iglob) + eta*veloc(1,iglob)
+ dummyy_loc(i,j,k) = displ(2,iglob) + eta*veloc(2,iglob)
+ dummyz_loc(i,j,k) = displ(3,iglob) + eta*veloc(3,iglob)
enddo
- enddo
- enddo
+ enddo
+ enddo
+ else
+ do k=1,NGLLZ
+ do j=1,NGLLY
+ do i=1,NGLLX
+ iglob = ibool(i,j,k,ispec)
+ dummyx_loc(i,j,k) = displ(1,iglob)
+ dummyy_loc(i,j,k) = displ(2,iglob)
+ dummyz_loc(i,j,k) = displ(3,iglob)
+ enddo
+ enddo
+ enddo
+ endif
+
! use first order Taylor expansion of displacement for local storage of stresses
! at this current time step, to fix attenuation in a consistent way
if(ATTENUATION .and. COMPUTE_AND_STORE_STRAIN) then
Modified: seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_elastic_Dev2.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_elastic_Dev2.f90 2012-12-14 01:58:49 UTC (rev 21150)
+++ seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_elastic_Dev2.f90 2012-12-14 02:04:35 UTC (rev 21151)
@@ -62,6 +62,8 @@
use constants,only: CUSTOM_REAL,NGLLX,NGLLY,NGLLZ,NDIM, &
N_SLS,SAVE_MOHO_MESH, &
ONE_THIRD,FOUR_THIRDS,m1,m2
+ use fault_solver_dynamic, only : Kelvin_Voigt_eta
+
implicit none
integer :: NSPEC_AB,NGLOB_AB
@@ -221,6 +223,8 @@
integer ispec,iglob,ispec_p,num_elements
integer i,j,k
+ real(kind=CUSTOM_REAL) :: eta
+
imodulo_N_SLS = mod(N_SLS,3)
! choses inner/outer elements
@@ -244,18 +248,36 @@
endif
endif ! adjoint
+ ! Kelvin Voigt damping: artificial viscosity around dynamic faults
+
! stores displacment values in local array
- do k=1,NGLLZ
- do j=1,NGLLY
- do i=1,NGLLX
+ if (allocated(Kelvin_Voigt_eta)) then
+ eta = Kelvin_Voigt_eta(ispec)
+ do k=1,NGLLZ
+ do j=1,NGLLY
+ do i=1,NGLLX
iglob = ibool(i,j,k,ispec)
+ dummyx_loc(i,j,k) = displ(1,iglob) + eta*veloc(1,iglob)
+ dummyy_loc(i,j,k) = displ(2,iglob) + eta*veloc(2,iglob)
+ dummyz_loc(i,j,k) = displ(3,iglob) + eta*veloc(3,iglob)
+ enddo
+ enddo
+ enddo
+
+ else
+ do k=1,NGLLZ
+ do j=1,NGLLY
+ do i=1,NGLLX
+ iglob = ibool(i,j,k,ispec)
dummyx_loc(i,j,k) = displ(1,iglob)
dummyy_loc(i,j,k) = displ(2,iglob)
dummyz_loc(i,j,k) = displ(3,iglob)
+ enddo
enddo
enddo
- enddo
-
+ endif
+
+
! use first order Taylor expansion of displacement for local storage of stresses
! at this current time step, to fix attenuation in a consistent way
if(ATTENUATION .and. COMPUTE_AND_STORE_STRAIN) then
Modified: seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_elastic_Dev_openmp.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_elastic_Dev_openmp.f90 2012-12-14 01:58:49 UTC (rev 21150)
+++ seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_elastic_Dev_openmp.f90 2012-12-14 02:04:35 UTC (rev 21151)
@@ -70,6 +70,8 @@
dummyx_loc_att,dummyy_loc_att,dummyz_loc_att,tempx1_att,tempx2_att,tempx3_att, &
tempy1_att,tempy2_att,tempy3_att,tempz1_att,tempz2_att,tempz3_att
+ use fault_solver_dynamic, only : Kelvin_Voigt_eta
+
implicit none
integer :: NSPEC_AB,NGLOB_AB
@@ -182,6 +184,8 @@
integer num_colors_outer_elastic, num_colors_inner_elastic
integer icolor
+ real(kind=CUSTOM_REAL) :: eta
+
! write(*,*) "num_elem_colors_elastic(1) = ",num_elem_colors_elastic(1)
imodulo_N_SLS = mod(N_SLS,3)
@@ -252,17 +256,34 @@
endif
endif ! adjoint
- ! stores displacement values in local array
- do k=1,NGLLZ
- do j=1,NGLLY
- do i=1,NGLLX
+ ! Kelvin Voigt damping: artificial viscosity around dynamic faults
+
+ ! stores displacment values in local array
+ if (allocated(Kelvin_Voigt_eta)) then
+ eta = Kelvin_Voigt_eta(ispec)
+ do k=1,NGLLZ
+ do j=1,NGLLY
+ do i=1,NGLLX
iglob = ibool(i,j,k,ispec)
+ dummyx_loc(i,j,k,thread_id) = displ(1,iglob) + eta*veloc(1,iglob)
+ dummyy_loc(i,j,k,thread_id) = displ(2,iglob) + eta*veloc(2,iglob)
+ dummyz_loc(i,j,k,thread_id) = displ(3,iglob) + eta*veloc(3,iglob)
+ enddo
+ enddo
+ enddo
+
+ else
+ do k=1,NGLLZ
+ do j=1,NGLLY
+ do i=1,NGLLX
+ iglob = ibool(i,j,k,ispec)
dummyx_loc(i,j,k,thread_id) = displ(1,iglob)
dummyy_loc(i,j,k,thread_id) = displ(2,iglob)
dummyz_loc(i,j,k,thread_id) = displ(3,iglob)
- enddo
+ enddo
+ enddo
enddo
- enddo
+ endif
! stores velocity values in local array
do k=1,NGLLZ
More information about the CIG-COMMITS
mailing list