47
48
49
55 use element_mod , only : nixs,nixc,nixtg
56
57
58
59#include "implicit_f.inc"
60
61
62
63#include "param_c.inc"
64#include "scr03_c.inc"
65#include "scr17_c.inc"
66#include "com04_c.inc"
67#include "r2r_c.inc"
68
69
70
71#include "units_c.inc"
72
73
74
75 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
76 INTEGER ITABM1(*),IPART(LIPART1,*),IPARTC(*),IPARTG(*),IPARTS(*),
77 . IXC(NIXC,*),IXTG(NIXTG,*),IXS(NIXS,*),TAGXREF(NUMNOD)
78 INTEGER IDDLEVEL
80 . x(3,*),xrefc(4,3,*),xreftg(3,3,*),xrefs(8,3,*),
81 . rtrans(ntransf,*)
82 TYPE(SUBMODEL_DATA) LSUBMODEL(*)
83
84 INTEGER,INTENT(IN)::IGEO(NPROPGI,*)
85 INTEGER,INTENT(IN)::IPM(NPROPMI,*)
86 INTEGER,INTENT(IN)::ISOLNOD(*)
87
88
89
90 INTEGER :: IFLAGUNIT
91 INTEGER, DIMENSION(:), ALLOCATABLE :: ID
92 INTEGER I,J,IE,IN,IP,IR,NN,NITER,PARTID,UID,ITYP,ICOMPA
93 INTEGER SUB_ID,NNOD,SUB_INDEX,IMID, MAT_ID,MTN,NSOLID,NPT,ISMSTR
94 my_real,
dimension(:,:),
allocatable :: xtmp
95 my_real,
DIMENSION(:),
ALLOCATABLE ::
96 . xx,yy,zz
97 CHARACTER MESS*40
98 CHARACTER(LEN=NCHARTITLE) :: TITR,TITR1
99 DATA mess/'XREF'/
100 LOGICAL :: IS_AVAILABLE
101 integer, dimension(:), allocatable :: TAGELC,TAGELTG,TAGELS,TAGNOD
102
103
104
105 INTEGER USR2SYS,R2R_SYS
106
107 is_available = .false.
108 ALLOCATE(tagelc(numelc),tageltg(numeltg),tagels(numels),
tagnod(numnod))
109 ALLOCATE(xtmp(3,numnod))
110
111
112 DO ie=1,numelc
113 DO in = 1,4
114 nn = ixc(in+1,ie)
115 DO j = 1,3
116 xrefc(in,j,ie) = x(j,nn)
117 ENDDO
118 ENDDO
119 ENDDO
120 DO ie=1,numeltg
121 DO in = 1,3
122 nn = ixtg(in+1,ie)
123 DO j = 1,3
124 xreftg(in,j,ie) = x(j,nn)
125 ENDDO
126 ENDDO
127 ENDDO
128 DO ie=1,numels8
129 DO in = 1,8
130 nn = ixs(in+1,ie)
131 DO j = 1,3
132 xrefs(in,j,ie) = x(j,nn)
133 ENDDO
134 ENDDO
135 ENDDO
136
137 IF(iddlevel == 0) WRITE(iout,1000)
138 nitrs = 100
139
140
141
142
144
145
146
147
148
149
150
151
152
153 DO ir = 1, nxref
154
155
156 titr = ''
158 . unit_id = uid,
159 . submodel_index = sub_index,
160 . submodel_id = sub_id,
161 . option_titr = titr)
162
163 CALL hm_get_intv(
'Comp_Id',partid,is_available,lsubmodel)
164
165
166 iflagunit = 0
167 DO j=1,unitab%NUNITS
168 IF (unitab%UNIT_ID(j) == uid) THEN
169 iflagunit = 1
170 EXIT
171 ENDIF
172 ENDDO
173 IF (uid/=0.AND.iflagunit==0) THEN
174 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
175 . i2=uid,i1=partid,c1='XREF',
176 . c2='XREF',
177 . c3=titr)
178 ENDIF
179
180 ip = 0
181 DO i = 1,npart
182 IF (ipart(4,i) == partid) THEN
183 ip = i
184 EXIT
185 ENDIF
186 ENDDO
187
188 IF (ip /= 0) THEN
190 tagelc = 0
191 tageltg= 0
192 tagels = 0
193 ityp = 0
194 xtmp = zero
195 DO ie=1,numelc
196 IF (ip == ipartc(ie)) THEN
197 tagelc(ie) = 1
198 ityp = 1
199 ENDIF
200 ENDDO
201 DO ie=1,numeltg
202 IF (ip == ipartg(ie)) THEN
203 tageltg(ie) = 1
204 ityp = 1
205 ENDIF
206 ENDDO
207 nsolid = 0
208 IF (ityp == 0) THEN
209 DO ie=1,numels8
210 IF (ip == iparts(ie)) THEN
211 tagels(ie) = 1
212 ityp = 2
213 nsolid = isolnod(ie)
214 ENDIF
215 ENDDO
216 ENDIF
217 IF(ityp == 2 ) THEN
218 imid = ipart(1,ip)
219 ipid = ipart(2,ip)
220 mat_id = ipm(1,imid)
221 mtn = ipm(2, imid)
222 IF(mtn /= 35 .AND.mtn /= 38 .AND. mtn /= 42 .AND.
223 . mtn /= 70 .AND. mtn /= 90 .AND. mtn /= 1)THEN
224 CALL fretitl2(titr1,ipm(npropmi-ltitr+1,imid),ltitr)
225 CALL ancmsg(msgid=2014, msgtype=msgerror, anmode=anstop, i1=mat_id, c1=titr1, i2=mtn )
226 END IF
227 npt = igeo(4,ipid)
228 ismstr = igeo(5,ipid)
229 icompa = 0
230 IF (npt==1) icompa = 1
231 IF (ismstr>=10.OR.ismstr<0) icompa = 1
232 IF( ((nsolid /= 8 .AND.nsolid /= 4) .OR. icompa == 0 )) THEN
233 CALL fretitl2(titr1,igeo(npropgi-ltitr+1,ipid),ltitr)
235 . msgtype=msgerror,
236 . anmode=aninfo,
237 . i1=igeo(1,ipid),
238 . c1=titr1)
239 ENDIF
240 ENDIF
241
242
243 CALL hm_get_intv(
'NITRS',niter,is_available,lsubmodel)
244 nitrs =
max(nitrs,niter)
245
246 IF(iddlevel == 0) THEN
247 WRITE(iout,1001) titr,nitrs,partid
248 IF(ipri >= 5) WRITE(iout,'(8X,A7,3(18X,A2))') 'NODE-ID',' X',' Y',' Z'
249 ENDIF
250
251
252 CALL hm_get_intv(
'refnodesmax',nnod,is_available,lsubmodel)
253 IF (
ALLOCATED(
id))
DEALLOCATE(
id)
254 IF (ALLOCATED(xx)) DEALLOCATE(xx)
255 IF (ALLOCATED(yy)) DEALLOCATE(yy)
256 IF (ALLOCATED(zz)) DEALLOCATE(zz)
257 ALLOCATE(xx(nnod),yy(nnod),zz(nnod),
id(nnod))
258
259
260 DO j = 1,nnod
261
266
267 IF(sub_id /= 0)
268 .
CALL subrotpoint(xx(j),yy(j),zz(j),rtrans,sub_id,lsubmodel)
269 IF (nsubdom>0) THEN
271 ELSE
273 ENDIF
274 IF(iddlevel == 0.AND.ipri >= 5)
WRITE(iout,
'(5X,I10,5X,1P3G20.13)')
id(j),xx(j),yy(j),zz(j)
276 tagxref(nn)= 1
277 xtmp(1,nn) = xx(j)
278 xtmp(2,nn) = yy(j)
279 xtmp(3,nn) = zz(j)
280 ENDDO
281 IF(iddlevel == 0.AND.ipri < 5) WRITE(iout,1010) nnod
282
283 SELECT CASE (ityp)
284 CASE (1)
285 DO ie=1,numelc
286 IF (tagelc(ie) == 1) THEN
287 DO in=1,4
288 nn = ixc(in+1,ie)
290 xrefc(in,1,ie) = xtmp(1,nn)
291 xrefc(in,2,ie) = xtmp(2,nn)
292 xrefc(in,3,ie) = xtmp(3,nn)
293 ENDIF
294 ENDDO
295 ENDIF
296 ENDDO
297 DO ie=1,numeltg
298 IF (tageltg(ie) == 1) THEN
299 DO in=1,3
300 nn = ixtg(in+1,ie)
302 xreftg(in,1,ie) = xtmp(1,nn)
303 xreftg(in,2,ie) = xtmp(2,nn)
304 xreftg(in,3,ie) = xtmp(3,nn)
305 ENDIF
306 ENDDO
307 ENDIF
308 ENDDO
309 CASE (2)
310 DO ie=1,numels8
311 IF (tagels(ie) == 1) THEN
312 DO in=1,8
313 nn = ixs(in+1,ie)
315 xrefs(in,1,ie) = xtmp(1,nn)
316 xrefs(in,2,ie) = xtmp(2,nn)
317 xrefs(in,3,ie) = xtmp(3,nn)
318 ENDIF
319 ENDDO
320 ENDIF
321 ENDDO
322 END SELECT
323 ENDIF
324 END DO
325
326
327 IF (
ALLOCATED(
id))
DEALLOCATE(
id)
328 IF (ALLOCATED(xx)) DEALLOCATE(xx)
329 IF (ALLOCATED(yy)) DEALLOCATE(yy)
330 IF (ALLOCATED(zz)) DEALLOCATE(zz)
331
332 DEALLOCATE(tagelc,tageltg,tagels,
tagnod)
333 DEALLOCATE(xtmp)
334
335 RETURN
336 1000 FORMAT(//
337 & 5x,' REFERENCE STATE (XREF) ',/
338 & 5x,' ---------------------- ' )
339 1001 FORMAT(/
340 & 5x, a ,/
341 & 5x,'NUMBER OF ITERATIONS. . . . . . =',i10/
342 & 5x,'PART ID . . . . . . . . . . . . =',i10)
343 1010 FORMAT(
344 & 5x,'NUMBER OF NODES . . . . . . . . =',i10)
subroutine hm_get_float_array_index(name, rval, index, is_available, lsubmodel, unitab)
subroutine hm_get_int_array_index(name, ival, index, is_available, lsubmodel)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_start(entity_type)
integer, parameter nchartitle
integer function r2r_sys(iu, itabm1, mess)
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)
integer function usr2sys(iu, itabm1, mess, id)
subroutine subrotpoint(x, y, z, rtrans, sub_id, lsubmodel)
subroutine tagnod(ix, nix, nix1, nix2, numel, iparte, tagbuf, npart)