OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
ebcs0.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| ebcs0 ../engine/source/boundary_conditions/ebcs/ebcs0.F
25!||--- called by ------------------------------------------------------
26!|| ebcs_main ../engine/source/boundary_conditions/ebcs/ebcs_main.F
27!||--- uses -----------------------------------------------------
28!|| ebcs_mod ../common_source/modules/boundary_conditions/ebcs_mod.F90
29!|| elbufdef_mod ../common_source/modules/mat_elem/elbufdef_mod.F90
30!|| segvar_mod ../engine/share/modules/segvar_mod.F
31!||====================================================================
32 SUBROUTINE ebcs0(NSEG,ISEG,SEGVAR,
33 . A,V,X,
34 . LISTE,NOD,IRECT,IELEM,
35 . VO,PO,P0,
36 . LA,FV,MS,STIFN,IPARG,ELBUF_TAB,EBCS)
37C-----------------------------------------------
38C Gradient de pression
39C-----------------------------------------------
40C M o d u l e s
41C-----------------------------------------------
42 USE elbufdef_mod
43 USE ebcs_mod
44 USE segvar_mod
45C-----------------------------------------------
46C I m p l i c i t T y p e s
47C-----------------------------------------------
48#include "implicit_f.inc"
49C-----------------------------------------------
50C C o m m o n B l o c k s
51C-----------------------------------------------
52#include "param_c.inc"
53#include "com01_c.inc"
54#include "com04_c.inc"
55#include "com08_c.inc"
56#include "scr11_c.inc"
57C-----------------------------------------------
58C D u m m y A r g u m e n t s
59C-----------------------------------------------
60 INTEGER NSEG,NOD,ISEG(NSEG),LISTE(NOD),IRECT(4,NSEG),
61 . IPARG(NPARG,NGROUP),IELEM(NSEG)
62 my_real
63 . A(3,NUMNOD),X(3,NUMNOD),V(3,NUMNOD),LA(3,NOD),
64 . p0(nod),vo(nod),po(nod),ms(*),stifn(*),fv(*)
65 TYPE(elbuf_struct_), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
66 TYPE(t_ebcs_gradp0), INTENT(IN) :: EBCS
67 TYPE(t_segvar) :: SEGVAR
68C-----------------------------------------------
69C L o c a l V a r i a b l e s
70C-----------------------------------------------
71 INTEGER I,IS,KSEG,ESEG,N1,N2,N3,N4,NG1,NG2,NG3,NG4,N,
72 . KLT,KTY,MFT,EAD,IRHO,IENER,II(6)
73C
74 my_real
75 . orient,rho,c,lcar,roc,alp,fac,
76 . x13,y13,z13,x24,y24,z24,nx,ny,nz,s,
77 . roou,enou,vmx,vmy,vmz,fluxi,fluxo,vn,pn,du,dp,p,
78 . ener,r1,r2,s2,dpdv
79 TYPE(g_bufel_) ,POINTER :: GBUF
80C-----------------------------------------------
81 IRHO = ebcs%irho
82 iener = ebcs%iener
83 klt = 0
84 mft = 0
85 IF(irho>0)THEN
86 rho=ebcs%rho*fv(irho)
87 ELSE
88 rho=ebcs%rho
89 ENDIF
90 IF(iener>0)THEN
91 ener=ebcs%ener*fv(iener)
92 ELSE
93 ener=ebcs%ener
94 ENDIF
95 c=ebcs%c
96 lcar=ebcs%lcar
97 r1=ebcs%r1
98 r2=ebcs%r1
99 roc=rho*c
100 alp=zero
101 IF(lcar>0)alp=c*dt1/lcar
102
103C
104C SURFACE NORMALE NODALES
105C
106 DO i=1,nod
107 la(1,i)=zero
108 la(2,i)=zero
109 la(3,i)=zero
110 ENDDO
111C
112 DO is=1,nseg
113 kseg=abs(iseg(is))
114 orient=float(iseg(is)/kseg)
115 eseg=ielem(is)
116 n1=irect(1,is)
117 n2=irect(2,is)
118 n3=irect(3,is)
119 n4=irect(4,is)
120 IF(n4==0 .OR. n4==n3) THEN
121 fac=one_over_6*orient
122 n4=n3
123 ELSE
124 fac=one_over_8*orient
125 ENDIF
126c
127 ng1=liste(n1)
128 ng2=liste(n2)
129 ng3=liste(n3)
130 ng4=liste(n4)
131 x13=x(1,ng3)-x(1,ng1)
132 y13=x(2,ng3)-x(2,ng1)
133 z13=x(3,ng3)-x(3,ng1)
134 x24=x(1,ng4)-x(1,ng2)
135 y24=x(2,ng4)-x(2,ng2)
136 z24=x(3,ng4)-x(3,ng2)
137c
138 nx=(y13*z24-z13*y24)*fac
139 ny=(z13*x24-x13*z24)*fac
140 nz=(x13*y24-y13*x24)*fac
141c
142 la(1,n1)=la(1,n1)+nx
143 la(2,n1)=la(2,n1)+ny
144 la(3,n1)=la(3,n1)+nz
145 la(1,n2)=la(1,n2)+nx
146 la(2,n2)=la(2,n2)+ny
147 la(3,n2)=la(3,n2)+nz
148 la(1,n3)=la(1,n3)+nx
149 la(2,n3)=la(2,n3)+ny
150 la(3,n3)=la(3,n3)+nz
151C
152 vmx=v(1,ng1)+v(1,ng2)+v(1,ng3)
153 vmy=v(2,ng1)+v(2,ng2)+v(2,ng3)
154 vmz=v(3,ng1)+v(3,ng2)+v(3,ng3)
155 IF(n4/=n3) THEN
156 la(1,n4)=la(1,n4)+nx
157 la(2,n4)=la(2,n4)+ny
158 la(3,n4)=la(3,n4)+nz
159 vmx=vmx+v(1,ng4)
160 vmy=vmy+v(2,ng4)
161 vmz=vmz+v(3,ng4)
162 ENDIF
163C
164c bilan masse et energie totale
165c
166 roou = segvar%RHO(kseg)
167 enou = segvar%EINT(kseg)
168C
169 fluxo=(vmx*nx+vmy*ny+vmz*nz)*dt1
170 fluxi=min(fluxo,zero)
171 fluxo=max(fluxo,zero)
172C
173 dmf=dmf-fluxo*roou-fluxi*rho
174 def=def-fluxo*enou-fluxi*ener
175C
176C stockage densit et nergie entrante dans buffer facette
177C
178 segvar%RHO(kseg)=rho
179 segvar%EINT(kseg)=ener
180C Pression voisin
181 DO n=1,ngroup
182 kty = iparg(5,n)
183 klt = iparg(2,n)
184 mft = iparg(3,n)
185 IF (kty==1 .AND. eseg<=klt+mft) EXIT
186 ENDDO
187 ead = eseg-mft
188 gbuf => elbuf_tab(n)%GBUF
189 DO i=1,6
190 ii(i) = klt*(i-1)
191 ENDDO
192
193 p =-(gbuf%SIG(ii(1)+ead)+gbuf%SIG(ii(2)+ead)+gbuf%SIG(ii(3)+ead))*third
194C
195 p0(n1)=p0(n1)+p*(nx*la(1,n1)+ny*la(2,n1)+nz*la(3,n1))
196 p0(n2)=p0(n2)+p*(nx*la(1,n2)+ny*la(2,n2)+nz*la(3,n2))
197 p0(n3)=p0(n3)+p*(nx*la(1,n3)+ny*la(2,n3)+nz*la(3,n3))
198 IF(n4/=n3) THEN
199 p0(n4)=p0(n4)+p*(nx*la(1,n4)+ny*la(2,n4)+nz*la(3,n4))
200 ENDIF
201c write(6,*)'init P',IS,EAD,P
202 ENDDO
203
204C
205 DO i=1,nod
206 n=liste(i)
207 s2=la(1,i)**2+la(2,i)**2+la(3,i)**2
208 s=sqrt(s2)
209 vn=(v(1,n)*la(1,i)+v(2,n)*la(2,i)+v(3,n)*la(3,i))/s
210c condition darret
211 pn=p0(i)/s2+r1*vn+r2*vn*abs(vn)
212 dpdv=roc+r1+two*r2*abs(vn)
213c frontiere silencieuse
214 IF(tt>0)THEN
215 du=roc*(vn-vo(i))
216 ELSE
217 du=zero
218 po(i)=pn
219 ENDIF
220 dp=alp*(pn-po(i))
221 p=po(i)+alp*dp+du
222 IF(c==zero)p=pn
223c write(6, *)'ebcs4',P0(I),PN,P,DP,DU,R1*VN,R2*VN
224c
225 a(1,n)=a(1,n)-p*la(1,i)
226 a(2,n)=a(2,n)-p*la(2,i)
227 a(3,n)=a(3,n)-p*la(3,i)
228 stifn(n)=stifn(n)+(two*(s*dpdv)**2)/ms(n)
229C
230 def=def-half*(po(i)+p)*dt1*vn*s
231C
232 vo(i)=vn
233 po(i)=p
234 ENDDO
235c-----------
236 RETURN
237 END
subroutine ebcs0(nseg, iseg, segvar, a, v, x, liste, nod, irect, ielem, vo, po, p0, la, fv, ms, stifn, iparg, elbuf_tab, ebcs)
Definition ebcs0.F:37
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21