Transcript

Customiza*on  of  LES  turbulence    model  in  OpenFOAM

yotakagi77  Open  CAE  Local  User  Groups  in  Japan  

@Kansai  June  13,  2015,  Osaka  University

Agenda

•  Basic  informa*on  on  turbulence  model  •  Tensor  mathema*cs  •  Exercise  1:  Compiling  and  execu*on  of  WALE  model  

•  Exercise  2:  Implementa*on  of  coherent  structure  Smagorisky  model  

•  Addi*onal  works  

Basic  informa*on  on  turbulence  model  

Turbulent  flow  simula*on

DNS LES RANS Modeling No Subgrid  scale Reynolds  average Accuracy ◎ ○ △

Cost × ○ ◎

Vortex  (eddy)  field Reynolds  average 4

Turbulent  flow  simula*on

DNS LES RANS Modeling No Subgrid  scale Reynolds  average Accuracy ◎ ○ △

Cost × ○ ◎

DNS  grid,  u Reynolds  average 5

Turbulent  flow  simula*on

DNS LES RANS Modeling No Subgrid  scale Reynolds  average Accuracy ◎ ○ △

Cost × ○ ◎

LES  grid,  u  =  u  –  u’ Reynolds  average 6

Turbulent  flow  simula*on

DNS LES RANS Modeling No Subgrid  scale Reynolds  average Accuracy ◎ ○ △

Cost × ○ ◎

Filtering  approach Reynolds  average 7

Detached-­‐eddy  simula*on  (DES) •  P.  R.  Spalart  (1997):  

– We  name  the  new  approach  “Detached-­‐Eddy  Simula8on”  (DES)  to  emphasize  its  dis8nct  treatments  of  a?ached  and  separated  regions.

Super-­‐Region Region

Euler  (ER)

RANS  (RR) Viscous  (VR)

Outer  (OR)

LES  (LR) Viscous  (VR)

Focus  (FR)

Departure  (DR) 8

Spalart  (2001)

Detached-­‐eddy  simula*on  (DES) •  P.  R.  Spalart  (1997):  

– We  name  the  new  approach  “Detached-­‐Eddy  Simula8on”  (DES)  to  emphasize  its  dis8nct  treatments  of  a?ached  and  separated  regions.

Super-­‐Region Region

Euler  (ER)

RANS  (RR) Viscous  (VR)

Outer  (OR)

LES  (LR) Viscous  (VR)

Focus  (FR)

Departure  (DR)

Spalart  (2001)

9

Coupling  with  momentum  equa*on  through  viscosity

•  RANS  

 •  LES

∂U∂t

+∇⋅ UU( ) −∇⋅ ν+ νt( ) ∇U + (∇U)T( )( ) =∇p

∂U∂t

+∇⋅ UU( ) −∇⋅ ν+ νSGS( ) ∇U + (∇U)T( )( ) =∇p

Turbulent viscosity

Sub-grid scale viscosity

Only  change  viscosity!

10

Significant  problem:    difference  of  filtering  (average)  approaches

LES  Filtering Reynolds  average

Spa*al Temporal

Inconsistency  at  the  interface  between  LES  and  RANS  regions 11

Standard  SGS  model  in  OpenFOAM

Library  name Note

Smagorinksy Smagorinsky  model

Smagorinksy2 Smagorinsky  model  with  3-­‐D  filter

homogeneousDynSmagorinsky

Homogeneous  dynamic  Smagorinsky  model

dynLagragian Lagrangian  two  equa*on  eddy-­‐viscosity  model

scaleSimilarity Scale  similarity  model

mixedSmagorinsky Mixed  Smagorinsky  /  scale  similarity  model

homogeneousDynOneEqEddy

One  Equa*on  Eddy  Viscosity  Model  for  incompressible  flows

laminar Simply  returns  laminar  proper*es

kOmegaSSTSAS k-­‐ω  SST  scale  adap*ve  simula*on  (SAS)  model

Standard  SGS  model  in  OpenFOAM

Library  name Note

oneEqEddy k-­‐equa*on  eddy-­‐viscosity  model

