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

Functions/Subroutines

subroutine ebcs4_vel (nseg, iseg, segvar, a, v, x, liste, nod, irect, la, fv, ms, stifn, ebcs, output, dt1, time)

Function/Subroutine Documentation

◆ ebcs4_vel()

subroutine ebcs4_vel_mod::ebcs4_vel ( integer nseg,
integer, dimension(nseg) iseg,
type(t_segvar) segvar,
a,
v,
x,
integer, dimension(nod) liste,
integer nod,
integer, dimension(4,nseg) irect,
la,
fv,
ms,
stifn,
type(t_ebcs_vel), intent(in) ebcs,
type(output_), intent(inout) output,
intent(in) dt1,
intent(in) time )
Parameters
[in,out]outputoutput structure

Definition at line 40 of file ebcs4_vel.F.

41C-----------------------------------------------
42C M o d u l e s
43C-----------------------------------------------
44 USE ebcs_mod
45 USE segvar_mod
46 USE output_mod , ONLY : output_
47C-----------------------------------------------
48C I m p l i c i t T y p e s
49C-----------------------------------------------
50#include "implicit_f.inc"
51C-----------------------------------------------
52C C o m m o n B l o c k s
53C-----------------------------------------------
54C-----------------------------------------------
55C D u m m y A r g u m e n t s
56C-----------------------------------------------
57 INTEGER NSEG,NOD,ISEG(NSEG),LISTE(NOD),IRECT(4,NSEG)
58 my_real a(3,*),v(3,*),x(3,*),la(3,nod),ms(*),stifn(*),fv(*)
59 TYPE(t_ebcs_vel), INTENT(IN) :: EBCS
60 TYPE(t_segvar) :: SEGVAR
61 my_real,INTENT(IN) :: dt1 !< time step
62 my_real,INTENT(IN) :: time !< current time
63 TYPE(OUTPUT_), INTENT(INOUT) :: OUTPUT !< output structure
64C-----------------------------------------------
65C L o c a l V a r i a b l e s
66C-----------------------------------------------
67 INTEGER :: I,IS,KSEG,N1,N2,N3,N4,NG1,NG2,NG3,NG4,N,IVX,IVY,IVZ,IRHO,IENER
68 my_real :: orient,rho,c,roc,fac,
69 . x13,y13,z13,x24,y24,z24,nx,ny,nz,s,
70 . roou,enou,vmx,vmy,vmz,fluxi,fluxo,p,dvx,dvy,dvz,ener,
71 . vx,vy,vz
72 my_real :: de_in, de_out, dm_in, dm_out
73C-----------------------------------------------
74 ivx=ebcs%ivx
75 ivy=ebcs%ivy
76 ivz=ebcs%ivz
77 irho=ebcs%irho
78 iener=ebcs%iener
79 de_in = zero
80 de_out = zero
81 dm_in = zero
82 dm_out = zero
83
84 IF(ivx > 0)THEN
85 vx=ebcs%vx*fv(ivx)
86 ELSE
87 vx=ebcs%vx
88 ENDIF
89 IF(ivy > 0)THEN
90 vy=ebcs%vy*fv(ivy)
91 ELSE
92 vy=ebcs%vy
93 ENDIF
94 IF(ivz > 0)THEN
95 vz=ebcs%vz*fv(ivz)
96 ELSE
97 vz=ebcs%vz
98 ENDIF
99 IF(irho > 0)THEN
100 rho=ebcs%rho*fv(irho)
101 ELSE
102 rho=ebcs%rho
103 ENDIF
104 IF(iener > 0)THEN
105 ener=ebcs%ener*fv(iener)
106 ELSE
107 ener=ebcs%ener
108 ENDIF
109 c=ebcs%c
110 roc=rho*c
111
112!INIT. MASS DENSITY AND ENERGY
113! NORMAL AT NODES
114 DO i=1,nod
115 la(1,i)=zero
116 la(2,i)=zero
117 la(3,i)=zero
118 ENDDO
119
120 DO is=1,nseg
121 kseg=abs(iseg(is))
122 orient=float(iseg(is)/kseg)
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 ng1=liste(n1)
134 ng2=liste(n2)
135 ng3=liste(n3)
136 ng4=liste(n4)
137 x13=x(1,ng3)-x(1,ng1)
138 y13=x(2,ng3)-x(2,ng1)
139 z13=x(3,ng3)-x(3,ng1)
140 x24=x(1,ng4)-x(1,ng2)
141 y24=x(2,ng4)-x(2,ng2)
142 z24=x(3,ng4)-x(3,ng2)
143 nx=(y13*z24-z13*y24)*fac
144 ny=(z13*x24-x13*z24)*fac
145 nz=(x13*y24-y13*x24)*fac
146 la(1,n1)=la(1,n1)+nx
147 la(2,n1)=la(2,n1)+ny
148 la(3,n1)=la(3,n1)+nz
149 la(1,n2)=la(1,n2)+nx
150 la(2,n2)=la(2,n2)+ny
151 la(3,n2)=la(3,n2)+nz
152 la(1,n3)=la(1,n3)+nx
153 la(2,n3)=la(2,n3)+ny
154 la(3,n3)=la(3,n3)+nz
155 vmx=v(1,ng1)+v(1,ng2)+v(1,ng3)
156 vmy=v(2,ng1)+v(2,ng2)+v(2,ng3)
157 vmz=v(3,ng1)+v(3,ng2)+v(3,ng3)
158 IF(n4/=n3) THEN
159 la(1,n4)=la(1,n4)+nx
160 la(2,n4)=la(2,n4)+ny
161 la(3,n4)=la(3,n4)+nz
162 vmx=vmx+v(1,ng4)
163 vmy=vmy+v(2,ng4)
164 vmz=vmz+v(3,ng4)
165 ENDIF
166! mass and energy balance
167 roou = segvar%RHO(kseg)
168 enou = segvar%EINT(kseg)
169 fluxo=(vmx*nx+vmy*ny+vmz*nz)*dt1
170 fluxi=min(fluxo,zero)
171 fluxo=max(fluxo,zero)
172 dm_out=dm_out-fluxo*roou
173 dm_in=dm_in-fluxi*rho
174 de_out=de_out-fluxo*enou
175 de_in=de_in-fluxi*ener
176! masse density and incoming energy stored in face buffer
177 segvar%RHO(kseg)=rho
178 segvar%EINT(kseg)=ener
179 ENDDO
180
181!$OMP CRITICAL
182 output%DATA%INOUT%DM_IN = output%DATA%INOUT%DM_IN + dm_in
183 output%DATA%INOUT%DM_OUT = output%DATA%INOUT%DM_OUT + dm_out
184 output%DATA%INOUT%DE_IN = output%DATA%INOUT%DE_IN + de_in
185 output%DATA%INOUT%DE_OUT = output%DATA%INOUT%DE_OUT + de_out
186!$OMP END CRITICAL
187
188 IF(time == zero)THEN
189 DO i=1,nod
190 n=liste(i)
191 v(1,n)=vx
192 v(2,n)=vy
193 v(3,n)=vz
194 ENDDO
195 ENDIF
196
197 DO i=1,nod
198 n=liste(i)
199 s=sqrt(la(1,i)**2+la(2,i)**2+la(3,i)**2)
200 dvx=v(1,n)-vx
201 dvy=v(2,n)-vy
202 dvz=v(3,n)-vz
203 p=roc*(dvx*la(1,i)+dvy*la(2,i)+dvz*la(3,i))/s
204 a(1,n)=a(1,n)-p*la(1,i)
205 a(2,n)=a(2,n)-p*la(2,i)
206 a(3,n)=a(3,n)-p*la(3,i)
207 stifn(n)=stifn(n)+(two*(s*roc)**2)/ms(n)
208 ENDDO
209
210 RETURN
#define my_real
Definition cppsort.cpp:32
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21