38
39
40
46 USE reader_old_mod , ONLY : line
47 USE user_id_mod , ONLY : id_limit
48
49
50
51#include "implicit_f.inc"
52
53
54
55#include "com04_c.inc"
56#include "scr17_c.inc"
57
58
59
60 TYPE (UNIT_TYPE_),INTENT(IN) :: UNITAB
61 TYPE(SUBMODEL_DATA),INTENT(IN):: LSUBMODEL(NSUBMOD)
62 INTEGER,INTENT(IN) :: NUMNUSR
63 INTEGER,INTENT(IN) :: IS_DYNA
64
65
66
67 INTEGER N,,J,IERROR, STAT
68 INTEGER FLAG_FMT,FLAG_FMT_TMP,IFIX_TMP,IFLAGUNIT, UID, ID
70 INTEGER, DIMENSION(:), ALLOCATABLE :: SUB_NOD,UID_NOD
71 INTEGER, DIMENSION(:), ALLOCATABLE :: ITAB
72 my_real,
DIMENSION(:,:),
ALLOCATABLE :: x
73 real*8, DIMENSION(:,:), ALLOCATABLE :: hm_x
74 real*8, DIMENSION(:), ALLOCATABLE :: dmerge
75 CHARACTER(LEN=NCHARFIELD) :: KEY
76 LOGICAL IS_AVAILABLE
77
78 fac_l = one
79
80
81
82 ALLOCATE (itab(numnusr+numcnod),stat=stat)
83 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'ITAB')
84 ALLOCATE (x(3,numnusr+numcnod
85 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'X')
86 ALLOCATE (sub_nod(numnusr+numcnod),stat=stat)
87 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'SUB_NOD')
88 ALLOCATE (uid_nod(numnusr+numcnod),stat=stat)
89 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'UID_NOD')
90 ALLOCATE (hm_x(3,numnusr+numcnod),stat=stat)
91 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'HM_X')
92 ALLOCATE (dmerge(numcnod),stat=stat)
93 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'DMERGE')
94 sub_nod(1:numnusr+numcnod) = 0
95 uid_nod(1:numnusr+numcnod) = 0
96 dmerge(1:numcnod) = zero
97
98
99
100 CALL cpp_nodes_read(itab,hm_x,dmerge,sub_nod,uid_nod)
101
102
103
104 uid = -1
105 n=0
106 DO i=1,numnusr+numcnod
107 n=n+1
108 x(1,n) = hm_x(1,n)
109 x(2,n) = hm_x(2,n)
110 x(3,n) = hm_x(3,n)
111
112 IF(sub_nod(n) /= 0)THEN
113 IF(uid_nod(n) == 0 .AND. lsubmodel(sub_nod(n))%UID /= 0) uid_nod(n) = lsubmodel(sub_nod(n))%UID
114 ENDIF
115 IF ( itab(n) > id_limit%GLOBAL )THEN
116 CALL ancmsg(msgid=509,anmode=aninfo,msgtype=msgerror,i1=itab(n),c1=line,c2=
'/NODE')
117 ENDIF
118
119
120
121 IF(uid_nod(n) /= uid )THEN
122 uid = uid_nod(n)
123 iflagunit = 0
124 DO j=1,unitab%NUNITS
125 IF (unitab%UNIT_ID(j) == uid) THEN
126 fac_l = unitab%FAC_L(j)
127 iflagunit = 1
128 EXIT
129 ENDIF
130 ENDDO
131 IF (uid/=0 .AND. iflagunit==0 .AND. i <= numnusr)THEN
132 CALL ancmsg(msgid=643,anmode=aninfo,msgtype=msgerror,i1=uid,c1=
'/NODE')
133 ELSEIF (uid/=0 .AND. iflagunit==0 .AND. i > numnusr)THEN
134 CALL ancmsg(msgid=643,anmode=aninfo,msgtype=msgerror,i1=uid,c1=
'/CNODE')
135 ENDIF
136 ENDIF
137 x(1,n) = x(1,n)*fac_l
138 x(2,n) = x(2,n)*fac_l
139 x(3,n) = x(3,n)*fac_l
140 ENDDO
141 IF(ALLOCATED(sub_nod)) DEALLOCATE(sub_nod)
142 IF(ALLOCATED(uid_nod)) DEALLOCATE(uid_nod)
143 IF(ALLOCATED(hm_x)) DEALLOCATE(hm_x)
144 IF(ALLOCATED(dmerge)) DEALLOCATE(dmerge)
145
146
147
149
150 DEALLOCATE(itab,x)
151 RETURN
152
subroutine auto_node_merge(is_dyna, numnusr, numcnod, numnod, itab, x)
integer, parameter ncharfield
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)