38
39
40
45
46
47
48#include "implicit_f.inc"
49
50
51
52
53
54
55 INTEGER ,INTENT(IN) :: MAT_ID,IOUT,NUPARAM
56 INTEGER ,INTENT(IN) :: NFUNC
57 INTEGER ,INTENT(IN) :: NFUNCT
58 INTEGER, DIMENSION(NFUNC) :: IFUNC
59 INTEGER, DIMENSION(NFUNCT) :: FUNC_ID
60 INTEGER NPC(*)
62 CHARACTER(LEN=NCHARTITLE) :: TITR
63 TYPE(MLAW_TAG_),INTENT(INOUT) :: MTAG
64
65
66
67 INTEGER :: I,J,IFE,IE,IX1,IX2,IY1,IY2,NRATE,IYLD,IFAIL,FUNC1,FUNC2
68 my_real :: epsmax,epslast,x1,x2,y1,y2,fac1,fac2,xint,yint
69
70
71
72 ife = ifunc(nfunc)
73 IF (ife > 0) THEN
74 ie = npc(ife)
75 iy2 = npc(ife+1)
76 DO i = ie+1,iy2-3,2
77 IF (pld(i) < pld(i+2)) THEN
78 CALL ancmsg(msgid=975, msgtype=msgerror, anmode=aninfo,
79 . i1 = func_id(nfunc),
80 . c1 = titr )
81 EXIT
82 ENDIF
83 ENDDO
84 ENDIF
85
86
87
88
89 nrate = nint(uparam(1))
90 epsmax = uparam(2*nrate + 7)
91 ifail = nint(uparam(2*nrate + 27))
92 iyld = ifunc(1)
93 ix1 = npc(iyld+1) - 4
94 iy1 = npc(iyld+1) - 3
95 iy2 = npc(iyld+1) - 1
96 ix2 = npc(iyld+1) - 2
97 x1 = pld(ix1)
98 x2 = pld(ix2)
99 y1 = pld(iy1)
100 y2 = pld(iy2)
101 IF (ix2 > zero .and. y2 == zero) THEN
102 epslast = x2
103 epsmax = uparam(7+2*nrate)
104 IF (epslast < epsmax) uparam(2*nrate + 7 ) = epslast
105 IF (ifail == 0) uparam(2*nrate + 27) = 1
106 uparam(2*nrate + 28) = 1
107 mtag%G_DMG = 1
108 mtag%L_DMG = 1
109 ELSE IF (y1 > y2) THEN
110 epslast = (x2*y1 - x1*y2) / (y1 - y2)
111 IF (epslast < epsmax) uparam(2*nrate
112 IF (ifail == 0) uparam(2*nrate + 27) = 1
113 uparam(2*nrate + 28) = 1
114 mtag%G_DMG = 1
115 mtag%L_DMG = 1
116 ENDIF
117
118
119
120 DO i = 1,nrate
121 func1 = ifunc(i)
122 fac1 = uparam(nrate + 6 + i)
123 DO j = i+1,nrate
124 func2 = ifunc(j)
125 fac2 = uparam(nrate + 6 + j)
126 IF (func1 > 0 .and. func2 > 0 .and. func1 /= func2) THEN
127 CALL func_inters(titr,mat_id,func1 ,func2 ,fac1 ,fac2 ,
128 . npc ,pld ,xint ,yint )
129
130 IF (xint > zero .and. yint > zero) THEN
131 CALL ancmsg(msgid=2064, msgtype=msgwarning, anmode=aninfo,
132 . i1 = mat_id,
133 . i2 = func_id(func1),
134 . i3 = func_id(func2),
135 . c1 = titr )
136 END IF
137 END IF
138 END DO
139 END DO
140
141 RETURN
subroutine func_inters(titr, mat_id, func1, func2, fac1, fac2, npc, pld, xint, yint)
integer, parameter nchartitle
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)