Skip to content

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 AddField or AddDensity. 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 png package)

nx = dim(tab)[2]
ny = dim(tab)[1]
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 ux and uy with a vortex around middle of the domain.

Solver$Actions$InitFromFields() # Initiate phi from phi0

Executes the InitFromFields action, which in this case just does phi=phi0