[cig-commits] r21908 - seismo/3D/SPECFEM3D/trunk/src/specfem3D

xie.zhinan at geodynamics.org xie.zhinan at geodynamics.org
Fri Apr 19 11:37:01 PDT 2013


Author: xie.zhinan
Date: 2013-04-19 11:37:00 -0700 (Fri, 19 Apr 2013)
New Revision: 21908

Modified:
   seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_acoustic_calling_routine.f90
   seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_acoustic_noDev.f90
   seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_viscoelastic_noDev.f90
   seismo/3D/SPECFEM3D/trunk/src/specfem3D/pml_compute_accel_contribution.f90
   seismo/3D/SPECFEM3D/trunk/src/specfem3D/pml_compute_memory_variables.f90
Log:
fix one error when using pml in acoustic_elastic simulation


Modified: seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_acoustic_calling_routine.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_acoustic_calling_routine.f90	2013-04-19 08:02:00 UTC (rev 21907)
+++ seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_acoustic_calling_routine.f90	2013-04-19 18:37:00 UTC (rev 21908)
@@ -115,7 +115,8 @@
                         wgllwgll_xy,wgllwgll_xz,wgllwgll_yz, &
                         rhostore,jacobian,ibool,deltat, &
                         num_phase_ispec_acoustic,nspec_inner_acoustic,nspec_outer_acoustic,&
-                        phase_ispec_inner_acoustic)
+                        phase_ispec_inner_acoustic,&
+                        abs_boundary_ijk,num_abs_boundary_faces,phase_is_inner,ispec_is_inner,abs_boundary_ispec)
       endif
 
       ! adjoint simulations
@@ -139,7 +140,8 @@
                         wgllwgll_xy,wgllwgll_xz,wgllwgll_yz, &
                         rhostore,jacobian,ibool,deltat, &
                         num_phase_ispec_acoustic,nspec_inner_acoustic,nspec_outer_acoustic,&
-                        phase_ispec_inner_acoustic)
+                        phase_ispec_inner_acoustic,&
+                        abs_boundary_ijk,num_abs_boundary_faces,phase_is_inner,ispec_is_inner,abs_boundary_ispec)
         endif
       endif
 

Modified: seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_acoustic_noDev.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_acoustic_noDev.f90	2013-04-19 08:02:00 UTC (rev 21907)
+++ seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_acoustic_noDev.f90	2013-04-19 18:37:00 UTC (rev 21908)
@@ -34,14 +34,16 @@
                         wgllwgll_xy,wgllwgll_xz,wgllwgll_yz, &
                         rhostore,jacobian,ibool,deltat, &
                         num_phase_ispec_acoustic,nspec_inner_acoustic,nspec_outer_acoustic,&
-                        phase_ispec_inner_acoustic)
+                        phase_ispec_inner_acoustic,&
+                        abs_boundary_ijk,num_abs_boundary_faces,phase_is_inner,ispec_is_inner,abs_boundary_ispec)
 
 ! computes forces for acoustic elements
 !
 ! note that pressure is defined as:
 !     p = - Chi_dot_dot
 !
-  use specfem_par,only: CUSTOM_REAL,NGLLX,NGLLY,NGLLZ,TINYVAL_SNGL,STACEY_ABSORBING_CONDITIONS,PML_CONDITIONS
+  use specfem_par,only: CUSTOM_REAL,NGLLX,NGLLY,NGLLZ,TINYVAL_SNGL,STACEY_ABSORBING_CONDITIONS,PML_CONDITIONS,NGLLSQUARE
+  use specfem_par_acoustic, only : ispec_is_acoustic
   use pml_par
 
   implicit none
@@ -76,9 +78,6 @@
   integer, dimension(num_phase_ispec_acoustic,2) :: phase_ispec_inner_acoustic
 
 ! local variables
-  real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ) :: &
-       tempx1,tempx2,tempx3,tempy1,tempy2,tempy3,tempz1,tempz2,tempz3
-
   real(kind=CUSTOM_REAL) :: hp1,hp2,hp3
 
   real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ) :: chi_elem
@@ -96,6 +95,16 @@
   ! local C-PML absorbing boundary conditions parameters
   integer :: ispec_CPML
 
+! communication overlap
+  logical, dimension(NSPEC_AB) :: ispec_is_inner
+  logical :: phase_is_inner
+
+! outer boundary of CPML
+  integer :: num_abs_boundary_faces
+  integer :: abs_boundary_ijk(3,NGLLSQUARE,num_abs_boundary_faces)
+  integer :: abs_boundary_ispec(num_abs_boundary_faces)
+  integer :: igll,iface
+
   if( iphase == 1 ) then
     num_elements = nspec_outer_acoustic
   else
@@ -219,8 +228,8 @@
        ! because array is_CPML() is unallocated when PML_CONDITIONS is false
        if(is_CPML(ispec)) then
           ! sets C-PML elastic memory variables to compute stress sigma and form dot product with test vector
-          call pml_compute_memory_variables(ispec,ispec_CPML,deltat,tempx1,tempy1,tempz1,tempx2,tempy2,tempz2, &
-               tempx3,tempy3,tempz3,temp1,temp2,temp3,NSPEC_AB,xix,xiy,xiz,etax,etay,etaz,gammax,gammay,gammaz,jacobian)
+          call pml_compute_memory_variables_acoustic(ispec,ispec_CPML,deltat,temp1,temp2,temp3, &
+                                                     NSPEC_AB,xix,xiy,xiz,etax,etay,etaz,gammax,gammay,gammaz,jacobian)
 
           ! calculates contribution from each C-PML element to update acceleration
           call pml_compute_accel_contribution_acoustic(ispec,ispec_CPML,deltat,nspec_AB,jacobian)
@@ -271,6 +280,31 @@
 ! Thus, there is nothing to enforce explicitly here.
 ! There is something to enforce explicitly only in the case of elastic elements, for which a Dirichlet
 ! condition is needed for the displacement vector, which is the vectorial unknown for these elements.
+  ! C-PML boundary
+    if(PML_CONDITIONS)then
+       do iface=1,num_abs_boundary_faces
+           ispec = abs_boundary_ispec(iface)
+           if (ispec_is_inner(ispec) .eqv. phase_is_inner) then
+              if( ispec_is_acoustic(ispec) ) then
+                 ! reference gll points on boundary face
+                 do igll = 1,NGLLSQUARE
 
+                    ! gets local indices for GLL point
+                    i = abs_boundary_ijk(1,igll,iface)
+                    j = abs_boundary_ijk(2,igll,iface)
+                    k = abs_boundary_ijk(3,igll,iface)
+
+                    iglob=ibool(i,j,k,ispec)
+
+                    potential_dot_dot_acoustic(iglob) = 0.0
+                    potential_dot_acoustic(iglob) = 0.0
+                    potential_acoustic(iglob) = 0.0
+
+                 enddo
+             endif ! ispec_is_acoustic
+            endif
+        enddo
+      endif
+
   end subroutine compute_forces_acoustic_noDev
 

Modified: seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_viscoelastic_noDev.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_viscoelastic_noDev.f90	2013-04-19 08:02:00 UTC (rev 21907)
+++ seismo/3D/SPECFEM3D/trunk/src/specfem3D/compute_forces_viscoelastic_noDev.f90	2013-04-19 18:37:00 UTC (rev 21908)
@@ -167,7 +167,6 @@
     newtempx1,newtempx2,newtempx3,newtempy1,newtempy2,newtempy3,newtempz1,newtempz2,newtempz3
   real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ) :: &
     tempx1,tempx2,tempx3,tempy1,tempy2,tempy3,tempz1,tempz2,tempz3
-  real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ) :: temp1,temp2,temp3 !ZN
 
   real(kind=CUSTOM_REAL) duxdxl_att,duxdyl_att,duxdzl_att,duydxl_att
   real(kind=CUSTOM_REAL) duydyl_att,duydzl_att,duzdxl_att,duzdyl_att,duzdzl_att
@@ -733,8 +732,8 @@
        ! because array is_CPML() is unallocated when PML_CONDITIONS is false
        if(is_CPML(ispec)) then
           ! sets C-PML elastic memory variables to compute stress sigma and form dot product with test vector
-          call pml_compute_memory_variables(ispec,ispec_CPML,deltat,tempx1,tempy1,tempz1,tempx2,tempy2,tempz2, &
-               tempx3,tempy3,tempz3,temp1,temp2,temp3,NSPEC_AB,xix,xiy,xiz,etax,etay,etaz,gammax,gammay,gammaz,jacobian)
+          call pml_compute_memory_variables_elastic(ispec,ispec_CPML,deltat,tempx1,tempy1,tempz1,tempx2,tempy2,tempz2, &
+               tempx3,tempy3,tempz3,NSPEC_AB,xix,xiy,xiz,etax,etay,etaz,gammax,gammay,gammaz,jacobian)
 
           ! calculates contribution from each C-PML element to update acceleration
           call pml_compute_accel_contribution_elastic(ispec,ispec_CPML,deltat,nspec_AB,jacobian)
@@ -881,13 +880,9 @@
   ! C-PML boundary
     if(PML_CONDITIONS)then
        do iface=1,num_abs_boundary_faces
-
            ispec = abs_boundary_ispec(iface)
-
            if (ispec_is_inner(ispec) .eqv. phase_is_inner) then
-
               if( ispec_is_elastic(ispec) ) then
-
                  ! reference gll points on boundary face
                  do igll = 1,NGLLSQUARE
 
@@ -904,7 +899,7 @@
 
                  enddo
              endif ! ispec_is_elastic
-           endif ! ispec_is_inner
+           endif
         enddo
       endif
 

Modified: seismo/3D/SPECFEM3D/trunk/src/specfem3D/pml_compute_accel_contribution.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/specfem3D/pml_compute_accel_contribution.f90	2013-04-19 08:02:00 UTC (rev 21907)
+++ seismo/3D/SPECFEM3D/trunk/src/specfem3D/pml_compute_accel_contribution.f90	2013-04-19 18:37:00 UTC (rev 21908)
@@ -61,11 +61,8 @@
   do k=1,NGLLZ
      do j=1,NGLLY
         do i=1,NGLLX
-           if( ispec_is_elastic(ispec) ) then
-              rhol = rhostore(i,j,k,ispec)
-              jacobianl = jacobian(i,j,k,ispec)
-           endif
-
+           rhol = rhostore(i,j,k,ispec)
+           jacobianl = jacobian(i,j,k,ispec)
            iglob = ibool(i,j,k,ispec)
 
            if( CPML_regions(ispec_CPML) == CPML_X_ONLY ) then
@@ -85,25 +82,21 @@
                  coef2_1 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) &
+                   + (displ(1,iglob) + deltat * veloc(1,iglob)) * coef1_1 + displ(1,iglob) * coef2_1
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) = 0.0
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,3) = 0.0
 
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) &
-                      + (displ(1,iglob) + deltat * veloc(1,iglob)) * coef1_1 + displ(1,iglob) * coef2_1
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) = 0.0
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,3) = 0.0
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) &
+                   + (displ(2,iglob) + deltat * veloc(2,iglob)) * coef1_1 + displ(2,iglob) * coef2_1
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) = 0.0
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,3) = 0.0
 
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) &
-                      + (displ(2,iglob) + deltat * veloc(2,iglob)) * coef1_1 + displ(2,iglob) * coef2_1
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) = 0.0
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,3) = 0.0
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) &
+                   + (displ(3,iglob) + deltat * veloc(3,iglob)) * coef1_1 + displ(3,iglob) * coef2_1
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) = 0.0
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,3) = 0.0
 
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) &
-                      + (displ(3,iglob) + deltat * veloc(3,iglob)) * coef1_1 + displ(3,iglob) * coef2_1
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) = 0.0
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,3) = 0.0
-
-              endif
-
               !---------------------- A0, A1, A2, A3, A4 and A5 --------------------------
               A0 = k_store_x(i,j,k,ispec_CPML)
               A1 = d_store_x(i,j,k,ispec_CPML)
@@ -117,31 +110,27 @@
               fac3 = wgllwgll_xy(i,j)
               fac4 = sqrt(fac1 * fac2 * fac3)
 
-              if( ispec_is_elastic(ispec) ) then
+              accel_elastic_CPML(1,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(1,iglob) + A2 * displ(1,iglob) + &
+                   A3 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(1,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(1,iglob) + A2 * displ(1,iglob) + &
-                      A3 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,3)  &
-                      )
+              accel_elastic_CPML(2,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(2,iglob) + A2 * displ(2,iglob) + &
+                   A3 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(2,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(2,iglob) + A2 * displ(2,iglob) + &
-                      A3 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,3)  &
-                      )
+              accel_elastic_CPML(3,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(3,iglob) + A2 * displ(3,iglob) + &
+                   A3 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(3,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(3,iglob) + A2 * displ(3,iglob) + &
-                      A3 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,3)  &
-                      )
-
-              endif
-
            else if( CPML_regions(ispec_CPML) == CPML_Y_ONLY ) then
               !------------------------------------------------------------------------------
               !---------------------------- Y-surface C-PML ---------------------------------
@@ -159,25 +148,21 @@
                  coef2_1 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) &
+                   + (displ(1,iglob) + deltat * veloc(1,iglob)) * coef1_1 + displ(1,iglob) * coef2_1
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) = 0.0
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,3) = 0.0
 
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) &
-                      + (displ(1,iglob) + deltat * veloc(1,iglob)) * coef1_1 + displ(1,iglob) * coef2_1
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) = 0.0
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,3) = 0.0
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) &
+                   + (displ(2,iglob) + deltat * veloc(2,iglob)) * coef1_1 + displ(2,iglob) * coef2_1
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) = 0.0
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,3) = 0.0
 
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) &
-                      + (displ(2,iglob) + deltat * veloc(2,iglob)) * coef1_1 + displ(2,iglob) * coef2_1
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) = 0.0
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,3) = 0.0
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) &
+                   + (displ(3,iglob) + deltat * veloc(3,iglob)) * coef1_1 + displ(3,iglob) * coef2_1
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) = 0.0
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,3) = 0.0
 
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) &
-                      + (displ(3,iglob) + deltat * veloc(3,iglob)) * coef1_1 + displ(3,iglob) * coef2_1
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) = 0.0
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,3) = 0.0
-
-              endif
-
               !---------------------- A0, A1, A2, A3, A4 and A5 --------------------------
               A0 = k_store_y(i,j,k,ispec_CPML)
               A1 = d_store_y(i,j,k,ispec_CPML)
@@ -191,31 +176,27 @@
               fac3 = wgllwgll_xy(i,j)
               fac4 = sqrt(fac1 * fac2 * fac3)
 
-              if( ispec_is_elastic(ispec) ) then
+              accel_elastic_CPML(1,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(1,iglob) + A2 * displ(1,iglob) + &
+                   A3 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(1,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(1,iglob) + A2 * displ(1,iglob) + &
-                      A3 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,3)  &
-                      )
+              accel_elastic_CPML(2,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(2,iglob) + A2 * displ(2,iglob) + &
+                   A3 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(2,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(2,iglob) + A2 * displ(2,iglob) + &
-                      A3 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,3)  &
-                      )
+              accel_elastic_CPML(3,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(3,iglob) + A2 * displ(3,iglob) + &
+                   A3 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(3,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(3,iglob) + A2 * displ(3,iglob) + &
-                      A3 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,3)  &
-                      )
-
-              endif
-
            else if( CPML_regions(ispec_CPML) == CPML_Z_ONLY ) then
               !------------------------------------------------------------------------------
               !---------------------------- Z-surface C-PML ---------------------------------
@@ -233,25 +214,21 @@
                  coef2_1 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) &
+                   + (displ(1,iglob) + deltat * veloc(1,iglob)) * coef1_1 + displ(1,iglob) * coef2_1
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) = 0.0
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,3) = 0.0
 
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) &
-                      + (displ(1,iglob) + deltat * veloc(1,iglob)) * coef1_1 + displ(1,iglob) * coef2_1
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) = 0.0
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,3) = 0.0
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) &
+                   + (displ(2,iglob) + deltat * veloc(2,iglob)) * coef1_1 + displ(2,iglob) * coef2_1
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) = 0.0
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,3) = 0.0
 
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) &
-                      + (displ(2,iglob) + deltat * veloc(2,iglob)) * coef1_1 + displ(2,iglob) * coef2_1
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) = 0.0
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,3) = 0.0
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) &
+                   + (displ(3,iglob) + deltat * veloc(3,iglob)) * coef1_1 + displ(3,iglob) * coef2_1
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) = 0.0
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,3) = 0.0
 
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) &
-                      + (displ(3,iglob) + deltat * veloc(3,iglob)) * coef1_1 + displ(3,iglob) * coef2_1
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) = 0.0
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,3) = 0.0
-
-              endif
-
               !---------------------- A0, A1, A2, A3, A4 and A5 --------------------------
               A0 = k_store_z(i,j,k,ispec_CPML)
               A1 = d_store_z(i,j,k,ispec_CPML)
@@ -265,31 +242,27 @@
               fac3 = wgllwgll_xy(i,j)
               fac4 = sqrt(fac1 * fac2 * fac3)
 
-              if( ispec_is_elastic(ispec) ) then
+              accel_elastic_CPML(1,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(1,iglob) + A2 * displ(1,iglob) + &
+                   A3 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(1,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(1,iglob) + A2 * displ(1,iglob) + &
-                      A3 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,3)  &
-                      )
+              accel_elastic_CPML(2,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(2,iglob) + A2 * displ(2,iglob) + &
+                   A3 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(2,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(2,iglob) + A2 * displ(2,iglob) + &
-                      A3 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,3)  &
-                      )
+              accel_elastic_CPML(3,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(3,iglob) + A2 * displ(3,iglob) + &
+                   A3 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(3,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(3,iglob) + A2 * displ(3,iglob) + &
-                      A3 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,3)  &
-                      )
-
-              endif
-
            else if( CPML_regions(ispec_CPML) == CPML_XY_ONLY ) then
               !------------------------------------------------------------------------------
               !---------------------------- XY-edge C-PML -----------------------------------
@@ -311,31 +284,27 @@
               coef1_2 = coef1_1
               coef2_2 = coef2_1
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) &
+                   + (displ(1,iglob) + deltat * veloc(1,iglob)) * coef1_1 + displ(1,iglob) * coef2_1
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) &
+                   + (displ(1,iglob) + deltat * veloc(1,iglob)) * (it+0.0) * deltat * coef1_2 &
+                   + displ(1,iglob) * (it-0.0) * deltat * coef2_2
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,3) = 0.0
 
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) &
-                      + (displ(1,iglob) + deltat * veloc(1,iglob)) * coef1_1 + displ(1,iglob) * coef2_1
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) &
-                      + (displ(1,iglob) + deltat * veloc(1,iglob)) * (it+0.0) * deltat * coef1_2 &
-                      + displ(1,iglob) * (it-0.0) * deltat * coef2_2
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,3) = 0.0
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) &
+                   + (displ(2,iglob) + deltat * veloc(2,iglob)) * coef1_1 + displ(2,iglob) * coef2_1
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) &
+                   + (displ(2,iglob) + deltat * veloc(2,iglob)) * (it+0.0) * deltat * coef1_2 &
+                   + displ(2,iglob) * (it-0.0) * deltat * coef2_2
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,3) = 0.0
 
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) &
-                      + (displ(2,iglob) + deltat * veloc(2,iglob)) * coef1_1 + displ(2,iglob) * coef2_1
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) &
-                      + (displ(2,iglob) + deltat * veloc(2,iglob)) * (it+0.0) * deltat * coef1_2 &
-                      + displ(2,iglob) * (it-0.0) * deltat * coef2_2
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,3) = 0.0
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) &
+                   + (displ(3,iglob) + deltat * veloc(3,iglob)) * coef1_1 + displ(3,iglob) * coef2_1
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) &
+                   + (displ(3,iglob) + deltat * veloc(3,iglob)) * (it+0.0) * deltat * coef1_2 &
+                   + displ(3,iglob) * (it-0.0) * deltat * coef2_2
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,3) = 0.0
 
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) &
-                      + (displ(3,iglob) + deltat * veloc(3,iglob)) * coef1_1 + displ(3,iglob) * coef2_1
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) &
-                      + (displ(3,iglob) + deltat * veloc(3,iglob)) * (it+0.0) * deltat * coef1_2 &
-                      + displ(3,iglob) * (it-0.0) * deltat * coef2_2
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,3) = 0.0
-
-              endif
-
               !---------------------- A0, A1, A2, A3, A4 and A5 --------------------------
               A0 = k_store_x(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML)
               A1 = d_store_y(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) &
@@ -343,12 +312,10 @@
               A2 = d_store_x(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML) &
                    - alpha_store(i,j,k,ispec_CPML) * d_store_x(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) &
                    - alpha_store(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML)
-              if( ispec_is_elastic(ispec) ) then
-                 A3 = -2.0 * alpha_store(i,j,k,ispec_CPML) * d_store_x(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML) &
-                      + alpha_store(i,j,k,ispec_CPML)**2 * ( d_store_x(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) &
-                      + d_store_y(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) ) + alpha_store(i,j,k,ispec_CPML)**2 &
-                      * (it+0.0) * deltat * d_store_x(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML)
-              endif
+              A3 = -2.0 * alpha_store(i,j,k,ispec_CPML) * d_store_x(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML) &
+                   + alpha_store(i,j,k,ispec_CPML)**2 * ( d_store_x(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) &
+                   + d_store_y(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) ) + alpha_store(i,j,k,ispec_CPML)**2 &
+                   * (it+0.0) * deltat * d_store_x(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML)
               A4 = -alpha_store(i,j,k,ispec_CPML)**2 * d_store_x(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML)
               A5 = 0.0
 
@@ -357,31 +324,27 @@
               fac3 = wgllwgll_xy(i,j)
               fac4 = sqrt(fac1 * fac2 * fac3)
 
-              if( ispec_is_elastic(ispec) ) then
+              accel_elastic_CPML(1,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(1,iglob) + A2 * displ(1,iglob) + &
+                   A3 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(1,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(1,iglob) + A2 * displ(1,iglob) + &
-                      A3 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,3)  &
-                      )
+              accel_elastic_CPML(2,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(2,iglob) + A2 * displ(2,iglob) + &
+                   A3 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(2,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(2,iglob) + A2 * displ(2,iglob) + &
-                      A3 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,3)  &
-                      )
+              accel_elastic_CPML(3,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(3,iglob) + A2 * displ(3,iglob) + &
+                   A3 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(3,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(3,iglob) + A2 * displ(3,iglob) + &
-                      A3 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,3)  &
-                      )
-
-              endif
-
            else if( CPML_regions(ispec_CPML) == CPML_XZ_ONLY ) then
               !------------------------------------------------------------------------------
               !---------------------------- XZ-edge C-PML -----------------------------------
