Skip to content

Commit 3c44e89

Browse files
committed
adds support for model SEMUCB_A3d_3dQ (SEMUCB w/ 3D Berkeley attenuation model)
1 parent f6956c6 commit 3c44e89

23 files changed

+786
-48
lines changed

src/auxiliaries/rules.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -586,6 +586,7 @@ xwrite_profile_OBJECTS += \
586586
$O/model_aniso_inner_core.check.o \
587587
$O/model_aniso_mantle.check.o \
588588
$O/model_atten3D_QRFSI12.check.o \
589+
$O/model_atten3D_berkeley.check.o \
589590
$O/model_attenuation_gll.check.o \
590591
$O/model_attenuation.check.o \
591592
$O/model_berkeley.check.o \

src/auxiliaries/write_profile.f90

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -687,6 +687,7 @@ subroutine write_profile_setup()
687687
if (ATTENUATION) then
688688
write(IMAIN,*) ' incorporating attenuation using ',N_SLS,' standard linear solids'
689689
if (ATTENUATION_3D) write(IMAIN,*) ' using 3D attenuation model'
690+
if (ATTENUATION_3D_BERKELEY) write(IMAIN,*) ' using 3D Berkeley attenuation model'
690691
else
691692
write(IMAIN,*) ' no attenuation'
692693
endif
@@ -999,10 +1000,11 @@ subroutine write_profile_model_values(r,r_prem,theta,phi,iregion_code,idoubling,
9991000
!
10001001
!note: only Qmu attenuation considered, Qkappa attenuation not used so far...
10011002
if (ATTENUATION) then
1002-
call meshfem3D_models_getatten_val(idoubling,r_prem,theta,phi, &
1003+
call meshfem3D_models_getatten_val(iregion_code,idoubling, &
1004+
r_prem,theta,phi, &
10031005
ispec, i, j, k, &
10041006
tau_e,tau_s, &
1005-
moho,Qmu,Qkappa,elem_in_crust)
1007+
moho,Qmu,Qkappa,elem_in_crust,rho)
10061008
endif
10071009
!> end GET_MODEL
10081010

src/meshfem3D/get_model.F90

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ subroutine get_model(iregion_code,ispec,nspec,idoubling, &
4747

4848
use meshfem_models_par, only: &
4949
ANISOTROPIC_3D_MANTLE,ANISOTROPIC_INNER_CORE, &
50-
ATTENUATION,ATTENUATION_3D,ATTENUATION_1D_WITH_3D_STORAGE, &
50+
ATTENUATION,ATTENUATION_3D,ATTENUATION_3D_BERKELEY,ATTENUATION_1D_WITH_3D_STORAGE, &
5151
CEM_ACCEPT,CRUSTAL
5252

5353
use regions_mesh_par2, only: &
@@ -239,10 +239,11 @@ subroutine get_model(iregion_code,ispec,nspec,idoubling, &
239239
!
240240
!note: only Qmu attenuation considered, Qkappa attenuation not used so far...
241241
if (ATTENUATION) then
242-
call meshfem3D_models_getatten_val(idoubling,r_prem,theta,phi, &
242+
call meshfem3D_models_getatten_val(iregion_code,idoubling, &
243+
r_prem,theta,phi, &
243244
ispec, i, j, k, &
244245
tau_e,tau_s, &
245-
moho,Qmu,Qkappa,elem_in_crust)
246+
moho,Qmu,Qkappa,elem_in_crust,rho)
246247
endif
247248

248249
! define elastic parameters in the model
@@ -318,13 +319,12 @@ subroutine get_model(iregion_code,ispec,nspec,idoubling, &
318319

319320
! stores attenuation arrays
320321
if (ATTENUATION) then
321-
if (ATTENUATION_3D .or. ATTENUATION_1D_WITH_3D_STORAGE) then
322+
if (ATTENUATION_3D .or. ATTENUATION_3D_BERKELEY .or. ATTENUATION_1D_WITH_3D_STORAGE) then
322323
! distinguish between single and double precision for reals
323324
do i_sls = 1,N_SLS
324325
tau_e_store(i,j,k,i_sls,ispec) = real(tau_e(i_sls), kind=CUSTOM_REAL)
325326
enddo
326327
Qmu_store(i,j,k,ispec) = real(Qmu, kind=CUSTOM_REAL)
327-
328328
else
329329
! single node per element
330330
! distinguish between single and double precision for reals
@@ -335,7 +335,6 @@ subroutine get_model(iregion_code,ispec,nspec,idoubling, &
335335
enddo
336336
Qmu_store(1,1,1,ispec) = real(Qmu, kind=CUSTOM_REAL)
337337
endif
338-
339338
endif
340339
endif
341340

src/meshfem3D/meshfem3D_models.F90

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,9 @@ subroutine meshfem3D_models_broadcast()
8181
else if (ATTENUATION_3D) then
8282
! Colleen's model defined originally between 24.4km and 650km
8383
call model_atten3D_QRFSI12_broadcast()
84+
else if (ATTENUATION_3D_BERKELEY) then
85+
! Berkeley 3D attenuation model
86+
call model_atten3D_berkeley_broadcast()
8487
else
8588
! sets up attenuation coefficients according to the chosen, "pure" 1D model
8689
! (including their 1D-crustal profiles)
@@ -1647,10 +1650,12 @@ end subroutine meshfem3D_model_crust
16471650
!-------------------------------------------------------------------------------------------------
16481651
!
16491652

1650-
subroutine meshfem3D_models_getatten_val(idoubling,r_prem,theta,phi, &
1653+
subroutine meshfem3D_models_getatten_val(iregion_code,idoubling, &
1654+
r_prem,theta,phi, &
16511655
ispec, i, j, k, &
16521656
tau_e,tau_s, &
1653-
moho,Qmu,Qkappa,elem_in_crust)
1657+
moho,Qmu,Qkappa, &
1658+
elem_in_crust,rho)
16541659

16551660
! sets attenuation values tau_e and Qmu for a given point
16561661
!
@@ -1667,7 +1672,7 @@ subroutine meshfem3D_models_getatten_val(idoubling,r_prem,theta,phi, &
16671672

16681673
implicit none
16691674

1670-
integer,intent(in) :: idoubling
1675+
integer,intent(in) :: iregion_code,idoubling
16711676

16721677
double precision,intent(in) :: r_prem
16731678
double precision,intent(in) :: theta,phi
@@ -1681,11 +1686,11 @@ subroutine meshfem3D_models_getatten_val(idoubling,r_prem,theta,phi, &
16811686
double precision, dimension(N_SLS),intent(inout) :: tau_s, tau_e
16821687

16831688
logical,intent(in) :: elem_in_crust
1689+
double precision, intent(in) :: rho
16841690

16851691
! local parameters
16861692
double precision :: theta_degrees,phi_degrees
16871693
double precision :: r_used
1688-
16891694
! geographical values
16901695
double precision :: dist, theta_c, phi_c, dist_c, edge, sponge
16911696

@@ -1705,6 +1710,7 @@ subroutine meshfem3D_models_getatten_val(idoubling,r_prem,theta,phi, &
17051710
call model_attenuation_gll(ispec, i, j, k, Qmu)
17061711

17071712
else if (ATTENUATION_3D) then
1713+
! 3D attenuation model
17081714
! used for models: s362ani_3DQ, s362iso_3DQ, 3D_attenuation, SPiRal
17091715

17101716
! gets spherical coordinates in degrees
@@ -1713,7 +1719,7 @@ subroutine meshfem3D_models_getatten_val(idoubling,r_prem,theta,phi, &
17131719

17141720
! in case models incorporate a 3D crust, attenuation values for mantle
17151721
! get expanded up to surface, and for the crustal points Qmu for PREM crust is imposed
1716-
r_used = r_prem*R_PLANET_KM
1722+
r_used = r_prem * R_PLANET_KM
17171723
if (CRUSTAL) then
17181724
if (r_prem > (ONE-moho) .or. elem_in_crust) then
17191725
! points in actual crust: puts point radius into prem crust
@@ -1728,8 +1734,19 @@ subroutine meshfem3D_models_getatten_val(idoubling,r_prem,theta,phi, &
17281734
! gets value according to radius/theta/phi location and idoubling flag
17291735
call model_atten3D_QRFSI12(r_used,theta_degrees,phi_degrees,Qmu,idoubling)
17301736

1731-
else
1737+
else if (ATTENUATION_3D_BERKELEY) then
1738+
! 3D Berkeley attenuation model
1739+
if (elem_in_crust) then
1740+
! fixes Q for crust
1741+
Qmu = 300.0d0
1742+
Qkappa = 99900.d0 ! not used so far...
1743+
else
1744+
r_used = r_prem
1745+
call model_atten3D_berkeley(r_used,theta,phi,rho,Qkappa,Qmu,iregion_code,CRUSTAL)
1746+
endif
17321747

1748+
else
1749+
! default 1D reference (attenuation) model
17331750
select case (REFERENCE_1D_MODEL)
17341751

17351752
! case (REFERENCE_MODEL_PREM,REFERENCE_MODEL_PREM2)

src/meshfem3D/meshfem3D_par.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ module meshfem_models_par
8888
MODEL_GLL, &
8989
HONOR_1D_SPHERICAL_MOHO,CRUSTAL,ONE_CRUST,CASE_3D,TRANSVERSE_ISOTROPY, &
9090
MODEL_3D_MANTLE_PERTUBATIONS,HETEROGEN_3D_MANTLE,ANISOTROPIC_3D_MANTLE,ANISOTROPIC_INNER_CORE, &
91-
ATTENUATION_3D, ATTENUATION_GLL, &
91+
ATTENUATION_3D,ATTENUATION_3D_BERKELEY,ATTENUATION_GLL, &
9292
CEM_REQUEST, CEM_ACCEPT, &
9393
EMC_MODEL,EMC_MODEL_QMU, &
9494
NX_BATHY,NY_BATHY, &

src/meshfem3D/model_1dberkeley.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ module model_1dberkeley_par
6363
Mref_V_Qmu_berkeley
6464

6565
! Berkeley 1D model
66-
character (len=100) :: berkeley_file_model1D = trim(A3d_folder) // 'model1D.dat'
66+
character(len=*), parameter :: berkeley_file_model1D = trim(A3d_folder) // 'model1D.dat'
6767

6868
! moho layer index
6969
integer :: moho1D_layer_index = -1

0 commit comments

Comments
 (0)