52 2 IXTG ,X0 ,NSTRF ,ITAB ,ITABM1 ,
54 4 IPARI ,IXS10 ,IXS20 ,IXS16 ,UNITAB ,
55 5 ISKN ,XFRAME,ISOLNOD,NOM_SECT,RTRANS,
56 6 LSUBMODEL,NOM_OPT,IGRBRIC)
67 use element_mod ,
only : nixs,nixq,nixc,nixp,nixt,nixr,nixtg
71#include "implicit_f.inc"
75#include "analyse_name.inc"
86 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
87 INTEGER IXC(NIXC,*), IXTG(NIXTG,*), NSTRF(*), ITAB(*),
88 . ITABM1(*),IXS(NIXS,*), IXQ(NIXQ,*), IXT(NIXT,*),
89 . IXP(NIXP,*), IXR(NIXR,*), IPARI(NPARI,*),
90 . IXS10(6,*),IXS20(12,*),IXS16(8,*),ISKN(LISKN,*),
91 . isolnod(*),nom_sect(*)
92 INTEGER NOM_OPT(LNOPT1,*)
93 TYPE(SUBMODEL_DATA) LSUBMODEL(*)
95 . X0(3,*),SECBUF(*),XFRAME(NXFRAME,*),
98 TYPE (GROUP_) ,
DIMENSION(NGRNOD) :: IGRNOD
99 TYPE (GROUP_) ,
DIMENSION(NGRBRIC) :: IGRBRIC
103 INTEGER ,
DIMENSION(NSECT) :: SECTIDS
104 INTEGER K1, I, J, L, KK, K2, K,LREC,
105 . NNOD, NBINTER,K0,K3,K4,K5,K6,K7,K8,K9,KR0,
106 . NSEGQ,NSEGS,NSEGC,NSEGT,NSEGP,NSEGR,NSEGTG,ID,
107 . IGU,IGS,IGUS,IGUQ,IGUC,IGUT,IGUP,IGUR,IGUTG,IFRAM,
108 . nnsk1,nnsk2,nnsk3,uid,iflagunit,
113 INTEGER FLAG_FMT, L0, ISTYP, SUB_ID
114 INTEGER,
DIMENSION(:),
ALLOCATABLE :: NODTAG,TAGELEMS
116 . DELTAT,ALPHA,FAC_T,A,,C,D,E,F,R
118 CHARACTER(LEN=NCHARTITLE) :: TITR
119 CHARACTER(LEN=NCHARLINE) ::CHAR8
120 CHARACTER(LEN=NCHARFIELD) :: KEY2
122 . bid, xm, ym, zm, x1, y1, z1, x2, y2, z2,
norm,
123 . x3, y3, z3, n3, pnor1, pnor2, pnorm1, det, det1, det2, det3
128 INTEGER USR2SYS,NODGRNR5,ELEGROR
129 EXTERNAL usr2sys,nodgrnr5,elegror
132 DATA mess/
'SECTION DEFINITION '/
135 ALLOCATE(tagelems(1+numelc+numels+numelt+numelq+numelp+numelr+numeltg))
136 ALLOCATE(nodtag(numnod))
176 CALL hm_get_intv(
'Axis_Origin_Node_N1', nstrf(k0+3), is_available, lsubmodel)
177 CALL hm_get_intv(
'Axis_Node_N2', nstrf(k0+4), is_available
178 CALL hm_get_intv('axis_node_n3
', NSTRF(K0+5), IS_AVAILABLE, LSUBMODEL)
179 CALL HM_GET_INTV('isave
', NSTRF(K0), IS_AVAILABLE, LSUBMODEL)
181 CALL HM_GET_STRING('file_name
', CHAR8, ncharline, IS_AVAILABLE)
185.AND.
IF(ILEN >= 0 ILEN < ncharline)THEN
186 DO K=ILEN+1,ncharline
191 IF(KEY2(1:5) == 'paral
') THEN
193 ELSEIF(KEY2(1:6) == 'circle
') THEN
196 CALL HM_GET_INTV('grnod_id
', IGU, IS_AVAILABLE, LSUBMODEL)
197 CALL HM_GET_INTV('system_id
', NFRAM, IS_AVAILABLE, LSUBMODEL)
201 CALL HM_GET_FLOATV('detltat
', DELTAT, IS_AVAILABLE, LSUBMODEL, UNITAB)
202 CALL HM_GET_FLOATV('alpha
', ALPHA, IS_AVAILABLE, LSUBMODEL, UNITAB)
203 CALL HM_GET_INTV('grbrick_id
', IGUS, IS_AVAILABLE, LSUBMODEL)
204 CALL HM_GET_INTV('grshel_id
', IGUC, IS_AVAILABLE, LSUBMODEL)
205 CALL HM_GET_INTV('grtrus_id
', IGUT, IS_AVAILABLE, LSUBMODEL)
206 CALL HM_GET_INTV('grbeam_id
', IGUP, IS_AVAILABLE, LSUBMODEL)
207 CALL HM_GET_INTV('grsprg_id
', IGUR, IS_AVAILABLE, LSUBMODEL)
208 CALL HM_GET_INTV('grtria_id
', IGUTG, IS_AVAILABLE, LSUBMODEL)
209 CALL HM_GET_INTV('niter
', NBINTER, IS_AVAILABLE, LSUBMODEL)
210 CALL HM_GET_INTV('iframe
', IFRAM, IS_AVAILABLE, LSUBMODEL)
212.OR.
IF (NBINTER < 0 NBINTER > 10) THEN
213 CALL ANCMSG(MSGID=124,ANMODE=ANINFO,MSGTYPE=MSGERROR,I1=ID,C1=TITR)
218 IF (UNITAB%UNIT_ID(J) == UID) THEN
219 FAC_T = UNITAB%FAC_T(J)
224.AND.
IF (UID/=0IFLAGUNIT==0) THEN
225 CALL ANCMSG(MSGID=659,ANMODE=ANINFO,MSGTYPE=MSGERROR,I2=UID,I1=ID,C1='section',C2='section',C3=TITR)
230.AND..AND.
IF(IGU == 0 NFRAM == 0 ISTYP == 0) THEN
231 CALL ANCMSG(MSGID=507,
232 . MSGTYPE=MSGWARNING,
233 . ANMODE=ANINFO_BLIND_1,
239 NOM_SECT((I-1)*ncharline+J) = ICHAR(CHAR8(J:J))
243 CALL HM_GET_INT_ARRAY_INDEX('int_id
' ,NSTRF(K1-1+J) ,J ,IS_AVAILABLE, LSUBMODEL)
247 CALL HM_GET_FLOATV('xtail
', XM, IS_AVAILABLE, LSUBMODEL, UNITAB)
248 CALL HM_GET_FLOATV('ytail
', YM, IS_AVAILABLE, LSUBMODEL, UNITAB)
249 CALL HM_GET_FLOATV('ztail
', ZM, IS_AVAILABLE, LSUBMODEL, UNITAB)
250 IF(SUB_ID /= 0)CALL SUBROTPOINT(XM,YM,ZM,RTRANS,SUB_ID,LSUBMODEL)
252 CALL HM_GET_FLOATV('cnode1_x
', X1, IS_AVAILABLE, LSUBMODEL, UNITAB)
253 CALL HM_GET_FLOATV('cnode1_y
', Y1, IS_AVAILABLE, LSUBMODEL, UNITAB)
254 CALL HM_GET_FLOATV('cnode1_z
', Z1, IS_AVAILABLE, LSUBMODEL, UNITAB)
255 IF(SUB_ID /= 0) CALL SUBROTPOINT(X1,Y1,Z1,RTRANS,SUB_ID,LSUBMODEL)
257 CALL HM_GET_FLOATV('cnode2_x
', X2, IS_AVAILABLE, LSUBMODEL, UNITAB)
258 CALL HM_GET_FLOATV('cnode2_y
', Y2, IS_AVAILABLE, LSUBMODEL, UNITAB)
259 CALL HM_GET_FLOATV('cnode2_z
', Z2, IS_AVAILABLE, LSUBMODEL, UNITAB)
260 IF(SUB_ID /= 0)CALL SUBROTPOINT(X2,Y2,Z2,RTRANS,SUB_ID,LSUBMODEL)
265 A = ((Y1-YM)*(Z2-ZM))-((Y2-YM)*(Z1-ZM))
266 B = ((X2-XM)*(Z1-ZM))-((X1-XM)*(Z2-ZM))
267 C = ((X1-XM)*(Y2-YM))-((X2-XM)*(Y1-YM))
273 ELSEIF (ISTYP == 2) THEN
274 CALL HM_GET_FLOATV('xtail
', XM, IS_AVAILABLE, LSUBMODEL, UNITAB)
275 CALL HM_GET_FLOATV('ytail', ym, is_available, lsubmodel, unitab)
276 CALL hm_get_floatv(
'ZTail', zm, is_available, lsubmodel, unitab)
277 IF(sub_id /= 0)
CALL subrotpoint(xm,ym,zm,rtrans,sub_id,lsubmodel)
279 CALL hm_get_floatv(
'Normal_x', a, is_available, lsubmodel, unitab)
280 CALL hm_get_floatv(
'Normal_y', b, is_available, lsubmodel, unitab)
281 CALL hm_get_floatv(
'Normal_z', c, is_available, lsubmodel, unitab)
282 IF(sub_id /= 0)
CALL subrotvect(a,b,c,rtrans,sub_id,lsubmodel)
284 CALL hm_get_floatv(
'Radius', r, is_available, lsubmodel, unitab)
297 IF(nstrf(k1-1+j)==ipari(15,l))
THEN
298 ipari(28,l) = ipari(28,l) + 1
309 IF (istyp >= 1 .OR. nfram > 0)
THEN
313 jj=(numskw+1)+
nsubmod+
min(iun,nspcond)*numsph+k+1
314 IF(nfram==iskn(4,jj))
THEN
322 IF (nstrf(k0+3) == 0 )
THEN
323 IF (iskn(1,jj) /= 0)
THEN
324 nstrf(k0+3) = itab(iskn(1,jj))
335 IF (nstrf(k0+4) == 0 )
THEN
336 IF (iskn(2,jj) /= 0)
THEN
337 nstrf(k0+4) = itab(iskn(2,jj))
348 IF (nstrf(k0+5) == 0 )
THEN
349 IF (iskn(3,jj) /= 0)
THEN
350 nstrf(k0+5) = itab(iskn(3,jj))
368 2 b,c,d,e,f,ixs,ixs10,ixs16,ixs20,
369 3 nixs,nnod,nstrf,nbinter,k1,
370 4 cpt,nodtag,isolnod,tagelems,
371 5 x1,y1,z1,x2,y2,z2,r)
378 IF (nfram == 0 .AND. istyp == 0)
THEN
379 nnod=nodgrnr5(igu,igs,nstrf(k2),igrnod,itabm1,mess)
383 nsegs=elegror(igus,igrbric,ngrbric,
'BRIC',nstrf(k3),2,mess,nfram,tagelems,istyp,id,titr)
404 nstrf(k0+13) = nsegtg
407 IF (nstrf(l)/=0)
THEN
408 nstrf(l)=usr2sys(nstrf(l),itabm1,mess,id)
409 CALL anodset(nstrf(l), check_used)
412 nnsk1=itab(nstrf(k0+3))
413 nnsk2=itab(nstrf(k0+4))
414 nnsk3=itab(nstrf(k0+5))
415 x1=x0(1,nstrf(k0+4))-x0(1,nstrf(k0+3))
416 y1=x0(2,nstrf(k0+4))-x0(2,nstrf(k0+3))
417 z1=x0(3,nstrf(k0+4))-x0(3,nstrf(k0+3))
418 x2=x0(1,nstrf(k0+5))-x0(1,nstrf(k0+4))
419 y2=x0(2,nstrf(k0+5))-x0(2,nstrf(k0+4))
420 z2=x0(3,nstrf(k0+5))-x0(3,nstrf(k0+4))
426 pnor1=sqrt(x1*x1+y1*y1+z1*z1)
427 IF (pnor1 < em20)
THEN
430 . anmode=aninfo_blind_1,
435 IF (pnor2 > em20)
THEN
436 pnorm1=one/(pnor1*pnor2)
437 det1=abs((y3*z1-z3*y1)*pnorm1)
438 det2=abs((z3*x1-x3*z1)*pnorm1)
439 det3=abs((x3*y1-y3*x1)*pnorm1)
440 det=
max(det1,det2,det3)
447 . anmode=aninfo_blind_1,
456 CALL secstri(nsegs,nstrf(k3),ixs,ixs10,ixs16,ixs20,nstrf(k2),nnod,noprint)
457 IF(nstrf(k0)>=102)
THEN
458 CALL zerore(1,10+30*nnod,secbuf(kr0))
459 ELSEIF(nstrf(k0)>=101)
THEN
460 CALL zerore(1,10+24*nnod,secbuf(kr0))
461 ELSEIF(nstrf(k0)>=100)
THEN
462 CALL zerore(1,10+12*nnod,secbuf(kr0))
464 CALL zerore(1,10,secbuf(kr0))
468 secbuf(kr0+2) = alpha
471 IF(nstrf(k0)==1.OR.nstrf(k0)==2)
THEN
472 IF(secbuf(1)==zero)
THEN
474 ELSEIF(abs((secbuf(1)-deltat)/secbuf(1)) > em06 )
THEN
477 . anmode=aninfo_blind_2,
483 IF(nstrf(k0)>=1.AND.nstrf(k0)<=10)
THEN
485 ELSEIF(nstrf(k0)>=100.AND.nstrf(k0)<=200)
THEN
488 nstrf(15+j)=nstrf(k0+14+j)
493 ELSEIF(nstrf(k0)==2)
THEN
498 nstrf(k0+24) = k9+2*nsegtg
499 nstrf(k0+25) = kr0+10
500 IF(nstrf(k0)>=100)nstrf(k0+25) = nstrf(k0+25)+12*nnod
501 IF(nstrf(k0)>=101)nstrf(k0+25) = nstrf(k0+25)+12*nnod
502 IF(nstrf(k0)>=102)nstrf(k0+25) = nstrf(k0+25)+6*nnod
510 CALL udouble(sectids,1,nsect,mess,0,bid)
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)