@@ -403,31 +366,27 @@
               coef1_2 = coef1_1
               coef2_2 = coef2_1
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) &
+                   + (displ(1,iglob) + deltat * veloc(1,iglob)) * coef1_1 + displ(1,iglob) * coef2_1
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) &
+                   + (displ(1,iglob) + deltat * veloc(1,iglob)) * (it+0.0) * deltat * coef1_2 &
+                   + displ(1,iglob) * (it-0.0) * deltat * coef2_2
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,3)= 0.0
 
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) &
-                      + (displ(1,iglob) + deltat * veloc(1,iglob)) * coef1_1 + displ(1,iglob) * coef2_1
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) &
-                      + (displ(1,iglob) + deltat * veloc(1,iglob)) * (it+0.0) * deltat * coef1_2 &
-                      + displ(1,iglob) * (it-0.0) * deltat * coef2_2
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,3)= 0.0
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) &
+                   + (displ(2,iglob) + deltat * veloc(2,iglob)) * coef1_1 + displ(2,iglob) * coef2_1
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) &
+                   + (displ(2,iglob) + deltat * veloc(2,iglob)) * (it+0.0) * deltat * coef1_2 &
+                   + displ(2,iglob) * (it-0.0) * deltat * coef2_2
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,3)= 0.0
 
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) &
-                      + (displ(2,iglob) + deltat * veloc(2,iglob)) * coef1_1 + displ(2,iglob) * coef2_1
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) &
-                      + (displ(2,iglob) + deltat * veloc(2,iglob)) * (it+0.0) * deltat * coef1_2 &
-                      + displ(2,iglob) * (it-0.0) * deltat * coef2_2
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,3)= 0.0
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) &
+                   + (displ(3,iglob) + deltat * veloc(3,iglob)) * coef1_1 + displ(3,iglob) * coef2_1
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) &
+                   + (displ(3,iglob) + deltat * veloc(3,iglob)) * (it+0.0) * deltat * coef1_2 &
+                   + displ(3,iglob) * (it-0.0) * deltat * coef2_2
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,3)= 0.0
 
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) &
-                      + (displ(3,iglob) + deltat * veloc(3,iglob)) * coef1_1 + displ(3,iglob) * coef2_1
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) &
-                      + (displ(3,iglob) + deltat * veloc(3,iglob)) * (it+0.0) * deltat * coef1_2 &
-                      + displ(3,iglob) * (it-0.0) * deltat * coef2_2
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,3)= 0.0
-
-              endif
-
               !---------------------- A0, A1, A2, A3, A4 and A5 --------------------------
               A0 = k_store_x(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML)
               A1 = d_store_x(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML)&
@@ -449,31 +408,27 @@
               fac3 = wgllwgll_xy(i,j)
               fac4 = sqrt(fac1 * fac2 * fac3)
 
-              if( ispec_is_elastic(ispec) ) then
+              accel_elastic_CPML(1,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(1,iglob) + A2 * displ(1,iglob) + &
+                   A3 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(1,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(1,iglob) + A2 * displ(1,iglob) + &
-                      A3 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,3)  &
-                      )
+              accel_elastic_CPML(2,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(2,iglob) + A2 * displ(2,iglob) + &
+                   A3 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(2,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(2,iglob) + A2 * displ(2,iglob) + &
-                      A3 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,3)  &
-                      )
+              accel_elastic_CPML(3,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(3,iglob) + A2 * displ(3,iglob) + &
+                   A3 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(3,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(3,iglob) + A2 * displ(3,iglob) + &
-                      A3 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,3)  &
-                      )
-
-              endif
-
            else if( CPML_regions(ispec_CPML) == CPML_YZ_ONLY ) then
               !------------------------------------------------------------------------------
               !---------------------------- YZ-edge C-PML -----------------------------------
@@ -495,31 +450,27 @@
               coef1_2 = coef1_1
               coef2_2 = coef2_1
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) &
+                   + (displ(1,iglob) + deltat * veloc(1,iglob)) * coef1_1 + displ(1,iglob) * coef2_1
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) &
+                   + (displ(1,iglob) + deltat * veloc(1,iglob)) * (it+0.0) * deltat * coef1_2 &
+                   + displ(1,iglob) * (it-0.0) * deltat * coef2_2
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,3)=0.d0
 
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) &
-                      + (displ(1,iglob) + deltat * veloc(1,iglob)) * coef1_1 + displ(1,iglob) * coef2_1
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) &
-                      + (displ(1,iglob) + deltat * veloc(1,iglob)) * (it+0.0) * deltat * coef1_2 &
-                      + displ(1,iglob) * (it-0.0) * deltat * coef2_2
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,3)=0.d0
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) &
+                   + (displ(2,iglob) + deltat * veloc(2,iglob)) * coef1_1 + displ(2,iglob) * coef2_1
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) &
+                   + (displ(2,iglob) + deltat * veloc(2,iglob)) * (it+0.0) * deltat * coef1_2 &
+                   + displ(2,iglob) * (it-0.0) * deltat * coef2_2
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,3)=0.d0
 
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) &
-                      + (displ(2,iglob) + deltat * veloc(2,iglob)) * coef1_1 + displ(2,iglob) * coef2_1
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) &
-                      + (displ(2,iglob) + deltat * veloc(2,iglob)) * (it+0.0) * deltat * coef1_2 &
-                      + displ(2,iglob) * (it-0.0) * deltat * coef2_2
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,3)=0.d0
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) &
+                   + (displ(3,iglob) + deltat * veloc(3,iglob)) * coef1_1 + displ(3,iglob) * coef2_1
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) &
+                   + (displ(3,iglob) + deltat * veloc(3,iglob)) * (it+0.0) * deltat * coef1_2 &
+                   + displ(3,iglob) * (it-0.0) * deltat * coef2_2
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,3)=0.d0
 
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) &
-                      + (displ(3,iglob) + deltat * veloc(3,iglob)) * coef1_1 + displ(3,iglob) * coef2_1
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) &
-                      + (displ(3,iglob) + deltat * veloc(3,iglob)) * (it+0.0) * deltat * coef1_2 &
-                      + displ(3,iglob) * (it-0.0) * deltat * coef2_2
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,3)=0.d0
-
-              endif
-
               !---------------------- A0, A1, A2, A3, A4 and A5 --------------------------
               A0 = k_store_y(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML)
               A1 = d_store_y(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) &
@@ -527,12 +478,10 @@
               A2 = d_store_y(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML) &
                    - alpha_store(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) &
                    - alpha_store(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML)
-              if( ispec_is_elastic(ispec) ) then
-                 A3 = -2.0 * alpha_store(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML) &
-                      + alpha_store(i,j,k,ispec_CPML)**2 * ( d_store_y(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) &
-                      + d_store_z(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) ) + alpha_store(i,j,k,ispec_CPML)**2 &
-                      * (it+0.0) * deltat * d_store_y(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML)
-              endif
+              A3 = -2.0 * alpha_store(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML) &
+                   + alpha_store(i,j,k,ispec_CPML)**2 * ( d_store_y(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) &
+                   + d_store_z(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) ) + alpha_store(i,j,k,ispec_CPML)**2 &
+                   * (it+0.0) * deltat * d_store_y(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML)
               A4 = -alpha_store(i,j,k,ispec_CPML)**2 * d_store_y(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML)
               A5 = 0.0
 
@@ -541,31 +490,27 @@
               fac3 = wgllwgll_xy(i,j)
               fac4 = sqrt(fac1 * fac2 * fac3)
 
-              if( ispec_is_elastic(ispec) ) then
+              accel_elastic_CPML(1,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(1,iglob) + A2 * displ(1,iglob) + &
+                   A3 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(1,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(1,iglob) + A2 * displ(1,iglob) + &
-                      A3 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,3)  &
-                      )
+              accel_elastic_CPML(2,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(2,iglob) + A2 * displ(2,iglob) + &
+                   A3 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(2,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(2,iglob) + A2 * displ(2,iglob) + &
-                      A3 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,3)  &
-                      )
+              accel_elastic_CPML(3,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(3,iglob) + A2 * displ(3,iglob) + &
+                   A3 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(3,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(3,iglob) + A2 * displ(3,iglob) + &
-                      A3 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,3)  &
-                      )
-
-              endif
-
            else if( CPML_regions(ispec_CPML) == CPML_XYZ ) then
               !------------------------------------------------------------------------------
               !---------------------------- XYZ-corner C-PML --------------------------------
@@ -591,37 +536,33 @@
               coef1_3 = coef1_1
               coef2_3 = coef2_1
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) &
+                   + (displ(1,iglob) + deltat * veloc(1,iglob)) * coef1_1 + displ(1,iglob) * coef2_1
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) &
+                   + (displ(1,iglob) + deltat * veloc(1,iglob)) * (it+0.0) * deltat * coef1_2 &
+                   + displ(1,iglob) * (it-0.0) * deltat * coef2_2
+              rmemory_displ_elastic(1,i,j,k,ispec_CPML,3) = coef0_3 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,3) &
+                   + (displ(1,iglob) + deltat * veloc(1,iglob)) * ((it+0.0) * deltat)**2 * coef1_3 &
+                   + displ(1,iglob) * ((it-0.0) * deltat)**2 * coef2_3
 
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) &
-                      + (displ(1,iglob) + deltat * veloc(1,iglob)) * coef1_1 + displ(1,iglob) * coef2_1
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) &
-                      + (displ(1,iglob) + deltat * veloc(1,iglob)) * (it+0.0) * deltat * coef1_2 &
-                      + displ(1,iglob) * (it-0.0) * deltat * coef2_2
-                 rmemory_displ_elastic(1,i,j,k,ispec_CPML,3) = coef0_3 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,3) &
-                      + (displ(1,iglob) + deltat * veloc(1,iglob)) * ((it+0.0) * deltat)**2 * coef1_3 &
-                      + displ(1,iglob) * ((it-0.0) * deltat)**2 * coef2_3
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) &
+                   + (displ(2,iglob) + deltat * veloc(2,iglob)) * coef1_1 + displ(2,iglob) * coef2_1
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) &
+                   + (displ(2,iglob) + deltat * veloc(2,iglob)) * (it+0.0) * deltat * coef1_2 &
+                   + displ(2,iglob) * (it-0.0) * deltat * coef2_2
+              rmemory_displ_elastic(2,i,j,k,ispec_CPML,3) = coef0_3 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,3) &
+                   + (displ(2,iglob) + deltat * veloc(2,iglob)) * ((it+0.0) * deltat)**2 * coef1_3 &
+                   + displ(2,iglob) * ((it-0.0) * deltat)**2 * coef2_3
 
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) &
-                      + (displ(2,iglob) + deltat * veloc(2,iglob)) * coef1_1 + displ(2,iglob) * coef2_1
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) &
-                      + (displ(2,iglob) + deltat * veloc(2,iglob)) * (it+0.0) * deltat * coef1_2 &
-                      + displ(2,iglob) * (it-0.0) * deltat * coef2_2
-                 rmemory_displ_elastic(2,i,j,k,ispec_CPML,3) = coef0_3 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,3) &
-                      + (displ(2,iglob) + deltat * veloc(2,iglob)) * ((it+0.0) * deltat)**2 * coef1_3 &
-                      + displ(2,iglob) * ((it-0.0) * deltat)**2 * coef2_3
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) &
+                   + (displ(3,iglob) + deltat * veloc(3,iglob)) * coef1_1 + displ(3,iglob) * coef2_1
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) &
+                   + (displ(3,iglob) + deltat * veloc(3,iglob)) * (it+0.0) * deltat * coef1_2 &
+                   + displ(3,iglob) * (it-0.0) * deltat * coef2_2
+              rmemory_displ_elastic(3,i,j,k,ispec_CPML,3) = coef0_3 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,3) &
+                   + (displ(3,iglob) + deltat * veloc(3,iglob)) * ((it+0.0) * deltat)**2 * coef1_3 &
+                   + displ(3,iglob) * ((it-0.0) * deltat)**2 * coef2_3
 
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) = coef0_1 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) &
-                      + (displ(3,iglob) + deltat * veloc(3,iglob)) * coef1_1 + displ(3,iglob) * coef2_1
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) = coef0_2 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) &
-                      + (displ(3,iglob) + deltat * veloc(3,iglob)) * (it+0.0) * deltat * coef1_2 &
-                      + displ(3,iglob) * (it-0.0) * deltat * coef2_2
-                 rmemory_displ_elastic(3,i,j,k,ispec_CPML,3) = coef0_3 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,3) &
-                      + (displ(3,iglob) + deltat * veloc(3,iglob)) * ((it+0.0) * deltat)**2 * coef1_3 &
-                      + displ(3,iglob) * ((it-0.0) * deltat)**2 * coef2_3
-
-              endif
-
               !---------------------- A0, A1, A2, A3, A4 and A5 --------------------------
               A0 = k_store_x(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML)
               A1 = d_store_x(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) + &
@@ -656,10 +597,8 @@
               !                  A4 = -temp_A4-2.0*(it+0.0) * deltat*temp_A5
               !                  A5 = temp_A5
 
-              if( ispec_is_elastic(ispec) ) then
-                 A3 = temp_A3 !+ (it+0.0) * deltat*temp_A4 !+ ((it+0.0) * deltat)**2*temp_A5
-                 A4 = 0.0 !-temp_A4 ! -2.0*(it+0.0) * deltat*temp_A5
-              endif
+              A3 = temp_A3 !+ (it+0.0) * deltat*temp_A4 !+ ((it+0.0) * deltat)**2*temp_A5
+              A4 = 0.0 !-temp_A4 ! -2.0*(it+0.0) * deltat*temp_A5
               A5 = 0.0 ! temp_A5
 
               fac1 = wgllwgll_yz(j,k)
@@ -667,30 +606,27 @@
               fac3 = wgllwgll_xy(i,j)
               fac4 = sqrt(fac1 * fac2 * fac3)
 
-              if( ispec_is_elastic(ispec) ) then
+              accel_elastic_CPML(1,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(1,iglob) + A2 * displ(1,iglob) + &
+                   A3 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(1,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(1,iglob) + A2 * displ(1,iglob) + &
-                      A3 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(1,i,j,k,ispec_CPML,3)  &
-                      )
+              accel_elastic_CPML(2,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(2,iglob) + A2 * displ(2,iglob) + &
+                   A3 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(2,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(2,iglob) + A2 * displ(2,iglob) + &
-                      A3 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(2,i,j,k,ispec_CPML,3)  &
-                      )
+              accel_elastic_CPML(3,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
+                   ( A1 * veloc(3,iglob) + A2 * displ(3,iglob) + &
+                   A3 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) + &
+                   A4 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) + &
+                   A5 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,3)  &
+                   )
 
-                 accel_elastic_CPML(3,i,j,k,ispec_CPML) =  fac4 * rhol * jacobianl * &
-                      ( A1 * veloc(3,iglob) + A2 * displ(3,iglob) + &
-                      A3 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,1) + &
-                      A4 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,2) + &
-                      A5 * rmemory_displ_elastic(3,i,j,k,ispec_CPML,3)  &
-                      )
-
-              endif
            endif
         enddo
      enddo
@@ -738,11 +674,8 @@
   do k=1,NGLLZ
      do j=1,NGLLY
         do i=1,NGLLX
-           if( ispec_is_acoustic(ispec) ) then
-              kappal = kappastore(i,j,k,ispec)
-              jacobianl = jacobian(i,j,k,ispec)
-           endif
-
+           kappal = kappastore(i,j,k,ispec)
+           jacobianl = jacobian(i,j,k,ispec)
            iglob = ibool(i,j,k,ispec)
 
            if( CPML_regions(ispec_CPML) == CPML_X_ONLY ) then
@@ -919,8 +852,8 @@
                       + (potential_acoustic(iglob) + deltat*potential_dot_acoustic(iglob)) * coef1_1 &
                       + potential_acoustic(iglob) * coef2_1
                  rmemory_potential_acoustic(i,j,k,ispec_CPML,2)=coef0_2 * rmemory_potential_acoustic(i,j,k,ispec_CPML,2) &
-                      + (potential_acoustic(iglob) + deltat*potential_dot_acoustic(iglob)) * (it+0.5)*deltat * coef1_2 &
-                      + potential_acoustic(iglob) * (it-0.5)*deltat * coef2_2
+                      + (potential_acoustic(iglob) + deltat*potential_dot_acoustic(iglob)) * (it+0.0)*deltat * coef1_2 &
+                      + potential_acoustic(iglob) * (it-0.0)*deltat * coef2_2
                  rmemory_potential_acoustic(i,j,k,ispec_CPML,3)=0.0
               endif
 
@@ -935,7 +868,7 @@
                  A3 = -2.0 * alpha_store(i,j,k,ispec_CPML) * d_store_x(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML) + &
                       alpha_store(i,j,k,ispec_CPML)**2 * ( d_store_x(i,j,k,ispec_CPML)*k_store_y(i,j,k,ispec_CPML) &
                       + d_store_y(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) ) + alpha_store(i,j,k,ispec_CPML)**2 &
-                      * (it+0.5) * deltat * d_store_x(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML)
+                      * (it+0.0) * deltat * d_store_x(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML)
               endif
               A4 = -alpha_store(i,j,k,ispec_CPML)**2 * d_store_x(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML)
               A5 = 0.0
@@ -982,8 +915,8 @@
                       + (potential_acoustic(iglob) + deltat*potential_dot_acoustic(iglob)) * coef1_1 &
                       + potential_acoustic(iglob) * coef2_1
                  rmemory_potential_acoustic(i,j,k,ispec_CPML,2)=coef0_2 * rmemory_potential_acoustic(i,j,k,ispec_CPML,2) &
-                      + (potential_acoustic(iglob) + deltat*potential_dot_acoustic(iglob)) * (it+0.5)*deltat * coef1_2 &
-                      + potential_acoustic(iglob) * (it-0.5)*deltat * coef2_2
+                      + (potential_acoustic(iglob) + deltat*potential_dot_acoustic(iglob)) * (it+0.0)*deltat * coef1_2 &
+                      + potential_acoustic(iglob) * (it-0.0)*deltat * coef2_2
                  rmemory_potential_acoustic(i,j,k,ispec_CPML,3)= 0.0
               endif
 
@@ -998,7 +931,7 @@
                  A3 = -2.0 * alpha_store(i,j,k,ispec_CPML) * d_store_x(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML) &
                       + alpha_store(i,j,k,ispec_CPML)**2 * ( d_store_x(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) &
                       + d_store_z(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) ) + alpha_store(i,j,k,ispec_CPML)**2 &
-                      * (it+0.5) * deltat * d_store_x(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML)
+                      * (it+0.0) * deltat * d_store_x(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML)
               endif
               A4 = -alpha_store(i,j,k,ispec_CPML)**2 * d_store_x(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML)
               A5 = 0.0
@@ -1045,8 +978,8 @@
                       + (potential_acoustic(iglob) + deltat*potential_dot_acoustic(iglob)) * coef1_1 &
                       + potential_acoustic(iglob) * coef2_1
                  rmemory_potential_acoustic(i,j,k,ispec_CPML,2)=coef0_2 * rmemory_potential_acoustic(i,j,k,ispec_CPML,2) &
-                      + (potential_acoustic(iglob) + deltat*potential_dot_acoustic(iglob)) * (it+0.5)*deltat * coef1_2 &
-                      + potential_acoustic(iglob) * (it-0.5)*deltat * coef2_2
+                      + (potential_acoustic(iglob) + deltat*potential_dot_acoustic(iglob)) * (it+0.0)*deltat * coef1_2 &
+                      + potential_acoustic(iglob) * (it-0.0)*deltat * coef2_2
                  rmemory_potential_acoustic(i,j,k,ispec_CPML,3)=0.d0
               endif
 
@@ -1061,7 +994,7 @@
                  A3 = -2.0 * alpha_store(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML) &
                       + alpha_store(i,j,k,ispec_CPML)**2 * ( d_store_y(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) &
                       + d_store_z(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) ) + alpha_store(i,j,k,ispec_CPML)**2 &
-                      * (it+0.5) * deltat * d_store_y(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML)
+                      * (it+0.0) * deltat * d_store_y(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML)
               endif
               A4 = -alpha_store(i,j,k,ispec_CPML)**2 * d_store_y(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML)
               A5 = 0.0
@@ -1112,11 +1045,11 @@
                       + (potential_acoustic(iglob) + deltat*potential_dot_acoustic(iglob)) * coef1_1 &
                       + potential_acoustic(iglob) * coef2_1
                  rmemory_potential_acoustic(i,j,k,ispec_CPML,2)=coef0_2 * rmemory_potential_acoustic(i,j,k,ispec_CPML,2) &
-                      + (potential_acoustic(iglob) + deltat*potential_dot_acoustic(iglob)) * (it+0.5)*deltat * coef1_2 &
-                      + potential_acoustic(iglob) * (it-0.5)*deltat * coef2_2
+                      + (potential_acoustic(iglob) + deltat*potential_dot_acoustic(iglob)) * (it+0.0)*deltat * coef1_2 &
+                      + potential_acoustic(iglob) * (it-0.0)*deltat * coef2_2
                  rmemory_potential_acoustic(i,j,k,ispec_CPML,3)=coef0_3 * rmemory_potential_acoustic(i,j,k,ispec_CPML,3) &
-                      + (potential_acoustic(iglob) + deltat*potential_dot_acoustic(iglob)) * ((it+0.5)*deltat)**2 * coef1_3 &
-                      + potential_acoustic(iglob) * ((it-0.5)*deltat)**2 * coef2_3
+                      + (potential_acoustic(iglob) + deltat*potential_dot_acoustic(iglob)) * ((it+0.0)*deltat)**2 * coef1_3 &
+                      + potential_acoustic(iglob) * ((it-0.0)*deltat)**2 * coef2_3
               endif
 
               !---------------------- A0, A1, A2, A3, A4 and A5 --------------------------
@@ -1150,8 +1083,8 @@
               temp_A5 = 0.5 * d_store_x(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML)
 
               if( ispec_is_acoustic(ispec)) then
-                 A3 = temp_A3 !+ (it+0.5)*deltat*temp_A4 !+ ((it+0.5)*deltat)**2*temp_A5
-                 A4 = 0.0 !-temp_A4 !-2.0*(it+0.5)*deltat*temp_A5
+                 A3 = temp_A3 !+ (it+0.0)*deltat*temp_A4 !+ ((it+0.0)*deltat)**2*temp_A5
+                 A4 = 0.0 !-temp_A4 !-2.0*(it+0.0)*deltat*temp_A5
               endif
               A5 = 0.0 ! temp_A5
 

Modified: seismo/3D/SPECFEM3D/trunk/src/specfem3D/pml_compute_memory_variables.f90
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/specfem3D/pml_compute_memory_variables.f90	2013-04-19 08:02:00 UTC (rev 21907)
+++ seismo/3D/SPECFEM3D/trunk/src/specfem3D/pml_compute_memory_variables.f90	2013-04-19 18:37:00 UTC (rev 21908)
@@ -26,8 +26,8 @@
 !
 ! United States and French Government Sponsorship Acknowledged.
 
-subroutine pml_compute_memory_variables(ispec,ispec_CPML,deltat,tempx1,tempy1,tempz1,tempx2,tempy2,tempz2, &
-                                    tempx3,tempy3,tempz3,temp1,temp2,temp3,NSPEC_AB,xix,xiy,xiz, & !ZN
+subroutine pml_compute_memory_variables_elastic(ispec,ispec_CPML,deltat,tempx1,tempy1,tempz1,tempx2,tempy2,tempz2, &
+                                    tempx3,tempy3,tempz3,NSPEC_AB,xix,xiy,xiz, &
                                     etax,etay,etaz,gammax,gammay,gammaz,jacobian)
   ! calculates C-PML elastic memory variables and computes stress sigma
 
@@ -36,9 +36,7 @@
   ! Anisotropic-Medium PML for Vector FETD With Modified Basis Functions,
   ! IEEE Transactions on Antennas and Propagation, vol. 54, no. 1, (2006)
 
-  use specfem_par, only: it,kappastore,mustore,rhostore,wgllwgll_xy,wgllwgll_xz,wgllwgll_yz !ZN
-  use specfem_par_elastic, only: ispec_is_elastic
-  use specfem_par_acoustic, only: ispec_is_acoustic
+  use specfem_par, only: it,kappastore,mustore,rhostore,wgllwgll_xy,wgllwgll_xz,wgllwgll_yz
   use pml_par
   use constants, only: NGLLX,NGLLY,NGLLZ,FOUR_THIRDS, &
                        CPML_X_ONLY,CPML_Y_ONLY,CPML_Z_ONLY,CPML_XY_ONLY,CPML_XZ_ONLY,CPML_YZ_ONLY,CPML_XYZ
@@ -56,17 +54,15 @@
   real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ), intent(out) :: tempx1,tempx2,tempx3
   real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ), intent(out) :: tempy1,tempy2,tempy3
   real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ), intent(out) :: tempz1,tempz2,tempz3
