Boring stuff

The previous equation is still too general, and a connection between stress and strain is still needed. Here we consider the case in which there is a linear relationship between both, which involves the coefficient of viscosity.

To begin with, let us consider a simple case in which a fluid is confined between two planes. One of them moves sideways with a certain speed u_0, while the other is kept fixed. After a certain transient, some force is needed in order to keep this shearing. The simplest expression is

F= \mu A \frac{u_0}{L}.

The force is proportional to the area and to the velocity difference between the planes. It is also inversely proportional to their separation, L (this fact being the least obvious). Finally, a constant of proportionality is given by \mu, the viscosity coefficient, or

simply “the viscosity”. This constant may vary with temperature, density, pressure, but the point with Newtonian fluids is that it does not vary with the velocity field (or its derivatives).

Later, in section …, this flow will be solved as a solution of the Navier-Stokes equations, the Couette flow. There, it will be shown that the velocity is everywhere in the direction of the force exerted on the upper plane, let us call it $x$, and varies linearly between the planes, in the y direction. Therefore, the only components of the strain rate tensor are \epsilon_{xy} = \epsilon_{yx} = u_0 / ( 2 L ). We therefore have

\tau_{xy} = \mu \epsilon_{xy}.

With this in mind, let us look for a general relationship between \tau and    \epsilon. This is much easier if we go to the principal strain axes. These are the coordinates on which the strain rate is diagonal. Such coordinate system always exist, since the strain rate tensor is symmetric. Notice that in these system strains are not due to shear, only to dilations.

Better with stock pictures

pexels-photo-164531.jpeg

“A connection is needed”. Photo by Pixabay on Pexels.com

 

The previous equation is still too general, and a connection between stress and strain is still needed. Here we consider the case in which there is a linear relationship between both, which involves the coefficient of viscosity.

 

 

 

 

honey on white bowl

Holy cow, is honey viscous or what. Photo by Pixabay on Pexels.com

To begin with, let us consider a simple case in which a fluid is confined between two planes. One of them moves sideways with a certain speed u_0, while the other is kept fixed. After a certain transient, some force is needed in order to keep this shearing. The simplest expression is

F= \mu A \frac{u_0}{L}.

 

 

 

The force is proportional to the area and to the velocity difference between the planes. It is also inversely proportional to their separation, L (this fact being the least obvious). Finally, a constant of proportionality is given by \mu, the viscosity coefficient, or

action balls black and white illustration

Newton’s craddle. Another of this guy’s creations. Photo by Pixabay on Pexels.com

simply  “the viscosity”. This constant may vary with temperature, density, pressure, but the point with Newtonian fluids is that it does not vary with the velocity field (or its derivatives).

 

 

 

 

 

 

 

ocean water wave photo

What a wave. Its strain tensors must be on fire. Photo by Emiliano Arano on Pexels.com

Later, in section …, this flow will be solved as a solution of the Navier-Stokes equations, the Couette flow. There, it will be shown that the velocity is everywhere in the direction of the force exerted on the upper plane, let us call it $x$, and varies linearly between the planes, in the y direction. Therefore, the only components of the strain rate tensor are \epsilon_{xy} = \epsilon_{yx} = u_0 / ( 2 L ). We therefore have

\tau_{xy} = \mu \epsilon_{xy}.

 

 

With this in mind, let us look for a general relationship between \tau and $latex

black click pen on white paper

What a bunch of math. This is so hard. Photo by Lum3n.com on Pexels.com

\epsilon$. This is much easier if we go to the principal strain axes. These are the coordinates on which the strain rate is diagonal. Such coordinate system always exist, since the strain rate tensor is symmetric. Notice that in these system strains are not due to shear, only to dilations.

Tired of that “TeX” look?

TeX has been using computer modern (CM) font since its inception. But that “TeX” look may become a bit tiring. Of course, TeX is a typesetting engine, it is not limited to CM fonts. On the other hand, there aren’t so many fonts around for both the text and the math. (If you have no math,  xeTex makes it easy to use most fonts you can imagine, including the Microsoft and google families).

I found a very clear review of existing alternatives at the Font usage post, by Ryosuke Iritani (入谷 亮介). I have taken his suggestions and created a gallery, with a simple sample of text and equations.

More elegant Palatino

\usepackage[sc]{mathpazo}
\linespread{1.05} % Palladio needs more leading (space between lines)
\usepackage[T1]{fontenc}

mathpazo.png

Kpfonts (Palatino-like)

\usepackage{kpfonts}

mathpazo

Libertine

Used e.g. in Wikipedia on each sectioning

\usepackage{libertine}
\usepackage{libertinust1math}
\usepackage[T1]{fontenc}

libertine.png

STIX

Scientific and Technical Information Exchange; Times-based but much more elegant than txfonts package.

