CG  Version 25
lineSolveSA.h
Go to the documentation of this file.
1 ! --- Macros for the Spalart-Alamras model for the line solver ----
2 ! this file is includes by insLineSOlveNew.bf
3 
4 
5 c Define the turbulent eddy viscosity and its derivatives given chi3=chi^3
6 #beginMacro defineSADerivatives(dim,gt)
7  nuT = nu+u(i1,i2,i3,nc)*chi3/(chi3+cv1e3)
8  nuTd= chi3*(chi3+4.*cv1e3)/(chi3+cv1e3)**2
9  #If #gt == "rectangular"
10  nuTx(0)=ux2(nc)*nuTd
11  nuTx(1)=uy2(nc)*nuTd
12  #If #dim == "3"
13  nuTx(2)=uz2(nc)*nuTd
14  #End
15  #Else
16  #If #dim == "2"
17  nuTx(0)=ux2c(nc)*nuTd
18  nuTx(1)=uy2c(nc)*nuTd
19  #Else
20  nuTx(0)=ux3c(nc)*nuTd
21  nuTx(1)=uy3c(nc)*nuTd
22  nuTx(2)=uz3c(nc)*nuTd
23  #End
24  #End
25 #endMacro
26 
27 
28 c Define the turbulent eddy viscosity and its derivatives
29 #beginMacro defineValuesSA(dim,gt)
30  chi3 = (u(i1,i2,i3,nc)/nu)**3
31  ! chi3=0.
32  defineSADerivatives(dim,gt)
33 #endMacro
34 
35 
36 
37 c Macro to define the set of computations required to compute values for the SA turbulence model.
38 c used in the macros below
39 #beginMacro setupSA(dim,gt)
40  chi=uu(nc)/nu
41  chi3=chi**3
42  fnu1=chi3/( chi3+cv1e3)
43  fnu2=1.-chi/(1.+chi*fnu1)
44  dd = dw(i1,i2,i3)+cd0
45  dKappaSq=(dd*kappa)**2
46 #If #dim == "2"
47  #If #gt == "rectangular"
48  s=abs(uy2(uc)-ux2(vc))+ uu(nc)*fnu2/dKappaSq ! turbulence source term
49  #Else
50  s=abs(uy2c(uc)-ux2c(vc))+ uu(nc)*fnu2/dKappaSq ! turbulence source term
51  #End
52 #Else
53  #If #gt == "rectangular"
54  s=uu(nc)*fnu2/dKappaSq \
55  +sqrt( (uy2(uc)-ux2(vc))**2 + (uz2(vc)-uy2(wc))**2 + (ux2(wc)-uz2(uc))**2 )
56  #Else
57  s=uu(nc)*fnu2/dKappaSq \
58  +sqrt( (uy3c(uc)-ux3c(vc))**2 + (uz3c(vc)-uy3c(wc))**2 + (ux3c(wc)-uz3c(uc))**2 )
59  #End
60 #End
61  r= min( uu(nc)/( s*dKappaSq ), cr0 ) ! r= uu(nc)/( max( s*dKappaSq, 1.e-20) )
62  g=r+cw2*(r**6-r)
63  fw=g*( (1.+cw3e6)/(g**6+cw3e6) )**(1./6.)
64  ! We use Newton to linearize the quadratic term: y*y -> 2*y*y0 - y0**2
65  nSqBydSq=cw1*fw*(uu(nc)/dd)**2 ! for rhs
66  nBydSqLhs=2.*cw1*fw*(uu(nc)/dd**2) ! for lhs
67  nutb=sigmai*(nu+uu(nc))
68 #If #dim == "2"
69  #If #gt == "rectangular"
70  dndx(0)=ux2(nc)
71  dndx(1)=uy2(nc)
72  #Else
73  dndx(0)=ux2c(nc)
74  dndx(1)=uy2c(nc)
75  #End
76 #Else
77  #If #gt == "rectangular"
78  dndx(0)=ux2(nc)
79  dndx(1)=uy2(nc)
80  dndx(2)=uz2(nc)
81  #Else
82  dndx(0)=ux3c(nc)
83  dndx(1)=uy3c(nc)
84  dndx(2)=uz3c(nc)
85  #End
86 #End
87 #endMacro
88 
89 c Macro for the SA TM on rectangular grids
90 c Only the equation for the turbulence eddy viscosity is done here
91 #beginMacro fillSAEquationsRectangularGrid(dir)
92 if( nd.eq.2 )then
93  triLoops(2,SA,\
94  $defineArtificialDiffusionCoefficients(2,dir,R,SA),\
95  $setupSA(2,rectangular),\
96  t1=-(1.+cb2)*sigmai*dndx(dir),\
97  am(i1,i2,i3)= -(uu(uc+dir)+t1)*dxv2i(dir)-nutb*dxvsqi(dir) -cdm,\
98  bm(i1,i2,i3)= dtScale/dt(i1,i2,i3) +2.*nutb*(dxvsqi(0)+dxvsqi(1)) +cdDiag +nBydSqLhs - cb1*s,\
99  cm(i1,i2,i3)= (uu(uc+dir)+t1)*dxv2i(dir)-nutb*dxvsqi(dir) -cdp,,,,,\
100  f(i1,i2,i3,nc)=f(i1,i2,i3,nc)+fsa2d ## dir(nc) + nSqBydSq + adE ##dir(i1,i2,i3,nc),,)
101 else ! 3d
102  triLoops(3,SA,\
103  $defineArtificialDiffusionCoefficients(3,dir,R,SA),\
104  $setupSA(3,rectangular),\
105  t1=-(1.+cb2)*sigmai*dndx(dir),\
106  am(i1,i2,i3)= -(uu(uc+dir)+t1)*dxv2i(dir)-nutb*dxvsqi(dir) -cdm,\
107  bm(i1,i2,i3)= dtScale/dt(i1,i2,i3) +2.*nutb*(dxvsqi(0)+dxvsqi(1)+dxvsqi(2)) +cdDiag +nBydSqLhs - cb1*s,\
108  cm(i1,i2,i3)= (uu(uc+dir)+t1)*dxv2i(dir)-nutb*dxvsqi(dir) -cdp,,,,,\
109  f(i1,i2,i3,nc)=f(i1,i2,i3,nc)+fsa3d ## dir(nc) + nSqBydSq +adE3d ##dir(i1,i2,i3,nc),,)
110 end if
111 #endMacro
112 
113 
114 #beginMacro fillSAEquationsCurvilinearGrid(dir)
115 dirp1=mod(dir+1,nd)
116 dirp2=mod(dir+2,nd)
117 if( nd.eq.2 )then
118  triLoops(2,SA,\
119  $defineArtificialDiffusionCoefficients(2,dir,C,SA),\
120  $setupSA(2,curvilinear),\
121  t1=(uu(uc)*rxi(dir,0)+uu(vc)*rxi(dir,1)-nutb*(rxx(dir,0)+rxy(dir,1))\
122  -(1.+cb2)*sigmai*(dndx(0)*rxi(dir,0)+dndx(1)*rxi(dir,1)) )*drv2i(dir),\
123  t2=nutb*(rxi(dir,0)**2+rxi(dir,1)**2)*drvsqi(dir),\
124  am(i1,i2,i3)= -t1-t2 -cdm,\
125  bm(i1,i2,i3)= dtScale/dt(i1,i2,i3) +2.*(t2+nutb*(rxi(dirp1,0)**2+rxi(dirp1,1)**2)*drvsqi(dirp1) )\
126  +cdDiag +nBydSqLhs - cb1*s,\
127  cm(i1,i2,i3)= t1-t2 -cdp,,,,\
128  f(i1,i2,i3,nc)=f(i1,i2,i3,nc)+fsac2d ## dir(nc) + nSqBydSq +adE ##dir(i1,i2,i3,nc),,)
129 else ! 3d
130  triLoops(3,SA,\
131  $defineArtificialDiffusionCoefficients(3,dir,C,SA),\
132  $setupSA(3,curvilinear),\
133  t1=(uu(uc)*rxi(dir,0)+uu(vc)*rxi(dir,1)+uu(wc)*rxi(dir,2)\
134  -nutb*(rxx3(dir,0)+rxy3(dir,1)+rxz3(dir,2)) \
135  -(1.+cb2)*sigmai*(dndx(0)*rxi(dir,0)+dndx(1)*rxi(dir,1)+dndx(2)*rxi(dir,2)) )*drv2i(dir),\
136  t2=nutb*(rxi(dir,0)**2+rxi(dir,1)**2+rxi(dir,2)**2)*drvsqi(dir), \
137  am(i1,i2,i3)= -t1-t2 -cdm,\
138  bm(i1,i2,i3)= dtScale/dt(i1,i2,i3)\
139  +2.*(t2+nutb*( (rxi(dirp1,0)**2+rxi(dirp1,1)**2+rxi(dirp1,2)**2)*drvsqi(dirp1)+\
140  (rxi(dirp2,0)**2+rxi(dirp2,1)**2+rxi(dirp2,2)**2)*drvsqi(dirp2) ))\
141  +cdDiag +nBydSqLhs - cb1*s,\
142  cm(i1,i2,i3)= t1-t2 -cdp,,,,\
143  f(i1,i2,i3,nc)=f(i1,i2,i3,nc)+fsac3d ## dir(nc) + nSqBydSq +adE3d ##dir(i1,i2,i3,nc),,)
144 end if
145 #endMacro