-  real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ), intent(out) :: temp1,temp2,temp3
 
   ! local parameters
   integer :: i,j,k
 
   real(kind=CUSTOM_REAL) :: sigma_xx,sigma_yy,sigma_zz,sigma_xy,sigma_xz,sigma_yz,sigma_yx,sigma_zx,sigma_zy
-  real(kind=CUSTOM_REAL) :: lambdal,mul,lambdalplus2mul,kappal,rho_invl !ZN
+  real(kind=CUSTOM_REAL) :: lambdal,mul,lambdalplus2mul,kappal
   real(kind=CUSTOM_REAL) :: duxdxl_x,duxdyl_x,duxdzl_x,duydxl_x,duydyl_x,duzdxl_x,duzdzl_x
   real(kind=CUSTOM_REAL) :: duxdxl_y,duxdyl_y,duydxl_y,duydyl_y,duydzl_y,duzdyl_y,duzdzl_y
   real(kind=CUSTOM_REAL) :: duxdxl_z,duxdzl_z,duydyl_z,duydzl_z,duzdxl_z,duzdyl_z,duzdzl_z
-  real(kind=CUSTOM_REAL) :: dpotentialdxl,dpotentialdyl,dpotentialdzl
   real(kind=CUSTOM_REAL) :: bb,coef0_1,coef1_1,coef2_1,coef0_2,coef1_2,coef2_2
   real(kind=CUSTOM_REAL) :: A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17 ! for convolution of strain(complex)
   real(kind=CUSTOM_REAL) :: A18,A19,A20 ! for convolution of strain(simple)
@@ -112,37 +108,26 @@
                  coef2_2 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) &
+                   + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) &
-                      + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_2
+              rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) &
+                   + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) &
-                      + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_2
+              rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) &
+                   + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) &
-                      + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_2
+              duxdxl_x = A6 * PML_dux_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) + A8 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2)
+              duydxl_y = A6 * PML_duy_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) + A8 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2)
+              duzdxl_z = A6 * PML_duz_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) + A8 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2)
 
-                 duxdxl_x = A6 * PML_dux_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) + A8 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2)
-                 duydxl_y = A6 * PML_duy_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) + A8 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2)
-                 duzdxl_z = A6 * PML_duz_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) + A8 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2)
 
-              else if( ispec_is_acoustic(ispec) ) then
-
-                 rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) &
-                      + PML_dpotential_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dxl(i,j,k,ispec_CPML) * coef2_2
-
-                 dpotentialdxl = A6 * PML_dpotential_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) + A8 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2)
-              endif
-
               !---------------------- A9, A10 and A11 --------------------------
               A9  = k_store_x(i,j,k,ispec_CPML)
               A10 = d_store_x(i,j,k,ispec_CPML)
@@ -160,37 +145,26 @@
                  coef2_1 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) = 0.d0
+              duxdyl_x = A9 * PML_dux_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) + A11 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2)
+              duydyl_y = A9 * PML_duy_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) + A11 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2)
+              duzdyl_z = A9 * PML_duz_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) + A11 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2)
 
-                 duxdyl_x = A9 * PML_dux_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) + A11 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2)
-                 duydyl_y = A9 * PML_duy_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) + A11 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2)
-                 duzdyl_z = A9 * PML_duz_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) + A11 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2)
 
-              else if( ispec_is_acoustic(ispec) ) then
-
-                 rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) &
-                      + PML_dpotential_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) = 0.d0
-
-                 dpotentialdyl = A9 * PML_dpotential_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) + A11 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2)
-              endif
-
               !---------------------- A12, A13 and A14 --------------------------
               A12 = k_store_x(i,j,k,ispec_CPML)
               A13 = d_store_x(i,j,k,ispec_CPML)
@@ -208,38 +182,25 @@
                  coef2_1 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
+              duxdzl_x = A12 * PML_dux_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) + A14 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2)
+              duydzl_y = A12 * PML_duy_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) + A14 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2)
+              duzdzl_z = A12 * PML_duz_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) + A14 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2)
 
-                 duxdzl_x = A12 * PML_dux_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) + A14 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2)
-                 duydzl_y = A12 * PML_duy_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) + A14 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2)
-                 duzdzl_z = A12 * PML_duz_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) + A14 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2)
-
-              else if( ispec_is_acoustic(ispec) ) then
-
-                 rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) &
-                      + PML_dpotential_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) = 0.d0
-
-                 dpotentialdzl = A12 * PML_dpotential_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) + A14 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2)
-              endif
-
-              if( ispec_is_elastic(ispec) ) then
                  !---------------------- A15 and A16 --------------------------
                  A15 = k_store_x(i,j,k,ispec_CPML)
                  A16 = d_store_x(i,j,k,ispec_CPML)
@@ -361,18 +322,7 @@
                  tempx3(i,j,k) = jacobianl * (sigma_xx*gammaxl + sigma_yx*gammayl + sigma_zx*gammazl) ! this goes to accel_x
                  tempy3(i,j,k) = jacobianl * (sigma_xy*gammaxl + sigma_yy*gammayl + sigma_zy*gammazl) ! this goes to accel_y
                  tempz3(i,j,k) = jacobianl * (sigma_xz*gammaxl + sigma_yz*gammayl + sigma_zz*gammazl) ! this goes to accel_z
-              endif
 
-              if( ispec_is_acoustic(ispec) ) then !ZN
-                 rho_invl = 1.0_CUSTOM_REAL / rhostore(i,j,k,ispec)
-                 temp1(i,j,k) = rho_invl * wgllwgll_yz(j,k) * jacobianl* &
-                                (xixl*dpotentialdxl + xiyl*dpotentialdyl + xizl*dpotentialdzl)
-                 temp2(i,j,k) = rho_invl * wgllwgll_xz(i,k) * jacobianl* &
-                                (etaxl*dpotentialdxl + etayl*dpotentialdyl + etazl*dpotentialdzl)
-                 temp3(i,j,k) = rho_invl * wgllwgll_xy(i,j) * jacobianl* &
-                                (gammaxl*dpotentialdxl + gammayl*dpotentialdyl + gammazl*dpotentialdzl)
-              endif
-
             else if( CPML_regions(ispec_CPML) == CPML_Y_ONLY ) then
               !------------------------------------------------------------------------------
               !---------------------------- Y-surface C-PML ---------------------------------
@@ -395,37 +345,25 @@
                  coef2_1 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) = 0.d0
+              duxdxl_x = A6 * PML_dux_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) + A8 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2)
+              duydxl_y = A6 * PML_duy_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) + A8 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2)
+              duzdxl_z = A6 * PML_duz_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) + A8 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2)
 
-                 duxdxl_x = A6 * PML_dux_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) + A8 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2)
-                 duydxl_y = A6 * PML_duy_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) + A8 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2)
-                 duzdxl_z = A6 * PML_duz_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) + A8 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2)
-
-              else if( ispec_is_acoustic(ispec) ) then
-
-                 rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) &
-                      + PML_dpotential_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) = 0.d0
-
-                 dpotentialdxl = A6 * PML_dpotential_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) + A8 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2)
-              endif
-
               !---------------------- A9, A10 and A11 --------------------------
               A9 = 1.d0/k_store_y(i,j,k,ispec_CPML)
               A10 = 0.d0
@@ -443,37 +381,25 @@
                  coef2_2 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) &
+                   + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) &
-                      + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_2
+              rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) &
+                   + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) &
-                      + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_2
+              rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) &
+                   + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) &
-                      + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_2
+              duxdyl_x = A9 * PML_dux_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) + A11 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2)
+              duydyl_y = A9 * PML_duy_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) + A11 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2)
+              duzdyl_z = A9 * PML_duz_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) + A11 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2)
 
-                 duxdyl_x = A9 * PML_dux_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) + A11 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2)
-                 duydyl_y = A9 * PML_duy_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) + A11 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2)
-                 duzdyl_z = A9 * PML_duz_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) + A11 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2)
-
-              else if( ispec_is_acoustic(ispec) ) then
-
-                 rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) &
-                      + PML_dpotential_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dyl(i,j,k,ispec_CPML) * coef2_2
-
-                 dpotentialdyl = A9 * PML_dpotential_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) + A11 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2)
-              endif
-
               !---------------------- A12, A13 and A14 --------------------------
               A12 = k_store_y(i,j,k,ispec_CPML)
               A13 = d_store_y(i,j,k,ispec_CPML)
@@ -491,170 +417,146 @@
                  coef2_1 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
+              duxdzl_x = A12 * PML_dux_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) + A14 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2)
+              duydzl_y = A12 * PML_duy_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) + A14 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2)
+              duzdzl_z = A12 * PML_duz_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) + A14 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2)
 
-                 duxdzl_x = A12 * PML_dux_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) + A14 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2)
-                 duydzl_y = A12 * PML_duy_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) + A14 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2)
-                 duzdzl_z = A12 * PML_duz_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) + A14 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2)
+              !---------------------- A15 and A16 --------------------------
+              A15 = 1.d0
+              A16 = 0.d0
 
-              else if( ispec_is_acoustic(ispec) ) then
+              rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duz_dzl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) &
-                      + PML_dpotential_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duz_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 dpotentialdzl = A12 * PML_dpotential_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) + A14 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2)
-              endif
+              duzdzl_y = A15 * PML_duz_dzl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_y(i,j,k,ispec_CPML,2)
+              duzdyl_y = A15 * PML_duz_dyl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dyl_y(i,j,k,ispec_CPML,2)
 
-              if( ispec_is_elastic(ispec) ) then
-                 !---------------------- A15 and A16 --------------------------
-                 A15 = 1.d0
-                 A16 = 0.d0
+              rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duy_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duz_dzl_y(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duy_dyl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duz_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
+              duydzl_z = A15 * PML_duy_dzl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dzl_z(i,j,k,ispec_CPML,2)
+              duydyl_z = A15 * PML_duy_dyl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_z(i,j,k,ispec_CPML,2)
 
-                 duzdzl_y = A15 * PML_duz_dzl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_y(i,j,k,ispec_CPML,2)
-                 duzdyl_y = A15 * PML_duz_dyl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dyl_y(i,j,k,ispec_CPML,2)
+              !---------------------- A17 and A18 --------------------------
+              A17 = k_store_y(i,j,k,ispec_CPML)
+              A18 = d_store_y(i,j,k,ispec_CPML)
 
-                 rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duy_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
+              bb = alpha_store(i,j,k,ispec_CPML)
 
-                 rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duy_dyl_z(i,j,k,ispec_CPML,2) = 0.d0
+              coef0_1 = exp(-bb * deltat)
 
-                 duydzl_z = A15 * PML_duy_dzl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dzl_z(i,j,k,ispec_CPML,2)
-                 duydyl_z = A15 * PML_duy_dyl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_z(i,j,k,ispec_CPML,2)
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
+              endif
 
-                 !---------------------- A17 and A18 --------------------------
-                 A17 = k_store_y(i,j,k,ispec_CPML)
-                 A18 = d_store_y(i,j,k,ispec_CPML)
+              rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dzl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 bb = alpha_store(i,j,k,ispec_CPML)
+              rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 coef0_1 = exp(-bb * deltat)
+              duzdzl_x = A17 * PML_duz_dzl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_x(i,j,k,ispec_CPML,2)
+              duzdxl_x = A17 * PML_duz_dxl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dxl_x(i,j,k,ispec_CPML,2)
 
-                 if( abs(bb) > 1.d-5 ) then
-                    coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
-                    coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
-                 else
-                    coef1_1 = deltat/2.0d0
-                    coef2_1 = deltat/2.0d0
-                 endif
+              rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dzl_x(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dxl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
+              duxdzl_z = A17 * PML_dux_dzl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dzl_z(i,j,k,ispec_CPML,2)
+              duxdxl_z = A17 * PML_dux_dxl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_z(i,j,k,ispec_CPML,2)
 
-                 duzdzl_x = A17 * PML_duz_dzl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_x(i,j,k,ispec_CPML,2)
-                 duzdxl_x = A17 * PML_duz_dxl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dxl_x(i,j,k,ispec_CPML,2)
 
-                 rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
+              !---------------------- A19 and A20--------------------------
+              A19 = 1.d0
+              A20 = 0.0
 
-                 rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dxl_z(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duy_dyl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 duxdzl_z = A17 * PML_dux_dzl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dzl_z(i,j,k,ispec_CPML,2)
-                 duxdxl_z = A17 * PML_dux_dxl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_z(i,j,k,ispec_CPML,2)
+              rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duy_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
 
+              duydyl_x = A19 * PML_duy_dyl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_x(i,j,k,ispec_CPML,2)
+              duydxl_x = A19 * PML_duy_dxl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dxl_x(i,j,k,ispec_CPML,2)
 
-                 !---------------------- A19 and A20--------------------------
-                 A19 = 1.d0
-                 A20 = 0.0
+              rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dux_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duy_dyl_x(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dux_dxl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duy_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
+              duxdyl_y = A19 * PML_dux_dyl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dyl_y(i,j,k,ispec_CPML,2)
+              duxdxl_y = A19 * PML_dux_dxl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_y(i,j,k,ispec_CPML,2)
 
-                 duydyl_x = A19 * PML_duy_dyl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_x(i,j,k,ispec_CPML,2)
-                 duydxl_x = A19 * PML_duy_dxl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dxl_x(i,j,k,ispec_CPML,2)
+              ! compute stress sigma
+              sigma_xx = lambdalplus2mul*duxdxl_x + lambdal*duydyl_x + lambdal*duzdzl_x
+              sigma_yx = mul*duxdyl_x + mul*duydxl_x
+              sigma_zx = mul*duzdxl_x + mul*duxdzl_x
 
-                 rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dux_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
+              sigma_xy = mul*duxdyl_y + mul*duydxl_y
+              sigma_yy = lambdal*duxdxl_y + lambdalplus2mul*duydyl_y + lambdal*duzdzl_y
+              sigma_zy = mul*duzdyl_y + mul*duydzl_y
 
-                 rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dux_dxl_y(i,j,k,ispec_CPML,2) = 0.d0
+              sigma_xz = mul*duzdxl_z + mul*duxdzl_z
+              sigma_yz = mul*duzdyl_z + mul*duydzl_z
+              sigma_zz = lambdal*duxdxl_z + lambdal*duydyl_z + lambdalplus2mul*duzdzl_z
 
-                 duxdyl_y = A19 * PML_dux_dyl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dyl_y(i,j,k,ispec_CPML,2)
-                 duxdxl_y = A19 * PML_dux_dxl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_y(i,j,k,ispec_CPML,2)
+              ! form dot product with test vector, non-symmetric form
+              tempx1(i,j,k) = jacobianl * (sigma_xx*xixl + sigma_yx*xiyl + sigma_zx*xizl) ! this goes to accel_x
+              tempy1(i,j,k) = jacobianl * (sigma_xy*xixl + sigma_yy*xiyl + sigma_zy*xizl) ! this goes to accel_y
+              tempz1(i,j,k) = jacobianl * (sigma_xz*xixl + sigma_yz*xiyl + sigma_zz*xizl) ! this goes to accel_z
 
-                 ! compute stress sigma
-                 sigma_xx = lambdalplus2mul*duxdxl_x + lambdal*duydyl_x + lambdal*duzdzl_x
-                 sigma_yx = mul*duxdyl_x + mul*duydxl_x
-                 sigma_zx = mul*duzdxl_x + mul*duxdzl_x
+              tempx2(i,j,k) = jacobianl * (sigma_xx*etaxl + sigma_yx*etayl + sigma_zx*etazl) ! this goes to accel_x
+              tempy2(i,j,k) = jacobianl * (sigma_xy*etaxl + sigma_yy*etayl + sigma_zy*etazl) ! this goes to accel_y
+              tempz2(i,j,k) = jacobianl * (sigma_xz*etaxl + sigma_yz*etayl + sigma_zz*etazl) ! this goes to accel_z
 
-                 sigma_xy = mul*duxdyl_y + mul*duydxl_y
-                 sigma_yy = lambdal*duxdxl_y + lambdalplus2mul*duydyl_y + lambdal*duzdzl_y
-                 sigma_zy = mul*duzdyl_y + mul*duydzl_y
+              tempx3(i,j,k) = jacobianl * (sigma_xx*gammaxl + sigma_yx*gammayl + sigma_zx*gammazl) ! this goes to accel_x
+              tempy3(i,j,k) = jacobianl * (sigma_xy*gammaxl + sigma_yy*gammayl + sigma_zy*gammazl) ! this goes to accel_y
+              tempz3(i,j,k) = jacobianl * (sigma_xz*gammaxl + sigma_yz*gammayl + sigma_zz*gammazl) ! this goes to accel_z
 
-                 sigma_xz = mul*duzdxl_z + mul*duxdzl_z
-                 sigma_yz = mul*duzdyl_z + mul*duydzl_z
-                 sigma_zz = lambdal*duxdxl_z + lambdal*duydyl_z + lambdalplus2mul*duzdzl_z
-
-                 ! form dot product with test vector, non-symmetric form
-                 tempx1(i,j,k) = jacobianl * (sigma_xx*xixl + sigma_yx*xiyl + sigma_zx*xizl) ! this goes to accel_x
-                 tempy1(i,j,k) = jacobianl * (sigma_xy*xixl + sigma_yy*xiyl + sigma_zy*xizl) ! this goes to accel_y
-                 tempz1(i,j,k) = jacobianl * (sigma_xz*xixl + sigma_yz*xiyl + sigma_zz*xizl) ! this goes to accel_z
-
-                 tempx2(i,j,k) = jacobianl * (sigma_xx*etaxl + sigma_yx*etayl + sigma_zx*etazl) ! this goes to accel_x
-                 tempy2(i,j,k) = jacobianl * (sigma_xy*etaxl + sigma_yy*etayl + sigma_zy*etazl) ! this goes to accel_y
-                 tempz2(i,j,k) = jacobianl * (sigma_xz*etaxl + sigma_yz*etayl + sigma_zz*etazl) ! this goes to accel_z
-
-                 tempx3(i,j,k) = jacobianl * (sigma_xx*gammaxl + sigma_yx*gammayl + sigma_zx*gammazl) ! this goes to accel_x
-                 tempy3(i,j,k) = jacobianl * (sigma_xy*gammaxl + sigma_yy*gammayl + sigma_zy*gammazl) ! this goes to accel_y
-                 tempz3(i,j,k) = jacobianl * (sigma_xz*gammaxl + sigma_yz*gammayl + sigma_zz*gammazl) ! this goes to accel_z
-              endif
-
-              if( ispec_is_acoustic(ispec) ) then  !ZN
-                 rho_invl = 1.0_CUSTOM_REAL / rhostore(i,j,k,ispec)
-                 temp1(i,j,k) = rho_invl * wgllwgll_yz(j,k) * jacobianl* &
-                                (xixl*dpotentialdxl + xiyl*dpotentialdyl + xizl*dpotentialdzl)
-                 temp2(i,j,k) = rho_invl * wgllwgll_xz(i,k) * jacobianl* &
-                                (etaxl*dpotentialdxl + etayl*dpotentialdyl + etazl*dpotentialdzl)
-                 temp3(i,j,k) = rho_invl * wgllwgll_xy(i,j) * jacobianl* &
-                                (gammaxl*dpotentialdxl + gammayl*dpotentialdyl + gammazl*dpotentialdzl)
-              endif
-
             else if( CPML_regions(ispec_CPML) == CPML_Z_ONLY ) then
 
               !------------------------------------------------------------------------------
@@ -678,37 +580,25 @@
                  coef2_1 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) = 0.d0
+              duxdxl_x = A6 * PML_dux_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) + A8 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2)
+              duydxl_y = A6 * PML_duy_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) + A8 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2)
+              duzdxl_z = A6 * PML_duz_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) + A8 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2)
 
-                 duxdxl_x = A6 * PML_dux_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) + A8 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2)
-                 duydxl_y = A6 * PML_duy_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) + A8 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2)
-                 duzdxl_z = A6 * PML_duz_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) + A8 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2)
-
-              else if( ispec_is_acoustic(ispec) ) then
-
-                 rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) &
-                      + PML_dpotential_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) = 0.d0
-
-                 dpotentialdxl = A6 * PML_dpotential_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) + A8 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2)
-              endif
-
               !---------------------- A9, A10 and A11 --------------------------
               A9 = k_store_z(i,j,k,ispec_CPML)
               A10 = d_store_z(i,j,k,ispec_CPML)
@@ -726,37 +616,25 @@
                  coef2_1 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) = 0.d0
-
-                 duxdyl_x = A9 * PML_dux_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) + A11 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2)
-                 duydyl_y = A9 * PML_duy_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) + A11 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2)
-                 duzdyl_z = A9 * PML_duz_dyl(i,j,k,ispec_CPML)  &
+              duxdyl_x = A9 * PML_dux_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) + A11 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2)
+              duydyl_y = A9 * PML_duy_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) + A11 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2)
+              duzdyl_z = A9 * PML_duz_dyl(i,j,k,ispec_CPML)  &
                       + A10 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) + A11 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2)
 
-              else if( ispec_is_acoustic(ispec) ) then
-
-                 rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) &
-                      + PML_dpotential_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) = 0.d0
-
-                 dpotentialdyl = A9 * PML_dpotential_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) + A11 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2)
-              endif
-
               !---------------------- A12, A13 and A14 --------------------------
               A12 = 1.0 / k_store_z(i,j,k,ispec_CPML)
               A13 = 0.d0
@@ -774,169 +652,145 @@
                  coef2_2 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) &
+                   + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) &
-                      + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_2
+              rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) &
+                   + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) &
-                      + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_2
+              rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) &
+                   + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) &
-                      + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_2
+              duxdzl_x = A12 * PML_dux_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) + A14 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2)
+              duydzl_y = A12 * PML_duy_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) + A14 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2)
+              duzdzl_z = A12 * PML_duz_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) + A14 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2)
 
-                 duxdzl_x = A12 * PML_dux_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) + A14 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2)
-                 duydzl_y = A12 * PML_duy_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) + A14 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2)
-                 duzdzl_z = A12 * PML_duz_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) + A14 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2)
+              !---------------------- A15 and A16 --------------------------
+              A15 = 1.d0
+              A16 = 0.d0
 
-              else if( ispec_is_acoustic(ispec) ) then
+              rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duz_dzl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) &
-                      + PML_dpotential_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dzl(i,j,k,ispec_CPML) * coef2_2
+              rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duz_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 dpotentialdzl = A12 * PML_dpotential_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) + A14 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2)
-              endif
+              duzdzl_y = A15 * PML_duz_dzl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_y(i,j,k,ispec_CPML,2)
+              duzdyl_y = A15 * PML_duz_dyl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dyl_y(i,j,k,ispec_CPML,2)
 
