OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
ebcs7_iniv.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!|| ebcs7_iniv_mod ../engine/source/boundary_conditions/ebcs/ebcs7_iniv.F
25!||--- called by ------------------------------------------------------
26!|| ebcs_main ../engine/source/boundary_conditions/ebcs/ebcs_main.F
27!||====================================================================
29 IMPLICIT NONe
30 CONTAINS
31!||====================================================================
32!|| ebcs7_iniv ../engine/source/boundary_conditions/ebcs/ebcs7_iniv.F
33!||--- called by ------------------------------------------------------
34!|| ebcs_main ../engine/source/boundary_conditions/ebcs/ebcs_main.F
35!||--- uses -----------------------------------------------------
36!|| ebcs_mod ../common_source/modules/boundary_conditions/ebcs_mod.F90
37!|| output_mod ../common_source/modules/output/output_mod.F90
38!|| segvar_mod ../engine/share/modules/segvar_mod.F
39!||====================================================================
40 SUBROUTINE ebcs7_iniv(NSEG,ISEG,SEGVAR,
41 . A,V,X,
42 . LISTE,NOD,IRECT,
43 . RO0,EN0,V0,
44 . LA,MS,STIFN,EBCS,OUTPUT,DT1,TIME)
45 USE ebcs_mod
46 USE segvar_mod
47 USE output_mod, ONLY : output_
48C-----------------------------------------------
49C I m p l i c i t T y p e s
50C-----------------------------------------------
51#include "implicit_f.inc"
52C-----------------------------------------------
53C C o m m o n B l o c k s
54C-----------------------------------------------
55C-----------------------------------------------
56C D u m m y A r g u m e n t s
57C-----------------------------------------------
58 INTEGER :: NSEG,NOD,ISEG(NSEG),LISTE(NOD),IRECT(4,NSEG)
59 my_real :: A(3,*),V(3,*),X(3,*),RO0(NSEG),EN0(NSEG),V0(3,NOD),LA(3,NOD),MS(*),STIFN(*)
60 TYPE(t_ebcs_iniv), INTENT(IN) :: EBCS
61 TYPE(t_segvar) :: SEGVAR
62 TYPE(output_), INTENT(INOUT) :: OUTPUT !< output structure
63 my_real,INTENT(IN) :: dt1 !< time step
64 my_real,INTENT(IN) :: time !< current time
65C-----------------------------------------------
66C L o c a l V a r i a b l e s
67C-----------------------------------------------
68 INTEGER :: I,IS,KSEG,N1,N2,N3,N4,NG1,NG2,NG3,NG4,N
69 my_real :: ORIENT,RHO,C,ROC,FAC,
70 . X13,Y13,Z13,X24,Y24,Z24,NX,NY,NZ,S,
71 . ROOU,ENOU,VMX,VMY,VMZ,FLUXI,FLUXO,P,DVX,DVY,DVZ
72 my_real :: de_in, de_out, dm_in, dm_out
73C-----------------------------------------------
74 c=ebcs%c
75 rho=ebcs%rho
76 roc=rho*c
77 de_in = zero
78 de_out = zero
79 dm_in = zero
80 dm_out = zero
81C
82C initialization of initial densities and energies
83C
84 IF(time == zero)THEN
85 DO is=1,nseg
86 kseg=abs(iseg(is))
87 ro0(is) = segvar%RHO(kseg)
88 en0(is) = segvar%EINT(kseg)
89 ENDDO
90 DO i=1,nod
91 n=liste(i)
92 v0(1,i)=v(1,n)
93 v0(2,i)=v(2,n)
94 v0(3,i)=v(3,n)
95 ENDDO
96 ENDIF
97C NODAL NORMAL SURFACE
98 DO i=1,nod
99 la(1,i)=zero
100 la(2,i)=zero
101 la(3,i)=zero
102 ENDDO
103 DO is=1,nseg
104 kseg=abs(iseg(is))
105 orient=float(iseg(is)/kseg)
106 n1=irect(1,is)
107 n2=irect(2,is)
108 n3=irect(3,is)
109 n4=irect(4,is)
110 IF(n4==0 .OR. n4==n3) THEN
111 fac=one_over_6*orient
112 n4=n3
113 ELSE
114 fac=one_over_8*orient
115 ENDIF
116c
117 ng1=liste(n1)
118 ng2=liste(n2)
119 ng3=liste(n3)
120 ng4=liste(n4)
121 x13=x(1,ng3)-x(1,ng1)
122 y13=x(2,ng3)-x(2,ng1)
123 z13=x(3,ng3)-x(3,ng1)
124 x24=x(1,ng4)-x(1,ng2)
125 y24=x(2,ng4)-x(2,ng2)
126 z24=x(3,ng4)-x(3,ng2)
127c
128 nx=(y13*z24-z13*y24)*fac
129 ny=(z13*x24-x13*z24)*fac
130 nz=(x13*y24-y13*x24)*fac
131c
132 la(1,n1)=la(1,n1)+nx
133 la(2,n1)=la(2,n1)+ny
134 la(3,n1)=la(3,n1)+nz
135 la(1,n2)=la(1,n2)+nx
136 la(2,n2)=la(2,n2)+ny
137 la(3,n2)=la(3,n2)+nz
138 la(1,n3)=la(1,n3)+nx
139 la(2,n3)=la(2,n3)+ny
140 la(3,n3)=la(3,n3)+nz
141C
142 vmx=v(1,ng1)+v(1,ng2)+v(1,ng3)
143 vmy=v(2,ng1)+v(2,ng2)+v(2,ng3)
144 vmz=v(3,ng1)+v(3,ng2)+v(3,ng3)
145
146 IF(n4/=n3) THEN
147 la(1,n4)=la(1,n4)+nx
148 la(2,n4)=la(2,n4)+ny
149 la(3,n4)=la(3,n4)+nz
150 vmx=vmx+v(1,ng4)
151 vmy=vmy+v(2,ng4)
152 vmz=vmz+v(3,ng4)
153 ENDIF
154C
155c mass and total energy balance
156c
157 roou = segvar%RHO(kseg)
158 enou = segvar%EINT(kseg)
159c
160 fluxo=(vmx*nx+vmy*ny+vmz*nz)*dt1
161 fluxi=min(fluxo,zero)
162 fluxo=max(fluxo,zero)
163 dm_out=dm_out-fluxo*roou
164 dm_in=dm_in-fluxi*ro0(is)
165 de_out=de_out-fluxo*enou
166 de_in=de_in-fluxi*en0(is)
167C
168C storage of density and incoming energy in facet buffer
169C
170 segvar%RHO(kseg)=ro0(is)
171 segvar%EINT(kseg)=en0(is)
172 ENDDO
173
174!$OMP CRITICAL
175 output%DATA%INOUT%DM_IN = output%DATA%INOUT%DM_IN + dm_in
176 output%DATA%INOUT%DM_OUT = output%DATA%INOUT%DM_OUT + dm_out
177 output%DATA%INOUT%DE_IN = output%DATA%INOUT%DE_IN + de_in
178 output%DATA%INOUT%DE_OUT = output%DATA%INOUT%DE_OUT + de_out
179!$OMP END CRITICAL
180
181
182 DO i=1,nod
183 n=liste(i)
184 s=sqrt(la(1,i)**2+la(2,i)**2+la(3,i)**2)
185 dvx=v(1,n)-v0(1,i)
186 dvy=v(2,n)-v0(2,i)
187 dvz=v(3,n)-v0(3,i)
188c write(6,*)I,N,v(3,N),v0(3,I),roc
189 p=roc*(dvx*la(1,i)+dvy*la(2,i)+dvz*la(3,i))/s
190c
191 a(1,n)=a(1,n)-p*la(1,i)
192 a(2,n)=a(2,n)-p*la(2,i)
193 a(3,n)=a(3,n)-p*la(3,i)
194 stifn(n)=stifn(n)+(two*(s*roc)**2)/ms(n)
195 ENDDO
196c
197 RETURN
198 END SUBROUTINE ebcs7_iniv
199 END MODULE ebcs7_iniv_mod
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
subroutine ebcs7_iniv(nseg, iseg, segvar, a, v, x, liste, nod, irect, ro0, en0, v0, la, ms, stifn, ebcs, output, dt1, time)
Definition ebcs7_iniv.F:45