58#include "implicit_f.inc"
65#include "tabsiz_c.inc"
69 TYPE (UNIT_TYPE_),
INTENT(IN) :: UNITAB
70 INTEGER,
INTENT(IN) :: ITABM1(SITABM1)
71 INTEGER,
INTENT(IN) :: IPM(NPROPMI,NUMMAT)
72 my_real,
INTENT(IN) :: x(3,numnod)
78 INTEGER :: I, MAT, J, NPEM,NPCM,K,IGU,IGS,JJ,,DET_ID,IDET
79 INTEGER :: IBID, NODE_ID1, NODE_ID2,uID1,uID2, IOPT, IUNIT, UID
80 INTEGER :: FLAG_FMT,IMAT,IFLAGUNIT,UNUSED
82 my_real :: xc, yc, zc, alt, xc1, yc1, zc1, xc2, yc2, zc2, nx, ny, nz, bid, vcj
84 CHARACTER*64 :: chain1,chain2
85 CHARACTER(LEN=NCHARKEY) :: KEY, KEY2
86 CHARACTER(LEN=NCHARTITLE) :: TITR
87 LOGICAL :: IS_ENCRYPTED, IS_AVAILABLE
88 LOGICAL :: IS_NODE_DEFINED
89 INTEGER :: NDETPS,NDETSG,NECRAN,NDETPL,NDETCORD
93 INTEGER,
EXTERNAL :: NODGRNR5, USR2SYS, NINTRI
94 INTEGER :: UNUSED_MAT_DETONATOR
95 DATA mess/
'DETONATORS DEFINITION '/
102 DO idet=1,detonators%N_DET_PLANE
104 CALL hm_option_read_key(lsubmodel,option_id=det_id, unit_id=uid,keyword2=key,keyword3=key2)
105 IF (len_trim(key) > 0) key = key(1:7)
106 IF (len_trim(key2) > 0) key2 = key2(1:4)
108 is_encrypted= .false.
109 is_available = .false.
110 is_node_defined = .false.
111 IF(key2(1:4)==
'NODE')is_node_defined = .true.
116 IF(is_node_defined)
THEN
117 CALL hm_get_floatv(
'rad_det_time', alt, is_available, lsubmodel,unitab)
118 CALL hm_get_intv(
'rad_det_materialid', mat, is_available, lsubmodel)
119 CALL hm_get_intv(
'rad_det_node1', uid1, is_available, lsubmodel)
120 CALL hm_get_intv(
'rad_det_node2', uid2, is_available, lsubmodel)
125 CALL hm_get_floatv(
'rad_det_locationA_X', xc, is_available, lsubmodel, unitab
126 CALL hm_get_floatv(
'rad_det_locationA_Y', yc, is_available, lsubmodel, unitab)
127 CALL hm_get_floatv(
'rad_det_locationA_Z', zc, is_available, lsubmodel, unitab)
128 CALL hm_get_floatv(
'rad_det_locationB_X', nx, is_available, lsubmodel, unitab)
129 CALL hm_get_floatv(
'rad_det_locationB_Y', ny, is_available, lsubmodel
130 CALL hm_get_floatv(
'rad_det_locationB_Z', nz, is_available, lsubmodel, unitab)
131 CALL hm_get_floatv(
'rad_det_time', alt, is_available, lsubmodel,unitab)
132 CALL hm_get_intv(
'rad_det_materialid', mat, is_available, lsubmodel)
135 IF(is_node_defined)
THEN
136 node_id1=usr2sys(uid1,itabm1,mess,det_id)
142 node_id2=usr2sys(uid2,itabm1,mess,det_id)
147 nx = x(1,node_id2) - x(1,node_id1)
148 ny = x(2,node_id2) - x(2,node_id1)
149 nz = x(3,node_id2) - x(3,node_id1)
151 IF(node_id1==0 .AND. node_id2==0)
THEN
152 CALL ancmsg(msgid = 104,msgtype = msgerror,anmode = aninfo,
153 . c1 =
'/DFS/DETPLAN/NODE',
155 . c2 =
'INVALID NODE_ID')
163 IF (alt > infinity)alt= infinity
164 IF (alt < -infinity)alt=-infinity
166 IF(mat > 0)unused=unused_mat_detonator(mat,nummat,ipm)
168 CALL ancmsg(msgid=102,msgtype=msgerror,anmode=aninfo,
170 . c1=
'DETONATOR IS REFERRING TO A NEGATIVE MATERIAL ID',
171 . c2=
'/DFS/DETPLANE',
173 ELSEIF (unused==1)
THEN
174 CALL ancmsg(msgid=102,msgtype=msgerror,anmode=aninfo,
176 . c1=
'DETONATOR IS REFERRING TO AN UNKNOWN MATERIAL ID',
177 . c2=
'/DFS/DETPLANE',
179 ELSEIF (unused==2)
THEN
180 CALL ancmsg(msgid=102,msgtype=msgerror,anmode=aninfo,
182 . c1=
'DETONATOR MUST REFER TO A JWL MATERIAL LAW (LAWS 5, 51, 97, 151)',
183 . c2=
'/DFS/DETPLANE',
185 ELSEIF((nx == zero).AND.(ny == zero).AND.(nz == zero))
THEN
186 CALL ancmsg(msgid=104,msgtype=msgerror,anmode=aninfo,
187 . c1=
'/DFS/DETPLANE',
189 . c2=
'DIRECTION VECTOR IS NOT DEFINED')
191 detonators%PLANE(idet)%IS_MAT_VALID = .true.
192 IF(is_node_defined)
THEN
193 IF(.NOT.is_encrypted)
WRITE(iout,1601) det_id,node_id1,xc,yc,zc,node_id2,xc2,yc2,zc2,nx,ny,nz, alt,mdet
195 IF(.NOT.is_encrypted)
WRITE(iout,1600) det_id,xc,yc,zc,nx,ny,nz, alt,mdet
197 IF(is_encrypted)
WRITE(iout,1001)
199 detonators%PLANE(idet)%TDET = alt
200 detonators%PLANE(idet)%MAT = mat
201 detonators%PLANE(idet)%XDET = xc
202 detonators%PLANE(idet)%YDET = yc
203 detonators%PLANE(idet)%ZDET = zc
204 detonators%PLANE(idet)%NX = nx
205 detonators%PLANE(idet)%NY = ny
206 detonators%PLANE(idet)%NZ = nz
214 &
'PLANAR DETONATION ',i10,/5x,
215 &
'----------------- ',/5x,
216 &
'CONFIDENTIAL DATA')
218 &
'PLANAR DETONATION ',i10,/5x,
219 &
'---------------- ',/5x,
220 &
' X-COORDINATE =',1pg20.13,/5x,
221 & ' y-coordinate =
',1PG20.13,/5X,
222 & ' z-coordinate =
',1PG20.13,/5X,
223 & 'nx-coordinate =
',1PG20.13,/5X,
224 & 'ny-coordinate =
',1PG20.13,/5X,
225 & 'nz-coordinate =
',1PG20.13,/5X,
226 & 'lighting time =
',1PG20.13,/5X,
227 & 'explosive material number =',i10 )
229 &
'PLANAR DETONATION ',i10,/5x,
230 &
'---------------- ',/5x,
231 &
'BASIS NODE ID =',i10 ,/5x,
232 &
' X-COORDINATE =',1pg20.13,/5x,
233 &
' Y-COORDINATE =',1pg20.13,/5x,
234 &
' Z-COORDINATE =',1pg20.13,/5x,
235 &
'NORMAL NODE ID =',i10 ,/5x,
236 &
' X-COORDINATE =',1pg20.13,/5x,
237 &
' Y-COORDINATE =',1pg20.13,/5x,
238 &
' Z-COORDINATE =',1pg20.13,/5x,
239 &
'NORMAL VECTOR ',/5x,
240 &
' X-COORDINATE =',1pg20.13,/5x,
241 &
' Y-COORDINATE =',1pg20.13,/5x,
242 &
' Z-COORDINATE =',1pg20.13,/5x,
243 &
'LIGHTING TIME =',1pg20.13,/5x,
244 &
'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)