The terra::io::XDMFOutput class implements a combined format for storing simulation data that can be visualized in Paraview, and can also be loaded back into the simulation (i.e., it serves as a checkpoint).
Refer to the terra::io::XDMFOutput class documentation for more details. It is quite exhaustively documented.
Have a look at the terra::util::Table class for writing all sorts of tabular data. Also, just for writing to the console this class can be useful. Consider this for writing to CSV or JSON files.
Radial profiles can be read from CSV files. Have a look at the functions terra::shell::interpolate_radial_profile_into_subdomains() and terra::shell::interpolate_radial_profile_into_subdomains_from_csv() for more details.
A small tool for reading and visualizing radial profiles is provided in apps/tools/visualize_radial_profiles.cpp.
Have a look at the functions terra::shell::radial_profiles() and terra::shell::radial_profiles_to_table() that compute radial profiles of the shell (min/max/avg) on the device and write them to a table (terra::util::Table) if desired. This way if can easily be written to console, JSON, or CSV files.