@@ -58,8 +58,7 @@ subroutine compute_boundary_kernel()
5858
5959 ! computes contribution from top element
6060 call compute_boundary_kernel_elem(kernel_moho_top, &
61- mustore(i,j,k,ispec_top), &
62- kappastore(i,j,k,ispec_top),rho_vs(i,j,k,ispec_top), &
61+ mustore(i,j,k,ispec_top),kappastore(i,j,k,ispec_top),rhostore(i,j,k,ispec_top), &
6362 accel(:,iglob_top),b_displ(:,iglob_top), &
6463 dsdx_top(:,:,i,j,k,ispec2D),b_dsdx_top(:,:,i,j,k,ispec2D), &
6564 normal_moho_top(:,igll,ispec2D) )
@@ -76,12 +75,11 @@ subroutine compute_boundary_kernel()
7675 ! iglob_top == iglob_bot!
7776
7877 ! computes contribution from bottom element
79- call compute_boundary_kernel_elem( kernel_moho_bot, &
80- mustore(i,j,k,ispec_bot), &
81- kappastore(i,j,k,ispec_bot),rho_vs(i,j,k,ispec_bot), &
82- accel(:,iglob_bot),b_displ(:,iglob_bot), &
83- dsdx_bot(:,:,i,j,k,ispec2D),b_dsdx_bot(:,:,i,j,k,ispec2D), &
84- normal_moho_bot(:,jgll,ispec2D) )
78+ call compute_boundary_kernel_elem(kernel_moho_bot, &
79+ mustore(i,j,k,ispec_bot),kappastore(i,j,k,ispec_bot),rhostore(i,j,k,ispec_bot), &
80+ accel(:,iglob_bot),b_displ(:,iglob_bot), &
81+ dsdx_bot(:,:,i,j,k,ispec2D),b_dsdx_bot(:,:,i,j,k,ispec2D), &
82+ normal_moho_bot(:,jgll,ispec2D) )
8583
8684 ! note: kernel point position: indices given by ijk_moho_top(:,igll,ispec2D)
8785 moho_kl(igll,ispec2D) = moho_kl(igll,ispec2D) &
@@ -114,12 +112,11 @@ subroutine compute_boundary_kernel()
114112 iglob_top = ibool(i,j,k,ispec_top)
115113
116114 ! computes contribution from top element
117- call compute_boundary_kernel_elem( kernel_moho_top, &
118- mustore(i,j,k,ispec_top), &
119- kappastore(i,j,k,ispec_top),rho_vs(i,j,k,ispec_top), &
120- accel(:,iglob_top),b_displ(:,iglob_top), &
121- dsdx_top(:,:,i,j,k,ispec2D),b_dsdx_top(:,:,i,j,k,ispec2D), &
122- normal_moho_top(:,igll,ispec2D) )
115+ call compute_boundary_kernel_elem(kernel_moho_top, &
116+ mustore(i,j,k,ispec_top),kappastore(i,j,k,ispec_top),rhostore(i,j,k,ispec_top), &
117+ accel(:,iglob_top),b_displ(:,iglob_top), &
118+ dsdx_top(:,:,i,j,k,ispec2D),b_dsdx_top(:,:,i,j,k,ispec2D), &
119+ normal_moho_top(:,igll,ispec2D) )
123120
124121 ! note: kernel point position igll: indices given by ijk_moho_top(:,igll,ispec2D)
125122 moho_kl(igll,ispec2D) = moho_kl(igll,ispec2D) + kernel_moho_top * deltat
@@ -131,12 +128,11 @@ subroutine compute_boundary_kernel()
131128 iglob_bot = ibool(i,j,k,ispec_bot)
132129
133130 ! computes contribution from bottom element
134- call compute_boundary_kernel_elem( kernel_moho_bot, &
135- mustore(i,j,k,ispec_bot), &
136- kappastore(i,j,k,ispec_bot),rho_vs(i,j,k,ispec_bot), &
137- accel(:,iglob_bot),b_displ(:,iglob_bot), &
138- dsdx_bot(:,:,i,j,k,ispec2D),b_dsdx_bot(:,:,i,j,k,ispec2D), &
139- normal_moho_bot(:,igll,ispec2D) )
131+ call compute_boundary_kernel_elem(kernel_moho_bot, &
132+ mustore(i,j,k,ispec_bot),kappastore(i,j,k,ispec_bot),rhostore(i,j,k,ispec_bot), &
133+ accel(:,iglob_bot),b_displ(:,iglob_bot), &
134+ dsdx_bot(:,:,i,j,k,ispec2D),b_dsdx_bot(:,:,i,j,k,ispec2D), &
135+ normal_moho_bot(:,igll,ispec2D) )
140136
141137 ! note: kernel point position igll: indices given by ijk_moho_bot(:,igll,ispec2D)
142138 moho_kl(igll,ispec2D) = moho_kl(igll,ispec2D) - kernel_moho_bot * deltat
@@ -153,24 +149,27 @@ end subroutine compute_boundary_kernel
153149!- ------------------------------------------------------------------------------------------------
154150!
155151
156- subroutine compute_boundary_kernel_elem (kernel , mul , kappal , rho_vsl , &
152+ subroutine compute_boundary_kernel_elem (kernel , mul , kappal , rhol , &
157153 accel , b_displ , ds , b_ds , norm )
158154
159155! compute the boundary kernel contribution from one side of the boundary
160156! see e.g.: Tromp et al. (2005), eq. (25), or Liu & Tromp (2008), eq. (65)
161157
162- use constants
158+ use constants, only: CUSTOM_REAL,NDIM,ONE
163159
164160 implicit none
165161
166- real (kind= CUSTOM_REAL) kernel, mul, kappal, rho_vsl
167- real (kind= CUSTOM_REAL) :: accel(NDIM), b_displ(NDIM), ds(NDIM,NDIM), b_ds(NDIM,NDIM), norm(NDIM)
162+ real (kind= CUSTOM_REAL), intent (inout ) :: kernel
163+ real (kind= CUSTOM_REAL), intent (in ) :: mul, kappal, rhol
164+ real (kind= CUSTOM_REAL), intent (in ) :: accel(NDIM), b_displ(NDIM)
165+ real (kind= CUSTOM_REAL), intent (in ) :: ds(NDIM,NDIM), b_ds(NDIM,NDIM), norm(NDIM)
168166
167+ ! local parameters
169168 real (kind= CUSTOM_REAL) :: eps3, eps(NDIM,NDIM), epsdev(NDIM,NDIM), normal(NDIM,1 )
170169 real (kind= CUSTOM_REAL) :: b_eps3, b_eps(NDIM,NDIM), b_epsdev(NDIM,NDIM)
171- real (kind= CUSTOM_REAL) :: temp1(NDIM,NDIM), rhol, kl(1 ,1 ), one_matrix(1 ,1 )
172-
170+ real (kind= CUSTOM_REAL) :: temp1(NDIM,NDIM), kl(1 ,1 ), one_matrix(1 ,1 )
173171
172+ ! initializes
174173 normal(:,1 ) = norm
175174 one_matrix(1 ,1 ) = ONE
176175
@@ -194,7 +193,6 @@ subroutine compute_boundary_kernel_elem(kernel, mul, kappal, rho_vsl, &
194193 epsdev(2 ,2 ) = eps(2 ,2 ) - eps3 / 3
195194 epsdev(3 ,3 ) = eps(3 ,3 ) - eps3 / 3
196195
197-
198196 ! backward/reconstructed-forward strain (epsilon) trace
199197 b_eps3 = b_ds(1 ,1 ) + b_ds(2 ,2 ) + b_ds(3 ,3 )
200198
@@ -218,9 +216,6 @@ subroutine compute_boundary_kernel_elem(kernel, mul, kappal, rho_vsl, &
218216 ! matrix multiplication
219217 temp1 = matmul (epsdev,b_epsdev)
220218
221- ! density value
222- rhol = rho_vsl ** 2 / mul
223-
224219 ! isotropic kernel value
225220 ! see e.g.: Tromp et al. (2005), eq. (25), or Liu & Tromp 2008, eq. (65)
226221 kl = ( rhol * dot_product (accel(:), b_displ(:)) + kappal * eps3 * b_eps3 &
0 commit comments