35 SUBROUTINE fill_buffer_51( IPM, PM, UPARAM, BUFMAT, USER_ID, TITR, INTERNAL_ID, MAT_PARAM, MLAW_TAG)
41 USE matparam_def_mod,
ONLY : matparam_struct_
60#include "implicit_f.inc"
69 INTEGER,
TARGET :: IPM(NPROPMI,NUMMAT)
70 INTEGER,
INTENT(IN) :: USER_ID, INTERNAL_ID
71 my_real,
TARGET :: pm(npropm,nummat),bufmat(*)
73 CHARACTER(LEN=NCHARTITLE),
INTENT(IN) :: TITR
74 TYPE(matparam_struct_) ,
DIMENSION(NUMMAT) ,
INTENT(INOUT) :: MAT_PARAM
75 TYPE(
mlaw_tag_) ,
DIMENSION(NUMMAT) ,
INTENT(INOUT) :: MLAW_TAG
79 INTEGER :: IDX_AV, , IDX_C1, IDX_C2, IDX_C3(3), IDX_C4, IDX_C5, IDX_G
80 INTEGER :: IDX_E0, IDX_C0, IDX_PM, IDX_IPLA, IDX_EINF, IDX_VISC
81 INTEGER :: IDX_YIELD(4)
82 INTEGER :: MID(4),MID_VALID(4),IEXP,NPAR,IADBUF,IDX_PSH_TAB
83 INTEGER :: IMID, MLN, EOS_TYPE, I, J, NJWL, COUNT_VALID_MAT, COUNT_NONEXPLO, ID, NBMAT, TAG(4),IPLA,NITER
84 INTEGER,
EXTERNAL :: NINTRI
86 my_real :: av(4),e1_inf,e2_inf,e3_inf,e4_inf,pext,ratio,tmp1,tmp2,psh_tab(4),rho_max
87 my_real,
POINTER,
DIMENSION(:) :: pm_
89 my_real,
DIMENSION(:),
POINTER :: uparam_
91 CHARACTER(LEN=NCHARTITLE) :: chain1
94 my_real :: rho,c0,c1,c2,c3,c4,c5,e0,psh,p0,dpdmu,ssp
97 my_real :: vdet,pcj,vcj,b1,b2,r1,r2,w,
98 . pm4,av4,rho40,e04,c04,c14,
99 . tmelt4,thetl4,sph4,t40,xka4,xkb4,ssp4,
100 . eadd,tbegin,tend,reaction_rate,a_mil,m_mil,n_mil,reaction_rate2,alpha_unit
101 INTEGER :: IBFRAC,QOPT,NEXPLO,IMIN
104 my_real :: young,anu,g,bulk,pmin,ca,cb,cn,epsm,sigm,gg
107 my_real :: cc,eps0,m,tmelt,tmax,cs,sph,t0
126 idx_c3(1:3) = (/018,020,021/)
143 mid(1:4) = nint(uparam(9:12))
144 av(1:4) = uparam(13:16)
155 uparam(123)=-infinity
156 uparam(173)=-infinity
157 uparam(223)=-infinity
160 uparam(57) = -infinity
161 uparam(58) = -infinity
162 uparam(59) = -infinity
181 imid = nintri(mid(i),ipm,npropmi,nummat,1)
188 eos_type = ipm(4,imid)
192 chain1=
'NON EXISTING SUBMATERIAL IDENTIFIER: '
193 write(chain1(37:46),
'(i10)')mid(i)
195 CALL ancmsg(msgid=99,msgtype=msgerror,anmode=aninfo,i1=user_id,c1=titr,c2=chain1)
200 IF(mln == 2 .OR. mln == 3 .OR. mln == 4 .OR. mln == 5 .OR. mln == 6 .OR. mln == 10 .OR. mln == 102 .OR. mln
THEN
202 IF(eos_type == 18 .OR. eos_type == 1 .OR. eos_type == 7 .OR. eos_type == 10)
THEN
204 chain1=
'SUBMATERIAL COMPATIBLE EOS:POLYNOMIAL, IDEAL-GAS, STIFFENED-GAS, LINEAR'
205 CALL ancmsg(msgid=99,msgtype=msgerror,anmode=aninfo,i1=id,c1=titr,c2=chain1)
212 count_valid_mat = count_valid_mat + 1
213 mid_valid(count_valid_mat) = imid
216 count_nonexplo=count_nonexplo + 1
217 uparam(276+count_valid_mat)=minloc(tag(1:4),1)
218 tag(count_nonexplo)=1
220 uparam(276+count_valid_mat)=4
225 chain1=
'SUBMATERIAL CAN ONLY BE DEFINED FROM LAWS 2,3,4,5,6,10 102 OR 133 '
226 CALL ancmsg(msgid=99,msgtype=msgerror,anmode=aninfo,i1=id,c1=titr,c2=chain1)
234 DO i=count_valid_mat+1,4
235 imin = minloc(tag(1:4),1)
244 nbmat = count_valid_mat
248 chain1=
'ONLY ONE EXPLOSIVE SUBMATERIAL CAN BE DEFINED'
249 CALL ancmsg(msgid=99,msgtype=msgerror,anmode=aninfo,i1=id,c1=titr,c2=chain1)
257 chain1=
'LAW51 IS COMPATIBLE WITH UP TO 4 SUBMATERIAL ONLY'
258 CALL ancmsg(msgid=99,msgtype=msgerror,anmode=aninfo,i1=id,c1=titr,c2=chain1)
261 ipm(5,internal_id)=count_valid_mat
262 pm(27,internal_id) = zero
265 DO i=1,count_valid_mat
266 imid = nintri(mid(i),ipm,npropmi,nummat,1)
267 mat_param(internal_id)%MULTIMAT%MID(i) = imid
268 ipm(50+i,internal_id)=uparam(276+i)
270 eos_type = ipm(4,imid)
272 rho_max=
max(rho_max,pm(1,imid))
283 SELECT CASE(eos_type)
310 c0 = -pm_(34)*pm_(35)-pm_(88)
331 idx_psh_tab = idx_psh_tab + 1
332 psh_tab(idx_psh_tab)=psh
337 visc = uparam(1) !
use global viscosity otherwise (
if defined with /mat/law51)
343 dpdmu = (c1+c5*e0) + c4*(p0)
344 ssp = sqrt( (dpdmu + two_third*g) / rho )
345 pm(27,internal_id) =
max( pm(27,internal_id), ssp )
348 uparam(idx_av +j) = av(i)
349 uparam(idx_rho +j) = rho
350 uparam(idx_c0 +j) = c0
351 uparam(idx_c1 +j) = c1
352 uparam(idx_c2 +j) = c2
353 uparam(idx_c3(j)) = c3
354 uparam(idx_c4 +j) = c4
355 uparam(idx_c5 +j) = c5
356 uparam(idx_e0 +j) = e0
357 uparam(idx_yield(j)+13)= t0
358 uparam(idx_pm +j) = pmin
359 uparam(idx_yield(j)+12)= sph
360 uparam(idx_yield(j)+24) = ssp
361 uparam(idx_yield(j)+26) = rho*ssp*ssp
362 uparam(idx_visc+j) = visc
375 ibfrac = nint(pm_(41))
382 c04 = pm_(43)-pm_(88)
394 reaction_rate = pm_(163)
398 reaction_rate2 = pm_(167)
399 alpha_unit = pm_(168)
402 pm(38,internal_id) = vdet
405 uparam(44) = rho40 * vdet**2 / pcj
407 uparam(44) = infinity
410 vcj = one - one/uparam(44)
413 IF(uparam(47)==zero) uparam(47) = em20
422 IF(pm4==zero)pm4=-infinity
433 uparam(275) = rho40*ssp4*ssp4
436 idx_psh_tab = idx_psh_tab + 1
437 psh_tab(idx_psh_tab) = psh
438 pm(27,internal_id) =
max( pm(27,internal_id), ssp4 )
442 chain1=
'BULK MODULUS OF LAW5 (JWL) MUST BE PROVIDED FOR UNREACTED EXPLOSIVE'
443 CALL ancmsg(msgid=99,msgtype=msgerror,anmode
467 ssp = sqrt( (dpdmu + two_third*g) / rho )
470 uparam(idx_ipla +j) = 1
472 uparam(idx_g +j) = gg
473 uparam(idx_yield(j)+01) = g
474 uparam(idx_yield(j)+02) = ca
475 uparam(idx_yield(j)+03) = cb
476 uparam(idx_yield(j)+04) = cn
478 uparam(idx_yield(j)+05:idx_yield(j)+13)=zero
480 uparam(idx_yield(j)+05) = cc
481 uparam(idx_yield(j)+06) = eps0
483 uparam(idx_yield(j)+08) = tmelt
484 uparam(idx_yield(j)+09) = tmax
485 uparam(idx_yield(j)+12) = sph
486 uparam(idx_yield(j)+13) = t0
488 uparam(idx_yield(j)+10) = epsm
489 uparam(idx_yield(j)+11) = sigm
490 uparam(idx_yield(j)+14) = zero
491 uparam(idx_yield(j)+15) = zero
492 uparam(idx_yield(j)+16) = zero
493 uparam(idx_yield(j)+17) = zero
494 uparam(idx_yield(j)+18) = zero
495 uparam(idx_yield(j)+19) = zero
496 uparam(idx_yield(j)+20) = zero
497 uparam(idx_yield(j)+21) = zero
498 uparam(idx_yield(j)+22) = anu
499 uparam(idx_yield(j)+23) = -infinity
500 uparam(idx_yield(j)+24) = ssp
501 uparam(idx_yield(j)+25) = zero
502 uparam(idx_yield(j)+26) = rho*ssp*ssp
525 ssp = sqrt( (dpdmu + two_third*g) / rho )
530 uparam(idx_g +j) = gg
531 uparam(idx_yield(j)+01) = g
532 uparam(idx_yield(j)+02) = ca
533 uparam(idx_yield(j)+03) = cb
534 uparam(idx_yield(j)+04) = cn
536 uparam(idx_yield(j)+05:idx_yield(j)+13)=zero
538 uparam(idx_yield(j)+05) = cc
539 uparam(idx_yield(j)+06) = eps0
541 uparam(idx_yield(j)+08) = tmelt
542 uparam(idx_yield(j)+09) = tmax
543 uparam(idx_yield(j)+12) = sph
544 uparam(idx_yield(j)+13) = t0
546 uparam(idx_yield(j)+10) = epsm
547 uparam(idx_yield(j)+11) = sigm
548 uparam(idx_yield(j)+14) = zero
549 uparam(idx_yield(j)+15) = zero
550 uparam(idx_yield(j)+16) = zero
551 uparam(idx_yield(j)+17) = zero
552 uparam(idx_yield(j)+18) = zero
553 uparam(idx_yield(j)+19) = zero
554 uparam(idx_yield(j)+20) = zero
555 uparam(idx_yield(j)+21) = zero
556 uparam(idx_yield(j)+22) = anu
557 uparam(idx_yield(j)+23) = -infinity
558 uparam(idx_yield(j)+24) = ssp
559 uparam(idx_yield(j)+25) = zero
560 uparam(idx_yield(j)+26) = rho*ssp*ssp
586 ssp = sqrt( (dpdmu + zero) / rho )
589 uparam(idx_ipla +j) = 0
590 uparam(idx_g +j) = gg
591 uparam(idx_yield(j)+01) = g
592 uparam(idx_yield(j)+02) = young
593 uparam(idx_yield(j)+05) = cc
594 uparam(idx_yield(j)+06) = eps0
595 uparam(idx_yield(j)+07) = m
596 uparam(idx_yield(j)+08) = tmelt
597 uparam(idx_yield(j)+09) = tmax
598 uparam(idx_yield(j)+12) = sph
599 uparam(idx_yield(j)+13) = t0
600 uparam(idx_yield(j)+14) = zero
601 uparam(idx_yield(j)+15) = zero
602 uparam(idx_yield(j)+16) = a0
603 uparam(idx_yield(j)+17) = a1
604 uparam(idx_yield(j)+18) = a2
605 uparam(idx_yield(j)+19) = amx
606 uparam(idx_yield(j)+20) = zero
607 uparam(idx_yield(j)+21) = zero
608 uparam(idx_yield(j)+22) = anu
609 uparam(idx_yield(j)+23) = pstar
610 uparam(idx_yield(j)+24) = ssp
611 uparam(idx_yield(j)+25) = zero
612 uparam(idx_yield(j)+26) = rho*ssp*ssp
627 ELSEIF(mln == 102)
THEN
630 iadbuf =
max(1,iadbuf)
631 uparam_ => bufmat(iadbuf:iadbuf+npar)
636 IF(bulk == zero)bulk=third*young/(one-two*anu)
645 ssp = sqrt( (dpdmu + two_third*g) / rho )
648 uparam(idx_ipla +j) = 2
650 uparam(idx_g +j) = gg
651 uparam(idx_yield(j)+01) = g
652 uparam(idx_yield(j)+02) = young
653 uparam(idx_yield(j)+14) = zero
654 uparam(idx_yield(j)+15) = zero
655 uparam(idx_yield(j)+16) = a0
656 uparam(idx_yield(j)+17) = a1
657 uparam(idx_yield(j)+18) = a2
658 uparam(idx_yield(j)+19) = amx
659 uparam(idx_yield(j)+20) = zero
660 uparam(idx_yield(j)+21) = zero
661 uparam(idx_yield(j)+22) = anu
662 uparam(idx_yield(j)+23) = pstar
663 uparam(idx_yield(j)+24) = ssp
664 uparam(idx_yield(j)+25) = zero
665 uparam(idx_yield(j)+26) = rho*ssp*ssp
669 mlaw_tag(imid)%NVARTMP = 6
672 pmin = mat_param(imid)%uparam(1)
673 young = mat_param(imid)%young
674 bulk = mat_param(imid)%bulk
675 anu = mat_param(imid)%nu
677 g = young / two / (one+anu)
679 ssp = sqrt( (dpdmu + two_third*gg) / rho )
682 uparam(idx_ipla +j) = 3
684 uparam(idx_g +j) = gg
685 uparam(idx_yield(j)+01) = zero
686 uparam(idx_yield(j)+02) = young
687 uparam(idx_yield(j)+14) = real(imid)
688 uparam(idx_yield(j)+15) = zero
689 uparam(idx_yield(j)+16) = zero
690 uparam(idx_yield(j)+17) = zero
691 uparam(idx_yield(j)+18) = zero
692 uparam(idx_yield(j)+19) = zero
693 uparam(idx_yield(j)+20) = zero
694 uparam(idx_yield(j)+21) = zero
695 uparam(idx_yield(j)+22) = anu
696 uparam(idx_yield(j)+23) = zero
697 uparam(idx_yield(j)+24) = ssp
698 uparam(idx_yield(j)+25) = zero
708 pm(91,internal_id)=rho_max
711 IF(idx_psh_tab > 0)
THEN
712 tmp1=minval(psh_tab(1:idx_psh_tab))
713 tmp2=maxval(psh_tab(1:idx_psh_tab))
717 chain1=
'SUBMATERIAL EOS MUST HAVE CONSISTENT PSH PARAMETERS'
718 CALL ancmsg(msgid=99,msgtype=msgerror,anmode=aninfo,i1=user_id,c1=titr,c2=chain1)
726 IF(uparam(38)==zero) uparam(38)=one
728 IF(uparam(112)==zero) uparam(112)=one
729 IF(uparam(162)==zero) uparam(162)=one
730 IF(uparam(212)==zero) uparam(212)=one
731 IF(uparam(262)==zero) uparam(262)=one
733 IF(uparam(104)==zero) uparam(104)=one
734 IF(uparam(154)==zero) uparam(154)=one
735 IF(uparam(204)==zero) uparam(204)=one
738 IF(uparam(113)==zero) uparam(113)=three100
739 IF(uparam(163)==zero) uparam(163)=three100
740 IF(uparam(213)==zero) uparam(213)=three100
741 IF(uparam(263)==zero) uparam(263)=three100
743 IF(uparam(110)==zero) uparam(110)=infinity
744 IF(uparam(160)==zero) uparam(160)=infinity
745 IF(uparam(210)==zero) uparam(210)=infinity
748 IF(uparam(111)==zero) uparam(111)=infinity
749 IF(uparam(161)==zero) uparam(161)=infinity
750 IF(uparam(211)==zero) uparam(211)=infinity
753 IF(uparam(108)==zero) uparam(108)=infinity
754 IF(uparam(158)==zero) uparam(158)=infinity
755 IF(uparam(208)==zero) uparam(208)=infinity
756 IF(uparam(258)==zero) uparam(258)=infinity
758 IF(uparam(109)==zero) uparam(109)=infinity
759 IF(uparam(159)==zero) uparam(159)=infinity
760 IF(uparam(209)==zero) uparam(209)=infinity
761 IF(uparam(259)==zero) uparam(259)=infinity
763 IF(uparam(114)==zero) uparam(114)=em20
764 IF(uparam(164)==zero) uparam(164)=em20
765 IF(uparam(214)==zero) uparam(214)=em20
766 IF(uparam(264)==zero) uparam(264)=em20
768 IF(uparam(106)==zero) uparam(106)=one
769 IF(uparam(156)==zero) uparam(156)=one
770 IF(uparam(206)==zero) uparam(206)=one
773 IF(uparam(119)==zero) uparam(119)=infinity
774 IF(uparam(169)==zero) uparam(169)=infinity
775 IF(uparam(219)==zero) uparam(219)=infinity
778 IF(uparam(122)==zero) uparam(122)=zep2
779 IF(uparam(172)==zero) uparam(172)=zep2
780 IF(uparam(222)==zero) uparam(222)=zep2
783 IF(uparam(121) == zero) uparam(121) = uparam(12)
784 IF(uparam(171) == zero) uparam(171) = uparam(13)
785 IF(uparam(221) == zero) uparam(221) = uparam(14)
789 e1_inf =
ie_bound(pext,uparam(39),uparam(35),uparam(12),uparam(15),uparam(18),uparam(22),uparam(25),uparam(32))
790 e2_inf =
ie_bound(pext,uparam(40),uparam(36),uparam(13),uparam(16),uparam(20),uparam(23),uparam(26),uparam(33))
791 e3_inf =
ie_bound(pext,uparam(41),uparam(37),uparam(14),uparam(17),uparam(21),uparam(24),uparam(27),uparam(34))
803 uparam(69) = uparam(9)*uparam(4) + uparam(10)*uparam(5) + uparam(11)*uparam(6) + uparam(47)*uparam(46)
805 uparam(72) = infinity
806 IF(uparam(43) <= em20) uparam(44)=infinity
807 IF(uparam(47)==zero) uparam(47) = em20
808 IF(uparam(56)==zero) uparam(56)=-infinity
812 IF(ratio <= zero)
THEN