40
41
42
49
50
51
52#include "implicit_f.inc"
53
54
55
56#include "units_c.inc"
57#include "com04_c.inc"
58
59
60
61 INTEGER MERGE_NODE_TAB(4,*),NMERGE_NODE_CAND,NMERGE_NODE_DEST
63 . x(3,*),merge_node_tol(*)
64 TYPE(UNIT_TYPE_),INTENT(IN) ::UNITAB
65 TYPE(SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
66 TYPE (GROUP_) ,TARGET, DIMENSION(NGRNOD) :: IGRNOD
67
68
69
70 INTEGER :: I,J,ID,UID,GR_ID,GR_IDS,MERGE_TYPE,FLAG_FULL_MERGE
71 CHARACTER(LEN=NCHARTITLE) :: TITR
72 INTEGER, DIMENSION(:),ALLOCATABLE :: TAGNOD1,TAGNOD2,TAGNOD_TEMP
73 LOGICAL :: IS_AVAILABLE
74 my_real :: tol,xn,xmin,xmax,ymin,
ymax,zmin,zmax,dx,dy,dz,tol_def
75
76
77 WRITE(iout,1000)
78
79 tol_def = zero
80 flag_full_merge = 0
81 ALLOCATE(tagnod1(numnod),tagnod2(numnod),tagnod_temp(numnod))
82 tagnod1(1:numnod) = 0
83 tagnod2(1:numnod) = 0
84
85
86
87
88 is_available = .false.
90
91 DO i=1,nb_merge_node
92
93
94
97 . unit_id = uid,
98 . option_titr = titr)
99
100
101
102 CALL hm_get_floatv(
'tol' ,tol ,is_available, lsubmodel, unitab)
103 CALL hm_get_intv (
'Type' ,merge_type ,is_available, lsubmodel)
104 CALL hm_get_intv (
'grnod_id' ,gr_id ,is_available, lsubmodel)
105
106 gr_ids = 0
107 IF (gr_id > 0) THEN
108
109 DO j=1,ngrnod
110 IF (igrnod(j)%ID == gr_id) gr_ids = j
111 ENDDO
112 IF (gr_ids == 0) THEN
114 . msgtype=msgerror,
115 . anmode=aninfo,
116 . c1='IN /MERGE/NODE DEFINITION',
117 . i1=gr_id)
118 ENDIF
119 ENDIF
120
121 IF ((tol_def == zero).AND.(tol == zero)) THEN
122
123 xn=numnod
124 xmin = ep20
125 xmax = -ep20
126 ymin = ep20
128 zmin = ep20
129 zmax = -ep20
130 DO j = 1,numnod
131 xmin =
min(xmin,x(1,j))
132 xmax =
max(xmax,x(1,j))
133 ymin =
min(ymin,x(2,j))
135 zmin =
min(zmin,x(3,j))
136 zmax =
max(zmax,x(3,j))
137 END DO
138 dx = xmax-xmin
140 dz = zmax-zmin
141 tol_def = em05*(dx+dy+dz)/(three*exp(third*log(xn)))
142 ENDIF
143
144 IF (gr_ids > 0) THEN
145
146 IF (merge_type == 0) merge_type = 1
147 IF (merge_type == 1) THEN
148
149 DO j=1,igrnod(gr_ids)%NENTITY
150 tagnod1(igrnod(gr_ids)%ENTITY(j)) = 1
151 tagnod2(igrnod(gr_ids)%ENTITY(j)) = 1
152 ENDDO
153 ELSEIF (merge_type == 2) THEN
154
155 tagnod_temp(1:numnod) = 0
156 DO j=1,igrnod(gr_ids)%NENTITY
157 tagnod1(igrnod(gr_ids)%ENTITY(j)) = 1
158 tagnod_temp(igrnod(gr_ids)%ENTITY(j)) = 1
159 ENDDO
160 DO j=1,numnod
161 IF (tagnod_temp(j)==0) tagnod2(j) = 1
162 ENDDO
163 ENDIF
164 ELSE
165
166 IF (flag_full_merge == 0) THEN
168 ELSE
170 . msgtype=msgerror,
171 . anmode=aninfo_blind_1,
172 . i1=
id,i2=flag_full_merge)
173 ENDIF
174 gr_ids=0
175 tagnod1(1:numnod) = 1
176 tagnod2(1:numnod) = 1
177 merge_type = 1
178 ENDIF
179
180 IF (tol == zero) tol = tol_def
181 nmerge_node_cand = 0
182 nmerge_node_dest = 0
183 DO j=1,numnod
184 IF (tagnod1(j) == 1) nmerge_node_cand = nmerge_node_cand + 1
185 IF (tagnod2(j) == 1) nmerge_node_dest = nmerge_node_dest + 1
186 ENDDO
187 merge_node_tab(1,i) = merge_type
188 merge_node_tab(2,i) = gr_ids
189 merge_node_tab(3,i) = gr_id
190 merge_node_tab(4,i) =
id
191 merge_node_tol(i) = tol
192
193 WRITE(iout,1100)
id,trim(titr),tol,merge_type,gr_id
194
195 ENDDO
196
197 DEALLOCATE(tagnod1,tagnod2,tagnod_temp)
198
199
200 RETURN
201
2021000 FORMAT(/
203 . ' MERGE/NODE DEFINITIONS '/
204 . ' ---------------------- ')
2051100 FORMAT(/5x,'MERGE NODE ID ',i10,1x,a
206 . /5x,'TOLERANCE. . . . . . . . . . . . . . . . .',1pg20.4
207 . /5x,'MERGING TYPE. . . . . . . . . . . . . . . ',i10
208 . /5x,'GROUP OF NODES. . . . . . . . . . . . . . ',i10)
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_start(entity_type)
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
integer, parameter nchartitle
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)