CalculiX  2.13
A Free Software Three-Dimensional Structural Finite Element Program
calcgamma.f File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine calcgamma (nface, ielfa, vel, gradvel, gamma, xlet, xxn, xxj, ipnei, betam, nef, flux)
 

Function/Subroutine Documentation

◆ calcgamma()

subroutine calcgamma ( integer  nface,
integer, dimension(4,*)  ielfa,
real*8, dimension(nef,0:7)  vel,
real*8, dimension(3,3,*)  gradvel,
real*8, dimension(*)  gamma,
real*8, dimension(*)  xlet,
real*8, dimension(3,*)  xxn,
real*8, dimension(3,*)  xxj,
integer, dimension(*)  ipnei,
real*8  betam,
integer  nef,
real*8, dimension(*)  flux 
)
21 !
22 ! determine gamma for the velocity:
23 ! upwind difference: gamma=0
24 ! central difference: gamma=1
25 !
26  implicit none
27 !
28  integer nface,ielfa(4,*),i,j,indexf,ipnei(*),iel1,iel2,nef
29 !
30  real*8 vel(nef,0:7),gradvel(3,3,*),xxn(3,*),xxj(3,*),vud,vcd,
31  & gamma(*),phic,xlet(*),betam,flux(*),dvel1,dvel2
32 !
33  do i=1,nface
34  iel2=ielfa(2,i)
35 !
36 ! faces with only one neighbor need not be treated
37 !
38  if(iel2.le.0) cycle
39  iel1=ielfa(1,i)
40  j=ielfa(4,i)
41  indexf=ipnei(iel1)+j
42 !
43  dvel1=dsqrt(vel(iel1,1)**2+vel(iel1,2)**2+vel(iel1,3)**2)
44  dvel2=dsqrt(vel(iel2,1)**2+vel(iel2,2)**2+vel(iel2,3)**2)
45 !
46  vcd=dvel2-dvel1
47 !to check!
48  if(dabs(vcd).lt.1.d-3*dvel1) vcd=0.d0
49 !
50  if(flux(indexf).ge.0.d0) then
51 !
52 c write(*,*) 'calcgamma, positiv',flux(indexf)
53 c write(*,*) (vel(iel1,1)**2+vel(iel1,2)**2+
54 c & vel(iel1,3)**2)
55  vud=2.d0*xlet(indexf)*
56  & (vel(iel1,1)*gradvel(1,1,iel1)+
57  & vel(iel1,2)*gradvel(2,1,iel1)+
58  & vel(iel1,3)*gradvel(3,1,iel1))*xxj(1,indexf)+
59  & (vel(iel1,1)*gradvel(1,2,iel1)+
60  & vel(iel1,2)*gradvel(2,2,iel1)+
61  & vel(iel1,3)*gradvel(3,2,iel1))*xxj(2,indexf)+
62  & (vel(iel1,1)*gradvel(1,3,iel1)+
63  & vel(iel1,2)*gradvel(2,3,iel1)+
64  & vel(iel1,3)*gradvel(3,3,iel1))*xxj(3,indexf)
65  vcd=vcd*dvel1
66  else
67 c write(*,*) 'calcgamma, negativ',flux(indexf)
68  vud=2.d0*xlet(indexf)*
69  & (vel(iel2,1)*gradvel(1,1,iel2)+
70  & vel(iel2,2)*gradvel(2,1,iel2)+
71  & vel(iel2,3)*gradvel(3,1,iel2))*xxj(1,indexf)+
72  & (vel(iel2,1)*gradvel(1,2,iel2)+
73  & vel(iel2,2)*gradvel(2,2,iel2)+
74  & vel(iel2,3)*gradvel(3,2,iel2))*xxj(2,indexf)+
75  & (vel(iel2,1)*gradvel(1,3,iel2)+
76  & vel(iel2,2)*gradvel(2,3,iel2)+
77  & vel(iel2,3)*gradvel(3,3,iel2))*xxj(3,indexf)
78  vcd=vcd*dvel2
79  endif
80 !
81  if(dabs(vud).lt.1.d-20) then
82  gamma(i)=0.d0
83  cycle
84  endif
85 c write(*,*) vcd,vud
86 !
87  phic=1.d0-vcd/vud
88 !
89  if(phic.ge.1.d0) then
90  gamma(i)=0.d0
91  elseif(phic.le.0.d0) then
92  gamma(i)=0.d0
93  elseif(betam.le.phic) then
94  gamma(i)=1.d0
95  else
96  gamma(i)=phic/betam
97  endif
98 c
99 c enhanced smart
100 c
101 c if(phic.lt.0.d0) then
102 c gamma(i)=1.d0
103 c elseif(phic.lt.1.d0/6.d0) then
104 c gamma(i)=3.d0
105 c elseif(phic.lt.0.7d0) then
106 c gamma(i)=0.75d0
107 c elseif(phic.lt.1.d0) then
108 c gamma(i)=1.d0/3.d0
109 c else
110 c gamma(i)=1.d0
111 c endif
112 c write(*,*) 'calcgamma ',i,iel1,iel2,phic,gamma(i)
113  enddo
114 !
115  return
subroutine flux(node1, node2, nodem, nelem, lakon, kon, ipkon, nactdog, identity, ielprop, prop, kflag, v, xflow, f, nodef, idirf, df, cp, R, rho, physcon, g, co, dvi, numf, vold, set, shcon, nshcon, rhcon, nrhcon, ntmat_, mi, ider, ttime, time, iaxial)
Definition: flux.f:24
Hosted by OpenAircraft.com, (Michigan UAV, LLC)