Scalar data¶
Scalar output are common in several simulations, with the most notable example
being reductions (max, min, average, …). The module cactus_scalars
(Reference on kuibit.cactus_scalars) handles these
quantities. Data is loaded lazily.
What data can be read?¶
OneScalar reads files produced by CarpetASCII and norms/
reductions produced by CarpetX. It recognizes transparently gz and
bz2 compressed files and it works with multiple variables in one file, or
different files for each variable. In the former case, OneScalar
reads the column format line in the file and deduces the content.
OneScalar can return a TimeSeries with the time
evolution of the various scalars. It also supports either all reductions in one
file, or different files for each reduction.
Accessing data¶
One typically does not use directly OneScalar, but
ScalarsDir. This class takes as input a SimDir and
organizes the various type of scalar data available. SimDir
internally organizes its scalar data as ScalarsDir, so this
documentation is of interest to the scalars in SimDir.
You can also print the content of a ScalarsDir:
import kuibit.cactus_scalars as cs
import kuibit.simdir as sd
sim = sd.SimDir("simulation")
# The following three are equivalent
timeseries = sim.ts
timeseries = sim.timeseries
timeseries = cs.ScalarsDir(sim)
print(timeseries)
# Extract of possible output:
# Available norm1 timeseries:
# ['H', 'M1', 'M2', 'M3', 'kxx', 'kxy', 'kxz', 'kyy', 'kyz', 'kzz', 'press', 'alp', 'eps', 'vel[0]', 'vel[1]', 'vel[2]', 'rho', 'gxx', 'gxy', 'gxz', 'gyy', 'gyz', 'gzz']
# Available norm2 timeseries:
# ['rho', 'M1', 'M2', 'M3', 'press', 'H', 'vel[0]', 'vel[1]', 'vel[2]', 'alp', 'gxx', 'gxy', 'gxz', 'gyy', 'gyz', 'gzz', 'kxx', 'kxy', 'kxz', 'kyy', 'kyz', 'kzz', 'eps']
# .....
The easiest way to access data is using the brackets operator, or using the
get function. (You can also access reductions in the same way.)
rho_max = timeseries.maximum['rho']
# or
rho_max = timeseries.maximum.get('rho')
Yet another way is to use the .fields attribute:
rho_max = timeseries.maximum.fields.rho
Clearly, instead of maximum, you can use any reduction you want. Valid
reductions are minimum, maximum, norm1, norm2, infnorm,
average, or sum. Use scalars for scalar values.
The return values of all these calls are TimeSeries. The page
Time and frequency series has abundant information about these
objects.