dynOneEqEddy Dynamic  k-­‐equa*on  eddy-­‐viscosity  model

spectEddyVisc Spectral  eddy  viscosity  model

LRDDiffStress LRR  differen*al  stress  model

DeardorffDiffStress Deardorff  differen*al  stress  model

SpalartAllmaras Spalart-­‐Allmaras  model

SpalartAllmarasDDES Spalart-­‐Allmaras  delayed  detached  eddy  simula*on  (DDES)  model

SpalartAllmarasIDDES Spalart-­‐Allmaras  improved  DDES  (IDDES)  model

vanDriestDelta   Simple  cube-­‐root  of  cell  volume  delta  used  in  incompressible  LES  models

Tensor  mathema*cs

Tensor

•  Rank  0:  ‘scalar’,  e.g.  volume  V,  pressure  p.  •  Rank  1:  ‘vector’,  e.g.  velocity  vector  u,  surface  vector  S.  Descrip*on:  a  =  ai  =  (a1,  a2,  a3).  

•  Rank  2:  ‘tensor’,  e.g.  strain  rate  tensor  Sij,  rota*on  tensor  Ωij.    

       Descrip*on:      

T = Tij =T11 T12 T13T21 T22 T23T31 T32 T33

!

"

###

$

%

&&&

Symmetric/an*symmetric  tensor  

•  Velocity  gradient  tensor  is  decomposed  into  strain  rate  tensor  (symmetric)  and  vor*city  tensor  (an*symmetric,  skew).    

•  In  turbulence  modeling,  Sij  and  Ωij  are  usually  used.

Dij =∂ui∂x j, Sij =

12∂ui∂x j

+∂uj∂xi

"

#$$

%

&'',Ωij =

12∂ui∂x j

−∂uj∂xi

"

#$$

%

&''

Dij = Sij +Ωij

Opera*ons  exclusive  to  tensors  of  rank  2

T = 12(T+TT )+ 1

2(T−TT ) = symmT+ skewT,

trT = T11 +T22 +T33,diagT = (T11,T22,T33),

T = T− 13(trT)I+ 1

3(trT)I = devT+ hydT,

detT =T11T12 T13T21T22 T23T31T32 T33

OpenFOAM  tensor  classes Opera2on Mathema2cal Class

Addi*on a  +  b a  +  b

Subtrac*on a  –  b a  –  b

Scalar  mul*plica*on sa s  *  a

Scalar  division a  /  s a  /  s

Outer  product a  b a  *  b

Inner  product a  ·∙  b a  &  b

Double  inner  product a  :  b a  &&  b

Cross  product a  ×  b a  ^  b

Square a2 sqr(a)

Magnitude  squared |a|2 magSqr(a)

Magnitude |a| mag(a)

Power an pow(a,  n)

OpenFOAM  tensor  classes Opera2on Mathema2cal Class

Transpose TT T.T()

Diagonal diag  T diag(T)

Trace tr  T tr(T)

Deviatoric  component dev  T dev(T)

Symmetric  component symm  T symm(T)

Skew-­‐symmetric  component

skew  T skew(T)

Determinant det  T det(T)

Cofactors cof  T cof(T)

Inverse inv  T inv(T)

Exercise  1:  Compiling  and  execu*on  of  WALE  model  

Governing  equa*on  for  incompressible  LES

•  Filtered  con*nuity  and  Navier-­‐Stokes  equa*ons  

           where

∂ui∂xi

= 0,

∂ui∂t

+uj∂ui∂x j

= −1ρ∂p∂xi

+∂∂xi(−τ ij + 2νSij )

τ ij = uiuj −uiuj

SGS  eddy  viscosity  model

•  Decomposi*on  of  kine*c  energy    

•  Conserva*on  of  GS  energy  kGS  

•  Conserva*on  of  SGS  energy  kSGS  

∂kGS∂t

+uj∂kGS∂x j

= τ ijSij −εGS +∂∂xi

−uiτ ij −pujρ

+ν∂kGS∂x j

#

$%%

&

'((

k = 12ukuk =

12ukuk +

12(ukuk −ukuk )

kGS kSGS

∂kSGS∂t

+uj∂kSGS∂x j

