|
| 1 | +\documentclass[11pt]{article} |
| 2 | +%******************************************************************* |
| 3 | +%--Packages |
| 4 | +%******************************************************************* |
| 5 | +\usepackage[final]{graphicx,epsfig} |
| 6 | +\usepackage{subfigure} |
| 7 | +\usepackage{subfigmat} |
| 8 | +\newcommand{\noi}{\noindent} |
| 9 | + |
| 10 | +\setlength{\parindent}{0pt} |
| 11 | +\setlength{\parskip}{5pt plus 2pt minus 1 pt} |
| 12 | +\topmargin -5mm |
| 13 | +\evensidemargin 8mm |
| 14 | +\oddsidemargin 2mm |
| 15 | +\textwidth 158mm |
| 16 | +\textheight 230mm |
| 17 | +%\renewcommand{\baselinestretch}{1.0} |
| 18 | +\frenchspacing |
| 19 | +\sloppy |
| 20 | + |
| 21 | +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
| 22 | + |
| 23 | +\begin{document} |
| 24 | +\pagestyle{empty} |
| 25 | + |
| 26 | +\begin{center} |
| 27 | + {\fontsize{14}{20}\bf |
| 28 | + User-manual for COOLFluiD RDS-Unsteady Navier-Stokes \\ |
| 29 | + (version 2011.04) \\[10pt]} |
| 30 | +\end{center} |
| 31 | + |
| 32 | +\begin{center} |
| 33 | + {Nad \`{e}ge Villedieu, \underline{ [email protected]} \\ |
| 34 | + Von Karman Institute, Aeronautics \& Aerospace Dept.} |
| 35 | +\end{center} |
| 36 | + |
| 37 | +The test case presented here is solving a viscous unsteady flow over a cylinder at $Re=140$ and $M=0.2$. It is set up with adimensionnalized values, which means that the diameter of the cylinder |
| 38 | +is one and the density and velocity are one. The other parameters are computed such that the Mach and the Reynolds numbers are as expected. |
| 39 | + |
| 40 | +\section{Options that are common to all CFcases} |
| 41 | + |
| 42 | +Necessary modules to run this test case: |
| 43 | +\begin{verbatim} |
| 44 | +Simulator.Modules.Libs = libForwardEuler libCFmeshFileWriter libCFmeshFileReader |
| 45 | +libTecplotWriter libNavierStokes libFluctSplit libFluctSplitSystem |
| 46 | +libFluctSplitSpaceTime libFluctSplitSpaceTimeNavierStokes libGambit2CFmesh |
| 47 | +\end{verbatim} |
| 48 | +{\bf WATCH OUT:} The order of the libraries is very important!!! It must be in this order. |
| 49 | + |
| 50 | + |
| 51 | +\subsection{Physical Model} |
| 52 | +The physical model should be set as follows: |
| 53 | +\begin{verbatim} |
| 54 | +Simulator.SubSystem.Default.PhysicalModelType = NavierStokes2D |
| 55 | +
|
| 56 | +Simulator.SubSystem.NavierStokes2D.DiffTerm.ViscosityLaw = Constant |
| 57 | +Simulator.SubSystem.NavierStokes2D.DiffTerm.Constant.Value = 0.0000632911 |
| 58 | +\end{verbatim} |
| 59 | +The viscosity coefficient is set to a constant value such that the Reynolds number is |
| 60 | +respected. |
| 61 | + |
| 62 | +\subsection{Pseudo-time solver} |
| 63 | +In this case we use an explicit Forward Euler solver for the pseudo-time iterations. The pseudo-time process |
| 64 | +is explained in \cite{AIAA-paper}. |
| 65 | +To choose the type of pseudo-time discretisation the option is: |
| 66 | +\begin{verbatim} |
| 67 | +Simulator.SubSystem.ConvergenceMethod = FwdEuler |
| 68 | +\end{verbatim} |
| 69 | +And the CFL is defined by: |
| 70 | +\begin{verbatim} |
| 71 | +Simulator.SubSystem.FwdEuler.Data.CFL.Value = 0.6 |
| 72 | +\end{verbatim} |
| 73 | +{\bf WATCH OUT:} This CFL number is not dictated by the past shield condition (\cite{mr-thesis}).\\ |
| 74 | + |
| 75 | +A possible set up of the stop condition of the pseudo-time is: |
| 76 | +\begin{verbatim} |
| 77 | +Simulator.SubSystem.FwdEuler.StopCondition = RelativeNormAndMaxIter |
| 78 | +Simulator.SubSystem.FwdEuler.RelativeNormAndMaxIter.RelativeNorm = -5.0 |
| 79 | +Simulator.SubSystem.FwdEuler.RelativeNormAndMaxIter.MaxIter = 500 |
| 80 | +\end{verbatim} |
| 81 | +In this case, the (pseudo-time) iterations will stop when the 500 iterations |
| 82 | +has been executed, or when the relative norm of the residual is $-5.0$ (the relative norm is |
| 83 | +the difference between the residual of the first and of the last iteration). This option is the most convenient, |
| 84 | +but it is also possible to check the absolute norm and the maximal number of iterations (\texttt{AbsoluteNormAndMaxIter}) or |
| 85 | +only the maximal number of iterations (\texttt{MaxNumberSteps}).\\ |
| 86 | + |
| 87 | +It is possible choose to print or not the evolution of the residuals: |
| 88 | +\begin{verbatim} |
| 89 | +Simulator.SubSystem.FwdEuler.Data.PrintHistory = false |
| 90 | +\end{verbatim} |
| 91 | +The residuals can be computed using different norms, it is better |
| 92 | +to use L2 norm. Then, it is also possible to define which variable should |
| 93 | +fufill the stop condition: |
| 94 | +\begin{verbatim} |
| 95 | +Simulator.SubSystem.FwdEuler.Data.NormRes = L2 |
| 96 | +Simulator.SubSystem.FwdEuler.Data.L2.MonitoredVarID = 0 |
| 97 | +Simulator.SubSystem.FwdEuler.Data.L2.ComputedVarID = 0 1 2 3 |
| 98 | +\end{verbatim} |
| 99 | +\subsection{The mesh} |
| 100 | +The mesh is loaded and setup as follow: |
| 101 | +\begin{verbatim} |
| 102 | +Simulator.SubSystem.Default.listTRS = InnerCells wall in out symm_0 symm_1 |
| 103 | +Simulator.SubSystem.MeshCreator = CFmeshFileReader |
| 104 | +Simulator.SubSystem.CFmeshFileReader.Data.FileName = kvs2.CFmesh |
| 105 | +\end{verbatim} |
| 106 | + |
| 107 | +\section{RDS} |
| 108 | +\subsection{Solver} |
| 109 | +To choose the residual method as solver: |
| 110 | +\begin{verbatim} |
| 111 | +Simulator.SubSystem.SpaceMethod = FluctuationSplit |
| 112 | +\end{verbatim} |
| 113 | +When one want to restart from a previous solution this option should be on \texttt{true} |
| 114 | +\begin{verbatim} |
| 115 | +Simulator.SubSystem.FluctuationSplit.Restart = true |
| 116 | +\end{verbatim} |
| 117 | +{\bf WATCH OUT:} The default value of this boolean is \texttt{false} |
| 118 | + |
| 119 | + |
| 120 | +To define which variables are used in each step of the method (to write the solution, to update the |
| 121 | +residual, to average the solution in each cell in order to compute the Jacobian and to compute the diffusive term) |
| 122 | +\begin{verbatim} |
| 123 | +Simulator.SubSystem.FluctuationSplit.Data.SolutionVar = Cons |
| 124 | +Simulator.SubSystem.FluctuationSplit.Data.UpdateVar = Cons |
| 125 | +Simulator.SubSystem.FluctuationSplit.Data.DistribVar = Cons |
| 126 | +Simulator.SubSystem.FluctuationSplit.Data.LinearVar = Cons |
| 127 | +Simulator.SubSystem.FluctuationSplit.Data.DiffusiveVar = Cons |
| 128 | +\end{verbatim} |
| 129 | +{\bf WATCH OUT:} \textttt{DiffusiveVar} should always be Cons when using \texttt{UnsteadyNavierStokes}. The |
| 130 | +\texttt{LinearVar} are not very important when CRD \cite{mr-thesis} is used to compute the residual. It is better to put it to Roe when |
| 131 | +shocks are considered and N or Nlim schemes are used |
| 132 | + |
| 133 | +To setup the quadrature rule used to compute the residual on the sides of the element: |
| 134 | +\begin{verbatim} |
| 135 | +Simulator.SubSystem.FluctuationSplit.Data.IntegratorQuadrature = GaussLegendre |
| 136 | +Simulator.SubSystem.FluctuationSplit.Data.IntegratorOrder = P3 |
| 137 | +\end{verbatim} |
| 138 | +{\bf WATCH OUT:} Those line are extremely important for any system computations because the |
| 139 | +default quadrature rule is accurate only for linear functions |
| 140 | + |
| 141 | +\subsection{Initialization} |
| 142 | +It is necessary to intialize the field and also the boundaries |
| 143 | +where a strong condition is used. |
| 144 | + |
| 145 | +\begin{verbatim} |
| 146 | +Simulator.SubSystem.FluctuationSplit.InitComds = InitState \ |
| 147 | + StrongNoSlipWallAdiabaticNS2D |
| 148 | +
|
| 149 | +
|
| 150 | +Simulator.SubSystem.FluctuationSplit.InitNames = InField InWall |
| 151 | +
|
| 152 | +Simulator.SubSystem.FluctuationSplit.InField.applyTRS = InnerCells |
| 153 | +Simulator.SubSystem.FluctuationSplit.InField.Vars = x y |
| 154 | +Simulator.SubSystem.FluctuationSplit.InField.Def = 1.0 1.0 0.0 350.9087378 |
| 155 | +
|
| 156 | +Simulator.SubSystem.FluctuationSplit.InWall.applyTRS = wall |
| 157 | +\end{verbatim} |
| 158 | + |
| 159 | +\section{Unsteady RDS for Navier-Stokes} |
| 160 | + |
| 161 | +\subsection{Writing solutions} |
| 162 | +It is possible to change make the name of the output file dependent on the time: |
| 163 | +\begin{verbatim} |
| 164 | +Simulator.SubSystem.CFmesh.AppendTime = true |
| 165 | +Simulator.SubSystem.Tecplot.AppendTime = true |
| 166 | +\end{verbatim} |
| 167 | + |
| 168 | +\subsection{Defenition of the time step} |
| 169 | +There are two possibilities to determine the time step. |
| 170 | +First, one can fix the value of the time step constant |
| 171 | +over all the computation: |
| 172 | + |
| 173 | +\begin{verbatim} |
| 174 | +Simulator.SubSystem.SubSystemStatus.TimeStep = 0.002 |
| 175 | +\end{verbatim} |
| 176 | +{\bf WATCH OUT:} When running in parallel it is mandatory to use this method!! |
| 177 | + |
| 178 | +The second option is to determine the time step at every time iteration, |
| 179 | +then it is computed by $\Delta t= DT \_ Ratio \cdot MaxDT$, where $MaxDT$ |
| 180 | +denotes the maximum time step respecting the past shield condition \cite{mr-thesis} |
| 181 | + |
| 182 | +\begin{verbatim} |
| 183 | +Simulator.SubSystem.SubSystemStatus.TimeStep = 0.002 |
| 184 | +Simulator.SubSystem.SubSystemStatus.ComputeDT = MaxDT |
| 185 | +Simulator.SubSystem.SubSystemStatus.MaxDT.DT_Ratio = 0.5 |
| 186 | +\end{verbatim} |
| 187 | +{\bf WATCH OUT:} The first line is still necessary to fix the first time step. Moreover, this option can be used |
| 188 | +only if the simulation is ran in serial. Indeed, up to now, the time step are not synchronized. |
| 189 | + |
| 190 | +Since there is a restriction on the time step, it is usually interested to know |
| 191 | +what is this limit. So, in general, it is better to first launch one simulation on one processor with two time steps |
| 192 | +and with non fixed time step. Like that it is possible to know what time step should be used. Anyway, in the case of |
| 193 | +a viscous flow, usually, the time step should be smaller that the past shield condition. |
| 194 | + |
| 195 | +\subsection{Stop condition} |
| 196 | +There are two options to stop the computation. The first one is to |
| 197 | +decide to stop the simulation when a threshold time is reached: |
| 198 | +\begin{verbatim} |
| 199 | +Simulator.SubSystem.StopCondition = MaxTime |
| 200 | +Simulator.SubSystem.MaxTime.maxTime = 500.0 |
| 201 | +\end{verbatim} |
| 202 | +{\bf WATCH OUT:} The time that will be reached is not exactly the one asked. Indeed, the simulation will stop |
| 203 | +as soon as the \texttt{maxTime} is reached or passed: at the last iteration,if the time step is bigger than the difference between the current |
| 204 | +time and the final one, then the final time will be bigger than \texttt{MaxTime}. |
| 205 | + |
| 206 | + |
| 207 | +The other possibility is to stop the computation when a number of time step |
| 208 | +has been reached |
| 209 | +\begin{verbatim} |
| 210 | +Simulator.SubSystem.StopCondition = MaxNumberSteps |
| 211 | +Simulator.SubSystem.MaxNumberSteps.nbSteps = 13000 |
| 212 | +\end{verbatim} |
| 213 | + |
| 214 | + |
| 215 | + |
| 216 | +\subsection{Solver} |
| 217 | + |
| 218 | +First, we choose what is the strategy used to discretize the unsteady problem. |
| 219 | +The option used here is the space-time where the advective residual is computed using CRD (see \cite{mr-thesis}) |
| 220 | +\begin{verbatim} |
| 221 | +Simulator.SubSystem.FluctuationSplit.Data.FluctSplitStrategy = STU_CRD |
| 222 | +\end{verbatim} |
| 223 | +{\bf WATCH OUT:} Only this strategy has been validated for the unsteady Navier-Stokes |
| 224 | + |
| 225 | +The distribution coefficients are defined by the splitter, here we use the space-time version |
| 226 | +of LDA, two versions are possible \texttt{STKT$\_$SysLDAC} and \texttt{STKS$\_$SysLDAC}, only the first |
| 227 | +one has been validated for the current problem. |
| 228 | +\begin{verbatim} |
| 229 | +Simulator.SubSystem.FluctuationSplit.Data.SysSplitter = STKT_SysLDAC |
| 230 | +\end{verbatim} |
| 231 | +{\bf WATCH OUT:} When starting the simulation from scratch it may be better to start with the N scheme (\texttt{STKT$\_$SysNC}).\\ |
| 232 | + |
| 233 | +The command to define the diffusive term is: |
| 234 | +\begin{verbatim} |
| 235 | +Simulator.SubSystem.FluctuationSplit.Data.DiffusiveTerm = UnsteadyNavierStokes |
| 236 | +\end{verbatim} |
| 237 | + |
| 238 | + |
| 239 | +\subsection{Boundary conditions} |
| 240 | +In this case the wall of the cylinder is a non-slipping wall with an adiabatic condition |
| 241 | +for the energy, the inlet and outlet are strong subsonic conditions which are non-reflecting, and finally, for |
| 242 | +the top and bottom boundaries we use an hybrid boundary which check if the flow is getting in or out and |
| 243 | +then apply the corresponding conditions. |
| 244 | +\begin{verbatim} |
| 245 | +Simulator.SubSystem.FluctuationSplit.BcComds = StrongNoSlipWallAdiabaticNS2D \ |
| 246 | + StrongSubOutletNonRefEuler2DCons \ |
| 247 | + StrongSubInletNonRefEuler2DCons \ |
| 248 | + WeakFarFieldEuler2DCons \ |
| 249 | + WeakFarFieldEuler2DCons |
| 250 | +
|
| 251 | +Simulator.SubSystem.FluctuationSplit.BcNames = BCWall \ |
| 252 | + BCOut \ |
| 253 | + BCIn \ |
| 254 | + BCSym1 \ |
| 255 | + BCSym2 |
| 256 | +\end{verbatim} |
| 257 | + |
| 258 | +In the case of the wall and the outlet, only the TRS where the condition should be applied is |
| 259 | +necessary: |
| 260 | +\begin{verbatim} |
| 261 | +Simulator.SubSystem.FluctuationSplit.BCWall.applyTRS = wall |
| 262 | +Simulator.SubSystem.FluctuationSplit.BCOut.applyTRS = out |
| 263 | +\end{verbatim} |
| 264 | + |
| 265 | +For the inlet it is necessary to define the inflow: |
| 266 | +\begin{verbatim} |
| 267 | +Simulator.SubSystem.FluctuationSplit.BCIn.applyTRS = in |
| 268 | +Simulator.SubSystem.FluctuationSplit.BCIn.Vars = x y t |
| 269 | +Simulator.SubSystem.FluctuationSplit.BCIn.InFlow = 1.0 1.0 0.0 350.9087378 |
| 270 | +\end{verbatim} |
| 271 | + |
| 272 | + |
| 273 | +For the farfield it is necessary to give the total and static pressure and the total temperature. |
| 274 | +\begin{verbatim} |
| 275 | +Simulator.SubSystem.FluctuationSplit.BCSym1.applyTRS = symm_0 |
| 276 | +Simulator.SubSystem.FluctuationSplit.BCSym1.Ttot = 0.488793964 |
| 277 | +Simulator.SubSystem.FluctuationSplit.BCSym1.Ptot = 140.6641324 |
| 278 | +Simulator.SubSystem.FluctuationSplit.BCSym1.P = 140.1634951 |
| 279 | +
|
| 280 | +Simulator.SubSystem.FluctuationSplit.BCSym2.applyTRS = symm_1 |
| 281 | +Simulator.SubSystem.FluctuationSplit.BCSym2.Ttot = 0.488793964 |
| 282 | +Simulator.SubSystem.FluctuationSplit.BCSym2.Ptot = 140.6641324 |
| 283 | +Simulator.SubSystem.FluctuationSplit.BCSym2.P = 140.1634951 |
| 284 | +\end{verbatim} |
| 285 | + |
| 286 | + |
| 287 | +\subsection{Post-processing} |
| 288 | +It is possible to write in a file the evolution of the solution in one point: |
| 289 | +\begin{verbatim} |
| 290 | +Simulator.SubSystem.DataPostProcessing = DataProcessing |
| 291 | +Simulator.SubSystem.DataPostProcessingNames = DataProcessing2 |
| 292 | +Simulator.SubSystem.DataProcessing2.ProcessRate = 1 |
| 293 | +Simulator.SubSystem.DataProcessing2.Comds = SamplingPoint |
| 294 | +Simulator.SubSystem.DataProcessing2.Names = SPoint |
| 295 | +Simulator.SubSystem.DataProcessing2.SPoint.OutputFile = samplingbis.plt |
| 296 | +Simulator.SubSystem.DataProcessing2.SPoint.location = 1.0 0.0 |
| 297 | +Simulator.SubSystem.DataProcessing2.SPoint.SaveRate = 1 |
| 298 | +\end{verbatim} |
| 299 | + |
| 300 | + |
| 301 | + |
| 302 | +\begin{thebibliography}{02} |
| 303 | +\bibitem{AIAA-paper} L. Koloszar ,N. Villedieu, T. Quintino, J. Anthoine and P. Rambaud. Application of Residual Distribution Method for Acoustic Wave Propagation. |
| 304 | +{\emph{AIAA journal}}, AIAA 2009-3116 (2009) |
| 305 | +\bibitem{mr-thesis} M. Ricchiuto. {\emph{Construction and Analysis of Compact Residual Discretizations for Conservation Laws on Unstructured Meshes}}. Universit{\'e} Libre de Bruxelles (2005), |
| 306 | +ISBN: 2-930389-16-8 |
| 307 | +\end{thebibliography} |
| 308 | + |
| 309 | +\end{document} |
0 commit comments