kipe.synthesis module

Generation of synthetic measurement data from a forward run: kipe synthesis.

The true state at the measurement times comes from the forward solver (synthesis.truth): it runs with its nominal parameters through all measurement times (run), or reads the states from the checkpoints of an earlier run (checkpoints). At each time, the observation operator gives the predicted data and noise is added: the measurement’s noise.stddev, or synthesis.noise where given (e.g., none, for noise-free data). The resulting measurements are written to their data files, and returned. With several noise realizations (synthesis.realizations), the true state is computed once, and each realization gets its own noise and data files. The provenance of the run is written to <output.path>/synthesis/ (kipe.provenance).

In parallel, each rank generates the entries of the data it holds (global_indices); the noise of an entry depends only on its position, so the data do not depend on the number of ranks. Rank 0 writes the files.

kipe.synthesis.synthesize(study: StudyOptions, comm: mpi4py.MPI.Comm = mpi4py.MPI.COMM_WORLD) → list[list[Measurement]][source]

Generate the data of all measurements of the study; write them and the provenance.

Parameters:
  • study – the study options

  • comm – communicator over which the model state is distributed

Returns:

the generated measurements of each noise realization, with this rank’s entries of their data: synthesize(study)[r][i] is measurement i of realization r

Raises:

StudyFileError – if a measurement lacks what synthesis needs, or observes a field the solver does not have