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,I,J,STAT
68 INTEGER :: IFLAGUNIT, UID
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
76 fac_l = one
77
78
79
80 ALLOCATE (itab(numnusr+numcnod),stat=stat)
81 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'ITAB')
82 ALLOCATE (x(3,numnusr+numcnod),stat=stat)
83 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'X')
84 ALLOCATE (sub_nod(numnusr+numcnod),stat=stat)
85 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'SUB_NOD')
86 ALLOCATE (uid_nod(numnusr+numcnod),stat=stat)
87 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'UID_NOD')
88 ALLOCATE (hm_x(3,numnusr+numcnod),stat=stat)
89 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'HM_X')
90 ALLOCATE (dmerge(numcnod),stat=stat)
91 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'DMERGE')
92 sub_nod(1:numnusr+numcnod) = 0
93 uid_nod(1:numnusr+numcnod) = 0
94 dmerge(1:numcnod) = zero
95
96
97
98 CALL cpp_nodes_read(itab,hm_x,dmerge,sub_nod,uid_nod)
99
100
101
102 uid = -1
103 n=0
104 DO i=1,numnusr+numcnod
105 n=n+1
106 x(1,n) = hm_x(1,n)
107 x(2,n) = hm_x(2,n)
108 x(3,n) = hm_x(3,n)
109
110 IF(sub_nod(n) /= 0)THEN
111 IF(uid_nod(n) == 0 .AND. lsubmodel(sub_nod(n))%UID /= 0) uid_nod(n) = lsubmodel(sub_nod(n))%UID
112 ENDIF
113 IF ( itab(n) > id_limit%GLOBAL )THEN
114 CALL ancmsg(msgid=509,anmode=aninfo,msgtype=msgerror,i1=itab(n),c1=line,c2=
'/NODE')
115 ENDIF
116
117
118
119 IF(uid_nod(n) /= uid )THEN
120 uid = uid_nod(n)
121 iflagunit = 0
122 DO j=1,unitab%NUNITS
123 IF (unitab%UNIT_ID(j) == uid) THEN
124 fac_l = unitab%FAC_L(j)
125 iflagunit = 1
126 EXIT
127 ENDIF
128 ENDDO
129 IF (uid/=0 .AND. iflagunit==0 .AND. i <= numnusr)THEN
130 CALL ancmsg(msgid=643,anmode=aninfo,msgtype=msgerror,i1=uid,c1=
'/NODE')
131 ELSEIF (uid/=0 .AND. iflagunit==0 .AND. i > numnusr)THEN
132 CALL ancmsg(msgid=643,anmode=aninfo,msgtype=msgerror,i1=uid,c1=
'/CNODE')
133 ENDIF
134 ENDIF
135 x(1,n) = x(1,n)*fac_l
136 x(2,n) = x(2,n)*fac_l
137 x(3,n) = x(3,n)*fac_l
138 ENDDO
139 IF(ALLOCATED(sub_nod)) DEALLOCATE(sub_nod)
140 IF(ALLOCATED(uid_nod)) DEALLOCATE(uid_nod)
141 IF(ALLOCATED(hm_x)) DEALLOCATE(hm_x)
142 IF(ALLOCATED(dmerge)) DEALLOCATE(dmerge)
143
144
145
147
148 DEALLOCATE(itab,x)
149 RETURN
150
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)