-              if( ispec_is_elastic(ispec) ) then
-                 !---------------------- A15 and A16 --------------------------
-                 A15 = 1.d0
-                 A16 = 0.d0
+              rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duy_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duz_dzl_y(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duy_dyl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duz_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
+              duydzl_z = A15 * PML_duy_dzl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dzl_z(i,j,k,ispec_CPML,2)
+              duydyl_z = A15 * PML_duy_dyl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_z(i,j,k,ispec_CPML,2)
 
-                 duzdzl_y = A15 * PML_duz_dzl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_y(i,j,k,ispec_CPML,2)
-                 duzdyl_y = A15 * PML_duz_dyl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dyl_y(i,j,k,ispec_CPML,2)
+              !---------------------- A17 and A18 --------------------------
+              A17 = 1.d0
+              A18 = 0.d0
 
-                 rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duy_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duz_dzl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duy_dyl_z(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duz_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 duydzl_z = A15 * PML_duy_dzl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dzl_z(i,j,k,ispec_CPML,2)
-                 duydyl_z = A15 * PML_duy_dyl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_z(i,j,k,ispec_CPML,2)
+              duzdzl_x = A17 * PML_duz_dzl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_x(i,j,k,ispec_CPML,2)
+              duzdxl_x = A17 * PML_duz_dxl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dxl_x(i,j,k,ispec_CPML,2)
 
-                 !---------------------- A17 and A18 --------------------------
-                 A17 = 1.d0
-                 A18 = 0.d0
+              rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dux_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duz_dzl_x(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dux_dxl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duz_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
+              duxdzl_z = A17 * PML_dux_dzl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dzl_z(i,j,k,ispec_CPML,2)
+              duxdxl_z = A17 * PML_dux_dxl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_z(i,j,k,ispec_CPML,2)
 
-                 duzdzl_x = A17 * PML_duz_dzl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_x(i,j,k,ispec_CPML,2)
-                 duzdxl_x = A17 * PML_duz_dxl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dxl_x(i,j,k,ispec_CPML,2)
+              !---------------------- A19 and A20 --------------------------
+              A19 = k_store_z(i,j,k,ispec_CPML)
+              A20 = d_store_z(i,j,k,ispec_CPML)
 
-                 rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dux_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
+              bb = alpha_store(i,j,k,ispec_CPML)
 
-                 rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dux_dxl_z(i,j,k,ispec_CPML,2) = 0.d0
+              coef0_1 = exp(-bb * deltat)
 
-                 duxdzl_z = A17 * PML_dux_dzl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dzl_z(i,j,k,ispec_CPML,2)
-                 duxdxl_z = A17 * PML_dux_dxl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_z(i,j,k,ispec_CPML,2)
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
+              endif
 
-                 !---------------------- A19 and A20 --------------------------
-                 A19 = k_store_z(i,j,k,ispec_CPML)
-                 A20 = d_store_z(i,j,k,ispec_CPML)
+              rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dyl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 bb = alpha_store(i,j,k,ispec_CPML)
+              rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 coef0_1 = exp(-bb * deltat)
+              duydyl_x = A19 * PML_duy_dyl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_x(i,j,k,ispec_CPML,2)
+              duydxl_x = A19 * PML_duy_dxl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dxl_x(i,j,k,ispec_CPML,2)
 
-                 if( abs(bb) > 1.d-5 ) then
-                    coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
-                    coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
-                 else
-                    coef1_1 = deltat/2.0d0
-                    coef2_1 = deltat/2.0d0
-                 endif
+              rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dyl_x(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dxl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
+              duxdyl_y = A19 * PML_dux_dyl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dyl_y(i,j,k,ispec_CPML,2)
+              duxdxl_y = A19 * PML_dux_dxl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_y(i,j,k,ispec_CPML,2)
 
-                 duydyl_x = A19 * PML_duy_dyl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_x(i,j,k,ispec_CPML,2)
-                 duydxl_x = A19 * PML_duy_dxl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dxl_x(i,j,k,ispec_CPML,2)
+              ! compute stress sigma
+              sigma_xx = lambdalplus2mul*duxdxl_x + lambdal*duydyl_x + lambdal*duzdzl_x
+              sigma_yx = mul*duxdyl_x + mul*duydxl_x
+              sigma_zx = mul*duzdxl_x + mul*duxdzl_x
 
-                 rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
+              sigma_xy = mul*duxdyl_y + mul*duydxl_y
+              sigma_yy = lambdal*duxdxl_y + lambdalplus2mul*duydyl_y + lambdal*duzdzl_y
+              sigma_zy = mul*duzdyl_y + mul*duydzl_y
 
-                 rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dxl_y(i,j,k,ispec_CPML,2) = 0.d0
+              sigma_xz = mul*duzdxl_z + mul*duxdzl_z
+              sigma_yz = mul*duzdyl_z + mul*duydzl_z
+              sigma_zz = lambdal*duxdxl_z + lambdal*duydyl_z + lambdalplus2mul*duzdzl_z
 
-                 duxdyl_y = A19 * PML_dux_dyl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dyl_y(i,j,k,ispec_CPML,2)
-                 duxdxl_y = A19 * PML_dux_dxl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_y(i,j,k,ispec_CPML,2)
+              ! form dot product with test vector, non-symmetric form
+              tempx1(i,j,k) = jacobianl * (sigma_xx*xixl + sigma_yx*xiyl + sigma_zx*xizl) ! this goes to accel_x
+              tempy1(i,j,k) = jacobianl * (sigma_xy*xixl + sigma_yy*xiyl + sigma_zy*xizl) ! this goes to accel_y
+              tempz1(i,j,k) = jacobianl * (sigma_xz*xixl + sigma_yz*xiyl + sigma_zz*xizl) ! this goes to accel_z
 
-                 ! compute stress sigma
-                 sigma_xx = lambdalplus2mul*duxdxl_x + lambdal*duydyl_x + lambdal*duzdzl_x
-                 sigma_yx = mul*duxdyl_x + mul*duydxl_x
-                 sigma_zx = mul*duzdxl_x + mul*duxdzl_x
+              tempx2(i,j,k) = jacobianl * (sigma_xx*etaxl + sigma_yx*etayl + sigma_zx*etazl) ! this goes to accel_x
+              tempy2(i,j,k) = jacobianl * (sigma_xy*etaxl + sigma_yy*etayl + sigma_zy*etazl) ! this goes to accel_y
+              tempz2(i,j,k) = jacobianl * (sigma_xz*etaxl + sigma_yz*etayl + sigma_zz*etazl) ! this goes to accel_z
 
-                 sigma_xy = mul*duxdyl_y + mul*duydxl_y
-                 sigma_yy = lambdal*duxdxl_y + lambdalplus2mul*duydyl_y + lambdal*duzdzl_y
-                 sigma_zy = mul*duzdyl_y + mul*duydzl_y
+              tempx3(i,j,k) = jacobianl * (sigma_xx*gammaxl + sigma_yx*gammayl + sigma_zx*gammazl) ! this goes to accel_x
+              tempy3(i,j,k) = jacobianl * (sigma_xy*gammaxl + sigma_yy*gammayl + sigma_zy*gammazl) ! this goes to accel_y
+              tempz3(i,j,k) = jacobianl * (sigma_xz*gammaxl + sigma_yz*gammayl + sigma_zz*gammazl) ! this goes to accel_z
 
-                 sigma_xz = mul*duzdxl_z + mul*duxdzl_z
-                 sigma_yz = mul*duzdyl_z + mul*duydzl_z
-                 sigma_zz = lambdal*duxdxl_z + lambdal*duydyl_z + lambdalplus2mul*duzdzl_z
-
-                 ! form dot product with test vector, non-symmetric form
-                 tempx1(i,j,k) = jacobianl * (sigma_xx*xixl + sigma_yx*xiyl + sigma_zx*xizl) ! this goes to accel_x
-                 tempy1(i,j,k) = jacobianl * (sigma_xy*xixl + sigma_yy*xiyl + sigma_zy*xizl) ! this goes to accel_y
-                 tempz1(i,j,k) = jacobianl * (sigma_xz*xixl + sigma_yz*xiyl + sigma_zz*xizl) ! this goes to accel_z
-
-                 tempx2(i,j,k) = jacobianl * (sigma_xx*etaxl + sigma_yx*etayl + sigma_zx*etazl) ! this goes to accel_x
-                 tempy2(i,j,k) = jacobianl * (sigma_xy*etaxl + sigma_yy*etayl + sigma_zy*etazl) ! this goes to accel_y
-                 tempz2(i,j,k) = jacobianl * (sigma_xz*etaxl + sigma_yz*etayl + sigma_zz*etazl) ! this goes to accel_z
-
-                 tempx3(i,j,k) = jacobianl * (sigma_xx*gammaxl + sigma_yx*gammayl + sigma_zx*gammazl) ! this goes to accel_x
-                 tempy3(i,j,k) = jacobianl * (sigma_xy*gammaxl + sigma_yy*gammayl + sigma_zy*gammazl) ! this goes to accel_y
-                 tempz3(i,j,k) = jacobianl * (sigma_xz*gammaxl + sigma_yz*gammayl + sigma_zz*gammazl) ! this goes to accel_z
-              endif
-
-              if( ispec_is_acoustic(ispec) ) then !ZN
-                 rho_invl = 1.0_CUSTOM_REAL / rhostore(i,j,k,ispec)
-                 temp1(i,j,k) = rho_invl * wgllwgll_yz(j,k) * jacobianl* &
-                                (xixl*dpotentialdxl + xiyl*dpotentialdyl + xizl*dpotentialdzl)
-                 temp2(i,j,k) = rho_invl * wgllwgll_xz(i,k) * jacobianl* &
-                                (etaxl*dpotentialdxl + etayl*dpotentialdyl + etazl*dpotentialdzl)
-                 temp3(i,j,k) = rho_invl * wgllwgll_xy(i,j) * jacobianl* &
-                                (gammaxl*dpotentialdxl + gammayl*dpotentialdyl + gammazl*dpotentialdzl)
-              endif
-
             else if( CPML_regions(ispec_CPML) == CPML_XY_ONLY ) then
 
               !------------------------------------------------------------------------------
@@ -961,37 +815,26 @@
                  coef2_2 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) &
+                   + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) &
-                      + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_2
+              rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) &
+                   + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) &
-                      + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_2
+              rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) &
+                   + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) &
-                      + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_2
+              duxdxl_x = A6 * PML_dux_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) + A8 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2)
+              duydxl_y = A6 * PML_duy_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) + A8 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2)
+              duzdxl_z = A6 * PML_duz_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) + A8 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2)
 
-                 duxdxl_x = A6 * PML_dux_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) + A8 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2)
-                 duydxl_y = A6 * PML_duy_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) + A8 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2)
-                 duzdxl_z = A6 * PML_duz_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) + A8 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2)
 
-              else if( ispec_is_acoustic(ispec) ) then
-
-                 rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) &
-                      + PML_dpotential_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dxl(i,j,k,ispec_CPML) * coef2_2
-
-                 dpotentialdxl = A6 * PML_dpotential_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) + A8 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2)
-              endif
-
               !---------------------- A9, A10 and A11 --------------------------
               A9 = k_store_x(i,j,k,ispec_CPML) / k_store_y(i,j,k,ispec_CPML)
               A10 = 0.d0
@@ -1010,49 +853,30 @@
                  coef2_2 = deltat/2.0d0
               endif
 
+              rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) &
+                   + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_2
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) &
+                   + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) &
-                      + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_2
+              rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) &
+                   + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) &
-                      + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_2
+              duxdyl_x = A9 * PML_dux_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) + A11 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2)
+              duydyl_y = A9 * PML_duy_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) + A11 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2)
+              duzdyl_z = A9 * PML_duz_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) + A11 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2)
 
-                 rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) &
-                      + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_2
-
-                 duxdyl_x = A9 * PML_dux_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) + A11 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2)
-                 duydyl_y = A9 * PML_duy_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) + A11 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2)
-                 duzdyl_z = A9 * PML_duz_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) + A11 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2)
-
-              else if( ispec_is_acoustic(ispec) ) then
-
-                 rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) &
-                      + PML_dpotential_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dyl(i,j,k,ispec_CPML) * coef2_2
-
-                 dpotentialdyl = A9 * PML_dpotential_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) + A11 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2)
-              endif
-
               !---------------------- A12, A13 and A14 --------------------------
               A12 = k_store_x(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML)
-              if( ispec_is_elastic(ispec) ) then
-                 A13 = d_store_x(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) &
-                      + d_store_y(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) &
-                      + (it+0.0) * deltat * d_store_x(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML)
-              else if( ispec_is_acoustic(ispec) ) then
-                 A13 = d_store_x(i,j,k,ispec_CPML)*k_store_y(i,j,k,ispec_CPML) &
-                      + d_store_y(i,j,k,ispec_CPML)*k_store_x(i,j,k,ispec_CPML) &
-                      + (it+0.0)*deltat*d_store_x(i,j,k,ispec_CPML)*d_store_y(i,j,k,ispec_CPML)
-              endif
+              A13 = d_store_x(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) &
+                    + d_store_y(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) &
+                    + (it+0.0) * deltat * d_store_x(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML)
               A14 = - d_store_x(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML)
 
               bb = alpha_store(i,j,k,ispec_CPML)
@@ -1071,193 +895,167 @@
               coef1_2 = coef1_1
               coef2_2 = coef2_1
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) &
+                   + PML_dux_dzl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
+                   + PML_dux_dzl(i,j,k,ispec_CPML) * (it-0.0) * deltat * coef2_2
 
-                 rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) &
-                      + PML_dux_dzl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
-                      + PML_dux_dzl(i,j,k,ispec_CPML) * (it-0.0) * deltat * coef2_2
+              rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) &
+                   + PML_duy_dzl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
+                   + PML_duy_dzl(i,j,k,ispec_CPML) * (it-0.0) * deltat * coef2_2
 
-                 rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) &
-                      + PML_duy_dzl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
-                      + PML_duy_dzl(i,j,k,ispec_CPML) * (it-0.0) * deltat * coef2_2
+              rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) &
+                   + PML_duz_dzl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
+                   + PML_duz_dzl(i,j,k,ispec_CPML) * (it-0.0) * deltat * coef2_2
 
-                 rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) &
-                      + PML_duz_dzl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
-                      + PML_duz_dzl(i,j,k,ispec_CPML) * (it-0.0) * deltat * coef2_2
+              duxdzl_x = A12 * PML_dux_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) + A14 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2)
+              duydzl_y = A12 * PML_duy_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) + A14 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2)
+              duzdzl_z = A12 * PML_duz_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) + A14 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2)
 
-                 duxdzl_x = A12 * PML_dux_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) + A14 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2)
-                 duydzl_y = A12 * PML_duy_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) + A14 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2)
-                 duzdzl_z = A12 * PML_duz_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) + A14 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2)
+              !---------------------- A15 and A16 --------------------------
+              A15 = k_store_x(i,j,k,ispec_CPML)
+              A16 = d_store_x(i,j,k,ispec_CPML)
 
-              else if( ispec_is_acoustic(ispec) ) then
+              bb = alpha_store(i,j,k,ispec_CPML)
 
-                 rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) &
-                      + PML_dpotential_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) &
-                      + PML_dpotential_dzl_new(i,j,k,ispec_CPML) *(it+0.0)*deltat * coef1_2 &
-                      + PML_dpotential_dzl(i,j,k,ispec_CPML) *(it-0.0)*deltat * coef2_2
+              coef0_1 = exp(-bb * deltat)
 
-                 dpotentialdzl = A12 * PML_dpotential_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) + A14 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2)
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
-                 !---------------------- A15 and A16 --------------------------
-                 A15 = k_store_x(i,j,k,ispec_CPML)
-                 A16 = d_store_x(i,j,k,ispec_CPML)
+              rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dzl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 bb = alpha_store(i,j,k,ispec_CPML)
+              rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 coef0_1 = exp(-bb * deltat)
+              duzdzl_y = A15 * PML_duz_dzl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_y(i,j,k,ispec_CPML,2)
+              duzdyl_y = A15 * PML_duz_dyl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dyl_y(i,j,k,ispec_CPML,2)
 
-                 if( abs(bb) > 1.d-5 ) then
-                    coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
-                    coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
-                 else
-                    coef1_1 = deltat/2.0d0
-                    coef2_1 = deltat/2.0d0
-                 endif
+              rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dzl_y(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dyl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
+              duydzl_z = A15 * PML_duy_dzl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dzl_z(i,j,k,ispec_CPML,2)
+              duydyl_z = A15 * PML_duy_dyl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_z(i,j,k,ispec_CPML,2)
 
-                 duzdzl_y = A15 * PML_duz_dzl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_y(i,j,k,ispec_CPML,2)
-                 duzdyl_y = A15 * PML_duz_dyl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dyl_y(i,j,k,ispec_CPML,2)
+              !---------------------- A17 and A18 --------------------------
+              A17 = k_store_y(i,j,k,ispec_CPML)
+              A18 = d_store_y(i,j,k,ispec_CPML)
 
-                 rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
+              bb = alpha_store(i,j,k,ispec_CPML)
 
-                 rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dyl_z(i,j,k,ispec_CPML,2) = 0.d0
+              coef0_1 = exp(-bb * deltat)
 
-                 duydzl_z = A15 * PML_duy_dzl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dzl_z(i,j,k,ispec_CPML,2)
-                 duydyl_z = A15 * PML_duy_dyl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_z(i,j,k,ispec_CPML,2)
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
+              endif
 
-                 !---------------------- A17 and A18 --------------------------
-                 A17 = k_store_y(i,j,k,ispec_CPML)
-                 A18 = d_store_y(i,j,k,ispec_CPML)
+              rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dzl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 bb = alpha_store(i,j,k,ispec_CPML)
+              rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 coef0_1 = exp(-bb * deltat)
+              duzdzl_x = A17 * PML_duz_dzl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_x(i,j,k,ispec_CPML,2)
+              duzdxl_x = A17 * PML_duz_dxl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dxl_x(i,j,k,ispec_CPML,2)
 
-                 if( abs(bb) > 1.d-5 ) then
-                    coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
-                    coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
-                 else
-                    coef1_1 = deltat/2.0d0
-                    coef2_1 = deltat/2.0d0
-                 endif
+              rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dzl_x(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dxl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
+              duxdzl_z = A17 * PML_dux_dzl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dzl_z(i,j,k,ispec_CPML,2)
+              duxdxl_z = A17 * PML_dux_dxl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_z(i,j,k,ispec_CPML,2)
 
-                 duzdzl_x = A17 * PML_duz_dzl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_x(i,j,k,ispec_CPML,2)
-                 duzdxl_x = A17 * PML_duz_dxl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dxl_x(i,j,k,ispec_CPML,2)
+              !---------------------- A19 and A20--------------------------
+              A19 = 1.d0
+              A20 = 0.0
 
-                 rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duy_dyl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dxl_z(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duy_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 duxdzl_z = A17 * PML_dux_dzl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dzl_z(i,j,k,ispec_CPML,2)
-                 duxdxl_z = A17 * PML_dux_dxl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_z(i,j,k,ispec_CPML,2)
+              duydyl_x = A19 * PML_duy_dyl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_x(i,j,k,ispec_CPML,2)
+              duydxl_x = A19 * PML_duy_dxl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dxl_x(i,j,k,ispec_CPML,2)
 
-                 !---------------------- A19 and A20--------------------------
-                 A19 = 1.d0
-                 A20 = 0.0
+              rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dux_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duy_dyl_x(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dux_dxl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duy_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
+              duxdyl_y = A19 * PML_dux_dyl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dyl_y(i,j,k,ispec_CPML,2)
+              duxdxl_y = A19 * PML_dux_dxl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_y(i,j,k,ispec_CPML,2)
 
-                 duydyl_x = A19 * PML_duy_dyl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_x(i,j,k,ispec_CPML,2)
-                 duydxl_x = A19 * PML_duy_dxl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dxl_x(i,j,k,ispec_CPML,2)
+              ! compute stress sigma
+              sigma_xx = lambdalplus2mul*duxdxl_x + lambdal*duydyl_x + lambdal*duzdzl_x
+              sigma_yx = mul*duxdyl_x + mul*duydxl_x
+              sigma_zx = mul*duzdxl_x + mul*duxdzl_x
 
-                 rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dux_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
+              sigma_xy = mul*duxdyl_y + mul*duydxl_y
+              sigma_yy = lambdal*duxdxl_y + lambdalplus2mul*duydyl_y + lambdal*duzdzl_y
+              sigma_zy = mul*duzdyl_y + mul*duydzl_y
 
-                 rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dux_dxl_y(i,j,k,ispec_CPML,2) = 0.d0
+              sigma_xz = mul*duzdxl_z + mul*duxdzl_z
+              sigma_yz = mul*duzdyl_z + mul*duydzl_z
+              sigma_zz = lambdal*duxdxl_z + lambdal*duydyl_z + lambdalplus2mul*duzdzl_z
 
-                 duxdyl_y = A19 * PML_dux_dyl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dyl_y(i,j,k,ispec_CPML,2)
-                 duxdxl_y = A19 * PML_dux_dxl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_y(i,j,k,ispec_CPML,2)
+              ! form dot product with test vector, non-symmetric form
+              tempx1(i,j,k) = jacobianl * (sigma_xx*xixl + sigma_yx*xiyl + sigma_zx*xizl) ! this goes to accel_x
+              tempy1(i,j,k) = jacobianl * (sigma_xy*xixl + sigma_yy*xiyl + sigma_zy*xizl) ! this goes to accel_y
+              tempz1(i,j,k) = jacobianl * (sigma_xz*xixl + sigma_yz*xiyl + sigma_zz*xizl) ! this goes to accel_z
 
-                 ! compute stress sigma
-                 sigma_xx = lambdalplus2mul*duxdxl_x + lambdal*duydyl_x + lambdal*duzdzl_x
-                 sigma_yx = mul*duxdyl_x + mul*duydxl_x
-                 sigma_zx = mul*duzdxl_x + mul*duxdzl_x
+              tempx2(i,j,k) = jacobianl * (sigma_xx*etaxl + sigma_yx*etayl + sigma_zx*etazl) ! this goes to accel_x
+              tempy2(i,j,k) = jacobianl * (sigma_xy*etaxl + sigma_yy*etayl + sigma_zy*etazl) ! this goes to accel_y
+              tempz2(i,j,k) = jacobianl * (sigma_xz*etaxl + sigma_yz*etayl + sigma_zz*etazl) ! this goes to accel_z
 
-                 sigma_xy = mul*duxdyl_y + mul*duydxl_y
-                 sigma_yy = lambdal*duxdxl_y + lambdalplus2mul*duydyl_y + lambdal*duzdzl_y
-                 sigma_zy = mul*duzdyl_y + mul*duydzl_y
+              tempx3(i,j,k) = jacobianl * (sigma_xx*gammaxl + sigma_yx*gammayl + sigma_zx*gammazl) ! this goes to accel_x
+              tempy3(i,j,k) = jacobianl * (sigma_xy*gammaxl + sigma_yy*gammayl + sigma_zy*gammazl) ! this goes to accel_y
+              tempz3(i,j,k) = jacobianl * (sigma_xz*gammaxl + sigma_yz*gammayl + sigma_zz*gammazl) ! this goes to accel_z
 
-                 sigma_xz = mul*duzdxl_z + mul*duxdzl_z
-                 sigma_yz = mul*duzdyl_z + mul*duydzl_z
-                 sigma_zz = lambdal*duxdxl_z + lambdal*duydyl_z + lambdalplus2mul*duzdzl_z
-
-                 ! form dot product with test vector, non-symmetric form
-                 tempx1(i,j,k) = jacobianl * (sigma_xx*xixl + sigma_yx*xiyl + sigma_zx*xizl) ! this goes to accel_x
-                 tempy1(i,j,k) = jacobianl * (sigma_xy*xixl + sigma_yy*xiyl + sigma_zy*xizl) ! this goes to accel_y
-                 tempz1(i,j,k) = jacobianl * (sigma_xz*xixl + sigma_yz*xiyl + sigma_zz*xizl) ! this goes to accel_z
-
-                 tempx2(i,j,k) = jacobianl * (sigma_xx*etaxl + sigma_yx*etayl + sigma_zx*etazl) ! this goes to accel_x
-                 tempy2(i,j,k) = jacobianl * (sigma_xy*etaxl + sigma_yy*etayl + sigma_zy*etazl) ! this goes to accel_y
-                 tempz2(i,j,k) = jacobianl * (sigma_xz*etaxl + sigma_yz*etayl + sigma_zz*etazl) ! this goes to accel_z
-
-                 tempx3(i,j,k) = jacobianl * (sigma_xx*gammaxl + sigma_yx*gammayl + sigma_zx*gammazl) ! this goes to accel_x
-                 tempy3(i,j,k) = jacobianl * (sigma_xy*gammaxl + sigma_yy*gammayl + sigma_zy*gammazl) ! this goes to accel_y
-                 tempz3(i,j,k) = jacobianl * (sigma_xz*gammaxl + sigma_yz*gammayl + sigma_zz*gammazl) ! this goes to accel_z
-              endif
-
-              if( ispec_is_acoustic(ispec) ) then !ZN
-                 rho_invl = 1.0_CUSTOM_REAL / rhostore(i,j,k,ispec)
-                 temp1(i,j,k) = rho_invl * wgllwgll_yz(j,k) * jacobianl* &
-                                (xixl*dpotentialdxl + xiyl*dpotentialdyl + xizl*dpotentialdzl)
-                 temp2(i,j,k) = rho_invl * wgllwgll_xz(i,k) * jacobianl* &
-                                (etaxl*dpotentialdxl + etayl*dpotentialdyl + etazl*dpotentialdzl)
-                 temp3(i,j,k) = rho_invl * wgllwgll_xy(i,j) * jacobianl* &
-                                (gammaxl*dpotentialdxl + gammayl*dpotentialdyl + gammazl*dpotentialdzl)
-              endif
-
             else if( CPML_regions(ispec_CPML) == CPML_XZ_ONLY ) then
 
               !------------------------------------------------------------------------------
@@ -1282,48 +1080,30 @@
                  coef2_2 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) &
+                   + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) &
-                      + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_2
+              rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) &
+                   + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) &
-                      + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_2
+              rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) &
+                   + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) &
-                      + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_2
+              duxdxl_x = A6 * PML_dux_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) + A8 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2)
+              duydxl_y = A6 * PML_duy_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) + A8 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2)
+              duzdxl_z = A6 * PML_duz_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) + A8 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2)
 
