Compute anelastic coefficients for Standard Linear Solid model, when the not-honoring strategy is applied USE THE LIBRARY QR_SOLVE!
38 rho_el, qs_nh, qp_nh, f_val,
39 y_lambda_nh, y_mu_nh, frequency_range
40
42
43 implicit none
44
45 integer*4 :: nn, mpi_id, N_SLS, i, j, k, &
46 pivot_qp(n_sls),pivot_qs(n_sls)
47
48 real*8 :: f_val, fmin, fmax, esp1, esp2, deltax, &
49 vp2, vs2, pi
50
51 real*8 :: qs_nh, qp_nh, &
52 y_lambda_nh(1,n_sls),&
53 y_mu_nh(1,n_sls), &
54 frequency_range(n_sls),&
55 frequency_range_sampling(2*n_sls-1),&
56 ys(n_sls),yp(n_sls), &
57 a_qp(2*n_sls-1,n_sls),rhs_qp(2*n_sls-1),a_qs(2*n_sls-1,n_sls
58 rho, rho_el(nn,nn,nn), &
59 lambda, lambda_el(nn,nn,nn), &
60 mu, mu_el(nn,nn,nn), &
61 rho_all, mu_all, lambda_all
62
63 rho_all = 0.d0; lambda_all = 0.d0; mu_all = 0.d0
64
65 do i =1, nn
66 do j =1, nn
67 do k =1, nn
68 mu_all = mu_all + mu_el(i,j,k)
69 lambda_all = lambda_all + lambda_el(i,j,k)
70 rho_all = rho_all + rho_el(i,j,k)
71 enddo
72 enddo
73 enddo
74
75 mu = mu_all/(nn**3)
76 lambda = lambda_all/(nn**3)
77 rho = rho_all/(nn**3)
78
79 pi = 4.d0*datan(1.d0);
80
81 if (f_val .le. 10) then
82 fmin = 0.05d0;
83 elseif(f_val .le. 100) then
84 fmin = 5.d0;
85 elseif(f_val .le. 1000) then
86 fmin = 50.d0;
87 elseif(f_val .le. 10000) then
88 fmin = 500.d0;
89 elseif(f_val .le. 100000) then
90 fmin = 5000.d0;
91 endif
92
93 f_val = 1;
94
95 fmax=100*fmin;
96
97
98
99
100
101
102 esp1 = log10(fmin); esp2 = log10(fmax);
103 deltax = (esp2-esp1)/(n_sls-1);
104
105
106 if (n_sls .eq. 3) then
107
108 frequency_range(1) = f_val*0.1
109 frequency_range(2) = f_val*1
110 frequency_range(3) = f_val*10
111 frequency_range_sampling(1) = frequency_range(1);
112 frequency_range_sampling(2) = 0.5*(frequency_range(1)+frequency_range
113 frequency_range_sampling(3) = frequency_range(2);
114 frequency_range_sampling(4) = 0.5*(frequency_range(2)+frequency_range
115 frequency_range_sampling(5) = frequency_range(3);
116
117
118 elseif (n_sls .eq. 4) then
119
120 frequency_range(1) = 2.*pi*fmin;
121 frequency_range(2) = 2.*pi*10**(esp1+deltax)
122 frequency_range(3) = 2.*pi*10**(esp1+2*deltax)
123 frequency_range(4) = 2.*pi*fmax;
124 frequency_range_sampling(1) = frequency_range(1);
125 frequency_range_sampling(2) = 0.5*(frequency_range(1)+frequency_range
126 frequency_range_sampling(3) = frequency_range(2);
127 frequency_range_sampling(4) = 0.5*(frequency_range(2)+frequency_range
128 frequency_range_sampling(5) = frequency_range(3);
129 frequency_range_sampling(6) = 0.5*(frequency_range(3)+frequency_range
130 frequency_range_sampling(7) = frequency_range(4);
131
132
133 elseif (n_sls .eq. 5) then
134
135 frequency_range(1) = f_val*0.1
136 frequency_range(2) = f_val*0.5
137 frequency_range(3) = f_val*1
138 frequency_range(4) = f_val*5
139 frequency_range(5) = f_val*10
140 frequency_range_sampling(1) = frequency_range(1);
141 frequency_range_sampling(2) = 0.5*(frequency_range(1)+frequency_range
142 frequency_range_sampling(3) = frequency_range(2);
143 frequency_range_sampling(4) = 0.5*(frequency_range(2)+frequency_range
144 frequency_range_sampling(5) = frequency_range(3);
145 frequency_range_sampling(6) = 0.5*(frequency_range(3)+frequency_range
146 frequency_range_sampling(7) = frequency_range(4);
147 frequency_range_sampling(6) = 0.5*(frequency_range(4)+frequency_range
148 frequency_range_sampling(7) = frequency_range(5);
149
150
151 endif
152
153
154
155
156
157 vp2 = (lambda + 2.d0*mu)/rho; vs2 = mu/rho;
158
159 y_mu_nh(1,:) = 0.d0; y_lambda_nh(1,:) = 0.d0;
160 if (qp_nh .ne. 0.d0 .and. qs_nh .ne. 0.d0) then
161
162 do i = 1, 2*n_sls-1
163 do j = 1, n_sls
164
165 a_qp(i,j) = (frequency_range(j)*frequency_range_sampling
166 / (frequency_range(j)**2 + frequency_range_sampling
167
168 a_qs(i,j) = (frequency_range(j)*frequency_range_sampling
169 / (frequency_range(j)**2 + frequency_range_sampling
170
171 enddo
172
173 rhs_qp(i) = 1.d0/qp_nh;
174 rhs_qs(i) = 1.d0/qs_nh;
175
176 enddo
177
178
179
180
181
182
183
184 call qr_solve(2*n_sls-1,n_sls, a_qp, rhs_qp, yp)
185 call qr_solve(2*n_sls-1,n_sls, a_qs, rhs_qs, ys)
186
187
188 y_mu_nh(1,:) = ys;
189 y_lambda_nh(1,:) = (vp2*yp - 2.d0*vs2*ys)/(vp2-2.d0*vs2);
190
191 endif
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212 return
213
subroutine qr_solve(m, n, a, b, x)