OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
ebcs0_gradp0_mod Module Reference

Functions/Subroutines

subroutine ebcs0_gradp0 (nseg, iseg, segvar, a, v, x, liste, nod, irect, ielem, vo, po, p0, la, fv, ms, stifn, iparg, elbuf_tab, ebcs, output, dt1, time)

Function/Subroutine Documentation

◆ ebcs0_gradp0()

subroutine ebcs0_gradp0_mod::ebcs0_gradp0 ( integer nseg,
integer, dimension(nseg) iseg,
type(t_segvar) segvar,
a,
v,
x,
integer, dimension(nod) liste,
integer nod,
integer, dimension(4,nseg) irect,
integer, dimension(nseg) ielem,
vo,
po,
p0,
la,
fv,
ms,
stifn,
integer, dimension(nparg,ngroup) iparg,
type(elbuf_struct_), dimension(ngroup), target elbuf_tab,
type(t_ebcs_gradp0), intent(in) ebcs,
type(output_), intent(inout) output,
intent(in) dt1,
intent(in) time )
Parameters
[in,out]outputoutput structure

Definition at line 41 of file ebcs0_gradp0.F.

46C-----------------------------------------------
47C pressure gradient
48C-----------------------------------------------
49C M o d u l e s
50C-----------------------------------------------
51 USE elbufdef_mod
52 USE ebcs_mod
53 USE segvar_mod
54 USE output_mod , ONLY : output_
55C-----------------------------------------------
56C I m p l i c i t T y p e s
57C-----------------------------------------------
58#include "implicit_f.inc"
59C-----------------------------------------------
60C C o m m o n B l o c k s
61C-----------------------------------------------
62#include "param_c.inc"
63#include "com01_c.inc"
64#include "com04_c.inc"
65C-----------------------------------------------
66C D u m m y A r g u m e n t s
67C-----------------------------------------------
68 INTEGER :: NSEG,NOD,ISEG(NSEG),LISTE(NOD),IRECT(4,NSEG),IPARG(NPARG,NGROUP),IELEM(NSEG)
69 my_real :: a(3,numnod),x(3,numnod),v(3,numnod),la(3,nod), p0(nod),vo(nod),po(nod),ms(*),stifn(*),fv(*)
70 TYPE(ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
71 TYPE(t_ebcs_gradp0), INTENT(IN) :: EBCS
72 TYPE(t_segvar) :: SEGVAR
73 TYPE(OUTPUT_), INTENT(INOUT) :: OUTPUT !< output structure
74 my_real,INTENT(IN) :: dt1 !< time step
75 my_real,INTENT(IN) :: time !< current time
76C-----------------------------------------------
77C L o c a l V a r i a b l e s
78C-----------------------------------------------
79 INTEGER :: I,IS,KSEG,ESEG,N1,N2,N3,N4,NG1,NG2,NG3,NG4,N, KLT,KTY,MFT,EAD,IRHO,IENER,II(6)
80 my_real :: orient,rho,c,lcar,roc,alp,fac,x13,y13,z13,x24,y24,z24,nx,ny,nz,s
81 my_real :: roou,enou,vmx,vmy,vmz,fluxi,fluxo,vn,pn,du,dp,p,ener,r1,r2,s2,dpdv
82 TYPE(G_BUFEL_) ,POINTER :: GBUF
83 my_real :: de, de_in, de_out, dm_in, dm_out
84C-----------------------------------------------
85 irho = ebcs%irho
86 iener = ebcs%iener
87 klt = 0
88 mft = 0
89 de_in = zero
90 de_out = zero
91 dm_in = zero
92 dm_out = zero
93
94 IF(irho > 0)THEN
95 rho=ebcs%rho*fv(irho)
96 ELSE
97 rho=ebcs%rho
98 ENDIF
99 IF(iener > 0)THEN
100 ener=ebcs%ener*fv(iener)
101 ELSE
102 ener=ebcs%ener
103 ENDIF
104 c=ebcs%c
105 lcar=ebcs%lcar
106 r1=ebcs%r1
107 r2=ebcs%r1
108 roc=rho*c
109 alp=zero
110 IF(lcar > zero)alp=c*dt1/lcar
111
112 ! NORMAL VECTORS AT NODES
113 DO i=1,nod
114 la(1,i)=zero
115 la(2,i)=zero
116 la(3,i)=zero
117 ENDDO
118
119 DO is=1,nseg
120 kseg=abs(iseg(is))
121 orient=float(iseg(is)/kseg)
122 eseg=ielem(is)
123 n1=irect(1,is)
124 n2=irect(2,is)
125 n3=irect(3,is)
126 n4=irect(4,is)
127 IF(n4 == 0 .OR. n4 == n3) THEN
128 fac=one_over_6*orient
129 n4=n3
130 ELSE
131 fac=one_over_8*orient
132 ENDIF
133
134 ng1=liste(n1)
135 ng2=liste(n2)
136 ng3=liste(n3)
137 ng4=liste(n4)
138 x13=x(1,ng3)-x(1,ng1)
139 y13=x(2,ng3)-x(2,ng1)
140 z13=x(3,ng3)-x(3,ng1)
141 x24=x(1,ng4)-x(1,ng2)
142 y24=x(2,ng4)-x(2,ng2)
143 z24=x(3,ng4)-x(3,ng2)
144
145 nx=(y13*z24-z13*y24)*fac
146 ny=(z13*x24-x13*z24)*fac
147 nz=(x13*y24-y13*x24)*fac
148
149 la(1,n1)=la(1,n1)+nx
150 la(2,n1)=la(2,n1)+ny
151 la(3,n1)=la(3,n1)+nz
152 la(1,n2)=la(1,n2)+nx
153 la(2,n2)=la(2,n2)+ny
154 la(3,n2)=la(3,n2)+nz
155 la(1,n3)=la(1,n3)+nx
156 la(2,n3)=la(2,n3)+ny
157 la(3,n3)=la(3,n3)+nz
158
159 vmx=v(1,ng1)+v(1,ng2)+v(1,ng3)
160 vmy=v(2,ng1)+v(2,ng2)+v(2,ng3)
161 vmz=v(3,ng1)+v(3,ng2)+v(3,ng3)
162 IF(n4 /= n3) THEN
163 la(1,n4)=la(1,n4)+nx
164 la(2,n4)=la(2,n4)+ny
165 la(3,n4)=la(3,n4)+nz
166 vmx=vmx+v(1,ng4)
167 vmy=vmy+v(2,ng4)
168 vmz=vmz+v(3,ng4)
169 ENDIF
170
171c mass and total energy balance
172 roou = segvar%RHO(kseg)
173 enou = segvar%EINT(kseg)
174
175 fluxo=(vmx*nx+vmy*ny+vmz*nz)*dt1
176 fluxi=min(fluxo,zero)
177 fluxo=max(fluxo,zero)
178 dm_out=dm_out-fluxo*roou
179 dm_in=dm_in-fluxi*rho
180 de_out=de_out-fluxo*enou
181 de_in=de_in-fluxi*ener
182C
183C storage of density and incoming energy in facet buffer
184C
185 segvar%RHO(kseg)=rho
186 segvar%EINT(kseg)=ener
187C Pression voisin
188 DO n=1,ngroup
189 kty = iparg(5,n)
190 klt = iparg(2,n)
191 mft = iparg(3,n)
192 IF (kty == 1 .AND. eseg <= klt+mft) EXIT
193 ENDDO
194 ead = eseg-mft
195 gbuf => elbuf_tab(n)%GBUF
196 DO i=1,6
197 ii(i) = klt*(i-1)
198 ENDDO
199
200 p =-(gbuf%SIG(ii(1)+ead)+gbuf%SIG(ii(2)+ead)+gbuf%SIG(ii(3)+ead))*third
201 p0(n1)=p0(n1)+p*(nx*la(1,n1)+ny*la(2,n1)+nz*la(3,n1))
202 p0(n2)=p0(n2)+p*(nx*la(1,n2)+ny*la(2,n2)+nz*la(3,n2))
203 p0(n3)=p0(n3)+p*(nx*la(1,n3)+ny*la(2,n3)+nz*la(3,n3))
204 IF(n4 /= n3) THEN
205 p0(n4)=p0(n4)+p*(nx*la(1,n4)+ny*la(2,n4)+nz*la(3,n4))
206 ENDIF
207 ENDDO
208
209 DO i=1,nod
210 n=liste(i)
211 s2=la(1,i)**2+la(2,i)**2+la(3,i)**2
212 s=sqrt(s2)
213 vn=(v(1,n)*la(1,i)+v(2,n)*la(2,i)+v(3,n)*la(3,i))/s
214c condition darret
215 pn=p0(i)/s2+r1*vn+r2*vn*abs(vn)
216 dpdv=roc+r1+two*r2*abs(vn)
217c silent boundary
218 IF(time > zero)THEN
219 du=roc*(vn-vo(i))
220 ELSE
221 du=zero
222 po(i)=pn
223 ENDIF
224 dp=alp*(pn-po(i))
225 p=po(i)+alp*dp+du
226 IF(c == zero)p=pn
227
228 a(1,n)=a(1,n)-p*la(1,i)
229 a(2,n)=a(2,n)-p*la(2,i)
230 a(3,n)=a(3,n)-p*la(3,i)
231 stifn(n)=stifn(n)+(two*(s*dpdv)**2)/ms(n)
232
233 de=-half*(po(i)+p)*dt1*vn*s
234
235 de_in = de_in + max(zero,de)
236 de_out = de_out + min(zero,de)
237
238 vo(i)=vn
239 po(i)=p
240 ENDDO
241
242!$OMP CRITICAL
243 output%DATA%INOUT%DM_IN = output%DATA%INOUT%DM_IN + dm_in
244 output%DATA%INOUT%DM_OUT = output%DATA%INOUT%DM_OUT + dm_out
245 output%DATA%INOUT%DE_IN = output%DATA%INOUT%DE_IN + de_in
246 output%DATA%INOUT%DE_OUT = output%DATA%INOUT%DE_OUT + de_out
247!$OMP END CRITICAL
248
249c-----------
250 RETURN
#define my_real
Definition cppsort.cpp:32
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21