-                 duxdxl_x = A6 * PML_dux_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) + A8 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2)
-                 duydxl_y = A6 * PML_duy_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) + A8 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2)
-                 duzdxl_z = A6 * PML_duz_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) + A8 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2)
-
-              else if( ispec_is_acoustic(ispec) ) then
-
-                 rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) &
-                      + PML_dpotential_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dxl(i,j,k,ispec_CPML) * coef2_2
-
-                 dpotentialdxl = A6 * PML_dpotential_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) + A8 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2)
-              endif
-
               !---------------------- A9, A10 and A11 --------------------------
               A9 = k_store_x(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML)
-              if( ispec_is_elastic(ispec) ) then
-                 A10 = d_store_x(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) &
-                      + d_store_z(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) &
-                      + (it+0.0) * deltat * d_store_x(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML)
-              else if( ispec_is_acoustic(ispec) ) then
-                 A10 = d_store_x(i,j,k,ispec_CPML)*k_store_z(i,j,k,ispec_CPML) &
-                      + d_store_z(i,j,k,ispec_CPML)*k_store_x(i,j,k,ispec_CPML) &
-                      + (it+0.0)*deltat*d_store_x(i,j,k,ispec_CPML)*d_store_z(i,j,k,ispec_CPML)
-              endif
+              A10 = d_store_x(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) &
+                   + d_store_z(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) &
+                   + (it+0.0) * deltat * d_store_x(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML)
               A11 = - d_store_x(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML)
 
               bb = alpha_store(i,j,k,ispec_CPML)
@@ -1342,46 +1122,31 @@
               coef1_2 = coef1_1
               coef2_2 = coef2_1
 
+              rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) &
+                   + PML_dux_dyl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
+                   + PML_dux_dyl(i,j,k,ispec_CPML) * (it-0.0) * deltat * coef2_2
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) &
+                   + PML_duy_dyl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
+                   + PML_duy_dyl(i,j,k,ispec_CPML) * (it-0.0)*deltat * coef2_2
 
-                 rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) &
-                      + PML_dux_dyl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
-                      + PML_dux_dyl(i,j,k,ispec_CPML) * (it-0.0) * deltat * coef2_2
+              rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) &
+                   + PML_duz_dyl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
+                   + PML_duz_dyl(i,j,k,ispec_CPML) * (it-0.0) * deltat * coef2_2
 
-                 rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) &
-                      + PML_duy_dyl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
-                      + PML_duy_dyl(i,j,k,ispec_CPML) * (it-0.0)*deltat * coef2_2
+              duxdyl_x = A9 * PML_dux_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) + A11 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2)
+              duydyl_y = A9 * PML_duy_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) + A11 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2)
+              duzdyl_z = A9 * PML_duz_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) + A11 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2)
 
-                 rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) &
-                      + PML_duz_dyl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
-                      + PML_duz_dyl(i,j,k,ispec_CPML) * (it-0.0) * deltat * coef2_2
-
-                 duxdyl_x = A9 * PML_dux_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) + A11 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2)
-                 duydyl_y = A9 * PML_duy_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) + A11 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2)
-                 duzdyl_z = A9 * PML_duz_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) + A11 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2)
-
-              else if( ispec_is_acoustic(ispec) ) then
-
-                 rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) &
-                      + PML_dpotential_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) &
-                      + PML_dpotential_dyl_new(i,j,k,ispec_CPML) *(it+0.0)*deltat* coef1_2 &
-                      + PML_dpotential_dyl(i,j,k,ispec_CPML) *(it-0.0)*deltat* coef2_2
-
-                 dpotentialdyl = A9 * PML_dpotential_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) + A11 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2)
-              endif
-
               !---------------------- A12, A13 and A14 --------------------------
               A12 = k_store_x(i,j,k,ispec_CPML) / k_store_z(i,j,k,ispec_CPML)
               A13 = 0.d0
@@ -1400,185 +1165,161 @@
                  coef2_2 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) &
+                   + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) &
-                      + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_2
+              rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) &
+                   + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) &
-                      + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_2
+              rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) &
+                   + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) &
-                      + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_2
+              duxdzl_x = A12 * PML_dux_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) + A14 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2)
+              duydzl_y = A12 * PML_duy_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) + A14 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2)
+              duzdzl_z = A12 * PML_duz_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) + A14 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2)
 
-                 duxdzl_x = A12 * PML_dux_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) + A14 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2)
-                 duydzl_y = A12 * PML_duy_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) + A14 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2)
-                 duzdzl_z = A12 * PML_duz_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) + A14 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2)
+              !---------------------- A15 and A16 --------------------------
+              A15 = k_store_x(i,j,k,ispec_CPML)
+              A16 = d_store_x(i,j,k,ispec_CPML)
 
-              else if( ispec_is_acoustic(ispec) ) then
+              bb = alpha_store(i,j,k,ispec_CPML)
 
-                 rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) &
-                      + PML_dpotential_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dzl(i,j,k,ispec_CPML) * coef2_2
+              coef0_1 = exp(-bb * deltat)
 
-                 dpotentialdzl = A12 * PML_dpotential_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) + A14 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2)
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
-                 !---------------------- A15 and A16 --------------------------
-                 A15 = k_store_x(i,j,k,ispec_CPML)
-                 A16 = d_store_x(i,j,k,ispec_CPML)
+              rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dzl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 bb = alpha_store(i,j,k,ispec_CPML)
+              rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 coef0_1 = exp(-bb * deltat)
+              duzdzl_y = A15 * PML_duz_dzl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_y(i,j,k,ispec_CPML,2)
+              duzdyl_y = A15 * PML_duz_dyl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dyl_y(i,j,k,ispec_CPML,2)
 
-                 if( abs(bb) > 1.d-5 ) then
-                    coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
-                    coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
-                 else
-                    coef1_1 = deltat/2.0d0
-                    coef2_1 = deltat/2.0d0
-                 endif
+              rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dzl_y(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dyl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
+              duydzl_z = A15 * PML_duy_dzl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dzl_z(i,j,k,ispec_CPML,2)
+              duydyl_z = A15 * PML_duy_dyl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_z(i,j,k,ispec_CPML,2)
 
-                 duzdzl_y = A15 * PML_duz_dzl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_y(i,j,k,ispec_CPML,2)
-                 duzdyl_y = A15 * PML_duz_dyl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dyl_y(i,j,k,ispec_CPML,2)
+              !---------------------- A17 and A18 --------------------------
+              A17 = 1.0d0
+              A18 = 0.d0
 
-                 rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duz_dzl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dyl_z(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duz_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 duydzl_z = A15 * PML_duy_dzl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dzl_z(i,j,k,ispec_CPML,2)
-                 duydyl_z = A15 * PML_duy_dyl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_z(i,j,k,ispec_CPML,2)
+              duzdzl_x = A17 * PML_duz_dzl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_x(i,j,k,ispec_CPML,2)
+              duzdxl_x = A17 * PML_duz_dxl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dxl_x(i,j,k,ispec_CPML,2)
 
-                 !---------------------- A17 and A18 --------------------------
-                 A17 = 1.0d0
-                 A18 = 0.d0
+              rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dux_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duz_dzl_x(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dux_dxl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duz_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
+              duxdzl_z = A17 * PML_dux_dzl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dzl_z(i,j,k,ispec_CPML,2)
+              duxdxl_z = A17 * PML_dux_dxl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_z(i,j,k,ispec_CPML,2)
 
-                 duzdzl_x = A17 * PML_duz_dzl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_x(i,j,k,ispec_CPML,2)
-                 duzdxl_x = A17 * PML_duz_dxl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dxl_x(i,j,k,ispec_CPML,2)
+              !---------------------- A19 and A20 --------------------------
+              A19 = k_store_z(i,j,k,ispec_CPML)
+              A20 = d_store_z(i,j,k,ispec_CPML)
 
-                 rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dux_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
+              bb = alpha_store(i,j,k,ispec_CPML)
 
-                 rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dux_dxl_z(i,j,k,ispec_CPML,2) = 0.d0
+              coef0_1 = exp(-bb * deltat)
 
-                 duxdzl_z = A17 * PML_dux_dzl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dzl_z(i,j,k,ispec_CPML,2)
-                 duxdxl_z = A17 * PML_dux_dxl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_z(i,j,k,ispec_CPML,2)
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
+              endif
 
-                 !---------------------- A19 and A20 --------------------------
-                 A19 = k_store_z(i,j,k,ispec_CPML)
-                 A20 = d_store_z(i,j,k,ispec_CPML)
+              rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dyl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 bb = alpha_store(i,j,k,ispec_CPML)
+              rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 coef0_1 = exp(-bb * deltat)
+              duydyl_x = A19 * PML_duy_dyl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_x(i,j,k,ispec_CPML,2)
+              duydxl_x = A19 * PML_duy_dxl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dxl_x(i,j,k,ispec_CPML,2)
 
-                 if( abs(bb) > 1.d-5 ) then
-                    coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
-                    coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
-                 else
-                    coef1_1 = deltat/2.0d0
-                    coef2_1 = deltat/2.0d0
-                 endif
+              rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dyl_x(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dxl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
+              duxdyl_y = A19 * PML_dux_dyl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dyl_y(i,j,k,ispec_CPML,2)
+              duxdxl_y = A19 * PML_dux_dxl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_y(i,j,k,ispec_CPML,2)
 
-                 duydyl_x = A19 * PML_duy_dyl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_x(i,j,k,ispec_CPML,2)
-                 duydxl_x = A19 * PML_duy_dxl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dxl_x(i,j,k,ispec_CPML,2)
+              ! compute stress sigma
+              sigma_xx = lambdalplus2mul*duxdxl_x + lambdal*duydyl_x + lambdal*duzdzl_x
+              sigma_yx = mul*duxdyl_x + mul*duydxl_x
+              sigma_zx = mul*duzdxl_x + mul*duxdzl_x
 
-                 rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
+              sigma_xy = mul*duxdyl_y + mul*duydxl_y
+              sigma_yy = lambdal*duxdxl_y + lambdalplus2mul*duydyl_y + lambdal*duzdzl_y
+              sigma_zy = mul*duzdyl_y + mul*duydzl_y
 
-                 rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dxl_y(i,j,k,ispec_CPML,2) = 0.d0
+              sigma_xz = mul*duzdxl_z + mul*duxdzl_z
+              sigma_yz = mul*duzdyl_z + mul*duydzl_z
+              sigma_zz = lambdal*duxdxl_z + lambdal*duydyl_z + lambdalplus2mul*duzdzl_z
 
-                 duxdyl_y = A19 * PML_dux_dyl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dyl_y(i,j,k,ispec_CPML,2)
-                 duxdxl_y = A19 * PML_dux_dxl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_y(i,j,k,ispec_CPML,2)
+              ! form dot product with test vector, non-symmetric form
+              tempx1(i,j,k) = jacobianl * (sigma_xx*xixl + sigma_yx*xiyl + sigma_zx*xizl) ! this goes to accel_x
+              tempy1(i,j,k) = jacobianl * (sigma_xy*xixl + sigma_yy*xiyl + sigma_zy*xizl) ! this goes to accel_y
+              tempz1(i,j,k) = jacobianl * (sigma_xz*xixl + sigma_yz*xiyl + sigma_zz*xizl) ! this goes to accel_z
 
-                 ! compute stress sigma
-                 sigma_xx = lambdalplus2mul*duxdxl_x + lambdal*duydyl_x + lambdal*duzdzl_x
-                 sigma_yx = mul*duxdyl_x + mul*duydxl_x
-                 sigma_zx = mul*duzdxl_x + mul*duxdzl_x
+              tempx2(i,j,k) = jacobianl * (sigma_xx*etaxl + sigma_yx*etayl + sigma_zx*etazl) ! this goes to accel_x
+              tempy2(i,j,k) = jacobianl * (sigma_xy*etaxl + sigma_yy*etayl + sigma_zy*etazl) ! this goes to accel_y
+              tempz2(i,j,k) = jacobianl * (sigma_xz*etaxl + sigma_yz*etayl + sigma_zz*etazl) ! this goes to accel_z
 
-                 sigma_xy = mul*duxdyl_y + mul*duydxl_y
-                 sigma_yy = lambdal*duxdxl_y + lambdalplus2mul*duydyl_y + lambdal*duzdzl_y
-                 sigma_zy = mul*duzdyl_y + mul*duydzl_y
+              tempx3(i,j,k) = jacobianl * (sigma_xx*gammaxl + sigma_yx*gammayl + sigma_zx*gammazl) ! this goes to accel_x
+              tempy3(i,j,k) = jacobianl * (sigma_xy*gammaxl + sigma_yy*gammayl + sigma_zy*gammazl) ! this goes to accel_y
+              tempz3(i,j,k) = jacobianl * (sigma_xz*gammaxl + sigma_yz*gammayl + sigma_zz*gammazl) ! this goes to accel_z
 
-                 sigma_xz = mul*duzdxl_z + mul*duxdzl_z
-                 sigma_yz = mul*duzdyl_z + mul*duydzl_z
-                 sigma_zz = lambdal*duxdxl_z + lambdal*duydyl_z + lambdalplus2mul*duzdzl_z
-
-                 ! form dot product with test vector, non-symmetric form
-                 tempx1(i,j,k) = jacobianl * (sigma_xx*xixl + sigma_yx*xiyl + sigma_zx*xizl) ! this goes to accel_x
-                 tempy1(i,j,k) = jacobianl * (sigma_xy*xixl + sigma_yy*xiyl + sigma_zy*xizl) ! this goes to accel_y
-                 tempz1(i,j,k) = jacobianl * (sigma_xz*xixl + sigma_yz*xiyl + sigma_zz*xizl) ! this goes to accel_z
-
-                 tempx2(i,j,k) = jacobianl * (sigma_xx*etaxl + sigma_yx*etayl + sigma_zx*etazl) ! this goes to accel_x
-                 tempy2(i,j,k) = jacobianl * (sigma_xy*etaxl + sigma_yy*etayl + sigma_zy*etazl) ! this goes to accel_y
-                 tempz2(i,j,k) = jacobianl * (sigma_xz*etaxl + sigma_yz*etayl + sigma_zz*etazl) ! this goes to accel_z
-
-                 tempx3(i,j,k) = jacobianl * (sigma_xx*gammaxl + sigma_yx*gammayl + sigma_zx*gammazl) ! this goes to accel_x
-                 tempy3(i,j,k) = jacobianl * (sigma_xy*gammaxl + sigma_yy*gammayl + sigma_zy*gammazl) ! this goes to accel_y
-                 tempz3(i,j,k) = jacobianl * (sigma_xz*gammaxl + sigma_yz*gammayl + sigma_zz*gammazl) ! this goes to accel_z
-              endif
-
-              if( ispec_is_acoustic(ispec) ) then !ZN
-                 rho_invl = 1.0_CUSTOM_REAL / rhostore(i,j,k,ispec)
-                 temp1(i,j,k) = rho_invl * wgllwgll_yz(j,k) * jacobianl* &
-                                (xixl*dpotentialdxl + xiyl*dpotentialdyl + xizl*dpotentialdzl)
-                 temp2(i,j,k) = rho_invl * wgllwgll_xz(i,k) * jacobianl* &
-                                (etaxl*dpotentialdxl + etayl*dpotentialdyl + etazl*dpotentialdzl)
-                 temp3(i,j,k) = rho_invl * wgllwgll_xy(i,j) * jacobianl* &
-                                (gammaxl*dpotentialdxl + gammayl*dpotentialdyl + gammazl*dpotentialdzl)
-              endif
-
             else if( CPML_regions(ispec_CPML) == CPML_YZ_ONLY ) then
 
               !------------------------------------------------------------------------------
@@ -1587,15 +1328,9 @@
 
               !---------------------- A6, A7 and A8 --------------------------
               A6 = k_store_z(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML)
-              if( ispec_is_elastic(ispec) ) then
-                 A7 = d_store_y(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) &
-                      + d_store_z(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) &
-                      + (it+0.0) * deltat * d_store_y(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML)
-              else if( ispec_is_acoustic(ispec) ) then
-                 A7 = d_store_y(i,j,k,ispec_CPML)*k_store_z(i,j,k,ispec_CPML) &
-                      + d_store_z(i,j,k,ispec_CPML)*k_store_y(i,j,k,ispec_CPML) &
-                      + (it+0.0)*deltat*d_store_y(i,j,k,ispec_CPML)*d_store_z(i,j,k,ispec_CPML)
-              endif
+              A7 = d_store_y(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) &
+                   + d_store_z(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) &
+                   + (it+0.0) * deltat * d_store_y(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML)
               A8 = - d_store_y(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML)
 
               bb = alpha_store(i,j,k,ispec_CPML)
@@ -1614,45 +1349,31 @@
               coef1_2 = coef1_1
               coef2_2 = coef2_1
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) &
+                   + PML_dux_dxl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
+                   + PML_dux_dxl(i,j,k,ispec_CPML) * (it-0.0) * deltat * coef2_2
 
-                 rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) &
-                      + PML_dux_dxl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
-                      + PML_dux_dxl(i,j,k,ispec_CPML) * (it-0.0) * deltat * coef2_2
+              rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) &
+                   + PML_duy_dxl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
+                   + PML_duy_dxl(i,j,k,ispec_CPML) * (it-0.0) * deltat * coef2_2
 
-                 rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) &
-                      + PML_duy_dxl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
-                      + PML_duy_dxl(i,j,k,ispec_CPML) * (it-0.0) * deltat * coef2_2
+              rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) &
+                   + PML_duz_dxl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
+                   + PML_duz_dxl(i,j,k,ispec_CPML) * (it-0.0) * deltat * coef2_2
 
-                 rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) &
-                      + PML_duz_dxl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
-                      + PML_duz_dxl(i,j,k,ispec_CPML) * (it-0.0) * deltat * coef2_2
+              duxdxl_x = A6 * PML_dux_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) + A8 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2)
+              duydxl_y = A6 * PML_duy_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) + A8 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2)
+              duzdxl_z = A6 * PML_duz_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) + A8 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2)
 
-                 duxdxl_x = A6 * PML_dux_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) + A8 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2)
-                 duydxl_y = A6 * PML_duy_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) + A8 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2)
-                 duzdxl_z = A6 * PML_duz_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) + A8 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2)
-
-              else if( ispec_is_acoustic(ispec) ) then
-
-                 rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) &
-                      + PML_dpotential_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) &
-                      + PML_dpotential_dxl_new(i,j,k,ispec_CPML) * (it+0.0)*deltat* coef1_2 &
-                      + PML_dpotential_dxl(i,j,k,ispec_CPML) *(it-0.0)*deltat* coef2_2
-
-                 dpotentialdxl = A6 * PML_dpotential_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) + A8 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2)
-              endif
-
               !---------------------- A9, A10 and A11 --------------------------
               A9 = k_store_z(i,j,k,ispec_CPML) / k_store_y(i,j,k,ispec_CPML)
               A10 = 0.d0
@@ -1671,37 +1392,25 @@
                  coef2_2 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) &
+                   + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) &
-                      + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_2
+              rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) &
+                   + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) &
-                      + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_2
+              rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) &
+                   + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) &
-                      + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_2
+              duxdyl_x = A9 * PML_dux_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) + A11 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2)
+              duydyl_y = A9 * PML_duy_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) + A11 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2)
+              duzdyl_z = A9 * PML_duz_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) + A11 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2)
 
-                 duxdyl_x = A9 * PML_dux_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) + A11 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2)
-                 duydyl_y = A9 * PML_duy_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) + A11 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2)
-                 duzdyl_z = A9 * PML_duz_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) + A11 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2)
-
-              else if( ispec_is_acoustic(ispec) ) then
-
-                 rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) &
-                      + PML_dpotential_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dyl(i,j,k,ispec_CPML) * coef2_2
-
-                 dpotentialdyl = A9 * PML_dpotential_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) + A11 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2)
-              endif
-
               !---------------------- A12, A13 and A14 --------------------------
               A12 = k_store_y(i,j,k,ispec_CPML) / k_store_z(i,j,k,ispec_CPML)
               A13 = 0.d0
@@ -1720,185 +1429,161 @@
                  coef2_2 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) &
+                   + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) &
-                      + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_2
+              rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) &
+                   + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) &
-                      + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_2
+              rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) &
+                   + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_2
 
-                 rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) &
-                      + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_2
+              duxdzl_x = A12 * PML_dux_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) + A14 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2)
+              duydzl_y = A12 * PML_duy_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) + A14 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2)
+              duzdzl_z = A12 * PML_duz_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) + A14 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2)
 
-                 duxdzl_x = A12 * PML_dux_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) + A14 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2)
-                 duydzl_y = A12 * PML_duy_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) + A14 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2)
-                 duzdzl_z = A12 * PML_duz_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) + A14 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2)
+              !---------------------- A15 and A16 --------------------------
+              A15 = 1.0d0
+              A16 = 0.0d0
 
-              else if( ispec_is_acoustic(ispec) ) then
+              rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duz_dzl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) &
-                      + PML_dpotential_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dzl(i,j,k,ispec_CPML) * coef2_2
+              rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duz_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 dpotentialdzl = A12 * PML_dpotential_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) + A14 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2)
-              endif
+              duzdzl_y = A15 * PML_duz_dzl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_y(i,j,k,ispec_CPML,2)
+              duzdyl_y = A15 * PML_duz_dyl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dyl_y(i,j,k,ispec_CPML,2)
 
-              if( ispec_is_elastic(ispec) ) then
-                 !---------------------- A15 and A16 --------------------------
-                 A15 = 1.0d0
-                 A16 = 0.0d0
+              rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duy_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duz_dzl_y(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_duy_dyl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duz_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
+              duydzl_z = A15 * PML_duy_dzl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dzl_z(i,j,k,ispec_CPML,2)
+              duydyl_z = A15 * PML_duy_dyl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_z(i,j,k,ispec_CPML,2)
 
-                 duzdzl_y = A15 * PML_duz_dzl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_y(i,j,k,ispec_CPML,2)
-                 duzdyl_y = A15 * PML_duz_dyl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dyl_y(i,j,k,ispec_CPML,2)
+              !---------------------- A17 and A18 --------------------------
+              A17 = k_store_y(i,j,k,ispec_CPML)
+              A18 = d_store_y(i,j,k,ispec_CPML)
 
-                 rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duy_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
+              bb = alpha_store(i,j,k,ispec_CPML)
 
-                 rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) = 0.d0
-                 rmemory_duy_dyl_z(i,j,k,ispec_CPML,2) = 0.d0
+              coef0_1 = exp(-bb * deltat)
 