= −τ ijSij −εSGS +∂∂xi

uiτ ij −12(uiuiuj +uj uiui )−

puj − pujρ

+ν∂kSGS∂x j

#

$%%

&

'((

Smagorinsky  model •  Local  equilibrium  between  SGS  produc*on  rate  and  SGS  energy  dissipa*on:  

•  Eddy  viscosity  approxima*on:  

•  Aper  dimensional  analysis  and  scaling,  

εSGS ≡ν∂ui∂x j

∂ui∂uj

−ν∂ui∂x j

∂ui∂x j

$

%&&

'

())= −τ ijSij

τija = −2vSGS S ij

νSGS = (CSΔ)2 | S |, | S |= 2S ijS ij , CS : Smagorinsky  constant

WALE  model

•  Traceless  symmetric  part  of  the  square  of  the  velocity  gradient  tensor:  

•  Eddy  viscosity  of  WALE  model:  

Sijd =12(Dij

2 +Dji2 )− 1

3δijDkk

2

= SikSkj +ΩikΩkj −13δij SmnSmn −ΩmnΩmn#$ %&

SijdSij

d =16(S2S2 +Ω2Ω2 )+ 2

3S2Ω2 + 2IVSΩ,

S2 = SijSij,Ω2 =ΩijΩij, IVSΩ = SikSkjΩ jlΩli

νSGS = (CwΔ)2 (SijdSij

d )3 / 2

(S ijS ij )5 / 2 + (Sij

dSijd )5 / 4

(Nicoud  and  Ducros,  1999)

Model  parameters  of  WALE  model

Field  a Field  b Field  c Field  d Field  e Field  f

Cw2/Cs2 10.81 10.52 10.84 10.55 10.70 11.27

If CS = 0.18, 0.55≤CW ≤ 0.6.If CS = 0.1, 0.32 ≤CW ≤ 0.34.

Model  parameter  Cw  is  dependent  on  Smagorinsky  constant  CS.

(Nicoud  and  Ducros,  1999)

Source  code  of  WALE  model

•  V&V  working  group,  Open  CAE  Society  of  Japan            hsps://github.com/opencae/VandV/tree/master/

OpenFOAM/2.2.x/src/libraries/incompressibleWALE    

•  OpenFOAM-­‐dev            hsps://github.com/OpenFOAM/OpenFOAM-­‐dev/tree/

master/src/TurbulenceModels/turbulenceModels/LES/WALE    

Download  and  compile

$  mkdir  –p  $FOAM_RUN  $  cd  $  git  clone  https://github.com/opencae/VandV  $  cd  VandV/OpenFOAM/OpenFOAM-­‐BenchmarkTest/

channelReTau110  $  cp  –r  src  $FOAM_RUN/..  $  run  $  cd  ../src/libraries/incompressibleWALE  $  wmake  libso  $  ls  $FOAM_USER_LIBBIN  

1.  Download  the  source  code  of  WALE  model  from  the  V&V  repository,  and  compile  the  WALE  model  library.

Simula*on  of  channel  flow  

$  run  $  cp  –r  $FOAM_TUTORIALS/incompressible/pimpleFoam/

channel395/  ./ReTau395WALE  $  cd  ReTau395WALE  

2.  The  standard  tutorial  case  of  channel  flow  at  Reτ  =  395:      copy  the  tutorial  case  file  into  your  run  directory.

3.  Edit  constant/LESProper*es  and  system/controlDict $  gedit  constant/LESProperties  

LESModel                WALE;  printCoeffs          on;  delta                      cubeRootVol;  ...

Simula*on  of  channel  flow   $  gedit  system/controlDict

...  libs  ("libincompressibleWALE.so");  

This  line  is  necessary  to  call  the  new  WALE  library  in  solver.

$  ./Allrun  

4.  Aper  checking  other  numerical  condi*ons  and  parameter,  run  the  solver.

5.  If  the  solver  calcula*on  is  normally  finished,  you  check  the  logs  and  visualize  the  flow  field  with  ParaView,  and  plot  the  fields  profile  generated  by  postChannel.

Simula*on  of  channel  flow  at  Reτ  =  110

