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
81 INTEGER :: IMID(21)
82
83
84
85 is_available = .false.
86 nbmat = 0
87 CALL hm_get_intv(
'NIP',nbmat,is_available,lsubmodel)
88 multi_fvm%NBMAT =
max(multi_fvm%NBMAT, nbmat)
89
90 IF (nbmat > 21) THEN
91
92 CALL ancmsg(msgid = 87, msgtype = msgerror, anmode = aninfo)
93 ENDIF
94
95
96 ipm(20) = nbmat
97 pm(20) = nbmat + em01
98 matparam%MULTIMAT%NB = nbmat
99
100 IF(.NOT.ALLOCATED(matparam%multimat%vfrac))ALLOCATE(matparam%multimat%vfrac(nbmat
101 IF(.NOT.ALLOCATED(matparam%multimat%mid)) ALLOCATE(matparam%multimat%mid(nbmat))
102
103
104 sum_frac_vol = zero
105 DO ii = 1, nbmat
108 ipm(20 + ii) = mat_id
109 pm(20 + ii) = frac_vol
110 imid(ii) = mat_id
111 vfrac(ii) = frac_vol
112 sum_frac_vol = sum_frac_vol + frac_vol
113 IF (frac_vol < zero .OR. frac_vol THEN
115 CALL ancmsg(msgid = 1511, msgtype = msgerror, anmode = aninfo, c1 =
"ERROR", i1 =
id, i2 = mat_id, r1 = frac_vol)
116 ELSE
117 CALL ancmsg(msgid = 1511, msgtype = msgwarning, anmode = aninfo, c1 =
"WARNING", i1 =
id, i2 = mat_id, r1 = frac_vol)
118 ENDIF
119 ENDIF
120 ENDDO
121
122
123 IF (abs(one-sum_frac_vol) > em14) THEN
125 CALL ancmsg(msgid = 1512, msgtype = msgerror, anmode = aninfo, c1 =
"ERROR", i1 =
id, r1 = sum_frac_vol)
126 ELSE
127 CALL ancmsg(msgid = 1512, msgtype = msgwarning, anmode = aninfo, c1 =
"WARNING", i1 =
id, r1 = sum_frac_vol)
128 IF(sum_frac_vol == zero)THEN
129 pm(20 + 1) = one
130 vfrac(1) = one
131 ENDIF
132 ENDIF
133 ENDIF
134
135
136 mtag%L_FRAC = 1
137 mtag%G_DELTAX = 1
138 mtag%L_DELTAX = 1
139 mtag%G_RHO = 1
140 mtag%L_RHO = 1
141
142
144
145
147
148
150
151
153
154
155 matparam%multimat%vfrac(1:nbmat) = vfrac(1:nbmat)
156 matparam%multimat%mid(1:nbmat) = imid(1:nbmat)
157
158
159 WRITE(iout,1000) nbmat
160 DO ii = 1, nbmat
161 WRITE(iout, 1010) matparam%multimat%mid(ii), matparam%multimat%vfrac(ii)
162 ENDDO
163
164 1000 FORMAT(
165 & 5x,' MULTIFLUID LAW ',/,
166 & 5x,' -------------- ',/,
167 & 5x,' NUMBER OF MATERIALS. . . . . . .=',i8//)
168 1010 FORMAT(
169 & 5x,' MATERIAL ID', i8, ' ; VOLUME FRACTION',1pg20.13/)
170 RETURN
171
172
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)