-                 duydzl_z = A15 * PML_duy_dzl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dzl_z(i,j,k,ispec_CPML,2)
-                 duydyl_z = A15 * PML_duy_dyl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_z(i,j,k,ispec_CPML,2)
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
+              endif
 
-                 !---------------------- A17 and A18 --------------------------
-                 A17 = k_store_y(i,j,k,ispec_CPML)
-                 A18 = d_store_y(i,j,k,ispec_CPML)
+              rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_x(i,j,k,ispec_CPML,2) &
+                   + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dzl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 bb = alpha_store(i,j,k,ispec_CPML)
+              rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 coef0_1 = exp(-bb * deltat)
+              duzdzl_x = A17 * PML_duz_dzl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_x(i,j,k,ispec_CPML,2)
+              duzdxl_x = A17 * PML_duz_dxl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dxl_x(i,j,k,ispec_CPML,2)
 
-                 if( abs(bb) > 1.d-5 ) then
-                    coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
-                    coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
-                 else
-                    coef1_1 = deltat/2.0d0
-                    coef2_1 = deltat/2.0d0
-                 endif
+              rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_x(i,j,k,ispec_CPML,2) &
-                      + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dzl_x(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dxl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
+              duxdzl_z = A17 * PML_dux_dzl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dzl_z(i,j,k,ispec_CPML,2)
+              duxdxl_z = A17 * PML_dux_dxl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_z(i,j,k,ispec_CPML,2)
 
-                 duzdzl_x = A17 * PML_duz_dzl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_x(i,j,k,ispec_CPML,2)
-                 duzdxl_x = A17 * PML_duz_dxl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dxl_x(i,j,k,ispec_CPML,2)
+              !---------------------- A19 and A20--------------------------
+              A19 = k_store_z(i,j,k,ispec_CPML)
+              A20 = d_store_z(i,j,k,ispec_CPML)
 
-                 rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
+              bb = alpha_store(i,j,k,ispec_CPML)
 
-                 rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dxl_z(i,j,k,ispec_CPML,2) = 0.d0
+              coef0_1 = exp(-bb * deltat)
 
-                 duxdzl_z = A17 * PML_dux_dzl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dzl_z(i,j,k,ispec_CPML,2)
-                 duxdxl_z = A17 * PML_dux_dxl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_z(i,j,k,ispec_CPML,2)
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
+              endif
 
-                 !---------------------- A19 and A20--------------------------
-                 A19 = k_store_z(i,j,k,ispec_CPML)
-                 A20 = d_store_z(i,j,k,ispec_CPML)
+              rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dyl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 bb = alpha_store(i,j,k,ispec_CPML)
+              rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 coef0_1 = exp(-bb * deltat)
+              duydyl_x = A19 * PML_duy_dyl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_x(i,j,k,ispec_CPML,2)
+              duydxl_x = A19 * PML_duy_dxl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dxl_x(i,j,k,ispec_CPML,2)
 
-                 if( abs(bb) > 1.d-5 ) then
-                    coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
-                    coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
-                 else
-                    coef1_1 = deltat/2.0d0
-                    coef2_1 = deltat/2.0d0
-                 endif
+              rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dyl_x(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dxl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
+              duxdyl_y = A19 * PML_dux_dyl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dyl_y(i,j,k,ispec_CPML,2)
+              duxdxl_y = A19 * PML_dux_dxl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_y(i,j,k,ispec_CPML,2)
 
-                 duydyl_x = A19 * PML_duy_dyl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_x(i,j,k,ispec_CPML,2)
-                 duydxl_x = A19 * PML_duy_dxl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dxl_x(i,j,k,ispec_CPML,2)
+              ! compute stress sigma
+              sigma_xx = lambdalplus2mul*duxdxl_x + lambdal*duydyl_x + lambdal*duzdzl_x
+              sigma_yx = mul*duxdyl_x + mul*duydxl_x
+              sigma_zx = mul*duzdxl_x + mul*duxdzl_x
 
-                 rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
+              sigma_xy = mul*duxdyl_y + mul*duydxl_y
+              sigma_yy = lambdal*duxdxl_y + lambdalplus2mul*duydyl_y + lambdal*duzdzl_y
+              sigma_zy = mul*duzdyl_y + mul*duydzl_y
 
-                 rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dxl_y(i,j,k,ispec_CPML,2) = 0.d0
+              sigma_xz = mul*duzdxl_z + mul*duxdzl_z
+              sigma_yz = mul*duzdyl_z + mul*duydzl_z
+              sigma_zz = lambdal*duxdxl_z + lambdal*duydyl_z + lambdalplus2mul*duzdzl_z
 
-                 duxdyl_y = A19 * PML_dux_dyl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dyl_y(i,j,k,ispec_CPML,2)
-                 duxdxl_y = A19 * PML_dux_dxl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_y(i,j,k,ispec_CPML,2)
+              ! form dot product with test vector, non-symmetric form
+              tempx1(i,j,k) = jacobianl * (sigma_xx*xixl + sigma_yx*xiyl + sigma_zx*xizl) ! this goes to accel_x
+              tempy1(i,j,k) = jacobianl * (sigma_xy*xixl + sigma_yy*xiyl + sigma_zy*xizl) ! this goes to accel_y
+              tempz1(i,j,k) = jacobianl * (sigma_xz*xixl + sigma_yz*xiyl + sigma_zz*xizl) ! this goes to accel_z
 
-                 ! compute stress sigma
-                 sigma_xx = lambdalplus2mul*duxdxl_x + lambdal*duydyl_x + lambdal*duzdzl_x
-                 sigma_yx = mul*duxdyl_x + mul*duydxl_x
-                 sigma_zx = mul*duzdxl_x + mul*duxdzl_x
+              tempx2(i,j,k) = jacobianl * (sigma_xx*etaxl + sigma_yx*etayl + sigma_zx*etazl) ! this goes to accel_x
+              tempy2(i,j,k) = jacobianl * (sigma_xy*etaxl + sigma_yy*etayl + sigma_zy*etazl) ! this goes to accel_y
+              tempz2(i,j,k) = jacobianl * (sigma_xz*etaxl + sigma_yz*etayl + sigma_zz*etazl) ! this goes to accel_z
 
-                 sigma_xy = mul*duxdyl_y + mul*duydxl_y
-                 sigma_yy = lambdal*duxdxl_y + lambdalplus2mul*duydyl_y + lambdal*duzdzl_y
-                 sigma_zy = mul*duzdyl_y + mul*duydzl_y
+              tempx3(i,j,k) = jacobianl * (sigma_xx*gammaxl + sigma_yx*gammayl + sigma_zx*gammazl) ! this goes to accel_x
+              tempy3(i,j,k) = jacobianl * (sigma_xy*gammaxl + sigma_yy*gammayl + sigma_zy*gammazl) ! this goes to accel_y
+              tempz3(i,j,k) = jacobianl * (sigma_xz*gammaxl + sigma_yz*gammayl + sigma_zz*gammazl) ! this goes to accel_z
 
-                 sigma_xz = mul*duzdxl_z + mul*duxdzl_z
-                 sigma_yz = mul*duzdyl_z + mul*duydzl_z
-                 sigma_zz = lambdal*duxdxl_z + lambdal*duydyl_z + lambdalplus2mul*duzdzl_z
-
-                 ! form dot product with test vector, non-symmetric form
-                 tempx1(i,j,k) = jacobianl * (sigma_xx*xixl + sigma_yx*xiyl + sigma_zx*xizl) ! this goes to accel_x
-                 tempy1(i,j,k) = jacobianl * (sigma_xy*xixl + sigma_yy*xiyl + sigma_zy*xizl) ! this goes to accel_y
-                 tempz1(i,j,k) = jacobianl * (sigma_xz*xixl + sigma_yz*xiyl + sigma_zz*xizl) ! this goes to accel_z
-
-                 tempx2(i,j,k) = jacobianl * (sigma_xx*etaxl + sigma_yx*etayl + sigma_zx*etazl) ! this goes to accel_x
-                 tempy2(i,j,k) = jacobianl * (sigma_xy*etaxl + sigma_yy*etayl + sigma_zy*etazl) ! this goes to accel_y
-                 tempz2(i,j,k) = jacobianl * (sigma_xz*etaxl + sigma_yz*etayl + sigma_zz*etazl) ! this goes to accel_z
-
-                 tempx3(i,j,k) = jacobianl * (sigma_xx*gammaxl + sigma_yx*gammayl + sigma_zx*gammazl) ! this goes to accel_x
-                 tempy3(i,j,k) = jacobianl * (sigma_xy*gammaxl + sigma_yy*gammayl + sigma_zy*gammazl) ! this goes to accel_y
-                 tempz3(i,j,k) = jacobianl * (sigma_xz*gammaxl + sigma_yz*gammayl + sigma_zz*gammazl) ! this goes to accel_z
-              endif
-
-              if( ispec_is_acoustic(ispec) ) then !ZN
-                 rho_invl = 1.0_CUSTOM_REAL / rhostore(i,j,k,ispec)
-                 temp1(i,j,k) = rho_invl * wgllwgll_yz(j,k) * jacobianl* &
-                                (xixl*dpotentialdxl + xiyl*dpotentialdyl + xizl*dpotentialdzl)
-                 temp2(i,j,k) = rho_invl * wgllwgll_xz(i,k) * jacobianl* &
-                                (etaxl*dpotentialdxl + etayl*dpotentialdyl + etazl*dpotentialdzl)
-                 temp3(i,j,k) = rho_invl * wgllwgll_xy(i,j) * jacobianl* &
-                                (gammaxl*dpotentialdxl + gammayl*dpotentialdyl + gammazl*dpotentialdzl)
-              endif
-
             else if( CPML_regions(ispec_CPML) == CPML_XYZ ) then
 
               !------------------------------------------------------------------------------
@@ -1915,17 +1600,10 @@
                       d_store_z(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) ) / &
                       ( d_store_x(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML)**2)
               else
-                 if( ispec_is_elastic(ispec) ) then
-                    A7 = ( d_store_z(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) + &
-                         d_store_y(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) ) / &
-                         k_store_x(i,j,k,ispec_CPML) + &
-                         (it+0.0)*deltat*d_store_y(i,j,k,ispec_CPML)*d_store_z(i,j,k,ispec_CPML)/k_store_x(i,j,k,ispec_CPML)
-                 else if( ispec_is_acoustic(ispec) ) then
-                    A7 = (d_store_z(i,j,k,ispec_CPML)*k_store_y(i,j,k,ispec_CPML)+ &
-                         d_store_y(i,j,k,ispec_CPML)*k_store_z(i,j,k,ispec_CPML)) / &
-                         k_store_x(i,j,k,ispec_CPML) + &
-                         (it+0.0)*deltat*d_store_y(i,j,k,ispec_CPML)*d_store_z(i,j,k,ispec_CPML)/k_store_x(i,j,k,ispec_CPML)
-                 endif
+                 A7 = ( d_store_z(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) + &
+                      d_store_y(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) ) / &
+                      k_store_x(i,j,k,ispec_CPML) + &
+                      (it+0.0)*deltat*d_store_y(i,j,k,ispec_CPML)*d_store_z(i,j,k,ispec_CPML)/k_store_x(i,j,k,ispec_CPML)
                  A8 = - d_store_y(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML) / k_store_x(i,j,k,ispec_CPML)
               endif
 
@@ -1953,61 +1631,40 @@
                  coef2_2 = deltat/2.0d0
               endif
 
+              rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_1
 
-              if( ispec_is_elastic(ispec) ) then
+              if( abs(d_store_x(i,j,k,ispec_CPML)) > 1.d-5 ) then
+                 rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) &
+                      + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_2
+                 rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) &
+                      + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_2
+                 rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) &
+                      + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_2
+              else
+                 rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) &
+                      + PML_dux_dxl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
+                      + PML_dux_dxl(i,j,k,ispec_CPML) * (it-0.0)*deltat * coef2_2
+                 rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) &
+                      + PML_duy_dxl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
+                      + PML_duy_dxl(i,j,k,ispec_CPML) * (it-0.0)*deltat * coef2_2
+                 rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) &
+                      + PML_duz_dxl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
+                      + PML_duz_dxl(i,j,k,ispec_CPML) * (it-0.0)*deltat * coef2_2
+              endif
 
-                 rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_1
+              duxdxl_x = A6 * PML_dux_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) + A8 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2)
+              duydxl_y = A6 * PML_duy_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) + A8 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2)
+              duzdxl_z = A6 * PML_duz_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) + A8 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2)
 
-                 if( abs(d_store_x(i,j,k,ispec_CPML)) > 1.d-5 ) then
-                    rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) &
-                         + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_2
-                    rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) &
-                         + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_2
-                    rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) &
-                         + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_2
-                 else
-                    rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2) &
-                         + PML_dux_dxl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
-                         + PML_dux_dxl(i,j,k,ispec_CPML) * (it-0.0)*deltat * coef2_2
-                    rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2) &
-                         + PML_duy_dxl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
-                         + PML_duy_dxl(i,j,k,ispec_CPML) * (it-0.0)*deltat * coef2_2
-                    rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2) &
-                         + PML_duz_dxl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
-                         + PML_duz_dxl(i,j,k,ispec_CPML) * (it-0.0)*deltat * coef2_2
-                 endif
 
-                 duxdxl_x = A6 * PML_dux_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,1) + A8 * rmemory_dux_dxl_x(i,j,k,ispec_CPML,2)
-                 duydxl_y = A6 * PML_duy_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,1) + A8 * rmemory_duy_dxl_y(i,j,k,ispec_CPML,2)
-                 duzdxl_z = A6 * PML_duz_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,1) + A8 * rmemory_duz_dxl_z(i,j,k,ispec_CPML,2)
-
-              else if( ispec_is_acoustic(ispec) ) then
-
-                 rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) &
-                      + PML_dpotential_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dxl(i,j,k,ispec_CPML) * coef2_1
-
-                 if(abs(d_store_x(i,j,k,ispec_CPML))> 1.d-5)then
-                    rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) &
-                         + PML_dpotential_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dxl(i,j,k,ispec_CPML) * coef2_2
-                 else
-                    rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) &
-                         + PML_dpotential_dxl_new(i,j,k,ispec_CPML) * (it+0.0)*deltat* coef1_2 &
-                         + PML_dpotential_dxl(i,j,k,ispec_CPML) * (it-0.0)*deltat* coef2_2
-                 endif
-
-                 dpotentialdxl = A6 * PML_dpotential_dxl(i,j,k,ispec_CPML)  &
-                      + A7 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) + A8 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2)
-              endif
-
-
               !---------------------- A9, A10 and A11 --------------------------
               A9 = k_store_x(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) / k_store_y(i,j,k,ispec_CPML)
               if( abs(d_store_y(i,j,k,ispec_CPML)) > 1.d-5 ) then
@@ -2018,17 +1675,10 @@
                       - d_store_z(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) ) / &
                       ( d_store_y(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML)**2)
               else
-                 if( ispec_is_elastic(ispec) ) then
-                    A10 = ( d_store_z(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) &
-                         + d_store_x(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) ) / &
-                         k_store_y(i,j,k,ispec_CPML) + &
-                         (it+0.0)*deltat*d_store_x(i,j,k,ispec_CPML)*d_store_z(i,j,k,ispec_CPML)/k_store_y(i,j,k,ispec_CPML)
-                 else if( ispec_is_acoustic(ispec) ) then
-                    A10 = (d_store_z(i,j,k,ispec_CPML)*k_store_x(i,j,k,ispec_CPML) &
-                         +d_store_x(i,j,k,ispec_CPML)*k_store_z(i,j,k,ispec_CPML)) / &
-                         k_store_y(i,j,k,ispec_CPML) + &
-                         (it+0.0)*deltat*d_store_x(i,j,k,ispec_CPML)*d_store_z(i,j,k,ispec_CPML)/k_store_y(i,j,k,ispec_CPML)
-                 endif
+                 A10 = ( d_store_z(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) &
+                       + d_store_x(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) ) / &
+                       k_store_y(i,j,k,ispec_CPML) + &
+                       (it+0.0)*deltat*d_store_x(i,j,k,ispec_CPML)*d_store_z(i,j,k,ispec_CPML)/k_store_y(i,j,k,ispec_CPML)
                  A11 = - d_store_x(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML) / k_store_y(i,j,k,ispec_CPML)
               endif
 
@@ -2056,58 +1706,39 @@
                  coef2_2 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_1
 
-                 rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_1
+              if( abs(d_store_y(i,j,k,ispec_CPML)) > 1.d-5 ) then
+                 rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) &
+                      + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_2
+                 rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) &
+                      + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_2
+                 rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) &
+                      + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_2
+              else
+                 rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) &
+                      + PML_dux_dyl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
+                      + PML_dux_dyl(i,j,k,ispec_CPML) * (it-0.0)*deltat * coef2_2
+                 rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) &
+                      + PML_duy_dyl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
+                      + PML_duy_dyl(i,j,k,ispec_CPML) * (it-0.0)*deltat * coef2_2
+                 rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) &
+                      + PML_duz_dyl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
+                      + PML_duz_dyl(i,j,k,ispec_CPML) * (it-0.0)*deltat * coef2_2
+              endif
 
-                 if( abs(d_store_y(i,j,k,ispec_CPML)) > 1.d-5 ) then
-                    rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) &
-                         + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_2
-                    rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) &
-                         + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_2
-                    rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) &
-                         + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_2
-                 else
-                    rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2) &
-                         + PML_dux_dyl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
-                         + PML_dux_dyl(i,j,k,ispec_CPML) * (it-0.0)*deltat * coef2_2
-                    rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2) &
-                         + PML_duy_dyl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
-                         + PML_duy_dyl(i,j,k,ispec_CPML) * (it-0.0)*deltat * coef2_2
-                    rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2) &
-                         + PML_duz_dyl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
-                         + PML_duz_dyl(i,j,k,ispec_CPML) * (it-0.0)*deltat * coef2_2
-                 endif
+              duxdyl_x = A9 * PML_dux_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) + A11 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2)
+              duydyl_y = A9 * PML_duy_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) + A11 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2)
+              duzdyl_z = A9 * PML_duz_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) + A11 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2)
 
-                 duxdyl_x = A9 * PML_dux_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,1) + A11 * rmemory_dux_dyl_x(i,j,k,ispec_CPML,2)
-                 duydyl_y = A9 * PML_duy_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,1) + A11 * rmemory_duy_dyl_y(i,j,k,ispec_CPML,2)
-                 duzdyl_z = A9 * PML_duz_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,1) + A11 * rmemory_duz_dyl_z(i,j,k,ispec_CPML,2)
-
-              else if( ispec_is_acoustic(ispec) ) then
-                 rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) &
-                      + PML_dpotential_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dyl(i,j,k,ispec_CPML) * coef2_1
-
-                 if(abs(d_store_y(i,j,k,ispec_CPML))> 1.d-5)then
-                    rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) &
-                         + PML_dpotential_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dyl(i,j,k,ispec_CPML) * coef2_2
-                 else
-                    rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) &
-                         + PML_dpotential_dyl_new(i,j,k,ispec_CPML) * (it+0.0)*deltat* coef1_2 &
-                         + PML_dpotential_dyl(i,j,k,ispec_CPML) * (it-0.0)*deltat* coef2_2
-                 endif
-
-                 dpotentialdyl = A9 * PML_dpotential_dyl(i,j,k,ispec_CPML)  &
-                      + A10 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) + A11 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2)
-              endif
-
               !---------------------- A12, A13 and A14 --------------------------
               A12 = k_store_x(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) / k_store_z(i,j,k,ispec_CPML)
               if( abs(d_store_z(i,j,k,ispec_CPML)) > 1.d-5 ) then
@@ -2118,17 +1749,10 @@
                       - d_store_y(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) ) / &
                       ( d_store_z(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML)**2)
               else
-                 if( ispec_is_elastic(ispec) ) then
-                    A13 = ( d_store_y(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) &
-                         + d_store_x(i,j,k,ispec_CPML)*k_store_y(i,j,k,ispec_CPML) ) / &
-                         k_store_z(i,j,k,ispec_CPML) + &
-                         (it+0.0)*deltat*d_store_x(i,j,k,ispec_CPML)*d_store_y(i,j,k,ispec_CPML)/k_store_z(i,j,k,ispec_CPML)
-                 else if( ispec_is_acoustic(ispec) ) then
-                    A13 = (d_store_y(i,j,k,ispec_CPML)*k_store_x(i,j,k,ispec_CPML)&
-                         +d_store_x(i,j,k,ispec_CPML)*k_store_y(i,j,k,ispec_CPML)) / &
-                         k_store_z(i,j,k,ispec_CPML) + &
-                         (it+0.0)*deltat*d_store_x(i,j,k,ispec_CPML)*d_store_y(i,j,k,ispec_CPML)/k_store_z(i,j,k,ispec_CPML)
-                 endif
+                 A13 = ( d_store_y(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) &
+                       + d_store_x(i,j,k,ispec_CPML)*k_store_y(i,j,k,ispec_CPML) ) / &
+                       k_store_z(i,j,k,ispec_CPML) + &
+                       (it+0.0)*deltat*d_store_x(i,j,k,ispec_CPML)*d_store_y(i,j,k,ispec_CPML)/k_store_z(i,j,k,ispec_CPML)
                  A14 = - d_store_x(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML) / k_store_z(i,j,k,ispec_CPML)
               endif
 
@@ -2156,224 +1780,973 @@
                  coef2_2 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
+              rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
 
-                 rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
+              if( abs(d_store_z(i,j,k,ispec_CPML)) > 1.d-5 ) then
+                 rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) &
+                      + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_2
+                 rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) &
+                      + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_2
+                 rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) &
+                      + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_2
+              else
+                 rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) &
+                      + PML_dux_dzl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
+                      + PML_dux_dzl(i,j,k,ispec_CPML) * (it-0.0)*deltat * coef2_2
+                 rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) &
+                      + PML_duy_dzl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
+                      + PML_duy_dzl(i,j,k,ispec_CPML) * (it-0.0)*deltat * coef2_2
+                 rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) &
+                      + PML_duz_dzl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
+                      + PML_duz_dzl(i,j,k,ispec_CPML) * (it-0.0)*deltat * coef2_2
+              endif
 
-                 if( abs(d_store_z(i,j,k,ispec_CPML)) > 1.d-5 ) then
-                    rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) &
-                         + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_2
-                    rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) &
-                         + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_2
-                    rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) &
-                         + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_2
-                 else
-                    rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2) &
-                         + PML_dux_dzl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
-                         + PML_dux_dzl(i,j,k,ispec_CPML) * (it-0.0)*deltat * coef2_2
-                    rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2) &
-                         + PML_duy_dzl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
-                         + PML_duy_dzl(i,j,k,ispec_CPML) * (it-0.0)*deltat * coef2_2
-                    rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2) &
-                         + PML_duz_dzl_new(i,j,k,ispec_CPML) * (it+0.0) * deltat * coef1_2 &
-                         + PML_duz_dzl(i,j,k,ispec_CPML) * (it-0.0)*deltat * coef2_2
-                 endif
+              duxdzl_x = A12 * PML_dux_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) + A14 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2)
+              duydzl_y = A12 * PML_duy_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) + A14 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2)
+              duzdzl_z = A12 * PML_duz_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) + A14 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2)
 
