@@ -305,16 +305,7 @@ contains
305305 end do
306306 $:GPU_LOOP(parallelism= ' [seq]' )
307307 do i = 1 , eqn_idx%stress%end - eqn_idx%stress%beg + 1
308- ! Elastic energy (guard skips when G near zero)
309- if (.not. hypo_energy_guard .or. ((G_L > verysmall) .and. (G_R > verysmall))) then
310- E_L = E_L + (tau_e_L(i)* tau_e_L(i))/ max (4._wp * G_L, verysmall)
311- E_R = E_R + (tau_e_R(i)* tau_e_R(i))/ max (4._wp * G_R, verysmall)
312- ! Additional terms in 2D and 3D
313- if ((i == 2 ) .or. (i == 4 ) .or. (i == 5 )) then
314- E_L = E_L + (tau_e_L(i)* tau_e_L(i))/ max (4._wp * G_L, verysmall)
315- E_R = E_R + (tau_e_R(i)* tau_e_R(i))/ max (4._wp * G_R, verysmall)
316- end if
317- end if
308+ @:compute_hypo_elastic_energy(E_L, E_R, any (eqn_idx%stress%beg - 1 + i == shear_indices))
318309 end do
319310 end if
320311
@@ -376,14 +367,7 @@ contains
376367 if (wave_speeds == wave_speeds_direct) then
377368 if (elasticity) then
378369 ! Elastic wave speed, Rodriguez et al. JCP (2019 )
379- s_L = min (vel_L(dir_idx(1 )) - sqrt (max (verysmall, &
380- & c_L* c_L + (((4._wp * G_L)/ 3._wp ) + tau_e_L(dir_idx_tau(1 )))/ rho_L)), &
381- & vel_R(dir_idx(1 )) - sqrt (max (verysmall, &
382- & c_R* c_R + (((4._wp * G_R)/ 3._wp ) + tau_e_R(dir_idx_tau(1 )))/ rho_R)))
383- s_R = max (vel_R(dir_idx(1 )) + sqrt (max (verysmall, &
384- & c_R* c_R + (((4._wp * G_R)/ 3._wp ) + tau_e_R(dir_idx_tau(1 )))/ rho_R)), &
385- & vel_L(dir_idx(1 )) + sqrt (max (verysmall, &
386- & c_L* c_L + (((4._wp * G_L)/ 3._wp ) + tau_e_L(dir_idx_tau(1 )))/ rho_L)))
370+ @:compute_elastic_wave_speeds_lr()
387371 s_S = (pres_R - tau_e_R(dir_idx_tau(1 )) - pres_L + tau_e_L(dir_idx_tau(1 )) &
388372 & + rho_L* vel_L(dir_idx(1 ))* (s_L - vel_L(dir_idx(1 ))) - rho_R* vel_R(dir_idx(1 )) &
389373 & * (s_R - vel_R(dir_idx(1 ))))/ (rho_L* (s_L - vel_L(dir_idx(1 ))) - rho_R* (s_R &
@@ -1413,16 +1397,7 @@ contains
14131397 end do
14141398 $:GPU_LOOP(parallelism= ' [seq]' )
14151399 do i = 1 , eqn_idx%stress%end - eqn_idx%stress%beg + 1
1416- ! Elastic energy (guard skips when G near zero)
1417- if (.not. hypo_energy_guard .or. ((G_L > verysmall) .and. (G_R > verysmall))) then
1418- E_L = E_L + (tau_e_L(i)* tau_e_L(i))/ max (4._wp * G_L, verysmall)
1419- E_R = E_R + (tau_e_R(i)* tau_e_R(i))/ max (4._wp * G_R, verysmall)
1420- ! Additional terms in 2D and 3D
1421- if ((i == 2 ) .or. (i == 4 ) .or. (i == 5 )) then
1422- E_L = E_L + (tau_e_L(i)* tau_e_L(i))/ max (4._wp * G_L, verysmall)
1423- E_R = E_R + (tau_e_R(i)* tau_e_R(i))/ max (4._wp * G_R, verysmall)
1424- end if
1425- end if
1400+ @:compute_hypo_elastic_energy(E_L, E_R, any (eqn_idx%stress%beg - 1 + i == shear_indices))
14261401 end do
14271402 end if
14281403
@@ -1487,14 +1462,7 @@ contains
14871462 if (wave_speeds == wave_speeds_direct) then
14881463 if (elasticity) then
14891464 ! Elastic wave speed, Rodriguez et al. JCP (2019 )
1490- s_L = min (vel_L(dir_idx(1 )) - sqrt (max (verysmall, &
1491- & c_L* c_L + (((4._wp * G_L)/ 3._wp ) + tau_e_L(dir_idx_tau(1 )))/ rho_L)), &
1492- & vel_R(dir_idx(1 )) - sqrt (max (verysmall, &
1493- & c_R* c_R + (((4._wp * G_R)/ 3._wp ) + tau_e_R(dir_idx_tau(1 )))/ rho_R)))
1494- s_R = max (vel_R(dir_idx(1 )) + sqrt (max (verysmall, &
1495- & c_R* c_R + (((4._wp * G_R)/ 3._wp ) + tau_e_R(dir_idx_tau(1 )))/ rho_R)), &
1496- & vel_L(dir_idx(1 )) + sqrt (max (verysmall, &
1497- & c_L* c_L + (((4._wp * G_L)/ 3._wp ) + tau_e_L(dir_idx_tau(1 )))/ rho_L)))
1465+ @:compute_elastic_wave_speeds_lr()
14981466 s_S = (pres_R - tau_e_R(dir_idx_tau(1 )) - pres_L + tau_e_L(dir_idx_tau(1 )) &
14991467 & + rho_L* vel_L(dir_idx(1 ))* (s_L - vel_L(dir_idx(1 ))) - rho_R* vel_R(dir_idx(1 )) &
15001468 & * (s_R - vel_R(dir_idx(1 ))))/ (rho_L* (s_L - vel_L(dir_idx(1 ))) - rho_R* (s_R &
0 commit comments