$  run  $  cp  –r  ~/VandV/OpenFOAM/OpenFOAM-­‐BenchmarkTest/

channelReTau110/template  $FOAM_RUN/ReTau110WALE  $  cd  ReTau110WALE  $  gedit  caseSettings  

6.  If  you  use  the  test  case  of  channel  flow  supplied  in  the  V&V  repository,  copy  the  template  case  and  edit  the  seung.

controlDict  {      deltaT                    0.002;      endTime                  0.022;      libs                        "libincompressibleWALE.so";  }  

Simula*on  of  channel  flow  at  Reτ  =  110 turbulenceProperties  {      simulationType  LESModel;  }    LESProperties  {      LESModel  WALE;      delta  cubeRootVol;  }  

The  original  caseSeungs  is  for  DNS  simula*on  on  large  parallel  machine.  You  had  beser  to  change  other  parameters  in  blockMeshDict  and  decomposeParDict.

Simula*on  of  channel  flow  at  Reτ  =  110  

$  ./Allrun  

7.  Aper  checking  other  numerical  condi*ons  and  parameter,  run  the  solver.

8.  If  the  solver  calcula*on  is  normally  finished,  you  check  the  logs  and  visualize  the  flow  field  with  ParaView.  If  the  integra*on  *me  is  not  sufficient  for  the  flow  field  to  become  fully  developed  state,  run  longer  simula*ons.

Exercise  2:  Implementa*on  of  coherent  structure  Smagorisky  model

Original  source  codes  for  SGS  model

$  src  $  cd  turbulenceModels/incompressible/LES/  $  ls  

1.  Check  the  original  source  code  for  SGS  model.

2.  Glance  the  codes  of  Smagorinsky  model.  $  gedit  Smagorinsky/Smagorinsky.*  

3.  In  this  exercise,  we  look  the  codes  of  dynamic  models.  $  ls  *[Dd]yn*  

4.  Compare  the  structures  and  statements  of  the  related  codes  (*.C  and  *.H).  

Private  member  func*ons:  updateSubGridScaleFields    

void  Smagorinsky::updateSubGridScaleFields  (const  volTensorField&  gradU)  {      nuSgs_  =  ck_*delta()*sqrt(k(gradU));          nuSgs_.correctBoundaryConditions();    }  

void  dynLagrangian::updateSubGridScaleFields  (const  tmp<volTensorField>&  gradU)  {      nuSgs_  =  (flm_/fmm_)*sqr(delta())*mag(dev(symm(gradU)));          nuSgs_.correctBoundaryConditions();    }  

void  dynOneEqEddy::updateSubGridScaleFields  (      const  volSymmTensorField&  D,          const  volScalarField&  KK    )  {      nuSgs_  =  ck(D,  KK)*sqrt(k_)*delta();          nuSgs_.correctBoundaryConditions();    }  

In  Smagorinsky.C

In  dynLagrangian.C

In  dynOneEqEddy.C

Understanding  formula*on  with  codes

•  What  calcula*on,  mathema*cal  opera*on,  and  variable  are  necessary  for  coherent  structure  Smagosinsky  model  (CSM)?  Compare  the  formula*on  of  models  with  the  related  source  codes.  

•  In  CSM,  the  second  invariant  of  velocity  gradient  is  used:  

         where  

Q =12Ω ijΩ ij − S ijS ij( ) = −

12∂u j∂xi

∂u i∂x j

Sij =12∂u i∂x j

+∂u j∂xi

#

$ % %

&

' ( ( ,Ωij =

12∂u i∂x j

−∂u j∂xi

#

$ % %

&

' ( (

Coherent  structure  Smagorinsky  model  for  non-­‐rota*ng  flow  (NRCSM)

•  Smagorinsky  model  (SM)  based  on  an  eddy-­‐viscosity,  

•  The  model  parameter  C  is  determined  as  follows:  

 with  

 where                NRCSM  model  is  invalid  for  rota*ng  flow.    

C = C1 | FCS |3 / 2

C1 =1

20, FCS =

QE

τija = −2CΔ2 | S | S ij