-                 duxdzl_x = A12 * PML_dux_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,1) + A14 * rmemory_dux_dzl_x(i,j,k,ispec_CPML,2)
-                 duydzl_y = A12 * PML_duy_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,1) + A14 * rmemory_duy_dzl_y(i,j,k,ispec_CPML,2)
-                 duzdzl_z = A12 * PML_duz_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,1) + A14 * rmemory_duz_dzl_z(i,j,k,ispec_CPML,2)
+              !---------------------- A15 and A16 --------------------------
+              A15 = k_store_x(i,j,k,ispec_CPML)
+              A16 = d_store_x(i,j,k,ispec_CPML)
 
-              else if( ispec_is_acoustic(ispec) ) then
+              bb = alpha_store(i,j,k,ispec_CPML)
 
-                 rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) &
-                      + PML_dpotential_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dzl(i,j,k,ispec_CPML) * coef2_1
+              coef0_1 = exp(-bb * deltat)
 
-                 if(abs(d_store_z(i,j,k,ispec_CPML))> 1.d-5)then
-                    rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) &
-                         + PML_dpotential_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dzl(i,j,k,ispec_CPML) * coef2_2
-                 else
-                    rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) &
-                         + PML_dpotential_dzl_new(i,j,k,ispec_CPML) * (it+0.0)*deltat* coef1_2 &
-                         + PML_dpotential_dzl(i,j,k,ispec_CPML) * (it-0.0)*deltat* coef2_2
-                 endif
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
+              endif
 
-                 dpotentialdzl = A12 * PML_dpotential_dzl(i,j,k,ispec_CPML)  &
-                      + A13 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) + A14 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2)
+              rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dzl_y(i,j,k,ispec_CPML,2) = 0.d0
+
+              rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
+
+              duzdzl_y = A15 * PML_duz_dzl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_y(i,j,k,ispec_CPML,2)
+              duzdyl_y = A15 * PML_duz_dyl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dyl_y(i,j,k,ispec_CPML,2)
+
+              rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
+
+              rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dyl_z(i,j,k,ispec_CPML,2) = 0.d0
+
+              duydzl_z = A15 * PML_duy_dzl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dzl_z(i,j,k,ispec_CPML,2)
+              duydyl_z = A15 * PML_duy_dyl(i,j,k,ispec_CPML)  &
+                   + A16 * rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_z(i,j,k,ispec_CPML,2)
+
+              !---------------------- A17 and A18 --------------------------
+              A17 = k_store_y(i,j,k,ispec_CPML)
+              A18 = d_store_y(i,j,k,ispec_CPML)
+
+              bb = alpha_store(i,j,k,ispec_CPML)
+
+              coef0_1 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
               endif
 
-              if( ispec_is_elastic(ispec) ) then
-                 !---------------------- A15 and A16 --------------------------
-                 A15 = k_store_x(i,j,k,ispec_CPML)
-                 A16 = d_store_x(i,j,k,ispec_CPML)
+              rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dzl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 bb = alpha_store(i,j,k,ispec_CPML)
+              rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) &
+                   + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duz_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 coef0_1 = exp(-bb * deltat)
+              duzdzl_x = A17 * PML_duz_dzl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_x(i,j,k,ispec_CPML,2)
+              duzdxl_x = A17 * PML_duz_dxl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dxl_x(i,j,k,ispec_CPML,2)
 
-                 if( abs(bb) > 1.d-5 ) then
-                    coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
-                    coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
-                 else
-                    coef1_1 = deltat/2.0d0
-                    coef2_1 = deltat/2.0d0
-                 endif
+              rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dzl_y(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dxl_z(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
+              duxdzl_z = A17 * PML_dux_dzl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dzl_z(i,j,k,ispec_CPML,2)
+              duxdxl_z = A17 * PML_dux_dxl(i,j,k,ispec_CPML)  &
+                   + A18 * rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_z(i,j,k,ispec_CPML,2)
 
-                 duzdzl_y = A15 * PML_duz_dzl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duz_dzl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_y(i,j,k,ispec_CPML,2)
-                 duzdyl_y = A15 * PML_duz_dyl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duz_dyl_y(i,j,k,ispec_CPML,1) + rmemory_duz_dyl_y(i,j,k,ispec_CPML,2)
+              !---------------------- A19 and A20 --------------------------
+              A19 = k_store_z(i,j,k,ispec_CPML)
+              A20 = d_store_z(i,j,k,ispec_CPML)
 
-                 rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
+              bb = alpha_store(i,j,k,ispec_CPML)
 
-                 rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dyl_z(i,j,k,ispec_CPML,2) = 0.d0
+              coef0_1 = exp(-bb * deltat)
 
-                 duydzl_z = A15 * PML_duy_dzl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duy_dzl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dzl_z(i,j,k,ispec_CPML,2)
-                 duydyl_z = A15 * PML_duy_dyl(i,j,k,ispec_CPML)  &
-                      + A16 * rmemory_duy_dyl_z(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_z(i,j,k,ispec_CPML,2)
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0))/ bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
+              endif
 
-                 !---------------------- A17 and A18 --------------------------
-                 A17 = k_store_y(i,j,k,ispec_CPML)
-                 A18 = d_store_y(i,j,k,ispec_CPML)
+              rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dyl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 bb = alpha_store(i,j,k,ispec_CPML)
+              rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) &
+                   + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_duy_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
 
-                 coef0_1 = exp(-bb * deltat)
+              duydyl_x = A19 * PML_duy_dyl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_x(i,j,k,ispec_CPML,2)
+              duydxl_x = A19 * PML_duy_dxl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dxl_x(i,j,k,ispec_CPML,2)
 
-                 if( abs(bb) > 1.d-5 ) then
-                    coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
-                    coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
-                 else
-                    coef1_1 = deltat/2.0d0
-                    coef2_1 = deltat/2.0d0
-                 endif
+              rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dzl_x(i,j,k,ispec_CPML,2) = 0.d0
+              rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) &
+                   + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dux_dxl_y(i,j,k,ispec_CPML,2) = 0.d0
 
-                 rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) &
-                      + PML_duz_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duz_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duz_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
+              duxdyl_y = A19 * PML_dux_dyl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dyl_y(i,j,k,ispec_CPML,2)
+              duxdxl_y = A19 * PML_dux_dxl(i,j,k,ispec_CPML)  &
+                   + A20 * rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_y(i,j,k,ispec_CPML,2)
 
-                 duzdzl_x = A17 * PML_duz_dzl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_duz_dzl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dzl_x(i,j,k,ispec_CPML,2)
-                 duzdxl_x = A17 * PML_duz_dxl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_duz_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duz_dxl_x(i,j,k,ispec_CPML,2)
+              ! compute stress sigma
+              sigma_xx = lambdalplus2mul*duxdxl_x + lambdal*duydyl_x + lambdal*duzdzl_x
+              sigma_yx = mul*duxdyl_x + mul*duydxl_x
+              sigma_zx = mul*duzdxl_x + mul*duxdzl_x
 
-                 rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dzl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dzl_z(i,j,k,ispec_CPML,2) = 0.d0
+              sigma_xy = mul*duxdyl_y + mul*duydxl_y
+              sigma_yy = lambdal*duxdxl_y + lambdalplus2mul*duydyl_y + lambdal*duzdzl_y
+              sigma_zy = mul*duzdyl_y + mul*duydzl_y
 
-                 rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dxl_z(i,j,k,ispec_CPML,2) = 0.d0
+              sigma_xz = mul*duzdxl_z + mul*duxdzl_z
+              sigma_yz = mul*duzdyl_z + mul*duydzl_z
+              sigma_zz = lambdal*duxdxl_z + lambdal*duydyl_z + lambdalplus2mul*duzdzl_z
 
-                 duxdzl_z = A17 * PML_dux_dzl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_dux_dzl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dzl_z(i,j,k,ispec_CPML,2)
-                 duxdxl_z = A17 * PML_dux_dxl(i,j,k,ispec_CPML)  &
-                      + A18 * rmemory_dux_dxl_z(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_z(i,j,k,ispec_CPML,2)
+              ! form dot product with test vector, non-symmetric form
+              tempx1(i,j,k) = jacobianl * (sigma_xx*xixl + sigma_yx*xiyl + sigma_zx*xizl) ! this goes to accel_x
+              tempy1(i,j,k) = jacobianl * (sigma_xy*xixl + sigma_yy*xiyl + sigma_zy*xizl) ! this goes to accel_y
+              tempz1(i,j,k) = jacobianl * (sigma_xz*xixl + sigma_yz*xiyl + sigma_zz*xizl) ! this goes to accel_z
 
-                 !---------------------- A19 and A20 --------------------------
-                 A19 = k_store_z(i,j,k,ispec_CPML)
-                 A20 = d_store_z(i,j,k,ispec_CPML)
+              tempx2(i,j,k) = jacobianl * (sigma_xx*etaxl + sigma_yx*etayl + sigma_zx*etazl) ! this goes to accel_x
+              tempy2(i,j,k) = jacobianl * (sigma_xy*etaxl + sigma_yy*etayl + sigma_zy*etazl) ! this goes to accel_y
+              tempz2(i,j,k) = jacobianl * (sigma_xz*etaxl + sigma_yz*etayl + sigma_zz*etazl) ! this goes to accel_z
 
-                 bb = alpha_store(i,j,k,ispec_CPML)
+              tempx3(i,j,k) = jacobianl * (sigma_xx*gammaxl + sigma_yx*gammayl + sigma_zx*gammazl) ! this goes to accel_x
+              tempy3(i,j,k) = jacobianl * (sigma_xy*gammaxl + sigma_yy*gammayl + sigma_zy*gammazl) ! this goes to accel_y
+              tempz3(i,j,k) = jacobianl * (sigma_xz*gammaxl + sigma_yz*gammayl + sigma_zz*gammazl) ! this goes to accel_z
+            else
+              stop 'wrong PML flag in PML memory variable calculation routine'
+            endif
+          enddo
+      enddo
+  enddo
 
-                 coef0_1 = exp(-bb * deltat)
+end subroutine pml_compute_memory_variables_elastic
 
-                 if( abs(bb) > 1.d-5 ) then
-                    coef1_1 = (1.d0 - exp(-bb * deltat/2.d0))/ bb
-                    coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
-                 else
-                    coef1_1 = deltat/2.0d0
-                    coef2_1 = deltat/2.0d0
-                 endif
+!
+!=====================================================================
+!
+!
 
-                 rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dyl_x(i,j,k,ispec_CPML,2) = 0.d0
+subroutine pml_compute_memory_variables_acoustic(ispec,ispec_CPML,deltat,temp1,temp2,temp3,NSPEC_AB,xix,xiy,xiz, &
+                                    etax,etay,etaz,gammax,gammay,gammaz,jacobian)
+  ! calculates C-PML elastic memory variables and computes stress sigma
 
-                 rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) &
-                      + PML_duy_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_duy_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_duy_dxl_x(i,j,k,ispec_CPML,2) = 0.d0
+  ! second-order accurate convolution term calculation from equation (21) of
+  ! Shumin Wang, Robert Lee, and Fernando L. Teixeira,
+  ! Anisotropic-Medium PML for Vector FETD With Modified Basis Functions,
+  ! IEEE Transactions on Antennas and Propagation, vol. 54, no. 1, (2006)
 
-                 duydyl_x = A19 * PML_duy_dyl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_duy_dyl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dyl_x(i,j,k,ispec_CPML,2)
-                 duydxl_x = A19 * PML_duy_dxl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_duy_dxl_x(i,j,k,ispec_CPML,1) + rmemory_duy_dxl_x(i,j,k,ispec_CPML,2)
+  use specfem_par, only: it,kappastore,rhostore,wgllwgll_xy,wgllwgll_xz,wgllwgll_yz
+  use pml_par
+  use constants, only: NGLLX,NGLLY,NGLLZ,FOUR_THIRDS, &
+                       CPML_X_ONLY,CPML_Y_ONLY,CPML_Z_ONLY,CPML_XY_ONLY,CPML_XZ_ONLY,CPML_YZ_ONLY,CPML_XYZ
 
-                 rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dyl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dyl_y(i,j,k,ispec_CPML,2) = 0.d0
+  implicit none
 
-                 rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) &
-                      + PML_dux_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dux_dxl(i,j,k,ispec_CPML) * coef2_1
-                 rmemory_dux_dxl_y(i,j,k,ispec_CPML,2) = 0.d0
+  integer, intent(in) :: ispec,ispec_CPML,NSPEC_AB
 
-                 duxdyl_y = A19 * PML_dux_dyl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_dux_dyl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dyl_y(i,j,k,ispec_CPML,2)
-                 duxdxl_y = A19 * PML_dux_dxl(i,j,k,ispec_CPML)  &
-                      + A20 * rmemory_dux_dxl_y(i,j,k,ispec_CPML,1) + rmemory_dux_dxl_y(i,j,k,ispec_CPML,2)
+  real(kind=CUSTOM_REAL), intent(in) :: deltat
+  real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ,NSPEC_AB), intent(in) :: &
+                                        xix,xiy,xiz,etax,etay,etaz,gammax,gammay,gammaz,jacobian
+  real(kind=CUSTOM_REAL) :: xixl,xiyl,xizl,etaxl,etayl,etazl,gammaxl,gammayl,gammazl,jacobianl
 
-                 ! compute stress sigma
-                 sigma_xx = lambdalplus2mul*duxdxl_x + lambdal*duydyl_x + lambdal*duzdzl_x
-                 sigma_yx = mul*duxdyl_x + mul*duydxl_x
-                 sigma_zx = mul*duzdxl_x + mul*duxdzl_x
+  real(kind=CUSTOM_REAL), dimension(NGLLX,NGLLY,NGLLZ), intent(out) :: temp1,temp2,temp3
 
-                 sigma_xy = mul*duxdyl_y + mul*duydxl_y
-                 sigma_yy = lambdal*duxdxl_y + lambdalplus2mul*duydyl_y + lambdal*duzdzl_y
-                 sigma_zy = mul*duzdyl_y + mul*duydzl_y
+  ! local parameters
+  integer :: i,j,k
 
-                 sigma_xz = mul*duzdxl_z + mul*duxdzl_z
-                 sigma_yz = mul*duzdyl_z + mul*duydzl_z
-                 sigma_zz = lambdal*duxdxl_z + lambdal*duydyl_z + lambdalplus2mul*duzdzl_z
+  real(kind=CUSTOM_REAL) :: kappal,rho_invl
+  real(kind=CUSTOM_REAL) :: dpotentialdxl,dpotentialdyl,dpotentialdzl
+  real(kind=CUSTOM_REAL) :: bb,coef0_1,coef1_1,coef2_1,coef0_2,coef1_2,coef2_2
+  real(kind=CUSTOM_REAL) :: A6,A7,A8,A9,A10,A11,A12,A13,A14
 
-                 ! form dot product with test vector, non-symmetric form
-                 tempx1(i,j,k) = jacobianl * (sigma_xx*xixl + sigma_yx*xiyl + sigma_zx*xizl) ! this goes to accel_x
-                 tempy1(i,j,k) = jacobianl * (sigma_xy*xixl + sigma_yy*xiyl + sigma_zy*xizl) ! this goes to accel_y
-                 tempz1(i,j,k) = jacobianl * (sigma_xz*xixl + sigma_yz*xiyl + sigma_zz*xizl) ! this goes to accel_z
+  do k=1,NGLLZ
+     do j=1,NGLLY
+         do i=1,NGLLX
+            kappal = kappastore(i,j,k,ispec)
+            rho_invl = 1.0_CUSTOM_REAL / rhostore(i,j,k,ispec)
+            xixl = xix(i,j,k,ispec)
+            xiyl = xiy(i,j,k,ispec)
+            xizl = xiz(i,j,k,ispec)
+            etaxl = etax(i,j,k,ispec)
+            etayl = etay(i,j,k,ispec)
+            etazl = etaz(i,j,k,ispec)
+            gammaxl = gammax(i,j,k,ispec)
+            gammayl = gammay(i,j,k,ispec)
+            gammazl = gammaz(i,j,k,ispec)
+            jacobianl = jacobian(i,j,k,ispec)
 
-                 tempx2(i,j,k) = jacobianl * (sigma_xx*etaxl + sigma_yx*etayl + sigma_zx*etazl) ! this goes to accel_x
-                 tempy2(i,j,k) = jacobianl * (sigma_xy*etaxl + sigma_yy*etayl + sigma_zy*etazl) ! this goes to accel_y
-                 tempz2(i,j,k) = jacobianl * (sigma_xz*etaxl + sigma_yz*etayl + sigma_zz*etazl) ! this goes to accel_z
+            if( CPML_regions(ispec_CPML) == CPML_X_ONLY ) then
 
-                 tempx3(i,j,k) = jacobianl * (sigma_xx*gammaxl + sigma_yx*gammayl + sigma_zx*gammazl) ! this goes to accel_x
-                 tempy3(i,j,k) = jacobianl * (sigma_xy*gammaxl + sigma_yy*gammayl + sigma_zy*gammazl) ! this goes to accel_y
-                 tempz3(i,j,k) = jacobianl * (sigma_xz*gammaxl + sigma_yz*gammayl + sigma_zz*gammazl) ! this goes to accel_z
+              !------------------------------------------------------------------------------
+              !---------------------------- X-surface C-PML ---------------------------------
+              !------------------------------------------------------------------------------
+
+              !---------------------- A6, A7 and A8 --------------------------
+              A6 = 1.d0 / k_store_x(i,j,k,ispec_CPML)
+              A7 = 0.d0
+              A8 = - d_store_x(i,j,k,ispec_CPML) / (k_store_x(i,j,k,ispec_CPML)**2)
+
+              bb = d_store_x(i,j,k,ispec_CPML) / k_store_x(i,j,k,ispec_CPML) + alpha_store(i,j,k,ispec_CPML)
+
+              coef0_2 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_2 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_2 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_2 = deltat/2.0d0
+                 coef2_2 = deltat/2.0d0
               endif
 
-              if( ispec_is_acoustic(ispec) ) then !ZN
+              rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) &
+                   + PML_dpotential_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dxl(i,j,k,ispec_CPML) * coef2_2
 
-                 rho_invl = 1.0_CUSTOM_REAL / rhostore(i,j,k,ispec)
-                 temp1(i,j,k) = rho_invl * wgllwgll_yz(j,k) * jacobianl* &
-                                (xixl*dpotentialdxl + xiyl*dpotentialdyl + xizl*dpotentialdzl)
-                 temp2(i,j,k) = rho_invl * wgllwgll_xz(i,k) * jacobianl* &
-                                (etaxl*dpotentialdxl + etayl*dpotentialdyl + etazl*dpotentialdzl)
-                 temp3(i,j,k) = rho_invl * wgllwgll_xy(i,j) * jacobianl* &
-                                (gammaxl*dpotentialdxl + gammayl*dpotentialdyl + gammazl*dpotentialdzl)
+              dpotentialdxl = A6 * PML_dpotential_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) + A8 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2)
+
+              !---------------------- A9, A10 and A11 --------------------------
+              A9  = k_store_x(i,j,k,ispec_CPML)
+              A10 = d_store_x(i,j,k,ispec_CPML)
+              A11 = 0.d0
+
+              bb = alpha_store(i,j,k,ispec_CPML)
+
+              coef0_1 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
               endif
 
