Example of initalization using RunR
This tutorial presents an example of how to use R for initialization of simulation.
To run it
make configure ./configure --enable-rinside # don't forget to add --other-flags-you-use tools/install.sh --rpackage 'png' # alternatively one can install the package from R console: $ `install.packages("png")` make advection_diffusion2D_fields CLB/advection_diffusion2D_fields/main example/runr/advection_diffusion_fields.xml
What it does
It is a simple example of adding to a model (in this case
advection_diffusion2D) the capability to be initialized from "parametric" fields.
By parametric field, we mean any field which is accessible only in a said lattice node (doesn't have a stencil).
Such parametric fields, can be declared with
parameter=TRUE argument to
From the perspective of the code they are easier to operate on, as writing to them doesn't require exchange of information through MPI.
Such "parametric" fields can be accessed through
RunR, and in turn used for setting custom profiles of velocities, densities, phasefields, etc. The example file executes the following R code:
library(png) tab = readPNG("example/data/japan.png")
Reads the png (requires
nx = dim(tab) ny = dim(tab) v = as.vector(tab[,,3]^3) x = round(as.vector(Solver$Geometry$X) - 0.5) %% nx y = round(as.vector(Solver$Geometry$Y) - 0.5) %% ny Solver$Fields$phi0 = v[(ny - 1 - y) + ny*x + 1]
Writes the third (blue) component of the png to the field
phi0 (raised to the third power, for contrast).
One could do
Solver$Fields$phi0 = tab[,,3], but that would not cope with the orientation and potential MPI division.
R = 100 maxu = 0.01 x = Solver$Geometry$X - 512 y = Solver$Geometry$Y - 320 r = sqrt(x^2+y^2) w = exp(-r^2/(2*R^2)) / (exp(-1/2)*R) * maxu Solver$Fields$ux = y * w Solver$Fields$uy = -x * w
Calculates and sets the advection velocities fields
uy with a vortex around middle of the domain.
Solver$Actions$InitFromFields() # Initiate phi from phi0
InitFromFields action, which in this case just does