(τija = −2νtS ij , νt = CΔ2 | S |)

E =12Ω ijΩ ij + S ijS ij( ) =

12∂u i∂x j

$

% & &

'

( ) )

2

Coherent  structure  Smagorinsky  model  (CSM)

•  Smagorinsky  model  (SM)  based  on  an  eddy-­‐viscosity,  

•  The  model  parameter  C  is  determined  as  follows:  

 with  

 where        Improved  CSM  model  is  valid  for  rota*ng  flow.  

 

C = C2 | FCS |3 / 2 FΩ

C2 =122

, FCS =QE

, FΩ =1− FCS

τija = −2CΔ2 | S | S ij

(τija = −2νtS ij , νt = CΔ2 | S |)

E =12Ω ijΩ ij + S ijS ij( ) =

12∂u i∂x j

$

% & &

'

( ) )

2

Seung  for  making  new  library

$  run  $  cd  ../src/libraries  $  cp  -­‐r  incompressibleWALE/WALE/  ./NRCSM  $  cp  –r  incompressibleWALE/Make  ./NRCSM  $  cd  NRCSM  $  rename  WALE  NRCSM  *  $  rm  –r  NRCSM.dep  $  rm  –rf  Make/linux64Gcc47DPOpt  $  gedit  Make/files  

1.  Copy  the  source  code  of    WALE  model.  Compile  them.

NRCSM.C  LIB  =  $(FOAM_USER_LIBBIN)/libNRCSM  

$  sed  –i  ‘s/WALE/NRCSM/g’  NRCSM.C    $  sed  –i  ‘s/WALE/NRCSM/g’  NRCSM.H  

Seung  for  making  new  library $  wmake  libso  $  ls  $FOAM_USER_LIBBIN  

If  you  find  the  renamed  and  recompiled  library  (libNRCSM.so),  you  are  ready  to  make  a  new  library  for  the  NRCSM.    2. You  can  easily  learn  the  codes  for  calcula*ng  the  Q  and  E  terms  from  the  postProcessing  u*li*es.          There  are  two  ways  of  calcula*ng  Q,  that  is,  with  velocity  gradient  tensor  and  with  SS  and  ΩΩ terms.

$  util  $  cd  postProcessing/velocityField/Q  $  gedit  Q.C  &  

Introducing  model  coefficient  C1

$  run  $  cd  ../src/libraries/NRCSM/  $  gedit  NRCSM.C  NRCSM.H  

3.  Replace  all  ‘cw’  with  ‘c1’  (gedit  or  sed),  and  change  the  value  to  0.05.  

       c1_          (                  dimensioned<scalar>::lookupOrAddToDict                  (                          "c1",                          coeffDict_,                          0.05                  )          )  

NRCSM.C  

$  wmake  libso  

Q  and  E  calcula*ons

4.  In  NRCSM.C,  insert  the  calcula*on  of  Q  and  E.  Copy&Paste  the  corresponding  sec*on  from  Q.C.  Save  and  Compile  them.  

volScalarField  Q  (    0.5*(sqr(tr(gradU))  -­‐  tr(((gradU)&(gradU))))  

);  volScalarField  E  (    0.5*(gradU  &&  gradU)  

);  

NRCSM.C  $  gedit  NRCSM.C  

$  wmake  libso  

FCS  and  C  calcula*ons

5.  In  NRCSM.C,  insert  the  calcula*on  of  FCS  and  C  (coefficient  of  eddy  viscosity  model).  Save  and  Compile  them.  

volScalarField  Fcs  (    Q/max(E,dimensionedScalar("SMALL",E.dimensions(),SMALL))  

);  volScalarField  ccsm_  (        c1_*pow(mag(Fcs),1.5)  );  

NRCSM.C  

$  gedit  NRCSM.C  

$  wmake  libso  

νSGS  calcula*on

6.  In  NRCSM.C,  modify  the  nuSGS_  calcula*on.  Look  the  other  updateSubGridScaleFields  func*ons  in  the  dynamic  models.  

nuSgs_  =  ccsm_*sqr(delta())*mag(dev(symm(gradU)));  NRCSM.C  

Save  and  compile  them.  $  wmake  libso  