+              rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) &
+                   + PML_dpotential_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) = 0.d0
+
+              dpotentialdyl = A9 * PML_dpotential_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) + A11 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2)
+
+              !---------------------- A12, A13 and A14 --------------------------
+              A12 = k_store_x(i,j,k,ispec_CPML)
+              A13 = d_store_x(i,j,k,ispec_CPML)
+              A14 = 0.d0
+
+              bb = alpha_store(i,j,k,ispec_CPML)
+
+              coef0_1 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
+              endif
+
+              rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) &
+                   + PML_dpotential_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) = 0.d0
+
+              dpotentialdzl = A12 * PML_dpotential_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) + A14 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2)
+
+              temp1(i,j,k) = rho_invl * wgllwgll_yz(j,k) * jacobianl* &
+                             (xixl*dpotentialdxl + xiyl*dpotentialdyl + xizl*dpotentialdzl)
+              temp2(i,j,k) = rho_invl * wgllwgll_xz(i,k) * jacobianl* &
+                             (etaxl*dpotentialdxl + etayl*dpotentialdyl + etazl*dpotentialdzl)
+              temp3(i,j,k) = rho_invl * wgllwgll_xy(i,j) * jacobianl* &
+                             (gammaxl*dpotentialdxl + gammayl*dpotentialdyl + gammazl*dpotentialdzl)
+
+            else if( CPML_regions(ispec_CPML) == CPML_Y_ONLY ) then
+              !------------------------------------------------------------------------------
+              !---------------------------- Y-surface C-PML ---------------------------------
+              !------------------------------------------------------------------------------
+
+              !---------------------- A6, A7 and A8 --------------------------
+              A6 = k_store_y(i,j,k,ispec_CPML)
+              A7 = d_store_y(i,j,k,ispec_CPML)
+              A8 = 0.d0
+
+              bb = alpha_store(i,j,k,ispec_CPML)
+
+              coef0_1 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
+              endif
+
+              rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) &
+                   + PML_dpotential_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) = 0.d0
+
+              dpotentialdxl = A6 * PML_dpotential_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) + A8 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2)
+
+              !---------------------- A9, A10 and A11 --------------------------
+              A9 = 1.d0/k_store_y(i,j,k,ispec_CPML)
+              A10 = 0.d0
+              A11 = - d_store_y(i,j,k,ispec_CPML) / (k_store_y(i,j,k,ispec_CPML) ** 2)
+
+              bb = d_store_y(i,j,k,ispec_CPML) / k_store_y(i,j,k,ispec_CPML) + alpha_store(i,j,k,ispec_CPML)
+
+              coef0_2 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_2 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_2 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_2 = deltat/2.0d0
+                 coef2_2 = deltat/2.0d0
+              endif
+
+              rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) &
+                   + PML_dpotential_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dyl(i,j,k,ispec_CPML) * coef2_2
+
+              dpotentialdyl = A9 * PML_dpotential_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) + A11 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2)
+
+              !---------------------- A12, A13 and A14 --------------------------
+              A12 = k_store_y(i,j,k,ispec_CPML)
+              A13 = d_store_y(i,j,k,ispec_CPML)
+              A14 = 0.d0
+
+              bb = alpha_store(i,j,k,ispec_CPML)
+
+              coef0_1 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
+              endif
+
+              rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) &
+                   + PML_dpotential_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) = 0.d0
+
+              dpotentialdzl = A12 * PML_dpotential_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) + A14 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2)
+
+              temp1(i,j,k) = rho_invl * wgllwgll_yz(j,k) * jacobianl* &
+                             (xixl*dpotentialdxl + xiyl*dpotentialdyl + xizl*dpotentialdzl)
+              temp2(i,j,k) = rho_invl * wgllwgll_xz(i,k) * jacobianl* &
+                             (etaxl*dpotentialdxl + etayl*dpotentialdyl + etazl*dpotentialdzl)
+              temp3(i,j,k) = rho_invl * wgllwgll_xy(i,j) * jacobianl* &
+                             (gammaxl*dpotentialdxl + gammayl*dpotentialdyl + gammazl*dpotentialdzl)
+
+            else if( CPML_regions(ispec_CPML) == CPML_Z_ONLY ) then
+
+              !------------------------------------------------------------------------------
+              !---------------------------- Z-surface C-PML ---------------------------------
+              !------------------------------------------------------------------------------
+
+              !---------------------- A6, A7 and A8 --------------------------
+              A6 = k_store_z(i,j,k,ispec_CPML)
+              A7 = d_store_z(i,j,k,ispec_CPML)
+              A8 = 0.d0
+
+              bb = alpha_store(i,j,k,ispec_CPML)
+
+              coef0_1 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
+              endif
+
+              rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) &
+                   + PML_dpotential_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) = 0.d0
+
+              dpotentialdxl = A6 * PML_dpotential_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) + A8 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2)
+
+              !---------------------- A9, A10 and A11 --------------------------
+              A9 = k_store_z(i,j,k,ispec_CPML)
+              A10 = d_store_z(i,j,k,ispec_CPML)
+              A11 = 0.d0
+
+              bb = alpha_store(i,j,k,ispec_CPML)
+
+              coef0_1 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
+              endif
+
+              rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) &
+                   + PML_dpotential_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) = 0.d0
+
+              dpotentialdyl = A9 * PML_dpotential_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) + A11 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2)
+
+              !---------------------- A12, A13 and A14 --------------------------
+              A12 = 1.0 / k_store_z(i,j,k,ispec_CPML)
+              A13 = 0.d0
+              A14 = - d_store_z(i,j,k,ispec_CPML) / (k_store_z(i,j,k,ispec_CPML) ** 2)
+
+              bb = d_store_z(i,j,k,ispec_CPML) / k_store_z(i,j,k,ispec_CPML) + alpha_store(i,j,k,ispec_CPML)
+
+              coef0_2 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_2 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_2 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_2 = deltat/2.0d0
+                 coef2_2 = deltat/2.0d0
+              endif
+
+              rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) &
+                   + PML_dpotential_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dzl(i,j,k,ispec_CPML) * coef2_2
+
+              dpotentialdzl = A12 * PML_dpotential_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) + A14 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2)
+
+              temp1(i,j,k) = rho_invl * wgllwgll_yz(j,k) * jacobianl* &
+                             (xixl*dpotentialdxl + xiyl*dpotentialdyl + xizl*dpotentialdzl)
+              temp2(i,j,k) = rho_invl * wgllwgll_xz(i,k) * jacobianl* &
+                             (etaxl*dpotentialdxl + etayl*dpotentialdyl + etazl*dpotentialdzl)
+              temp3(i,j,k) = rho_invl * wgllwgll_xy(i,j) * jacobianl* &
+                             (gammaxl*dpotentialdxl + gammayl*dpotentialdyl + gammazl*dpotentialdzl)
+
+            else if( CPML_regions(ispec_CPML) == CPML_XY_ONLY ) then
+
+              !------------------------------------------------------------------------------
+              !---------------------------- XY-edge C-PML -----------------------------------
+              !------------------------------------------------------------------------------
+
+              !---------------------- A6, A7 and A8 --------------------------
+              A6 = k_store_y(i,j,k,ispec_CPML) / k_store_x(i,j,k,ispec_CPML)
+              A7 = 0.d0
+              A8 = ( d_store_y(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) - &
+                   d_store_x(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) ) / k_store_x(i,j,k,ispec_CPML)**2
+
+              bb = d_store_x(i,j,k,ispec_CPML) / k_store_x(i,j,k,ispec_CPML) + alpha_store(i,j,k,ispec_CPML)
+
+              coef0_2 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_2 = ( 1.d0 - exp(-bb * deltat/2.d0) ) / bb
+                 coef2_2 = ( 1.d0 - exp(-bb * deltat/2.d0) ) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_2 = deltat/2.0d0
+                 coef2_2 = deltat/2.0d0
+              endif
+
+              rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) &
+                   + PML_dpotential_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dxl(i,j,k,ispec_CPML) * coef2_2
+
+              dpotentialdxl = A6 * PML_dpotential_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) + A8 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2)
+
+              !---------------------- A9, A10 and A11 --------------------------
+              A9 = k_store_x(i,j,k,ispec_CPML) / k_store_y(i,j,k,ispec_CPML)
+              A10 = 0.d0
+              A11 = ( d_store_x(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) - &
+                   d_store_y(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) ) / k_store_y(i,j,k,ispec_CPML)**2
+
+              bb = d_store_y(i,j,k,ispec_CPML) / k_store_y(i,j,k,ispec_CPML) + alpha_store(i,j,k,ispec_CPML)
+
+              coef0_2 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_2 = ( 1.d0 - exp(-bb * deltat/2.d0) ) / bb
+                 coef2_2 = ( 1.d0 - exp(-bb * deltat/2.d0) ) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_2 = deltat/2.0d0
+                 coef2_2 = deltat/2.0d0
+              endif
+
+              rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) &
+                   + PML_dpotential_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dyl(i,j,k,ispec_CPML) * coef2_2
+
+              dpotentialdyl = A9 * PML_dpotential_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) + A11 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2)
+
+              !---------------------- A12, A13 and A14 --------------------------
+              A12 = k_store_x(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML)
+              A13 = d_store_x(i,j,k,ispec_CPML)*k_store_y(i,j,k,ispec_CPML) &
+                    + d_store_y(i,j,k,ispec_CPML)*k_store_x(i,j,k,ispec_CPML) &
+                    + (it+0.0)*deltat*d_store_x(i,j,k,ispec_CPML)*d_store_y(i,j,k,ispec_CPML)
+              A14 = - d_store_x(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML)
+
+              bb = alpha_store(i,j,k,ispec_CPML)
+
+              coef0_1 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
+              endif
+
+              coef0_2 = coef0_1
+              coef1_2 = coef1_1
+              coef2_2 = coef2_1
+
+              rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) &
+                   + PML_dpotential_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dzl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) &
+                   + PML_dpotential_dzl_new(i,j,k,ispec_CPML) *(it+0.0)*deltat * coef1_2 &
+                   + PML_dpotential_dzl(i,j,k,ispec_CPML) *(it-0.0)*deltat * coef2_2
+
+              dpotentialdzl = A12 * PML_dpotential_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) + A14 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2)
+
+              temp1(i,j,k) = rho_invl * wgllwgll_yz(j,k) * jacobianl* &
+                             (xixl*dpotentialdxl + xiyl*dpotentialdyl + xizl*dpotentialdzl)
+              temp2(i,j,k) = rho_invl * wgllwgll_xz(i,k) * jacobianl* &
+                             (etaxl*dpotentialdxl + etayl*dpotentialdyl + etazl*dpotentialdzl)
+              temp3(i,j,k) = rho_invl * wgllwgll_xy(i,j) * jacobianl* &
+                             (gammaxl*dpotentialdxl + gammayl*dpotentialdyl + gammazl*dpotentialdzl)
+
+            else if( CPML_regions(ispec_CPML) == CPML_XZ_ONLY ) then
+
+              !------------------------------------------------------------------------------
+              !---------------------------- XZ-edge C-PML -----------------------------------
+              !------------------------------------------------------------------------------
+
+              !---------------------- A6, A7 and A8 --------------------------
+              A6 = k_store_z(i,j,k,ispec_CPML) / k_store_x(i,j,k,ispec_CPML)
+              A7 = 0.d0
+              A8 = ( d_store_z(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) - &
+                   d_store_x(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) ) / k_store_x(i,j,k,ispec_CPML)**2
+
+              bb = d_store_x(i,j,k,ispec_CPML) / k_store_x(i,j,k,ispec_CPML) + alpha_store(i,j,k,ispec_CPML)
+
+              coef0_2 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_2 = ( 1.d0 - exp(-bb * deltat/2.d0) ) / bb
+                 coef2_2 = ( 1.d0 - exp(-bb * deltat/2.d0) ) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_2 = deltat/2.0d0
+                 coef2_2 = deltat/2.0d0
+              endif
+
+              rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) &
+                   + PML_dpotential_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dxl(i,j,k,ispec_CPML) * coef2_2
+
+              dpotentialdxl = A6 * PML_dpotential_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) + A8 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2)
+
+              !---------------------- A9, A10 and A11 --------------------------
+              A9 = k_store_x(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML)
+              A10 = d_store_x(i,j,k,ispec_CPML)*k_store_z(i,j,k,ispec_CPML) &
+                    + d_store_z(i,j,k,ispec_CPML)*k_store_x(i,j,k,ispec_CPML) &
+                    + (it+0.0)*deltat*d_store_x(i,j,k,ispec_CPML)*d_store_z(i,j,k,ispec_CPML)
+              A11 = - d_store_x(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML)
+
+              bb = alpha_store(i,j,k,ispec_CPML)
+
+              coef0_1 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
+              endif
+
+              coef0_2 = coef0_1
+              coef1_2 = coef1_1
+              coef2_2 = coef2_1
+
+              rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) &
+                   + PML_dpotential_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dyl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) &
+                   + PML_dpotential_dyl_new(i,j,k,ispec_CPML) *(it+0.0)*deltat* coef1_2 &
+                   + PML_dpotential_dyl(i,j,k,ispec_CPML) *(it-0.0)*deltat* coef2_2
+
+              dpotentialdyl = A9 * PML_dpotential_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) + A11 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2)
+
+              !---------------------- A12, A13 and A14 --------------------------
+              A12 = k_store_x(i,j,k,ispec_CPML) / k_store_z(i,j,k,ispec_CPML)
+              A13 = 0.d0
+              A14 = ( d_store_x(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) &
+                   - d_store_z(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) ) / k_store_z(i,j,k,ispec_CPML)**2
+
+              bb = d_store_z(i,j,k,ispec_CPML) / k_store_z(i,j,k,ispec_CPML) + alpha_store(i,j,k,ispec_CPML)
+
+              coef0_2 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_2 = ( 1.d0 - exp(-bb * deltat/2.d0) ) / bb
+                 coef2_2 = ( 1.d0 - exp(-bb * deltat/2.d0) ) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_2 = deltat/2.0d0
+                 coef2_2 = deltat/2.0d0
+              endif
+
+              rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) &
+                   + PML_dpotential_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dzl(i,j,k,ispec_CPML) * coef2_2
+
+              dpotentialdzl = A12 * PML_dpotential_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) + A14 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2)
+
+              temp1(i,j,k) = rho_invl * wgllwgll_yz(j,k) * jacobianl* &
+                             (xixl*dpotentialdxl + xiyl*dpotentialdyl + xizl*dpotentialdzl)
+              temp2(i,j,k) = rho_invl * wgllwgll_xz(i,k) * jacobianl* &
+                             (etaxl*dpotentialdxl + etayl*dpotentialdyl + etazl*dpotentialdzl)
+              temp3(i,j,k) = rho_invl * wgllwgll_xy(i,j) * jacobianl* &
+                             (gammaxl*dpotentialdxl + gammayl*dpotentialdyl + gammazl*dpotentialdzl)
+
+            else if( CPML_regions(ispec_CPML) == CPML_YZ_ONLY ) then
+
+              !------------------------------------------------------------------------------
+              !---------------------------- YZ-edge C-PML -----------------------------------
+              !------------------------------------------------------------------------------
+
+              !---------------------- A6, A7 and A8 --------------------------
+              A6 = k_store_z(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML)
+              A7 = d_store_y(i,j,k,ispec_CPML)*k_store_z(i,j,k,ispec_CPML) &
+                   + d_store_z(i,j,k,ispec_CPML)*k_store_y(i,j,k,ispec_CPML) &
+                   + (it+0.0)*deltat*d_store_y(i,j,k,ispec_CPML)*d_store_z(i,j,k,ispec_CPML)
+              A8 = - d_store_y(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML)
+
+              bb = alpha_store(i,j,k,ispec_CPML)
+
+              coef0_1 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
+              endif
+
+              coef0_2 = coef0_1
+              coef1_2 = coef1_1
+              coef2_2 = coef2_1
+
+              rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) &
+                   + PML_dpotential_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dxl(i,j,k,ispec_CPML) * coef2_1
+              rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) &
+                   + PML_dpotential_dxl_new(i,j,k,ispec_CPML) * (it+0.0)*deltat* coef1_2 &
+                   + PML_dpotential_dxl(i,j,k,ispec_CPML) *(it-0.0)*deltat* coef2_2
+
+              dpotentialdxl = A6 * PML_dpotential_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) + A8 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2)
+
+              !---------------------- A9, A10 and A11 --------------------------
+              A9 = k_store_z(i,j,k,ispec_CPML) / k_store_y(i,j,k,ispec_CPML)
+              A10 = 0.d0
+              A11 = ( d_store_z(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) -&
+                   d_store_y(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) ) / k_store_y(i,j,k,ispec_CPML)**2
+
+              bb = d_store_y(i,j,k,ispec_CPML) / k_store_y(i,j,k,ispec_CPML) + alpha_store(i,j,k,ispec_CPML)
+
+              coef0_2 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_2 = ( 1.d0 - exp(-bb * deltat/2.d0) ) / bb
+                 coef2_2 = ( 1.d0 - exp(-bb * deltat/2.d0) ) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_2 = deltat/2.0d0
+                 coef2_2 = deltat/2.0d0
+              endif
+
+              rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) &
+                   + PML_dpotential_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dyl(i,j,k,ispec_CPML) * coef2_2
+
+              dpotentialdyl = A9 * PML_dpotential_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) + A11 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2)
+
+              !---------------------- A12, A13 and A14 --------------------------
+              A12 = k_store_y(i,j,k,ispec_CPML) / k_store_z(i,j,k,ispec_CPML)
+              A13 = 0.d0
+              A14 = ( d_store_y(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) -&
+                   d_store_z(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) ) / k_store_z(i,j,k,ispec_CPML)**2
+
+              bb = d_store_z(i,j,k,ispec_CPML) / k_store_z(i,j,k,ispec_CPML) + alpha_store(i,j,k,ispec_CPML)
+
+              coef0_2 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_2 = ( 1.d0 - exp(-bb * deltat/2.d0) ) / bb
+                 coef2_2 = ( 1.d0 - exp(-bb * deltat/2.d0) ) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_2 = deltat/2.0d0
+                 coef2_2 = deltat/2.0d0
+              endif
+
+              rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) = 0.d0
+              rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) &
+                   + PML_dpotential_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dzl(i,j,k,ispec_CPML) * coef2_2
+
+              dpotentialdzl = A12 * PML_dpotential_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) + A14 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2)
+
+              temp1(i,j,k) = rho_invl * wgllwgll_yz(j,k) * jacobianl* &
+                             (xixl*dpotentialdxl + xiyl*dpotentialdyl + xizl*dpotentialdzl)
+              temp2(i,j,k) = rho_invl * wgllwgll_xz(i,k) * jacobianl* &
+                             (etaxl*dpotentialdxl + etayl*dpotentialdyl + etazl*dpotentialdzl)
+              temp3(i,j,k) = rho_invl * wgllwgll_xy(i,j) * jacobianl* &
+                             (gammaxl*dpotentialdxl + gammayl*dpotentialdyl + gammazl*dpotentialdzl)
+
+            else if( CPML_regions(ispec_CPML) == CPML_XYZ ) then
+
+              !------------------------------------------------------------------------------
+              !---------------------------- XYZ-corner C-PML --------------------------------
+              !------------------------------------------------------------------------------
+
+              !---------------------- A6, A7 and A8 --------------------------
+              A6 = k_store_y(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) / k_store_x(i,j,k,ispec_CPML)
+              if( abs(d_store_x(i,j,k,ispec_CPML)) > 1.d-5 ) then
+                 A7 = d_store_y(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML)/d_store_x(i,j,k,ispec_CPML)
+                 A8 = ( d_store_y(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) - &
+                      d_store_x(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) ) * &
+                      ( d_store_x(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) - &
+                      d_store_z(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) ) / &
+                      ( d_store_x(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML)**2)
+              else
+                 A7 = (d_store_z(i,j,k,ispec_CPML)*k_store_y(i,j,k,ispec_CPML)+ &
+                      d_store_y(i,j,k,ispec_CPML)*k_store_z(i,j,k,ispec_CPML)) / &
+                      k_store_x(i,j,k,ispec_CPML) + &
+                      (it+0.0)*deltat*d_store_y(i,j,k,ispec_CPML)*d_store_z(i,j,k,ispec_CPML)/k_store_x(i,j,k,ispec_CPML)
+                 A8 = - d_store_y(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML) / k_store_x(i,j,k,ispec_CPML)
+              endif
+
+              bb = alpha_store(i,j,k,ispec_CPML)
+
+              coef0_1 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
+              endif
+
+              bb = d_store_x(i,j,k,ispec_CPML) / k_store_x(i,j,k,ispec_CPML) + alpha_store(i,j,k,ispec_CPML)
+
+              coef0_2 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_2 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_2 = (1.d0 - exp(-bb* deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_2 = deltat/2.0d0
+                 coef2_2 = deltat/2.0d0
+              endif
+
+              rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) &
+                   + PML_dpotential_dxl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dxl(i,j,k,ispec_CPML) * coef2_1
+
+              if(abs(d_store_x(i,j,k,ispec_CPML))> 1.d-5)then
+                 rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) &
+                      + PML_dpotential_dxl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dxl(i,j,k,ispec_CPML) * coef2_2
+              else
+                 rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2) &
+                      + PML_dpotential_dxl_new(i,j,k,ispec_CPML) * (it+0.0)*deltat* coef1_2 &
+                      + PML_dpotential_dxl(i,j,k,ispec_CPML) * (it-0.0)*deltat* coef2_2
+              endif
+
+              dpotentialdxl = A6 * PML_dpotential_dxl(i,j,k,ispec_CPML)  &
+                   + A7 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,1) + A8 * rmemory_dpotential_dxl(i,j,k,ispec_CPML,2)
+
+              !---------------------- A9, A10 and A11 --------------------------
+              A9 = k_store_x(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) / k_store_y(i,j,k,ispec_CPML)
+              if( abs(d_store_y(i,j,k,ispec_CPML)) > 1.d-5 ) then
+                 A10 = d_store_x(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML)/d_store_y(i,j,k,ispec_CPML)
+                 A11 = ( d_store_x(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) &
+                      - d_store_y(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) ) * &
+                      ( d_store_y(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) &
+                      - d_store_z(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) ) / &
+                      ( d_store_y(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML)**2)
+              else
+                 A10 = (d_store_z(i,j,k,ispec_CPML)*k_store_x(i,j,k,ispec_CPML) &
+                       +d_store_x(i,j,k,ispec_CPML)*k_store_z(i,j,k,ispec_CPML)) / &
+                       k_store_y(i,j,k,ispec_CPML) + &
+                       (it+0.0)*deltat*d_store_x(i,j,k,ispec_CPML)*d_store_z(i,j,k,ispec_CPML)/k_store_y(i,j,k,ispec_CPML)
+                 A11 = - d_store_x(i,j,k,ispec_CPML) * d_store_z(i,j,k,ispec_CPML) / k_store_y(i,j,k,ispec_CPML)
+              endif
+
+              bb = alpha_store(i,j,k,ispec_CPML)
+
+              coef0_1 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
+              endif
+
+              bb = d_store_y(i,j,k,ispec_CPML) / k_store_y(i,j,k,ispec_CPML) + alpha_store(i,j,k,ispec_CPML)
+
+              coef0_2 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_2 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_2 = (1.d0 - exp(-bb* deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_2 = deltat/2.0d0
+                 coef2_2 = deltat/2.0d0
+              endif
+
+              rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) &
+                   + PML_dpotential_dyl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dyl(i,j,k,ispec_CPML) * coef2_1
+
+              if(abs(d_store_y(i,j,k,ispec_CPML))> 1.d-5)then
+                 rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) &
+                      + PML_dpotential_dyl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dyl(i,j,k,ispec_CPML) * coef2_2
+              else
+                 rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2) &
+                      + PML_dpotential_dyl_new(i,j,k,ispec_CPML) * (it+0.0)*deltat* coef1_2 &
+                      + PML_dpotential_dyl(i,j,k,ispec_CPML) * (it-0.0)*deltat* coef2_2
+              endif
+
+              dpotentialdyl = A9 * PML_dpotential_dyl(i,j,k,ispec_CPML)  &
+                   + A10 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,1) + A11 * rmemory_dpotential_dyl(i,j,k,ispec_CPML,2)
+
+              !---------------------- A12, A13 and A14 --------------------------
+              A12 = k_store_x(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) / k_store_z(i,j,k,ispec_CPML)
+              if( abs(d_store_z(i,j,k,ispec_CPML)) > 1.d-5 ) then
+                 A13 = d_store_x(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML)/d_store_z(i,j,k,ispec_CPML)
+                 A14 = ( d_store_x(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) &
+                      - d_store_z(i,j,k,ispec_CPML) * k_store_x(i,j,k,ispec_CPML) ) * &
+                      ( d_store_z(i,j,k,ispec_CPML) * k_store_y(i,j,k,ispec_CPML) &
+                      - d_store_y(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML) ) / &
+                      ( d_store_z(i,j,k,ispec_CPML) * k_store_z(i,j,k,ispec_CPML)**2)
+              else
+                 A13 = (d_store_y(i,j,k,ispec_CPML)*k_store_x(i,j,k,ispec_CPML)&
+                       +d_store_x(i,j,k,ispec_CPML)*k_store_y(i,j,k,ispec_CPML)) / &
+                       k_store_z(i,j,k,ispec_CPML) + &
+                       (it+0.0)*deltat*d_store_x(i,j,k,ispec_CPML)*d_store_y(i,j,k,ispec_CPML)/k_store_z(i,j,k,ispec_CPML)
+                 A14 = - d_store_x(i,j,k,ispec_CPML) * d_store_y(i,j,k,ispec_CPML) / k_store_z(i,j,k,ispec_CPML)
+              endif
+
+              bb = alpha_store(i,j,k,ispec_CPML)
+
+              coef0_1 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_1 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_1 = (1.d0 - exp(-bb * deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_1 = deltat/2.0d0
+                 coef2_1 = deltat/2.0d0
+              endif
+
+              bb = d_store_z(i,j,k,ispec_CPML) / k_store_z(i,j,k,ispec_CPML) + alpha_store(i,j,k,ispec_CPML)
+
+              coef0_2 = exp(-bb * deltat)
+
+              if( abs(bb) > 1.d-5 ) then
+                 coef1_2 = (1.d0 - exp(-bb * deltat/2.d0)) / bb
+                 coef2_2 = (1.d0 - exp(-bb* deltat/2.d0)) * exp(-bb * deltat/2.d0) / bb
+              else
+                 coef1_2 = deltat/2.0d0
+                 coef2_2 = deltat/2.0d0
+              endif
+
+              rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) = coef0_1 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) &
+                   + PML_dpotential_dzl_new(i,j,k,ispec_CPML) * coef1_1 + PML_dpotential_dzl(i,j,k,ispec_CPML) * coef2_1
+
+              if(abs(d_store_z(i,j,k,ispec_CPML))> 1.d-5)then
+                 rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) &
+                      + PML_dpotential_dzl_new(i,j,k,ispec_CPML) * coef1_2 + PML_dpotential_dzl(i,j,k,ispec_CPML) * coef2_2
+              else
+                 rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) = coef0_2 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2) &
+                      + PML_dpotential_dzl_new(i,j,k,ispec_CPML) * (it+0.0)*deltat* coef1_2 &
+                      + PML_dpotential_dzl(i,j,k,ispec_CPML) * (it-0.0)*deltat* coef2_2
+              endif
+
+              dpotentialdzl = A12 * PML_dpotential_dzl(i,j,k,ispec_CPML)  &
+                   + A13 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,1) + A14 * rmemory_dpotential_dzl(i,j,k,ispec_CPML,2)
+
+              temp1(i,j,k) = rho_invl * wgllwgll_yz(j,k) * jacobianl* &
+                             (xixl*dpotentialdxl + xiyl*dpotentialdyl + xizl*dpotentialdzl)
+              temp2(i,j,k) = rho_invl * wgllwgll_xz(i,k) * jacobianl* &
+                             (etaxl*dpotentialdxl + etayl*dpotentialdyl + etazl*dpotentialdzl)
+              temp3(i,j,k) = rho_invl * wgllwgll_xy(i,j) * jacobianl* &
+                             (gammaxl*dpotentialdxl + gammayl*dpotentialdyl + gammazl*dpotentialdzl)
+
             else
               stop 'wrong PML flag in PML memory variable calculation routine'
             endif
@@ -2381,5 +2754,5 @@
       enddo
   enddo
 
-end subroutine pml_compute_memory_variables
+end subroutine pml_compute_memory_variables_acoustic
 



More information about the CIG-COMMITS mailing list