Overview
simulariatools is an open-source R package developed by Simularia, an environmental consulting firm specialized in atmospheric dispersion modelling.
It provides a collection of functions to pre- and post-process meteorological and air quality data in the context of air quality and odour dispersion modelling.
It is used daily in real-world applications, improving reproducibility, saving time and reducing errors.
Key functions
contourPlot2()plots a production-ready contour map of a pollutant concentration field.plotAvgRad()plots the hourly average of solar radiation.plotAvgTemp()plots the average atmospheric temperature.plotStabilityClass()plots histograms of atmospheric stability class.vectorField()plots a simple vector field given two components.importRaster()imports a generic raster file.importADSOBIN()imports an ADSO/BIN raster file.importSurferGrd()imports a grid file (CALPUFF).stabilityClass()computes atmospheric stability class.turnerStabilityClass()computes atmospheric PGT stability class with Turner method.downloadBasemap()downloads GeoTIFF basemaps from the Italian PCN.removeOutliers()removes time series outliers based on interquartile range.rollingMax()computes rolling max of a time series.
Installation
To install the latest release of simulariatools from CRAN:
install.packages("simulariatools")NOTE: To import ADSO/BIN data files via
importADSOBIN(), a working installation of Python3 is required. For more information about R and Python interoperability, please refer to the documentation ofreticulate.
Development version
To get bug fixes or to use a feature from the development version, install the development version from GitHub:
# install.packages("pak") pak::pkg_install("Simularia/simulariatools")
Examples
Contour Plot from NetCDF
First, import air quality data from NetCDF file with the appropriate convenience function:
library(simulariatools) nox_concentration <- importRaster( file = "./development/conc_avg.nc", k = 1000, destaggering = TRUE, variable = "nox", verbose = TRUE ) #> Raster statistics ----------------------------------------------- #> X (min, max, dx) : 496000.000 519250.000 250.000 #> Y (min, max, dy) : 4943000.000 4955250.000 250.000 #> nox (min, max, mean): 0.00e+00 2.71e+00 1.52e-01 #> -----------------------------------------------------------------
Concentration data are imported as a data.frame with x and y
columns corresponding to the coordinates of the cell centre and a z
column for grid values.
str(nox_concentration) #> 'data.frame': 4557 obs. of 3 variables: #> $ x: num 496125 496375 496625 496875 497125 ... #> $ y: num 4955125 4955125 4955125 4955125 4955125 ... #> $ z: num 0 0 0 0 0 0 0 0 0 0 ...
A quick contour plot, with default configuration, can be easily obtained
by running contourPlot2() without any optional argument:
contourPlot2(nox_concentration)The plot is customisable by using contourPlot2() arguments and by
piping ggplot2 instructions together with the + operator.
In the following example, the original domain is cropped, colour levels
are explicitly assigned and a legend name is provided through function
arguments. Furthermore, labs() and theme_minimal() functions from
ggplot2 are used to remove axis labels and to change the overall
theme:
library(ggplot2) contourPlot2( nox_concentration, xlim = c(502000, 519000), ylim = c(4943125, 4955125), nticks = 5, levels = c(-Inf, 0.5, 1, 1.5, 2, Inf), legend = "NOx [ug/m3]" ) + labs(x = NULL, y = NULL) + theme_minimal()
In order to save the last plot to file, you can directly use the
ggplot2 function ggsave():
ggsave(filename = "~/path/to/myplot.png", width = 7, height = 6, dpi = 300)
Optional arguments can be used to create special versions of the plot.
For example, use tile = TRUE to produce a plot without spatial
interpolation:
contourPlot2(
nox_concentration,
tile = TRUE,
legend = "NOx [ug/m3]"
)Citation
If you use simulariatools in your work, please consider citing it:
Giuseppe Carlino. (2026). Simularia/simulariatools: simulariatools 3.1.0 (v3.1.0). Zenodo. https://doi.org/10.5281/zenodo.18184316.
Contact
Maintained by Giuseppe Carlino (Simularia srl).


