[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