OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_rwall_spher.F File Reference
#include "implicit_f.inc"
#include "analyse_name.inc"
#include "com04_c.inc"
#include "units_c.inc"
#include "scr03_c.inc"
#include "scr17_c.inc"
#include "param_c.inc"
#include "tabsiz_c.inc"
#include "r2r_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine hm_read_rwall_spher (rwl, nprw, lprw, ifi, ms, v, itab, itabm1, x, ikine, igrnod, mfi, imerge, unitab, iddlevel, lsubmodel, rtrans, nom_opt, itagnd, nchspher, k, offs, ikine1)

Function/Subroutine Documentation

◆ hm_read_rwall_spher()

subroutine hm_read_rwall_spher ( rwl,
integer, dimension(*) nprw,
integer, dimension(*) lprw,
integer ifi,
ms,
v,
integer, dimension(*) itab,
integer, dimension(*) itabm1,
x,
integer, dimension(*) ikine,
type (group_), dimension(ngrnod), target igrnod,
integer mfi,
integer, dimension(*) imerge,
type (unit_type_), intent(in) unitab,
integer iddlevel,
type(submodel_data), dimension(nsubmod) lsubmodel,
rtrans,
integer, dimension(lnopt1,*) nom_opt,
integer, dimension(*) itagnd,
integer nchspher,
integer k,
integer offs,
integer, dimension(3*numnod) ikine1 )

Definition at line 47 of file hm_read_rwall_spher.F.

