Output File Structure¶
The results of the simulation are stored in the root group ‘/’ in the form of 3D or 4D datasets. If a linear sensor mask is used, all output quantities are stored as datasets in the root group. If a cuboid corners sensor mask is used, the sampled quantities form private groups containing datasets on per cuboid basis.
Output File Header¶
created_by |
Short description of the tool that created this file |
creation_date |
Date when the file was created |
file_description |
Short description of the content of the file (e.g. simulation name) |
file_type |
Type of the file (input) |
major_version |
Major version of the file definition (1) |
minor_version |
Minor version of the file definition (2) |
host_names |
List of hosts (computer names, CPUs, GPUs) the simulation was executed on |
number_of_cpu_cores |
Number of CPU cores used for the simulation |
data_loading_phase_execution_time |
Time taken to load data from the file |
pre-processing_phase_execution_time |
Time taken to pre-process data |
simulation_phase_execution_time |
Time taken to run the simulation |
post-processing_phase_execution_time |
Time taken to complete the post-processing phase |
total_execution_time |
Total execution time |
peak_core_memory_in_use |
Peak memory required per core during the simulation |
total_memory_in_use |
Peak memory in use |
The output file of version 1.0 could only store recorded quantities as 3D datasets under the root group. However, from version 1.1 on which supports a cuboid corner sensor mask, the sampled quantities may be laid out as 4D quantities stored under specific groups. The dimensions are always (Nx, Ny, Nz, Nt), with every sampled cuboid stored as a distinct dataset, and the datasets grouped under a group named by the quantity stored. This makes the file clearly readable and easy to parse.
In order to enable compression and more efficient data processing, big datasets are not stored as monolithic blocks but broken into chunks that may be compressed by the ZIP library and stored separately. The chunk size is defined as follows:
(1M elements, 1, 1) in the case of 1D variables - index sensor mask (8MB blocks).
(Nx, Ny, 1) in the case of 3D variables (one 2D slab).
(Nx, Ny, Nz, 1) in the case of 4D variables (one time step).
(N_sensor_points, 1, 1) in the case of the output time series (one time step of the simulation).
All datasets have two attributes that specify the content of the dataset. The ‘data_type’ attribute specifies the data type of the dataset. The admissible values are either ‘float’ or ‘long’. The ‘domain_type’ attribute specifies the domain of the dataset. The admissible values are either ‘real’ for the real domain or ‘complex’ for the complex domain. The C++ code reads these attributes and checks their values.
Simulation Flags¶
Name |
Size |
Data Type |
Domain Type |
Condition of Presence |
---|---|---|---|---|
ux_source_flag |
(1, 1, 1) |
long |
real |
|
uy_source_flag |
(1, 1, 1) |
long |
real |
|
uz_source_flag |
(1, 1, 1) |
long |
real |
Nz > 1 |
p_source_flag |
(1, 1, 1) |
long |
real |
|
p0_source_flag |
(1, 1, 1) |
long |
real |
|
transducer_source_flag |
(1, 1, 1) |
long |
real |
|
nonuniform_grid_flag |
(1, 1, 1) |
long |
real |
|
nonlinear_flag |
(1, 1, 1) |
long |
real |
|
absorbing_flag |
(1, 1, 1) |
long |
real |
|
axisymmetric_flag |
(1, 1, 1) |
long |
real |
file_ver == 1.2 |
u_source_mode |
(1, 1, 1) |
long |
real |
if u*_source_flag |
u_source_many |
(1, 1, 1) |
long |
real |
if u*_source_flag |
p_source_mode |
(1, 1, 1) |
long |
real |
if p_source_flag |
p_source_many |
(1, 1, 1) |
long |
real |
if p_source_flag |
Grid Properties¶
Name |
Size |
Data Type |
Domain Type |
Condition of Presence |
---|---|---|---|---|
Nx |
(1, 1, 1) |
long |
real |
|
Ny |
(1, 1, 1) |
long |
real |
|
Nz |
(1, 1, 1) |
long |
real |
|
Nt |
(1, 1, 1) |
long |
real |
|
t_index |
(1, 1, 1) |
long |
real |
|
dt |
(1, 1, 1) |
float |
real |
|
dx |
(1, 1, 1) |
float |
real |
|
dy |
(1, 1, 1) |
float |
real |
|
dz |
(1, 1, 1) |
float |
real |
Nz > 1 |
PML Variables¶
Name |
Size |
Data Type |
Domain Type |
Condition of Presence |
---|---|---|---|---|
pml_x_size |
(1, 1, 1) |
long |
real |
|
pml_y_size |
(1, 1, 1) |
long |
real |
|
pml_z_size |
(1, 1, 1) |
long |
real |
Nz > 1 |
pml_x_alpha |
(1, 1, 1) |
float |
real |
|
pml_y_alpha |
(1, 1, 1) |
float |
real |
|
pml_z_alpha |
(1, 1, 1) |
float |
real |
Nz > 1 |
Sensor Variables¶
defined if (``–copy_sensor_mask``) and (file version > 1.0) |
||||
---|---|---|---|---|
Name |
Size |
Data Type |
Domain Type |
Condition of Presence |
sensor_mask_type |
(1, 1, 1) |
long |
real |
|
sensor_mask_index |
(Nsens, 1, 1) |
long |
real |
sensor_mask_type == 0 |
sensor_mask_corners |
(Ncubes, 6, 1) |
long |
real |
sensor_mask_type == 1 |
Simulation Results¶
defined if (sensor_mask_type == 0) or (file version == 1.0) |
||||
---|---|---|---|---|
Name |
Size |
Data Type |
Domain Type |
Condition of Presence |
p |
(Nsens, Nt - s, 1) |
float |
real |
|
p_rms |
(Nsens, 1, 1) |
float |
real |
|
p_max |
(Nsens, 1, 1) |
float |
real |
|
p_min |
(Nsens, 1, 1) |
float |
real |
|
p_max_all |
(Nx, Ny, Nz) |
float |
real |
|
p_min_all |
(Nx, Ny, Nz) |
float |
real |
|
p_final |
(Nx, Ny, Nz) |
float |
real |
|
ux |
(Nsens, Nt - s, 1) |
float |
real |
|
uy |
(Nsens, Nt - s, 1) |
float |
real |
|
uz |
(Nsens, Nt - s, 1) |
float |
real |
( |
ux_non_staggered |
(Nsens, Nt - s, 1) |
float |
real |
|
uy_non_staggered |
(Nsens, Nt - s, 1) |
float |
real |
|
uz_non_staggered |
(Nsens, Nt - s, 1) |
float |
real |
|
ux_rms |
(Nsens, 1, 1) |
float |
real |
|
uy_rms |
(Nsens, 1, 1) |
float |
real |
|
uz_rms |
(Nsens, 1, 1) |
float |
real |
|
ux_max |
(Nsens, 1, 1) |
float |
real |
|
uy_max |
(Nsens, 1, 1) |
float |
real |
|
uz_max |
(Nsens, 1, 1) |
float |
real |
|
ux_min |
(Nsens, 1, 1) |
float |
real |
|
uy_min |
(Nsens, 1, 1) |
float |
real |
|
uz_min |
(Nsens, 1, 1) |
float |
real |
|
ux_max_all |
(Nx, Ny, Nz) |
float |
real |
|
uy_max_all |
(Nx, Ny, Nz) |
float |
real |
|
uz_max_all |
(Nx, Ny, Nz) |
float |
real |
|
ux_min_all |
(Nx, Ny, Nz) |
float |
real |
|
uy_min_all |
(Nx, Ny, Nz) |
float |
real |
|
uz_min_all |
(Nx, Ny, Nz) |
float |
real |
|
ux_final |
(Nx, Ny, Nz) |
float |
real |
|
uy_final |
(Nx, Ny, Nz) |
float |
real |
|
uz_final |
(Nx, Ny, Nz) |
float |
real |
|
defined if (sensor_mask_type == 1) or (file version == 1.0) |
||||
/p |
group of datasets, one per cuboid |
|
||
/p/1 |
(Cx, Cy, Cz, Nt-s) |
float |
real |
1st sampled cuboid |
/p/2 |
(Cx, Cy, Cz, Nt-s) |
float |
real |
2nd sampled cuboid, etc. |
/p_rms |
group of datasets, one per cuboid |
|
||
/p_rms/1 |
(Cx, Cy, Cz, Nt-s) |
float |
real |
1st sampled cuboid |
/p_max |
group of datasets, one per cuboid |
|
||
/p_max/1 |
(Cx, Cy, Cz, Nt-s) |
float |
real |
1st sampled cuboid |
/p_min |
group of datasets, one per cuboid |
|
||
/p_min/1 |
(Cx, Cy, Cz, Nt-s) |
float |
real |
1st sampled cuboid |
p_max_all |
(Nx, Ny, Nz) |
float |
real |
|
p_min_all |
(Nx, Ny, Nz) |
float |
real |
|
p_final |
(Nx, Ny, Nz) |
float |
real |
|
/ux |
group of datasets, one per cuboid |
|
||
/ux/1 |
(Cx, Cy, Cz, Nt-s) |
float |
real |
1st sampled cuboid |
/uy |
group of datasets, one per cuboid |
|
||
/uy/1 |
(Cx, Cy, Cz, Nt-s) |
float |
real |
1st sampled cuboid |
/uz |
group of datasets, one per cuboid |
|
||
/uz/1 |
(Cx, Cy, Cz, Nt-s) |
float |
real |
1st sampled cuboid |
/ux_non_staggered |
group of datasets, one per cuboid |
|
||
/ux_non_staggered/1 |
(Cx, Cy, Cz, Nt-s) |
float |
real |
1st sampled cuboid |
/uy_non_staggered |
group of datasets, one per cuboid |
|
||
/uy_non_staggered/1 |
(Cx, Cy, Cz, Nt-s) |
float |
real |
1st sampled cuboid |
/uz_non_staggered |
group of datasets, one per cuboid |
|
||
/uz_non_staggered/1 |
(Cx, Cy, Cz, Nt-s) |
float |
real |
1st sampled cuboid |
/ux_rms |
group of datasets, one per cuboid |
|
||
/ux_rms/1 |
(Cx, Cy, Cz, Nt-s) |
float |
real |
1st sampled cuboid |
/uy_rms |
group of datasets, one per cuboid |
|
||
/uy_rms/1 |
(Cx, Cy, Cz, Nt-s) |
float |
real |
1st sampled cuboid |
/uz_rms |
group of datasets, one per cuboid |
|
||
/uz_rms/1 |
(Cx, Cy, Cz, Nt-s) |
float |
real |
1st sampled cuboid |
/ux_max |
group of datasets, one per cuboid |
|
||
/ux_max/1 |
(Cx, Cy, Cz, Nt-s) |
float |
real |
1st sampled cuboid |
/uy_max |
group of datasets, one per cuboid |
|
||
/uy_max/1 |
(Cx, Cy, Cz, Nt-s) |
float |
real |
1st sampled cuboid |
/uz_max |
group of datasets, one per cuboid |
|
||
/uz_max/1 |
(Cx, Cy, Cz, Nt-s) |
float |
real |
1st sampled cuboid |
/ux_min |
group of datasets, one per cuboid |
|
||
/ux_min/1 |
(Cx, Cy, Cz, Nt-s) |
float |
real |
1st sampled cuboid |
/uy_min |
group of datasets, one per cuboid |
|
||
/uy_min/1 |
(Cx, Cy, Cz, Nt-s) |
float |
real |
1st sampled cuboid |
/uz_min |
group of datasets, one per cuboid |
|
||
/uz_min/1 |
(Cx, Cy, Cz, Nt-s) |
float |
real |
1st sampled cuboid |
ux_max_all |
(Nx, Ny, Nz) |
float |
real |
|
uy_max_all |
(Nx, Ny, Nz) |
float |
real |
|
uz_max_all |
(Nx, Ny, Nz) |
float |
real |
|
ux_min_all |
(Nx, Ny, Nz) |
float |
real |
|
uy_min_all |
(Nx, Ny, Nz) |
float |
real |
|
uz_min_all |
(Nx, Ny, Nz) |
float |
real |
|
ux_final |
(Nx, Ny, Nz) |
float |
real |
|
uy_final |
(Nx, Ny, Nz) |
float |
real |
|
uz_final |
(Nx, Ny, Nz) |
float |
real |
|