57 USE material_is_high_explosive_mod ,
ONLY : material_is_high_explosive
61#include "implicit_f.inc"
68#include "tabsiz_c.inc"
72 TYPE (UNIT_TYPE_),
INTENT(IN) :: UNITAB
73 INTEGER,
INTENT(IN) :: ITABM1(SITABM1)
74 INTEGER,
INTENT(IN) :: IPM(NPROPMI,NUMMAT)
75 my_real,
INTENT(IN) :: x(3,numnod)
78 TYPE (GROUP_),
DIMENSION(NGRNOD),
INTENT(IN) :: IGRNOD
79 my_real,
INTENT(INOUT) :: pm(npropm,nummat)
83 INTEGER :: I,MAT,IGU,IGS,MDET,DET_ID,IDET
84 INTEGER :: NODE_ID1,uID1,UID,internal_ID,NNOD
88 CHARACTER(LEN=NCHARTITLE) :: TITR
89 CHARACTER*32 :: MSG_C2
90 LOGICAL :: IS_ENCRYPTED, IS_AVAILABLE, IS_AVAILABLE_SHADOW
91 LOGICAL :: IS_NODE_DEFINED,IS_GRNOD_DEFINED
94 INTEGER :: IMAT, MLW_SUBMAT, SUBMAT_UID, NBMAT, KK, MID
95 CHARACTER(LEN=NCHARKEY) :: KEY, KEY2
99 INTEGER,
EXTERNAL :: NODGRNR5, USR2SYS, NINTRI
100 INTEGER :: UNUSED_MAT_DETONATOR
101 DATA mess/
'DETONATORS DEFINITION '/
107 DO idet=1,detonators%N_DET_POINT
109 CALL hm_option_read_key(lsubmodel,option_id=det_id, unit_id=uid,keyword2=key,keyword3=key2)
110 IF (len_trim(key) > 0) key = key(1:7)
111 IF (len_trim(key2) > 0) key2 = key2(1:5)
113 is_encrypted= .false.
114 is_available = .false.
115 is_available_shadow = .false.
116 is_node_defined = .false.
117 is_grnod_defined = .false.
119 IF(key2(1:4)==
'NODE')is_node_defined = .true.
120 IF(key2(1:3)==
'SET')is_grnod_defined = .true.
125 IF(is_node_defined)
THEN
126 msg_c2 =
'/DFS/DETPOINT/NODE'
127 CALL hm_get_intv(
'rad_det_Ishadow', i_shadow, is_available_shadow, lsubmodel)
128 CALL hm_get_floatv(
'rad_det_time', tdet, is_available, lsubmodel,unitab)
129 CALL hm_get_intv(
'rad_det_materialid', mat, is_available, lsubmodel)
130 CALL hm_get_intv(
'rad_det_node1', uid1, is_available, lsubmodel)
134 ELSEIF(is_grnod_defined)
THEN
135 msg_c2 =
'/DFS/DETPOINT/SET'
136 CALL hm_get_intv(
'rad_det_Ishadow', i_shadow, is_available_shadow, lsubmodel)
137 CALL hm_get_floatv(
'rad_det_time', tdet, is_available, lsubmodel,unitab)
138 CALL hm_get_intv(
'rad_det_materialid', mat, is_available, lsubmodel)
139 CALL hm_get_intv(
'rad_det_grnod1', uid1, is_available, lsubmodel)
145 msg_c2 =
'/DFS/DETPOINT'
146 CALL hm_get_floatv(
'rad_det_locationA_X', xc, is_available, lsubmodel, unitab)
147 CALL hm_get_floatv(
'rad_det_locationA_Y', yc, is_available, lsubmodel, unitab)
148 CALL hm_get_floatv(
'rad_det_locationA_Z', zc, is_available, lsubmodel, unitab)
149 CALL hm_get_floatv(
'rad_det_time', tdet, is_available, lsubmodel,unitab)
150 CALL hm_get_intv(
'rad_det_materialid', mat, is_available, lsubmodel)
155 IF (tdet > infinity) tdet= infinity
156 IF (tdet < -infinity)tdet=-infinity
159 IF(is_available_shadow)
THEN
160 IF(i_shadow < 0 .OR. i_shadow > 1)
THEN
162 CALL ancmsg(msgid=102,msgtype=msgwarning,anmode=aninfo_blind_1,
164 . c1=
'INVALID I_SHADOW FLAG. FLAG IS SET TO 0',
170 IF(i_shadow == 1) detonators%IS_SHADOWING_REQUIRED = .true.
172 IF(i_shadow == 1)
THEN
176 IF(mid /= mdet) cycle
189 submat_uid = ipm(20+imat,i)
192 IF(ipm(1,kk)==submat_uid)
THEN
194 mlw_submat = ipm(2,kk)
198 IF(mlw_submat > 0)
THEN
199 IF(material_is_high_explosive(mlw_submat))
THEN
208 IF(material_is_high_explosive(mlw))pm(96,i)=1
216 IF(is_node_defined)
THEN
217 node_id1=usr2sys(uid1,itabm1,mess,det_id)
218 detonators%POINT(idet)%NNOD = 1
219 ALLOCATE(detonators%POINT(idet)%NODLIST(1))
220 detonators%POINT(idet)%NODLIST(1) = node_id1
227 CALL ancmsg(msgid=104, msgtype=msgerror, anmode=aninfo, c1=
'/DFS/DETPOINT/NODE', i1=det_id, c2=
'INVALID NODE_ID')
234 IF(is_grnod_defined)
THEN
237 IF (igrnod(i)%ID == uid1
THEN
239 nnod = igrnod(i)%NENTITY
240 detonators%POINT(idet)%NNOD = nnod
241 ALLOCATE(detonators%POINT(idet)%NODLIST(nnod))
243 nnod=nodgrnr5(uid1,internal_id,detonators%POINT(idet)%NODLIST,igrnod,itabm1,mess)
247 IF(internal_id == 0)
THEN
248 CALL ancmsg(msgid=104, msgtype=msgerror, anmode=aninfo, c1=
'/DFS/DETPOINT/SET', i1=det_id, c2=
'INVALID SET_ID')
258 IF(mat > 0)unused=unused_mat_detonator(mat,nummat,ipm)
260 CALL ancmsg(msgid=102,msgtype=msgerror,anmode=aninfo,
262 . c1=
'DETONATOR IS REFERRING TO A NEGATIVE MATERIAL ID'
263 . c2=
'/DFS/DETPOINT',
265 ELSEIF (unused == 1)
THEN
266 CALL ancmsg(msgid=102,msgtype=msgerror,anmode=aninfo
268 . c1=
'DETONATOR IS REFERRING TO AN UNKNOWN MATERIAL ID'
269 . c2=
'/DFS/DETPOINT',
271 ELSEIF (unused == 2)
THEN
272 CALL ancmsg(msgid=102,msgtype=msgerror,anmode=aninfo,
274 . c1=
'DETONATOR MUST REFER TO A JWL MATERIAL LAW (LAWS 5, 51, 97, 151)'
275 . c2=
'/DFS/DETPOINT',
279 detonators%POINT(idet)%IS_MAT_VALID = .true.
283 ELSEIF(is_node_defined)
THEN
284 WRITE(iout,1401) det_id,i_shadow,uid1,xc,yc,zc,tdet,mdet
285 ELSEIF(is_grnod_defined)
THEN
286 WRITE(iout,1402) det_id,i_shadow,uid1,nnod,tdet,mdet
288 WRITE(iout,1400) det_id,xc,yc,zc,tdet,mdet
291 detonators%POINT(idet)%SHADOW = i_shadow
292 detonators%POINT(idet)%TDET = tdet
293 detonators%POINT(idet)%MAT = mat
294 detonators%POINT(idet)%XDET = xc
295 detonators%POINT(idet)%YDET = yc
296 detonators%POINT(idet)%ZDET = zc
297 detonators%POINT(idet)%GRNOD_ID = internal_id
306 &
'DETONATION POINT ',i10,/5x,
307 &
'---------------- ',/5x,
308 &
'CONFIDENTIAL DATA')
310 &
'DETONATION POINT ',i10,/5x,
311 &
'---------------- ',/5x,
312 &
'X-COORDINATE =',1pg20.13,/5x,
313 &
'Y-COORDINATE =',1pg20.13,/5x,
314 &
'Z-COORDINATE =',1pg20.13,/5x,
315 &
'DETONATION TIME =',1pg20.13,/5x,
316 &
'EXPLOSIVE MATERIAL NUMBER =',i10 )
318 &
'DETONATION POINT (NODE) ',i10,/5x,
319 &
'----------------------- ',/5x,
320 &
'SHADOWING FLAG =',i10 ,/5x,
321 &
'NODE ID =',i10 ,/5x,
322 &
' X-COORDINATE =',1pg20.13,/5x,
323 &
' Y-COORDINATE =',1pg20.13,/5x,
324 &
' Z-COORDINATE =',1pg20.13,/5x,
325 &
'DETONATION TIME =',1pg20.13,/5x,
326 &
'EXPLOSIVE MATERIAL NUMBER =',i10 )
328 &
'DETONATION POINT (SET) ',i10,/5x,
329 &
'---------------------- ',/5x,
330 &
'SHADOWING FLAG =',i10 ,/5x,
331 &
'SET ID =',i10 ,/5x,
332 &
' NUMBER OF NODES =',i10,/5x,
333 &
'DETONATION TIME =',1pg20.13,/5x,
334 &
'EXPLOSIVE MATERIAL NUMBER =',i10 )
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)