52C-------------------------------------
53C LECTURE MUR RIGIDE
54C-----------------------------------------------
55C M o d u l e s
56C-----------------------------------------------
57 USE unitab_mod
59 USE message_mod
60 USE r2r_mod
61 USE groupdef_mod
64C-----------------------------------------------
65C I m p l i c i t T y p e s
66C-----------------------------------------------
67#include "implicit_f.inc"
68C-----------------------------------------------
69C A n a l y s e M o d u l e
70C-----------------------------------------------
71#include "analyse_name.inc"
72C-----------------------------------------------
73C C o m m o n B l o c k s
74C-----------------------------------------------
75#include "com04_c.inc"
76#include "units_c.inc"
77#include "scr03_c.inc"
78#include "scr17_c.inc"
79#include "param_c.inc"
80#include "tabsiz_c.inc"
81#include "r2r_c.inc"
82C-----------------------------------------------
83C D u m m y A r g u m e n t s
84C-----------------------------------------------
85 TYPE (UNIT_TYPE_),INTENT(IN) :: UNITAB
86 INTEGER :: IFI,MFI,IDDLEVEL,NCHSPHER,K,OFFS
87 INTEGER :: NPRW(*), LPRW(*), ITAB(*), ITABM1(*), IKINE(*), IMERGE(*),ITAGND(*),IKINE1(3*NUMNOD)
88 TYPE(SUBMODEL_DATA) :: LSUBMODEL(NSUBMOD)
89 my_real :: rwl(nrwlp,*), ms(*), v(3,*), x(3,*), rtrans(ntransf,*)
90 INTEGER NOM_OPT(LNOPT1,*)
91C-----------------------------------------------
92 TYPE (GROUP_) ,TARGET, DIMENSION(NGRNOD) :: IGRNOD
93C-----------------------------------------------
94C L o c a l V a r i a b l e s
95C-----------------------------------------------
96 INTEGER :: N, ITYP, ITIED, NSL, NUSER, MSR, J, I,L, IGU,IGU2, IGRS, NOSYS, IFQ, JC,UID,IFLAGUNIT,SUB_ID, SUB_INDEX
97 my_real :: dist, fric, diam, xmas, vx, vy, vz, x1, disn, x2, y2, z2, x3, freq, alpha, fac_m_r2r
98 CHARACTER MESS*40
99 CHARACTER(LEN=NCHARTITLE) :: TITR
100 LOGICAL :: IS_AVAILABLE
101C-----------------------------------------------
102C E x t e r n a l F u n c t i o n s
103C-----------------------------------------------
104 INTEGER USR2SYS, NGR2USR
105 INTEGER, DIMENSION(:), POINTER :: INGR2USR
106 DATA mess/'STANDARD RIGID WALL DEFINITION '/
107C=======================================================================
108C
109C-----------------------------------------------
110! ******************************** !
111! RWALL/SPHER read with hm reader !
112! ******************************** !
113C-----------------------------------------------
114 is_available = .false.
115 CALL hm_option_start('/RWALL/SPHER')
116 ! Flag for RWALL type SPHER
117 ityp = 3
118C
119 !----------------------------------------------------------------------
120 ! Loop over NCHSPHER
121 !----------------------------------------------------------------------
122 DO n = 1+offs, nchspher+offs
123C
124 ! Reading the option
125 ! /RWALL/SPHER/rwall_ID/node_ID
126 ! rwall_title
127 titr = ''
128 CALL hm_option_read_key(lsubmodel,
129 . option_id = nuser,
130 . unit_id = uid,
131 . submodel_index = sub_index,
132 . submodel_id = sub_id,
133 . option_titr = titr)
134C
135 nom_opt(1,n)=nuser
136 CALL fretitl(titr,nom_opt(lnopt1-ltitr+1,n),ltitr)
137C
138 ! Checking flag unit
139 iflagunit = 0
140 DO j=1,unitab%NUNITS
141 IF (unitab%UNIT_ID(j) == uid) THEN
142 iflagunit = 1
143 EXIT
144 ENDIF
145 ENDDO
146 IF (uid /= 0 .AND. iflagunit == 0) THEN
147 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
148 . i2=uid,i1=nuser,c1='RIGID WALL',
149 . c2='RIGID WALL',
150 . c3=titr)
151 ENDIF
152C
153 ! node_ID Slide grnd_ID1 grnd_ID2
154 CALL hm_get_intv('Node1',nuser,is_available,lsubmodel)
155 CALL hm_get_intv('slidingflag',itied,is_available,lsubmodel)
156 CALL hm_get_intv('NodeSet_ID',igu,is_available,lsubmodel)
157 CALL hm_get_intv('excludeNodeSet_ID',igu2,is_available,lsubmodel)
158C
159 IF(nuser /= 0) THEN
160 msr = usr2sys(nuser,itabm1,mess,nuser)
161 CALL anodset(msr, check_used)
162 DO jc = 1,nmerged
163 IF (msr == imerge(jc)) msr = imerge(numcnod+jc)
164 ENDDO
165 ELSE
166 msr = 0
167 ENDIF
168C
169 ! 2nd card
170 ! d fric Diameter ffac ifq
171 CALL hm_get_floatv('offset' ,dist ,is_available, lsubmodel, unitab)
172 CALL hm_get_floatv('fric' ,fric ,is_available, lsubmodel, unitab)
173 CALL hm_get_floatv('Diameter' ,diam ,is_available, lsubmodel, unitab)
174 CALL hm_get_floatv('Filteringfactor',freq ,is_available, lsubmodel, unitab)
175 CALL hm_get_intv('Filteringflag' ,ifq ,is_available, lsubmodel)
176 IF (freq == 0 .AND. ifq /= 0) ifq = 0
177 IF (ifq == 0) freq = one
178 alpha = zero
179 IF (ifq >= 0) THEN
180 IF (ifq <= 1) alpha = freq
181 IF (ifq == 2) alpha = four*atan2(one,zero) / freq
182 IF (ifq == 3) alpha = four*atan2(one,zero) * freq
183 ENDIF
184 IF ((alpha < zero) .OR. ((alpha > one .AND. ifq <= 2))) THEN
185 CALL ancmsg(msgid=350,anmode=aninfo,msgtype=msgerror,
186 . i1=nuser,
187 . c1=titr,
188 . r1=freq)
189 ENDIF
190 rwl(13,n) = fric
191 rwl(14,n) = alpha
192 rwl(15,n) = ifq
193C
194 ! 3rd card
195 ! if node_ID == 0
196 IF (msr == 0) THEN
197 ! XM YM ZM
198 CALL hm_get_floatv('x' ,x1 ,is_available, lsubmodel, unitab)
199 CALL hm_get_floatv('y' ,x2 ,is_available, lsubmodel, unitab)
200 CALL hm_get_floatv('z' ,x3 ,is_available, lsubmodel, unitab)
201 IF(sub_id /= 0) CALL subrotpoint(x1,x2,x3,rtrans,sub_id,lsubmodel)
202 rwl(4,n) = x1
203 rwl(5,n) = x2
204 rwl(6,n) = x3
205 ! if node_ID > 0
206 ELSE IF (msr /= 0)THEN
207 ! Mass VX0 VY0 VZ0
208 CALL hm_get_floatv('Mass' ,xmas ,is_available, lsubmodel, unitab)
209 CALL hm_get_floatv('motionx' ,vx ,is_available, lsubmodel, unitab)
210 CALL hm_get_floatv('motiony' ,vy ,is_available, lsubmodel, unitab)
211 CALL hm_get_floatv('motionz' ,vz ,is_available, lsubmodel, unitab)
212 ! Multidomains : masse of the rwall splitted between 2 domains
213 fac_m_r2r = one
214 IF (nsubdom > 0) THEN
215 IF(tagno(npart+msr) == 4) fac_m_r2r = half
216 ENDIF
217 IF(sub_id /= 0) CALL subrotvect(vx,vy,vz,rtrans,sub_id,lsubmodel)
218 rwl(4,n) = x(1,msr)
219 rwl(5,n) = x(2,msr)
220 rwl(6,n) = x(3,msr)
221 ms(msr) = ms(msr) + xmas*fac_m_r2r
222 v(1,msr) = vx
223 v(2,msr) = vy
224 v(3,msr) = vz
225 ENDIF
226C
227 ! Initialization depending on the type of interface
228 rwl(7,n) = diam
229C
230 ! Looking for SECONDARY nodes
231 DO i = 1,numnod
232 lprw(k+i) = 0
233 ENDDO
234C
235 ! SECONDARY nodes at DIST from the RWALL
236 IF (dist /= zero) THEN
237 DO i = 1,numnod
238 x2 = (x(1,i)-rwl(4,n))**2
239 y2 = (x(2,i)-rwl(5,n))**2
240 z2 = (x(3,i)-rwl(6,n))**2
241 disn = sqrt(x2+y2+z2)- half*diam
242 IF (disn >= zero .AND. disn <= dist .AND. i /= msr) lprw(k+i)=1
243 ENDDO
244 ENDIF
245C
246 ! Node group +
247 ingr2usr => igrnod(1:ngrnod)%ID
248 igrs = ngr2usr(igu,ingr2usr,ngrnod)
249 IF (igrs /= 0) THEN
250 DO j = 1,igrnod(igrs)%NENTITY
251 nosys = igrnod(igrs)%ENTITY(j)
252 lprw(k+nosys) = 1
253 IF (itab(nosys) == nuser) THEN
254 CALL ancmsg(msgid=637,
255 . msgtype=msgerror,
256 . anmode=aninfo_blind_1,
257 . i1=nuser,
258 . c1=titr,
259 . i2=nuser)
260 ENDIF
261 ENDDO
262 ENDIF
263C
264 ! Node group -
265 ingr2usr => igrnod(1:ngrnod)%ID
266 igrs = ngr2usr(igu2,ingr2usr,ngrnod)
267 IF (igrs /= 0) THEN
268 DO j = 1,igrnod(igrs)%NENTITY
269 nosys = igrnod(igrs)%ENTITY(j)
270 lprw(k+nosys) = 0
271 ENDDO
272 ENDIF
273C
274 ! compaction
275 nsl = 0
276 DO i = 1,numnod
277 IF (lprw(k+i) > 0) THEN
278 IF (ns10e > 0) THEN
279 IF( itagnd(i) /= 0) cycle
280 ENDIF
281 nsl = nsl+1
282 lprw(k+nsl) = i
283 IF (iddlevel == 0) THEN
284 CALL kinset(4,itab(i),ikine(i),1,n+numskw+1,ikine1(i))
285 ENDIF
286 ENDIF
287 ENDDO
288 ! Itet=2 of S10
289 IF (ns10e > 0 ) CALL remove_nd(nsl,lprw(k+1),itagnd)
290 ifi=ifi+nsl
291 IF (ifq > 0) THEN
292 mfi=mfi+3*nsl
293 srwsav = srwsav + 3 * nsl
294 ENDIF
295C
296 ! Printing
297 IF (msr == 0) THEN
298 WRITE(iout,1100) n,ityp,itied,nsl
299 ELSE
300 WRITE(iout,1150) n,ityp,itied,nsl,nuser,xmas,vx,vy,vz
301 ENDIF
302C
303 WRITE(iout,2003)(rwl(l,n),l=4,6),rwl(7,n)
304C
305 IF (itied == 2) WRITE(iout,2101)fric,ifq,freq
306 IF (ipri >= 1) THEN
307 WRITE(iout,1200)
308 WRITE(iout,1201) (itab(lprw(i+k)),i=1,nsl)
309 ENDIF
310C
311 nprw(n) = nsl
312 nprw(n+nrwall) = itied
313 nprw(n+2*nrwall) = msr
314 nprw(n+3*nrwall) = ityp
315 nprw(n+4*nrwall) = 0
316 nprw(n+5*nrwall) = 0
317 k = k+nsl
318C
319 ENDDO
320C
321 ! Updating the OFFSET
322 offs = offs + nchspher
323C------------------------------------------
324 RETURN
325C
326 1100 FORMAT(/5x,'RIGID WALL NUMBER. . . . .',i10
327 . /10x,'RIGID WALL TYPE . . . . .',i10
328 . /10x,'TYPE SLIDE/TIED/FRICTION.',i10
329 . /10x,'NUMBER OF NODES . . . . .',i10)
330 1150 FORMAT(/5x,'RIGID WALL NUMBER. . . . .',i10
331 . /10x,'RIGID WALL TYPE . . . . .',i10
332 . /10x,'TYPE SLIDE/TIED/FRICTION.',i10
333 . /10x,'NUMBER OF NODES . . . . .',i10
334 . /10x,'WALL NODE NUMBER. . . . .',i10
335 . /10x,'WALL MASS . . . . . . . .',1pg14.4
336 . /10x,'WALL X-VELOCITY . . . . .',1pg14.4
337 . /10x,'WALL Y-VELOCITY . . . . .',1pg14.4
338 . /10x,'WALL Z-VELOCITY . . . . .',1pg14.4)
339 1200 FORMAT(/10x,'SECONDARY NODES : ')
340 1201 FORMAT(/10x,10i10)
341 2003 FORMAT(/5x,'SPHERICAL WALL CHARACTERISTICS',
342 . /10x,'POINT M . . . . . . . . .',1p3g20.13
343 . /10x,'SPHERE DIAMETER . . . . .',1pg14.4)
344 2101 FORMAT(/5x,'COULOMB FRICTION CHARACTERISTICS',
345 . /10x,'FRICTION COEFFICIENT . . .',1pg14.4
346 . /10x,'FILTRATION FLAG. . . . . .',i10
347 . /10x,'FILTRATION FACTOR. . . . .',1pg14.4)
void anodset(int *id, int *type)
#define my_real
Definition cppsort.cpp:32
subroutine remove_nd(nn, inn, itagnd)
Definition dim_s10edg.F:219
#define alpha
Definition eval.h:35
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 kinset(ik, node, ikine, idir, isk, ikine1)
Definition kinset.F:57
integer, parameter nchartitle
integer, parameter ncharkey
integer, dimension(:), allocatable tagno
Definition r2r_mod.F:132
integer nsubmod
integer function ngr2usr(iu, igr, ngr)
Definition nintrr.F:325
subroutine jc(p, t, a, b, cm, cn, tref, tm, epsm, sigmam, jc_yield, tan_jc)
Definition sigeps106.F:339
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)
Definition message.F:889
subroutine fretitl(titr, iasc, l)
Definition freform.F:620
integer function usr2sys(iu, itabm1, mess, id)
Definition sysfus.F:160
subroutine subrotvect(x, y, z, rtrans, sub_id, lsubmodel)
Definition subrot.F:54
subroutine subrotpoint(x, y, z, rtrans, sub_id, lsubmodel)
Definition subrot.F:180