OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
spclasv.F File Reference
#include "implicit_f.inc"
#include "sphcom.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine spclasv (x, spbuf, kxsp, ixsp, nod2sp, waspact, myspatrue, ireduce, kreduce)

Function/Subroutine Documentation

◆ spclasv()

subroutine spclasv ( x,
spbuf,
integer, dimension(nisp,*) kxsp,
integer, dimension(kvoisph,*) ixsp,
integer, dimension(*) nod2sp,
integer, dimension(*) waspact,
myspatrue,
integer ireduce,
integer, dimension(*) kreduce )

Definition at line 30 of file spclasv.F.

32C-----------------------------------------------
33C M o d u l e s
34C-----------------------------------------------
35C----6---------------------------------------------------------------7---------8
36C I m p l i c i t T y p e s
37C-----------------------------------------------
38#include "implicit_f.inc"
39C-----------------------------------------------
40C C o m m o n B l o c k s
41C-----------------------------------------------
42#include "sphcom.inc"
43C-----------------------------------------------------------------
44C D u m m y A r g u m e n t s
45C-----------------------------------------------
46 INTEGER KXSP(NISP,*),IXSP(KVOISPH,*),NOD2SP(*),
47 . WASPACT(*), IREDUCE, KREDUCE(*)
49 . x(3,*),spbuf(nspbuf,*), myspatrue
50C-----------------------------------------------
51C L o c a l V a r i a b l e s
52C-----------------------------------------------
53 integer
54 . n,inod,jnod,j,nvois,m,ncand,k1,k2,nvois1,nvois2,
55 . nvoiss,nvoiss1,nvoiss2, iaux, ierror,
56 . k, l, jk, nc, js, ns, nn, nb,jj1,jj2, jj, jjj,
57 . mwa(2*kvoisph),jstor(kvoisph), jperm(kvoisph),
58 . lvoired, ig
60 . dms,dms2,dk,
61 . xi,yi,zi,di,xj,yj,zj,dj,dd,dvois(kvoisph),
62 . dwa(numsph)
63 SAVE lvoired
64C-----------------------------------------------
65C force sorting for domain decomposition
66 DO ns=1,nsphact
67 n=waspact(ns)
68 inod=kxsp(3,n)
69 xi=x(1,inod)
70 yi=x(2,inod)
71 zi=x(3,inod)
72 di=spbuf(1,n)
73 nvois=kxsp(5,n)
74 DO k=1,nvois
75 jnod = ixsp(k,n)
76 m =nod2sp(jnod)
77 xj=x(1,jnod)
78 yj=x(2,jnod)
79 zj=x(3,jnod)
80 dj=spbuf(1,m)
81 dms =di+dj
82 dms2=dms*dms
83 dvois(k)=(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
84 dvois(k)=dvois(k)/dms2
85 END DO
86C
87 CALL myqsort(nvois,dvois,jperm,ierror)
88 DO k=1,nvois
89 jstor(k) = ixsp(k,n)
90 END DO
91C
92 k1=0
93 DO k=1,nvois
94 jk=jstor(jperm(k))
95 k1=k1+1
96 ixsp(k1,n) = jk
97 END DO
98C
99C--- Closest neighbor is stored for tensile instability treatment --
100C
101 IF (nspbuf==15) THEN
102 spbuf(15,n)=two*sqrt(dvois(1))
103 ENDIF
104C
105 END DO
106C-----------------------------------------------
107 lvoired = 0
108 IF(ireduce==0)GO TO 100
109C-------------------------------------------
110C tri voisins / ne garder que LVOISPH voisins effectifs
111C
112 DO ns=1,nsphact
113 n=waspact(ns)
114 dwa(n)=one
115 nvois1 =kxsp(4,n)
116 IF(kreduce(n)/=0.OR.nvois1>lvoisph)THEN
117C
118 IF(nvois1>lvoisph)THEN
119 kreduce(n)=kreduce(n)+10
120 lvoired = 1
121 END IF
122C
123 inod=kxsp(3,n)
124 xi=x(1,inod)
125 yi=x(2,inod)
126 zi=x(3,inod)
127 di=spbuf(1,n)
128 nvois=kxsp(5,n)
129 DO k=1,nvois
130 jnod = ixsp(k,n)
131 m =nod2sp(jnod)
132 xj=x(1,jnod)
133 yj=x(2,jnod)
134 zj=x(3,jnod)
135 dj=spbuf(1,m)
136 dms =di+dj
137 dms2=dms*dms
138 dvois(k)=(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
139 dvois(k)=dvois(k)/dms2
140 END DO
141C
142 CALL myqsort(nvois,dvois,jperm,ierror)
143 DO k=1,nvois
144 jstor(k) = ixsp(k,n)
145 END DO
146C
147 IF(kreduce(n) >= 10)dwa(n)=sqrt(dvois(lvoisph))
148C
149 k1=0
150 DO k=1,nvois
151 jk=jstor(jperm(k))
152 k1=k1+1
153 ixsp(k1,n) = jk
154 END DO
155C
156 END IF
157 END DO
158C-------------------------------------------
159C adapte diametre (reduction only)
160C
161 IF(lvoired /= 0)THEN
162C
163 DO ns=1,nsphact
164 n=waspact(ns)
165 spbuf(1,n)=min(spbuf(1,n),dwa(n)*spbuf(1,n))
166 spbuf(8,n)=spbuf(1,n)
167 END DO
168 END IF
169C
170 DO ns=1,nsphact
171 n=waspact(ns)
172C
173 IF(mod(kreduce(n),10)/=0)THEN
174C
175 nvois1 =kxsp(4,n)
176 nvois =kxsp(5,n)
177 inod=kxsp(3,n)
178 xi=x(1,inod)
179 yi=x(2,inod)
180 zi=x(3,inod)
181 di=spbuf(1,n)
182C
183 jnod = ixsp(nvois,n)
184 m =nod2sp(jnod)
185 xj=x(1,jnod)
186 yj=x(2,jnod)
187 zj=x(3,jnod)
188 dj=spbuf(1,m)
189 dd =(xi-xj)*(xi-xj)+(yi-yj)*(yi-yj)+(zi-zj)*(zi-zj)
190 dms =di+dj
191 dms2=dms*dms
192 dk=dd/dms2
193 myspatrue=max(zero,min(myspatrue,dk-one))
194 END IF
195C
196 END DO
197C-------------------------------------------
198 100 CONTINUE
199C-----------------------------------------------
200 RETURN
#define my_real
Definition cppsort.cpp:32
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
subroutine myqsort(n, a, perm, error)
Definition myqsort.F:51