40
41
42
46 USE multi_fvm_mod
49 USE matparam_def_mod, ONLY : matparam_struct_
51
52
53
54#include "implicit_f.inc"
55
56
57
58#include "units_c.inc"
59#include "param_c.inc"
60
61
62
63 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
64 INTEGER,INTENT(INOUT) :: IPM(NPROPMI)
65 INTEGER,INTENT(IN) :: ID
66 my_real,
INTENT(INOUT) :: pm(npropm)
67 TYPE (UNIT_TYPE_),INTENT(IN) :: UNITAB
68 TYPE(MLAW_TAG_),INTENT(INOUT) :: MTAG
69 TYPE(MULTI_FVM_STRUCT), INTENT(INOUT) :: MULTI_FVM
70 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(NSUBMOD)
71 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
72
73
74
75 LOGICAL :: IS_AVAILABLE
76 INTEGER :: NBMAT, MAT_ID
77 INTEGER :: II
78 my_real :: frac_vol, sum_frac_vol
80 INTEGER :: IMID(21)
81
82
83
84 is_available = .false.
85 nbmat = 0
86 CALL hm_get_intv(
'NIP',nbmat,is_available,lsubmodel)
87 multi_fvm%NBMAT =
max(multi_fvm%NBMAT, nbmat)
88
89 IF (nbmat > 21) THEN
90
91 CALL ancmsg(msgid = 87, msgtype = msgerror, anmode = aninfo)
92 ENDIF
93
94
95 ipm(20) = nbmat
96 pm(20) = nbmat + em01
97 matparam%MULTIMAT%NB = nbmat
98
99 IF(.NOT.ALLOCATED(matparam%multimat%vfrac))ALLOCATE(matparam%multimat%vfrac(nbmat))
100 IF(.NOT.ALLOCATED(matparam%multimat%mid)) ALLOCATE(matparam%multimat%mid(nbmat))
101
102
103 sum_frac_vol = zero
104 DO ii = 1, nbmat
107 ipm(20 + ii) = mat_id
108 pm(20 + ii) = frac_vol
109 imid(ii) = mat_id
110 vfrac(ii) = frac_vol
111 sum_frac_vol = sum_frac_vol + frac_vol
112 IF (frac_vol < zero .OR. frac_vol > one) THEN
114 CALL ancmsg(msgid = 1511, msgtype = msgerror, anmode = aninfo, c1 =
"ERROR", i1 =
id, i2 = mat_id, r1 = frac_vol)
115 ELSE
116 CALL ancmsg(msgid = 1511, msgtype = msgwarning, anmode = aninfo, c1 =
"WARNING", i1 =
id, i2 = mat_id, r1 = frac_vol)
117 ENDIF
118 ENDIF
119 ENDDO
120
121
122 IF (sum_frac_vol /= one) THEN
124 CALL ancmsg(msgid = 1512, msgtype = msgerror, anmode = aninfo, c1 =
"ERROR", i1 =
id, r1 = sum_frac_vol)
125 ELSE
126 CALL ancmsg(msgid = 1512, msgtype = msgwarning, anmode = aninfo, c1 =
"WARNING", i1 =
id, r1 = sum_frac_vol)
127 IF(sum_frac_vol == zero)THEN
128 pm(20 + 1) = one
129 vfrac(1) = one
130 ENDIF
131 ENDIF
132 ENDIF
133
134
135 mtag%L_FRAC = 1
136 mtag%G_DELTAX = 1
137 mtag%L_DELTAX = 1
138 mtag%G_RHO = 1
139 mtag%L_RHO = 1
140
141
143
144
146
147
149
150
152
153
154 matparam%multimat%vfrac(1:nbmat) = vfrac(1:nbmat)
155 matparam%multimat%mid(1:nbmat) = imid(1:nbmat)
156
157
158 WRITE(iout,1000) nbmat
159 DO ii = 1, nbmat
160 WRITE(iout, 1010) matparam%multimat%mid(ii), matparam%multimat%vfrac(ii)
161 ENDDO
162
163 1000 FORMAT(
164 & 5x,' MULTIFLUID LAW ',/,
165 & 5x,' -------------- ',/,
166 & 5x,' NUMBER OF MATERIALS. . . . . . .=',i8//)
167 1010 FORMAT(
168 & 5x,' MATERIAL ID', i8, ' ; VOLUME FRACTION',1pg20.13/)
169 RETURN
170
171
subroutine hm_get_float_array_index(name, rval, index, is_available, lsubmodel, unitab)
subroutine hm_get_int_array_index(name, ival, index, is_available, lsubmodel)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine init_mat_keyword(matparam, keyword)
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)