7.  Finally,  comment  out  or  delete  unnecessary  statements  (the  calcula*ons  for  WALE  model).  Save  and  compile  them.  

$  wmake  libso  

$  gedit  NRCSM.C  

kSGS  calcula*on

//-­‐  Return  SGS  kinetic  energy  //    calculated  from  the  given  velocity  gradient  tmp<volScalarField>  k(const  tmp<volTensorField>&  gradU)  const  {    return  (2.0*c1_/ce_)*sqr(delta())*magSqr(dev(symm(gradU)));  

}  

NRCSM.H  

8.  The  calcula*on  of  kSGS  is  invalid,  but  the  value  of  kSGS  is  not  actually  used  in  LES  with  NRCSM  model.  If  you  requires  a  proper  kSGS,  consult  the  paper  of  Kobayashi  (PoF,  2005).  

Valida*on  with  channel  flow

$  run  $  cp  –r  $FOAM_TUTORIALS/incompressible/pimpleFoam/

channel395/  ./ReTau395NRCSM  $  cd  ReTau395NRCSM  

9.  The  standard  tutorial  case  of  channel  flow  at  Reτ  =  395:      copy  the  tutorial  case  file  into  your  run  directory.

10. Edit  constant/LESProper*es  and  system/controlDict $  gedit  constant/LESProperties  

LESModel                NRCSM;  printCoeffs          on;  delta                      cubeRootVol;  ...

Valida*on  with  channel  flow

$  gedit  system/controlDict

...  libs  ("libNRCSM.so");  

This  line  is  necessary  to  call  the  new  NRCSM  library  in  solver.

$  ./Allrun  

11. Aper  checking  other  numerical  condi*ons  and  parameter,  run  the  solver.

12.  If  the  solver  calcula*on  is  normally  finished,  you  check  the  logs  and  visualize  the  flow  field  with  ParaView,  and  plot  the  fields  profile  generated  by  postChannel.

Addi*onal  works

1.  Compile  and  test  the  WALE  model  supplied  from  openfoam-­‐dev.  Prepare  a  Make  directory  by  yourself.  

2.  Implementa*on  of  CSM  model.  Add  FΩ  term  and  C2  coefficient.  

3.  Calcula*on  of  Q  and  E  terms  with  SS  and  ΩΩ  terms.  Compare  the  results  with  the  solu*on  of  Exercise  2.  

4.  Valida*on  of  customized  model  with  other  flow  fields  such  pipe,  backstep,  cylinder,  and  rota*ng  flow.  

References •  OpenFOAM  User  Guide  •  OpenFOAM  Programmer’s  Guide  •  梶島,  乱流の数値シミュレーション 改訂版,  養賢堂  (2014).  •  P.  R.  Spalart  et  al.,  “Comments  on  the  Feasibility  of  LES  for  

Wings,  and  on  a  Hybrid  RANS/LES  Approach”,  1st  ASOSR  CONFERENCE  on  DNS/LES  (1997).  

•  P.  R.  Spalart,  “Young-­‐Person’s  Guide  to  Detached-­‐Eddy  Simula*on  Grids”,  NASA  CR-­‐2001-­‐211032  (2001).  

•  F.  Nicoud  and  F.  Ducros,  “Subgrid-­‐scale  modelling  based  on  the  square  of  velocity  gradient  tensor”,  Flow,  Turbulence  and  Combus*on,  62,  pp.183-­‐200  (1999).  

References •  小林,  “乱流構造に基づくサブグリッドスケールモデルの開

発”,  ながれ,  29,  pp.157-­‐160  (2010).  •  H.  Kobayashi,  “The  subgrid-­‐scale  models  based  on  coherent  

structures  for  rota*ng  homogeneous  turbulence  and  turbulent  channel  flow”,  Phys.  Fluids,  17,  045104  (2005).  

•  H.  Kobayashi,  F.  Ham  and  X.  Wu,  “Applica*on  of  a  local  SGS  model  based  on  coherent  structures  to  complex  geometries”,  Int.  J.  Heat  Fluid  Flow,  29,  pp.640-­‐653  (2008).  


Top Related