37 SUBROUTINE fill_buffer_51( IPM, PM, UPARAM, BUFMAT, USER_ID, TITR, INTERNAL_ID, MAT_PARAM, MLAW_TAG)
43 USE matparam_def_mod,
ONLY : matparam_struct_
45 use mat51_associate_eos_mod ,
only : mat51_associate_eos
63#include "implicit_f.inc"
72 INTEGER,
TARGET :: IPM(NPROPMI,NUMMAT)
73 INTEGER,
INTENT(IN) :: USER_ID, INTERNAL_ID
74 my_real,
TARGET :: pm(npropm,nummat),bufmat(*)
76 CHARACTER(LEN=NCHARTITLE),
INTENT(IN) :: TITR
77 TYPE(matparam_struct_) ,
DIMENSION(NUMMAT) ,
INTENT(INOUT) :
78TYPE(
mlaw_tag_) ,
DIMENSION(NUMMAT) ,
INTENT(INOUT)
82 INTEGER :: IDX_AV, IDX_RHO, IDX_C1, IDX_C2, IDX_C3(3), IDX_C4, IDX_C5, IDX_G, IDX_P0
83 INTEGER :: IDX_E0, IDX_C0, IDX_PM, IDX_IPLA, IDX_VISC
84 INTEGER :: IDX_YIELD(4)
85 INTEGER :: MID(4),MID_VALID(4),IEXP,NPAR,IADBUF,IDX_PSH_TAB
86 INTEGER :: IMID, MLN, EOS_TYPE, I, J, NJWL, COUNT_VALID_MAT, COUNT_NONEXPLO, ID, NBMAT, TAG(4),IPLA,NITER
87 INTEGER,
EXTERNAL :: NINTRI
89 my_real :: av(4),pext,ratio,tmp1
90 my_real,
POINTER,
DIMENSION(:) :: pm_
92 my_real,
DIMENSION(:),
POINTER :: uparam_
94 CHARACTER(LEN=NCHARTITLE) :: chain1
97 my_real :: rho,c0,c1,c2,c3,c4,c5,e0,psh,p0,ssp
100 my_real :: vdet,pcj,vcj,b1,b2,r1,r2,w,
101 . pm4,av4,rho40,e04,c04,c14,
102 . tmelt4,thetl4,sph4,t40,xka4,xkb4,ssp4,
103 . eadd,tbegin,tend,reaction_rate,a_mil,m_mil,n_mil,reaction_rate2,alpha_unit
104 INTEGER :: IBFRAC,,NEXPLO,IMIN
108 my_real :: young,anu,g,bulk,pmin,ca,cb,cn,epsm,sigm,gg
111 my_real :: cc,eps0,m,tmelt,tmax,cs,sph,t0
130 idx_c3(1:3) = (/018,020,021/)
147 mid(1:4) = nint(uparam(9:12))
148 av(1:4) = uparam(13:16)
161 uparam(123)=-infinity
162 uparam(173)=-infinity
163 uparam(223)=-infinity
166 uparam(57) = -infinity
167 uparam(58) = -infinity
168 uparam(59) = -infinity
187 imid = nintri(mid(i),ipm,npropmi,nummat,1)
194 eos_type = ipm(4,imid)
201 chain1=
'NON EXISTING SUBMATERIAL IDENTIFIER: '
202 write(chain1(37:46),
'(i10)')mid(i)
204 CALL ancmsg(msgid=99,msgtype=msgerror,anmode=aninfo,i1=user_id,c1=titr,c2=chain1)
209 IF(mln == 2 .OR. mln == 3 .OR. mln == 4 .OR. mln == 5 .OR. mln == 6 .OR. mln == 10 .OR. mln == 102 .OR. mln == 133)
THEN
212 IF(eos_type /= 0 .AND. eos_type /= 12 .AND. eos_type /= 15 .AND. eos_type <= 21 )
THEN
215 chain1=
'SUBMATERIAL EOS IS NOT COMPATIBLE WITH MATERIAL LAW 51'
216 CALL ancmsg(msgid=99,msgtype=msgerror,anmode=aninfo,i1=id,c1=titr,c2=chain1)
223 count_valid_mat = count_valid_mat + 1
224 mid_valid(count_valid_mat) = imid
227 count_nonexplo=count_nonexplo + 1
228 uparam(276+count_valid_mat)=minloc(tag(1:4),1)
229 tag(count_nonexplo)=1
231 uparam(276+count_valid_mat)=4
236 chain1=
'SUBMATERIAL CAN ONLY BE DEFINED FROM LAWS 2,3,4,5,6,10 102 OR 133 '
237 CALL ancmsg(msgid=99,msgtype=msgerror,anmode=aninfo,i1=id,c1=titr,c2=chain1)
245 DO i=count_valid_mat+1,4
246 imin = minloc(tag(1:4),1)
255 nbmat = count_valid_mat
259 chain1=
'ONLY ONE EXPLOSIVE SUBMATERIAL CAN BE DEFINED'
260 CALL ancmsg(msgid=99,msgtype=msgerror,anmode=aninfo,i1=id,c1=titr,c2=chain1)
268 chain1=
'LAW51 IS COMPATIBLE WITH UP TO 4 SUBMATERIAL ONLY'
269 CALL ancmsg(msgid=99,msgtype=msgerror,anmode=aninfo,i1=id,c1=titr,c2=chain1)
272 ipm(5,internal_id)=count_valid_mat
273 pm(27,internal_id) = zero
276 imid = nintri(mid(i),ipm,npropmi,nummat,1)
277 mat_param(internal_id)%MULTIMAT%MID(i) = imid
278 eos_type = ipm(4,imid)
280 IF(eos_type == 0 .AND. mln /= 5)
THEN
281 chain1=
'MISSING SUBMATERIAL EOS'
282 CALL ancmsg(msgid=99,msgtype=msgerror,anmode=aninfo,i1=user_id,c1=titr,c2=chain1)
286 CALL mat51_associate_eos(mat_param,nummat,internal_id)
288 mat_param(internal_id)%REZON%NUM_NUVAR_EOS = 0
289 mat_param(internal_id)%REZON%NUM_NUVAR_MAT = 0
292 DO i=1,count_valid_mat
293 imid = nintri(mid(i),ipm,npropmi,nummat,1)
294 mat_param(internal_id)%MULTIMAT%MID(i) = imid
295 ipm(50+i,internal_id) = nint(uparam(276+i))
297 eos_type = ipm(4,imid)
299 rho_max=
max(rho_max,pm(1,imid))
310 SELECT CASE(eos_type)
315 c0 = mat_param(internal_id)%MULTIMAT%pEOS(i)%EOS%UPARAM(1)
316 c1 = mat_param(internal_id)%MULTIMAT%pEOS(i)%EOS%UPARAM
317 c2 = mat_param(internal_id)%MULTIMAT%pEOS(i
318 c3 = mat_param(internal_id)%MULTIMAT%pEOS(i)%EOS%UPARAM(4)
319 c4 = mat_param(internal_id)%MULTIMAT%pEOS
320 c5 = mat_param(internal_id)%MULTIMAT%pEOS(i)%EOS%UPARAM(6)
324 IF(mat_param(internal_id)%MULTIMAT%pEOS(i)%EOS%NUPARAM == 0)
THEN
326 mat_param(internal_id)%MULTIMAT%pEOS(i)%EOS%TITLE =
'Default Linear EoS'
327 mat_param(internal_id)%MULTIMAT%pEOS(i)%EOS%NUPARAM = 2
328 ALLOCATE(mat_param(internal_id)%MULTIMAT%pEOS(i)%EOS%UPARAM(2))
329 mat_param(internal_id)%MULTIMAT%pEOS(i)%EOS%UPARAM(1) = pm_(104)
330 mat_param(internal_id)%MULTIMAT%pEOS(i)%EOS%UPARAM(2) = pm_(32)
334 c0 = mat_param(internal_id)%MULTIMAT%pEOS(i)%EOS%UPARAM(1)
335 c1 = mat_param(internal_id)%MULTIMAT%pEOS(i
343 gamma = mat_param(internal_id)%MULTIMAT%pEOS(i)%EOS%UPARAM(1)
344 t0 = mat_param(internal_id)%MULTIMAT%pEOS(i)%EOS%UPARAM(3)
355 gamma = mat_param(internal_id)%MULTIMAT%pEOS(i)%EOS%UPARAM(1)
356 p0 = mat_param(internal_id)%MULTIMAT%pEOS(i)%EOS%UPARAM(2)
357 pstar = mat_param(internal_id)%MULTIMAT%pEOS(i)%EOS%UPARAM(3)
360 c0 = -gamma*pstar-pm_(88)
381 idx_psh_tab = idx_psh_tab + 1
382 psh_tab(idx_psh_tab)=psh
394 pm(27,internal_id) =
max( pm(27,internal_id), ssp )
396 j = nint(uparam(276+i))
397 uparam(idx_av +j) = av(i)
398 uparam(idx_rho +j) = rho
399 uparam(idx_p0 +j) = p0
400 uparam(idx_c0 +j) = c0
401 uparam(idx_c1 +j) = c1
402 uparam(idx_c2 +j) = c2
403 uparam(idx_c3(j)) = c3
404 uparam(idx_c4 +j) = c4
405 uparam(idx_c5 +j) = c5
406 uparam(idx_e0 +j) = e0
407 IF(t0 == zero)t0=three100
408 uparam(idx_yield(j)+13)= t0
409 uparam(idx_pm +j) = pmin
410 uparam(idx_yield(j)+12)= sph
411 uparam(idx_yield(j)+24) = ssp
412 uparam(idx_yield(j)+26) = rho*ssp*ssp
413 uparam(idx_visc+j) = visc
427 ibfrac = nint(pm_(41))
434 c04 = pm_(43)-pm_(88)
446 reaction_rate = pm_(163)
450 reaction_rate2 = pm_(167)
451 alpha_unit = pm_(168)
454 pm(38,internal_id) = vdet
457 uparam(44) = rho40 * vdet**2 / pcj
459 uparam(44) = infinity
462 vcj = one - one/uparam(44)
465 IF(uparam(47)==zero) uparam(47) = em20
474 IF(pm4==zero)pm4=-infinity
485 uparam(275) = rho40*ssp4*ssp4
488 idx_psh_tab = idx_psh_tab + 1
489 psh_tab(idx_psh_tab) = psh
490 pm(27,internal_id) =
max( pm(27,internal_id), ssp4 )
494 chain1=
'BULK MODULUS OF LAW5 (JWL) MUST BE PROVIDED FOR UNREACTED EXPLOSIVE'
495 CALL ancmsg(msgid=99,msgtype=msgerror,anmode=aninfo,i1=user_id,c1=titr,c2=chain1)
521 j = nint(uparam(276+i))
522 uparam(idx_ipla +j) = 1
524 uparam(idx_g +j) = gg
525 uparam(idx_yield(j)+01) = g
526 uparam(idx_yield(j)+02) = ca
527 uparam(idx_yield(j)+03) = cb
528 uparam(idx_yield(j)+04) = cn
530 uparam(idx_yield(j)+05:idx_yield(j)+13)=zero
532 uparam(idx_yield(j)+05) = cc
533 uparam(idx_yield(j)+06) = eps0
534 uparam(idx_yield(j)+07) = m
535 uparam(idx_yield(j)+08) = tmelt
536 uparam(idx_yield(j)+09) = tmax
537 uparam(idx_yield(j)+12) = sph
538 IF(t0 == zero)t0=three100
539 uparam(idx_yield(j)+13) = t0
541 uparam(idx_yield(j)+10) = epsm
542 uparam(idx_yield(j)+11) = sigm
543 uparam(idx_yield(j)+14) = zero
544 uparam(idx_yield(j)+15) = zero
545 uparam(idx_yield(j)+16) = zero
546 uparam(idx_yield(j)+17) = zero
547 uparam(idx_yield(j)+18) = zero
548 uparam(idx_yield(j)+19) = zero
549 uparam(idx_yield(j)+20) = zero
550 uparam(idx_yield(j)+21) = zero
551 uparam(idx_yield(j)+22) = anu
552 uparam(idx_yield(j)+23) = -infinity
553 uparam(idx_yield(j)+24) = ssp
554 uparam(idx_yield(j)+25) = zero
555 uparam(idx_yield(j)+26) = rho*ssp*ssp
580 j = nint(uparam(276+i))
581 uparam(idx_ipla +j) = 1
583 uparam(idx_g +j) = gg
584 uparam(idx_yield(j)+01) = g
585 uparam(idx_yield(j)+02) = ca
586 uparam(idx_yield(j)+03) = cb
587 uparam(idx_yield(j)+04) = cn
589 uparam(idx_yield(j)+05:idx_yield(j)+13)=zero
591 uparam(idx_yield(j)+05) = cc
592 uparam(idx_yield(j)+06) = eps0
593 uparam(idx_yield(j)+07) = m
594 uparam(idx_yield(j)+08) = tmelt
595 uparam(idx_yield(j)+09) = tmax
596 uparam(idx_yield(j)+12) = sph
597 IF(t0 == zero)t0=three100
598 uparam(idx_yield(j)+13) = t0
600 uparam(idx_yield(j)+10) = epsm
601 uparam(idx_yield(j)+11) = sigm
602 uparam(idx_yield(j)+14) = zero
603 uparam(idx_yield(j)+15) = zero
604 uparam(idx_yield(j)+16) = zero
605 uparam(idx_yield(j)+17) = zero
606 uparam(idx_yield(j)+18) = zero
607 uparam(idx_yield(j)+19) = zero
608 uparam(idx_yield(j)+20) = zero
609 uparam(idx_yield(j)+21) = zero
610 uparam(idx_yield(j)+22) = anu
611 uparam(idx_yield(j)+23) = -infinity
612 uparam(idx_yield(j)+24) = ssp
613 uparam(idx_yield(j)+25) = zero
614 uparam(idx_yield(j)+26) = rho*ssp*ssp
642 j = nint(uparam(276+i))
643 uparam(idx_ipla +j) = 0
644 uparam(idx_g +j) = gg
645 uparam(idx_yield(j)+01) = g
646 uparam(idx_yield(j)+02) = young
647 uparam(idx_yield(j)+05) = cc
648 uparam(idx_yield(j)+06) = eps0
649 uparam(idx_yield(j)+07) = m
650 uparam(idx_yield(j)+08) = tmelt
651 uparam(idx_yield(j)+09) = tmax
652 uparam(idx_yield(j)+12) = sph
653 uparam(idx_yield(j)+13) = t0
654 uparam(idx_yield(j)+14) = zero
655 uparam(idx_yield(j)+15) = zero
656 uparam(idx_yield(j)+16) = a0
657 uparam(idx_yield(j)+17) = a1
658 uparam(idx_yield(j)+18) = a2
659 uparam(idx_yield(j)+19) = amx
660 uparam(idx_yield(j)+20) = zero
661 uparam(idx_yield(j)+21) = zero
662 uparam(idx_yield(j)+22) = anu
663 uparam(idx_yield(j)+23) = pstar
664 uparam(idx_yield(j)+24) = ssp
665 uparam(idx_yield(j)+25) = zero
666 uparam(idx_yield(j)+26) = rho*ssp*ssp
681 ELSEIF(mln == 102)
THEN
684 iadbuf =
max(1,iadbuf)
685 uparam_ => bufmat(iadbuf:iadbuf+npar-1)
690 IF(bulk == zero)bulk=third*young/(one-two*anu)
701 j = nint(uparam(276+i))
702 uparam(idx_ipla +j) = 2
704 uparam(idx_g +j) = gg
705 uparam(idx_yield(j)+01) = g
706 uparam(idx_yield(j)+02) = young
707 uparam(idx_yield(j)+14) = zero
709 uparam(idx_yield(j)+16) = a0
710 uparam(idx_yield(j)+17) = a1
711 uparam(idx_yield(j)+18) = a2
712 uparam(idx_yield(j)+19) = amx
713 uparam(idx_yield(j)+20) = zero
714 uparam(idx_yield(j)+21) = zero
715 uparam(idx_yield(j)+22) = anu
716 uparam(idx_yield(j)+23) = pstar
717 uparam(idx_yield(j)+24) = ssp
718 uparam(idx_yield(j)+25) = zero
719 uparam(idx_yield(j)+26) = rho*ssp*ssp
723 mlaw_tag(imid)%NVARTMP = 6
726 pmin = mat_param(imid)%uparam(1)
727 young = mat_param(imid)%young
728 bulk = mat_param(imid)%bulk
729 anu = mat_param(imid)%nu
731 g = young / two / (one+anu)
735 j = nint(uparam(276+i))
736 uparam(idx_ipla +j) = 3
738 uparam(idx_g +j) = gg
739 uparam(idx_yield(j)+01) = zero
740 uparam(idx_yield(j)+02) = young
741 uparam(idx_yield(j)+14) = real(imid)
742 uparam(idx_yield(j)+15) = zero
743 uparam(idx_yield(j)+16) = zero
744 uparam(idx_yield(j)+17) = zero
745 uparam(idx_yield(j)+18) = zero
746 uparam(idx_yield(j)+19) = zero
747 uparam(idx_yield(j)+20) = zero
748 uparam(idx_yield(j)+21) = zero
749 uparam(idx_yield(j)+22) = anu
750 uparam(idx_yield(j)+23) = zero
751 uparam(idx_yield(j)+24) = ssp
752 uparam(idx_yield(j)+25) = zero
753 uparam(idx_yield(j)+26) = rho*ssp*ssp
760 imid = nintri(mid(i),ipm,npropmi,nummat,1)
762 mat_param(internal_id)%REZON%NUM_NUVAR_EOS =
763 .
max(mat_param(internal_id)%REZON%NUM_NUVAR_EOS,mat_param(imid)%REZON%NUM_NUVAR_EOS)
768 pm(91,internal_id)=rho_max
771 IF(idx_psh_tab > 0)
THEN
772 tmp1=minval(psh_tab(1:idx_psh_tab))
773 tmp2=maxval(psh_tab(1:idx_psh_tab))
777 chain1=
'SUBMATERIAL EOS MUST HAVE CONSISTENT PSH PARAMETERS'
778 CALL ancmsg(msgid=99,msgtype=msgerror,anmode=aninfo,i1=user_id,c1=titr,c2=chain1)
786 IF(uparam(38)==zero) uparam(38)=one
788 IF(uparam(112)==zero) uparam(112)=one
789 IF(uparam(162)==zero) uparam(162)=one
790 IF(uparam(212)==zero) uparam(212)=one
791 IF(uparam(262)==zero) uparam(262)=one
793 IF(uparam(104)==zero) uparam(104)=one
794 IF(uparam(154)==zero) uparam(154)=one
795 IF(uparam(204)==zero) uparam(204)=one
798 IF(uparam(113)==zero) uparam(113)=three100
799 IF(uparam(163)==zero) uparam(163)=three100
800 IF(uparam(213)==zero) uparam(213)=three100
801 IF(uparam(263)==zero) uparam(263)=three100
803 IF(uparam(110)==zero) uparam(110)=infinity
804 IF(uparam(160)==zero) uparam(160)=infinity
805 IF(uparam(210)==zero) uparam(210)=infinity
808 IF(uparam(111)==zero) uparam(111)=infinity
809 IF(uparam(161)==zero) uparam(161)=infinity
810 IF(uparam(211)==zero) uparam(211)=infinity
813 IF(uparam(108)==zero) uparam(108)=infinity
814 IF(uparam(158)==zero) uparam(158)=infinity
815 IF(uparam(208)==zero) uparam(208)=infinity
816 IF(uparam(258)==zero) uparam(258)=infinity
818 IF(uparam(109)==zero) uparam(109)=infinity
819 IF(uparam(159)==zero) uparam(159)=infinity
820 IF(uparam(209)==zero) uparam(209)=infinity
821 IF(uparam(259)==zero) uparam(259)=infinity
823 IF(uparam(114)==zero) uparam(114)=em20
824 IF(uparam(164)==zero) uparam(164)=em20
825 IF(uparam(214)==zero) uparam(214)=em20
826 IF(uparam(264)==zero) uparam(264)=em20
828 IF(uparam(106)==zero) uparam(106)=one
829 IF(uparam(156)==zero) uparam(156)=one
830 IF(uparam(206)==zero) uparam(206)=one
833 IF(uparam(119)==zero) uparam(119)=infinity
834 IF(uparam(169)==zero) uparam(169)=infinity
835 IF(uparam(219)==zero) uparam(219)=infinity
838 IF(uparam(122)==zero) uparam(122)=zep2
839 IF(uparam(172)==zero) uparam(172)=zep2
840 IF(uparam(222)==zero) uparam(222)=zep2
843 IF(uparam(121) == zero) uparam(121) = uparam(12)
844 IF(uparam(171) == zero) uparam(171) = uparam(13)
845 IF(uparam(221) == zero) uparam(221) = uparam(14)
850 uparam(69) = uparam(9)*uparam(4) + uparam(10)*uparam(5) + uparam(11)*uparam(6) + uparam(47)*uparam(46)
852 uparam(72) = infinity
853 IF(uparam(43) <= em20) uparam(44)=infinity
854 IF(uparam(47)==zero) uparam(47) = em20
855 IF(uparam(56)==zero) uparam(56)=-infinity
859 IF(ratio <= zero)
THEN
864 niter = nint(uparam(73))
867 uparam(73)=real(niter)