\usepackage[T1]{fontenc}
\usepackage{stix}

styx

Garamond

It’s a bit thin and less friendly

\usepackage[urw-garamond]{mathdesign}
\usepackage[T1]{fontenc}

garamond.png

Utopia (Adobe)

\usepackage[adobe-utopia]{mathdesign}
\usepackage[T1]{fontenc}

utopia.png

Charter

\usepackage[charter]{mathdesign}

charter.png

Crimson (with math support)

\usepackage[T1]{fontenc}
\usepackage{cochineal}
\usepackage[cochineal,varg]{newtxmath}

crimson.png

Baskervald

Baskerville-based, thicker font

\usepackage[lf]{Baskervaldx} % lining figures
\usepackage[bigdelims,vvarbb]{newtxmath} % math italic letters from Nimbus Roman
\usepackage[cal=boondoxo]{mathalfa} % mathcal from STIX, unslanted a bit
\renewcommand*\oldstylenums[1]{\textosf{#1}}

baskervald

Helvetica

So far, the only font not included the Iritani’s Font usage post!

\usepackage{helvet}
\usepackage{sansmath}

\usepackage{titlesec}  % this enforces helvetica in section and chapter titles
\titleformat{\chapter}[display]
  {\normalfont\sffamily\huge\bfseries}
  {\chaptertitlename\ \thechapter}{20pt}{\Huge}
\titleformat{\section}
  {\normalfont\sffamily\Large\bfseries}
  {\thesection}{1em}{}

% In main text, at the beginning:
\fontfamily{phv}\selectfont

% before the first equation:
\sansmath

helvetica

The code

All the above was produced with variations of this file. I just run latex on it, then dvips to get a ps file, which I then crop and export as PNG using the GIMP. Of course, depending on the system, some LaTeX packages may be needed, as well as fonts (I had to install urw-garamond on my arch linux system, for example.)

 

\documentclass{article}

\newcommand{\bfr}{\mathbf{r}}
\newcommand{\bfu}{\mathbf{u}}
\newcommand{\bfq}{\mathbf{q}}

\usepackage{amsmath}

\usepackage{libertine}
\usepackage{libertinust1math}
\usepackage[T1]{fontenc}

\usepackage{lipsum}% for filler text

\begin{document}

\section{A section}

\lipsum[10]

Equations:

\begin{equation}
\frac{d \mathbf{u}}{d t} = - \nabla p + \nu \nabla^2 \mathbf{u},
\end{equation}

\begin{equation}
\begin{split}
E &= m c^{2},\\
T &= 2\pi \sqrt{\frac{m}{k}}
\end{split}
\end{equation}

\begin{equation}
\iint \phi = - \oint p
\end{equation}
\end{document}

Plotting 2D column-shaped results with python

Ok, so you have your computational output of a set of 2D points. You have been lazy and done the obvious stuff: arrange them in columns, with the first one being the x coordinates, second one the y coordinate, then come the fields, which may be scalar (one column each), or vector (two columns each, one for each coordinate). How to visualize them?

With python, start with

ipython --pylab

Then, read the data

In [4]: dt = loadtxt( ‘1/mesh.dat’ )

In [5]: shape( dt )
Out[5]: (1024, 27)

Notice the last command tells us we have 1024 data points, and 27 fields (well, 25 + positions). For convinience, assign columns to arrays:

In [6]: x=dt[:,0]; y=dt[:,1]; al=dt[:,4]

Now x and y are positions, and “al” is the scalar field for the fifth column (number 4, since counters start at 0 in python).

To visualize the positions,

In [7]: scatter( x , y )

A scalar field may be visualized with a color map:

In [9]: scatter( x , y , c = al )

The “c=” means the color is taken from field al. One may fiddle with colormaps and symbol sizes:

In [9]: scatter( x , y , c = al , cmap= plt.cm.Blues, s=8 )

To know the range we are plotting, produce a color bar:

In [19]: colorbar()

Remember each plotting is overlaid on the previous one, so it is necessary to blank the plot from time to time:

In [11]: clf()

For vector fields, assign coordinates to two separate arrays:

In [20]: vx=dt[:,8]; vy=dt[:,9]

Then, use “quiver” to get a vector plot:

In [22]: quiver( x, y, vx , vy )

 

 

A markdown test

This is a test of markdown blog writing. The writing comes straight from my website on CFD methods. These were written in markdown under reveal.js, for quick and nice lecture slides. Some changes had to be made:

  • LaTeX must start as “dollar sign latex” … “dollar”
  • Links to local files (such as pictures) don’t work
  • Lists (such as this one) do not seem to work well

 

 

 

 

Muy a menudo, se parte de las EDPs, conocidas, por ejempo:

\frac{\partial u}{\partial t} + c \frac{\partial u}{\partial x} = 0

Estas se discretizan: sustituyendo las derivadas por diferencias.

Sin embargo, este es un proceso de ida y vuelta, porque
las EDPs se deducen a nivel discreto.

Deducción

 

 

Se suponen cambios de un campo u sólo
en la dirección x

Esquema de convección en 1D

 

Esquema de convección en 1D

conveccion_1d

parts_bw_values_250

 

El cambio en la cantidad total A \Delta x \, u_i será:

\frac{d }{d t} (A \Delta x \, u_i ) = \Phi_{i-1/2} - \Phi_{i+1/2}

Flujos, convección

Antes los flujos por las caras venían dados por:

\Phi_{i-1/2} = A c \, u_{i-1/2}

\Phi_{i+1/2} = A c \, u_{i+1/2}

\frac{d }{d t} (A \Delta x \, u_i ) = A c \, u_{i-1/2} - A c \, u_{i+1/2}

Sound waves with attenuation

Just a simple derivation of the role of attenuation in the standard sound wave equation. Original work: Stokes, 1845.

Starting with the Navier-Stokes momentum equation

\frac{\partial }{\partial t} \mathbf{u} + \mathbf{u} \nabla \mathbf{u} = - \frac{1}{\rho} \nabla p + \frac{\mu}{\rho} \nabla^2 \mathbf{u} + \left(\frac{\lambda+\mu}{\rho}\right)\nabla (\nabla\cdot\mathbf{u}) ,

where \lambda is a Lamé viscosity coefficient. The bulk viscosity coeficient  is defined as  \zeta = \lambda + (2/3) \mu. The last term  is often neglected, even in compressible flow, but sound attenuation is one of the few cases where it may have some influence. All viscosities are assumed to be constant, but in this case this is a safe assumption, since we are going to assume small departures about equilibrium values.

Continue reading

Sparse Poisson problem in eigen

OwlgenBack to scientific computing. Lately, I have been using the Eigen libraries for linear algebra. They were recommended by the CGAL project, and they indeed share a common philosophy. Thanks to the rather high C++ level they can accomplish this sort of magic:


  int n = 100;
  VectorXd x(n), b(n);
  SpMat A(n,n);

  fill_A(A);

  fill_b(b);

  // solve Ax = b
  Eigen::BiCGSTAB<SpMat> solver;
  //ConjugateGradient<SpMat> solver;

  solver.compute(A);

  x = solver.solveWithGuess(b,x0);

Notice that A is a sparse matrix! I am next describing how to use this in order to solve the 1D Poisson equation.

Continue reading

OpenFOAM cheatlist

A quick cheatsheet for OpenFOAM. In italics, things that are useful but not part of OpenFOAM proper. Interesting read: The OpenFOAM Technology Primer

Sites

Shortcuts to directories

(type “alias” to reveal these)

  • run (go to own’s running directory)
  • foam
  • foamfv
  • foam3rdParty (hit <tab> for these longish commands!)
  • tut
  • app
  • sol
  • util
  • lib
  • src

Environment variables

  • echo $FOAM_ <tab>  (directories)
  • echo $WM_ <tab>  (building, aka compiling, settings)

Mesh

  • Generation
  • Import / export
    • foamMeshToFluent
    • fluentMeshToFoam, etc …
  • Operations
    • refineHexMesh
    • transformPoints
    • makeAxialMesh
    • collapseEdges
    • autoPatch
    • mirorMesh
  • Properties
    • checkMesh

Fields

  • setFields
  • topoSet
  • patchAverage
  • patchIntegrate
  • vorticity
  • yPlusRAS
  • yPlusLES
  • boxTurb
  • applyBoundaryLayer
  • R
  • wallShearStress

Help

  • foamHelp (e.g. foamHelp boudary -field U)

Postprocessing

  • sample
  • paraview
  • probeLocations

Solvers

  • icoFoam
  • interFoam
  • many, many others

Running

  • foamJob
  • decomposePar
  • reconstructPar
  • mpirun
  • nohup

Building

  • foamNew source App …
  • doxygen doxyfile
  • gdb
  • valgrind
  • wmake
  • wclean
  • aliases for settings: wm32, wm64, wmSP, wmDP, wmSET, wmUNSET

Sorting eivenvectors in octave

A brief note. Doing ee= eig(m); produces a vector with all eigenvalues of matrix m. These are unsorted, so ee=sort(eig(m)); produces a vector with a sorted list of all eigenvalues of matrix m.

If we want the eigenvectors, [vv,eed]=eig(m); produces a diagonal matrix eed whose elements are the same as ee, and are unsorted. Who to produce a sorted vector with the eigenvalues, and re-order the eigenvectors accordingly? Thus:

[vv,eed]=eig(m);

[ee,perm] = sort(diag(eed));

vv=vv(:,perm);