137 subroutine read_filemate(filemate,nb_mate,char_mat,type_mat,trefm,lab_mat,Qua_S,Qua_P, &
138 nb_mate_nle,char_mat_nle,val_mat_nle,type_mat_nle,lab_mat_nle, &
139 nb_mate_rnd, lab_mat_rnd, &
140 nb_diriX,val_diriX,fnc_diriX,lab_diriX, &
141 nb_diriY,val_diriY,fnc_diriY,lab_diriY, &
142 nb_diriZ,val_diriZ,fnc_diriZ,lab_diriZ, &
143 nb_neuX,val_neuX,fnc_neuX,lab_neuX, &
144 nb_neuY,val_neuY,fnc_neuY,lab_neuY, &
145 nb_neuZ,val_neuZ,fnc_neuZ,lab_neuZ, &
146 nb_neuN,val_neuN,fnc_neuN,lab_neuN, &
147 nb_poiX,val_poiX,fnc_poiX, &
148 nb_poiY,val_poiY,fnc_poiY, &
149 nb_poiZ,val_poiZ,fnc_poiZ, &
153 nb_plaX,val_plaX,fnc_plaX,lab_plaX, &
154 nb_plaY,val_plaY,fnc_plaY,lab_plaY, &
155 nb_plaZ,val_plaZ,fnc_plaZ,lab_plaZ, &
156 nb_forX,val_forX,fnc_forX, &
157 nb_forY,val_forY,fnc_forY, &
158 nb_forZ,val_forZ,fnc_forZ, &
159 nb_forF,val_forF,fnc_forF, &
160 nb_pre,val_pre,fnc_pre, &
161 nb_she,val_she,fnc_she, &
162 ntest,ftest, & !valftest,&
164 nb_dg,lab_dg,lab_dg_yn,lab_dg_link,&
165 lab_dg_frc, val_dg_frc, nb_frac,&
166 srcmodflag, szsism, &
167 nb_sism,val_sism,fnc_sism,lab_sism, &
168 nb_expl,val_expl,fnc_expl,lab_expl, &
169 nb_case,val_case,lab_case,tol_case, &
170 nb_nhee,val_nhe,tol_nhe, &
171 nb_fnc,type_fnc,ind_fnc,dat_fnc,lab_fnc,nb_fnc_data, &
172 fmax,fpeak,damping_val)
180 character*70 :: filemate,fileinput
181 character*100000 :: inline
182 character*4 :: keyword
184 integer*4 :: nb_mate,nb_fnc, nb_fnc_data, nb_frac, damping_val
185 integer*4 :: nb_mate_nle, nb_mate_rnd, nb_nhee
186 integer*4 :: nb_diriX,nb_diriY,nb_diriZ,nb_neuX,nb_neuY,nb_neuZ
188 integer*4 :: nb_poiX,nb_poiY,nb_poiZ,nb_forX,nb_forY,nb_forZ,nb_forF
189 integer*4 :: nb_plaX,nb_plaY,nb_plaZ,ntX,ntY,ntZ
190 integer*4 :: nb_abc, nb_dg
191 integer*4 :: nb_pre,nb_she
192 integer*4 :: isism,nb_sism
193 integer*4 :: iexpl,nb_expl
194 integer*4 :: icase,nb_case
196 integer*4 :: im,ifunc,idf,ndat_fnc,file_nd, inhee
197 integer*4 :: im_nle, im_rnd
198 integer*4 :: idX,idY,idZ,inX,inY,inZ, itX, itY, itZ
199 integer*4 :: inN, itest
200 integer*4 :: ipX,ipY,ipZ,ifX,ifY,ifZ,iff
201 integer*4 :: iplX,iplY,iplZ
202 integer*4 :: ipr,ish,iabc,idg
203 integer*4 :: ileft,iright
204 integer*4 :: i,j,dummy,status
205 integer*4 :: ntest, srcmodflag, szsism
207 integer*4,
dimension(nb_diriX) :: fnc_diriX,lab_diriX
208 integer*4,
dimension(nb_diriY) :: fnc_diriY,lab_diriY
209 integer*4,
dimension(nb_diriZ) :: fnc_diriZ,lab_diriZ
210 integer*4,
dimension(nb_neuX) :: fnc_neuX,lab_neuX
211 integer*4,
dimension(nb_neuY) :: fnc_neuY,lab_neuY
212 integer*4,
dimension(nb_neuZ) :: fnc_neuZ,lab_neuZ
213 integer*4,
dimension(nb_neuN) :: fnc_neuN,lab_neuN
214 integer*4,
dimension(ntest) :: ftest
215 integer*4,
dimension(nb_forX) :: fnc_forX
216 integer*4,
dimension(nb_forY) :: fnc_forY
217 integer*4,
dimension(nb_forZ) :: fnc_forZ
218 integer*4,
dimension(nb_forF) :: fnc_forF
219 integer*4,
dimension(nb_pre) :: fnc_pre
220 integer*4,
dimension(nb_she) :: fnc_she
221 integer*4,
dimension(nb_abc) :: lab_abc
222 integer*4,
dimension(nb_dg) :: lab_dg, lab_dg_yn, lab_dg_frc, lab_dg_link
223 integer*4,
dimension(nb_sism) :: fnc_sism,lab_sism
224integer*4,
dimension(nb_expl) :: fnc_expl,lab_expl
225integer*4,
dimension(nb_case) :: lab_case
226 integer*4,
dimension(nb_poiX) :: fnc_poiX
227 integer*4,
dimension(nb_poiY) :: fnc_poiY
228 integer*4,
dimension(nb_poiZ) :: fnc_poiZ
229 integer*4,
dimension(ntX) :: ftX
230 integer*4,
dimension(ntY) :: ftY
231 integer*4,
dimension(ntZ) :: ftZ
232 integer*4,
dimension(nb_plaX) :: fnc_plaX,lab_plaX
233 integer*4,
dimension(nb_plaY) :: fnc_plaY,lab_plaY
234 integer*4,
dimension(nb_plaZ) :: fnc_plaZ,lab_plaZ
235 integer*4,
dimension(nb_mate) :: type_mat
236 integer*4,
dimension(nb_mate) :: lab_mat
237 integer*4,
dimension(nb_fnc) :: type_fnc
238 integer*4,
dimension(nb_fnc) :: lab_fnc
239 integer*4,
dimension(nb_fnc +1) :: ind_fnc
240 integer*4,
dimension(nb_mate_nle) :: lab_mat_nle
241 integer*4,
dimension(nb_mate_rnd) :: lab_mat_rnd
243 integer*4,
dimension(nb_mate_nle) :: type_mat_nle
244 integer*4,
dimension(nb_mate_nle,1) :: char_mat_nle
245 integer*4,
dimension(nb_case) :: val_case
246 integer*4,
dimension(nb_nhee) :: val_nhe
250 real*8 :: rho, vs, vp
252 real*8,
dimension(nb_case) :: tol_case
253 real*8,
dimension(nb_nhee) :: tol_nhe
254 real*8,
dimension(nb_fnc_data) :: dat_fnc
255 real*8,
dimension(nb_mate) :: trefm, qua_s, qua_p
257 real*8,
dimension(nb_diriX,4) :: val_dirix
258 real*8,
dimension(nb_diriY,4) :: val_diriy
259 real*8,
dimension(nb_diriZ,4) :: val_diriz
260 real*8,
dimension(nb_neuX,4) :: val_neux
261 real*8,
dimension(nb_neuY,4) :: val_neuy
262 real*8,
dimension(nb_neuZ,4) :: val_neuz
263 real*8,
dimension(nb_neuN,4) :: val_neun
264 real*8,
dimension(nb_poiX,4) :: val_poix
265 real*8,
dimension(nb_poiY,4) :: val_poiy
266 real*8,
dimension(nb_poiZ,4) :: val_poiz
268 real*8,
dimension(ntX,4) :: valtx
269 real*8,
dimension(ntY,4) :: valty
270 real*8,
dimension(ntZ,4) :: valtz
271 real*8,
dimension(nb_plaX,1) :: val_plax
272 real*8,
dimension(nb_plaY,1) :: val_play
273 real*8,
dimension(nb_plaZ,1) :: val_plaz
274 real*8,
dimension(nb_forX,4) :: val_forx
275 real*8,
dimension(nb_forY,4) :: val_fory
276 real*8,
dimension(nb_forZ,4) :: val_forz
277 real*8,
dimension(nb_forF,10) :: val_forf
278 real*8,
dimension(nb_pre,10) :: val_pre
279 real*8,
dimension(nb_she,10) :: val_she
280 real*8,
dimension(nb_sism,szsism) :: val_sism
281 real*8,
dimension(nb_expl,20) :: val_expl
282 real*8,
dimension(nb_mate_nle,1) :: val_mat_nle
283 real*8,
dimension(nb_mate,4) :: char_mat
284 real*8,
dimension(nb_dg,2) :: val_dg_frc
286 open(40,file=filemate)
290 im = 0; im_nle = 0; icase = 0 ; im_rnd = 0;
291 idx = 0; idy = 0; idz = 0
292 inx = 0; iny = 0; inz = 0; inn = 0;
293 ipx = 0; ipy = 0; ipz = 0
294 iplx = 0; iply = 0; iplz = 0
295 ifx = 0; ify = 0; ifz = 0
296 iff = 0; ipr = 0; ish = 0
298 isism = 0; iexpl = 0; itz = 0;
310 if (nb_fnc.gt.0) ind_fnc(1) = 1
314 read(40,
'(A)',iostat = status) inline
316 if (status.ne.0)
exit
318 keyword = inline(1:4)
323 if (inline(i:i).eq.
' ')
exit
327 select case (keyword)
334 read(inline(ileft:iright),*) lab_mat(im),type_mat(im),&
343 if(damping_val .eq. 2)
then
344 qua_s(im) = 0.5d0*qua_s(im)
345 qua_p(im) = 0.5d0*qua_p(im)
351 char_mat(im,2) = rho * (vp**2 - 2*vs**2)
353 char_mat(im,3) = rho * vs**2
357 read(inline(ileft:iright),*) lab_mat_nle(im_nle),type_mat_nle
358 char_mat_nle(im_nle,1),val_mat_nle(im_nle,1
362 read(inline(ileft:iright),*) lab_mat_rnd(im_rnd)
366 read(inline(ileft:iright),*) lab_dirix(idx),fnc_dirix(idx),&
367 val_dirix(idx,1),val_dirix(idx,2),val_dirix(idx,3),val_dirix
371 read(inline(ileft:iright),*) lab_diriy(idy),fnc_diriy(idy),&
372 val_diriy(idy,1),val_diriy(idy,2),val_diriy(idy,3),val_diriy
376 read(inline(ileft:iright),*) lab_diriz(idz),fnc_diriz(idz),&
377 val_diriz(idz,1),val_diriz(idz,2),val_diriz(idz,3),val_diriz
381 read(inline(ileft:iright),*) lab_neux(inx),fnc_neux(inx),&
382 val_neux(inx,1),val_neux(inx,2),val_neux(inx,3),val_neux
386 read(inline(ileft:iright),*) lab_neuy(iny),fnc_neuy(iny),&
387 val_neuy(iny,1),val_neuy(iny,2),val_neuy(iny,3),val_neuy
391 read(inline(ileft:iright),*) lab_neuz(inz),fnc_neuz(inz),&
392 val_neuz(inz,1),val_neuz(inz,2),val_neuz(inz,3),val_neuz
396 read(inline(ileft:iright),*) lab_neun(inn),fnc_neun(inn),&
397 val_neun(inn,1),val_neun(inn,2),val_neun(inn,3),val_neun
401 read(inline(ileft:iright),*) fnc_poix(ipx),&
402 val_poix(ipx,1),val_poix(ipx,2),val_poix(ipx,3),val_poix
406 read(inline(ileft:iright),*) fnc_poiy(ipy),&
407 val_poiy(ipy,1),val_poiy(ipy,2),val_poiy(ipy,3),val_poiy
411 read(inline(ileft:iright),*) fnc_poiz(ipz),&
412 val_poiz(ipz,1),val_poiz(ipz,2),val_poiz(ipz,3),val_poiz
440 read(inline(ileft:iright),*) ftz(itz),valtz(itz,1),valtz(itz
444 read(inline(ileft:iright),*)fnc_plax(iplx),&
445 lab_plax(iplx),val_plax(iplx,1)
449 read(inline(ileft:iright),*)fnc_play(iply),&
450 lab_play(iply),val_play(iply,1)
454 read(inline(ileft:iright),*)fnc_plaz(iplz),&
455 lab_plaz(iplz),val_plaz(iplz,1)
459 read(inline(ileft:iright),*) fnc_forx(ifx),&
460 val_forx(ifx,1),val_forx(ifx,2),val_forx(ifx,3),val_forx
464 read(inline(ileft:iright),*) fnc_fory(ify),&
465 val_fory(ify,1),val_fory(ify,2),val_fory(ify,3),val_fory
469 read(inline(ileft:iright),*) fnc_forz(ifz),&
470 val_forz(ifz,1),val_forz(ifz,2),val_forz(ifz,3),val_forz
474 read(inline(ileft:iright),*) ftest(itest)
478 read(inline(ileft:iright),*) fnc_forf(iff),&
479 val_forf(iff,1),val_forf(iff,2),val_forf(iff,3),val_forf
480 val_forf(iff,5),val_forf(iff,6),val_forf(iff,7),&
481 val_forf(iff,8),val_forf(iff,9),val_forf(iff,10)
485 read(inline(ileft:iright),*) fnc_pre(ipr),&
486 val_pre(ipr,1),val_pre(ipr,2),val_pre(ipr,3),val_pre(ipr
487 val_pre(ipr,5),val_pre(ipr,6),val_pre(ipr,7),&
488 val_pre(ipr,8),val_pre(ipr,9),val_pre(ipr,10)
492 read(inline(ileft:iright),*) fnc_she(ish),&
493 val_she(ish,1),val_she(ish,2),val_she(ish,3),val_she(ish
494 val_she(ish,5),val_she(ish,6),val_she(ish,7),&
495 val_she(ish,8),val_she(ish,9),val_she(ish,10)
499 read(inline(ileft:iright),*) lab_abc(iabc)
503 if(nb_frac .eq. 0)
then
504 read(inline(ileft:iright),*) lab_dg(idg), lab_dg_yn(idg
506 read(inline(ileft:iright),*) lab_dg(idg), lab_dg_yn(idg
511 read(inline(ileft:iright),*) lab_dg(idg), lab_dg_yn(idg), lab_dg_link
516 if (srcmodflag.eq.0)
then
517 read(inline(ileft:iright),*) fnc_sism(isism),&
518 lab_sism(isism),val_sism(isism,1),val_sism(isism
519 val_sism(isism,3),val_sism(isism,4),val_sism
520 val_sism(isism,6),val_sism(isism,7),val_sism
521 val_sism(isism,9),val_sism(isism,10),val_sism
522 val_sism(isism,12),val_sism(isism,13),val_sism
523 val_sism(isism,15),val_sism(isism,16),val_sism
524 val_sism(isism,18),val_sism(isism,19),val_sism
526 elseif (srcmodflag.eq.1)
then
527 read(inline(ileft:iright),*) fnc_sism(isism),&
528 lab_sism(isism),val_sism(isism,1),val_sism(isism
529 val_sism(isism,3),val_sism(isism,4),val_sism
530 val_sism(isism,6),val_sism(isism,7),val_sism
531 val_sism(isism,9),val_sism(isism,10),val_sism
532 val_sism(isism,12),val_sism(isism,13),val_sism
538 read(inline(ileft:iright),*) fnc_expl(iexpl),&
539 lab_expl(iexpl),val_expl(iexpl,1),val_expl(iexpl
540 val_expl(iexpl,3),val_expl(iexpl,4),val_expl(iexpl
541 val_expl(iexpl,6),val_expl(iexpl,7),val_expl(iexpl
542 val_expl(iexpl,9),val_expl(iexpl,10),val_expl(iexpl
543 val_expl(iexpl,12),val_expl(iexpl,13),val_expl(iexpl
544 val_expl(iexpl,15),val_expl(iexpl,16),val_expl(iexpl
545 val_expl(iexpl,18),val_expl(iexpl,19),val_expl(iexpl
549 read(inline(ileft:iright),*) &
551 lab_case(icase),val_case(icase),tol_case(icase)
557 read(inline(ileft:iright),*) val_nhe(inhee)
560 read(inline(ileft:iright),*) fmax
563 read(inline(ileft:iright),*) fpeak
570 read(inline(ileft:iright),*) lab_fnc(ifunc),type_fnc(ifunc)
572 select case (type_fnc(ifunc))
575 ind_fnc(ifunc +1) = ind_fnc(ifunc) + 0
578 ind_fnc(ifunc +1) = ind_fnc(ifunc) + 2
579 read(inline(ileft:iright),*)dummy,dummy,&
580 (dat_fnc(j), j = ind_fnc(ifunc),ind_fnc(ifunc +1) -
584 read(inline(ileft:iright),*)dummy,dummy,ndat_fnc,fileinput
585 ind_fnc(ifunc +1) = ind_fnc(ifunc) + 2*ndat_fnc
587 open(24,file=fileinput)
589 if (ndat_fnc .ne. file_nd)
then
590 write(*,*) .ne.
'Error reading function ! ndat_fnc file_nd !'
591 write(*,*)
'Error reading function from file ', trim
'!'
592 write(*,*)
'Line numbers not consistent with material file.'
596 i = ind_fnc(ifunc) + 2*(j -1)
597 read(24,*) dat_fnc(i), dat_fnc(i +1)
602 ind_fnc(ifunc +1) = ind_fnc(ifunc) + 2
603 read(inline(ileft:iright),*)dummy,dummy,&
604 (dat_fnc(j), j = ind_fnc(ifunc),ind_fnc(ifunc +1) -1
608 ind_fnc(ifunc +1) = ind_fnc(ifunc) + 1
609 read(inline(ileft:iright),*)dummy,dummy,&
610 (dat_fnc(j), j = ind_fnc(ifunc),ind_fnc(ifunc +1) -1
615 ind_fnc(ifunc +1) = ind_fnc(ifunc) + 3
616 read(inline(ileft:iright),*)dummy,dummy,&
617 (dat_fnc(j), j = ind_fnc(ifunc),ind_fnc(ifunc +1) -1
621 ind_fnc(ifunc +1) = ind_fnc(ifunc) + 2
622 read(inline(ileft:iright),*)dummy,dummy,&
623 (dat_fnc(j), j = ind_fnc(ifunc),ind_fnc(ifunc +1) -1
627 ind_fnc(ifunc +1) = ind_fnc(ifunc) + 2
628 read(inline(ileft:iright),*)dummy,dummy,&
629 (dat_fnc(j), j = ind_fnc(ifunc),ind_fnc(ifunc +1) -1
633 ind_fnc(ifunc +1) = ind_fnc(ifunc) + 4
634 read(inline(ileft:iright),*)dummy,dummy,&
635 (dat_fnc(j), j = ind_fnc(ifunc),ind_fnc(ifunc +1) -1
639 ind_fnc(ifunc +1) = ind_fnc(ifunc) + 0
643 ind_fnc(ifunc +1) = ind_fnc(ifunc) + 2
644 read(inline(ileft:iright),*)dummy,dummy,&
645 (dat_fnc(j), j = ind_fnc(ifunc),ind_fnc(ifunc +1) -1
648 read(inline(ileft:iright),*)dummy,dummy,ndat_fnc
649 ind_fnc(ifunc +1) = ind_fnc(ifunc) + 2*ndat_fnc
650 read(inline(ileft:iright),*)dummy,dummy,dummy,&
651 (dat_fnc(j), j = ind_fnc(ifunc),ind_fnc(ifunc +1) -1
654 read(inline(ileft:iright),*)dummy,dummy,ndat_fnc
655 ind_fnc(ifunc +1) = ind_fnc(ifunc) + 2*ndat_fnc
656 read(inline(ileft:iright),*)dummy,dummy,dummy,&
657 (dat_fnc(j), j = ind_fnc(ifunc),ind_fnc(ifunc +1) -1
660 ind_fnc(ifunc +1) = ind_fnc(ifunc) + 2
661 read(inline(ileft:iright),*)dummy,dummy,&
662 (dat_fnc(j), j = ind_fnc(ifunc),ind_fnc(ifunc +1) -1
665 ind_fnc(ifunc +1) = ind_fnc(ifunc) + 1
666 read(inline(ileft:iright),*) dummy,dummy,&
667 (dat_fnc(j), j = ind_fnc(ifunc),ind_fnc(ifunc +1) -1
670 read(inline(ileft:iright),*)dummy,dummy,ndat_fnc,fileinput
671 ind_fnc(ifunc +1) = ind_fnc(ifunc) + ndat_fnc
673 open(24,file=fileinput)
675 if (ndat_fnc .ne. file_nd)
then
676 write(*,*) .ne.
'Error reading function ! ndat_fnc file_nd !'
677 write(*,*)
'Error reading function from file ', trim
'!'
678 write(*,*)
'Line numbers not consistent with material file.'
682 i = ind_fnc(ifunc) + (j -1)
683 read(24,*) dat_fnc(i)
689 read(inline(ileft:iright),*) dummy, dummy, ndat_fnc, dat_fnc
690 ind_fnc(ifunc +1) = ind_fnc(ifunc) + 1