This commit does not change any functionality. It just prepares for
easier implementation of the compression of the restart snapshots.
Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
The default compression levels correspond now to the default levels
defined by each compression format library.
Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
This commit implements two data filters:
1) "shuffle" - reorganizes bytes to group most to less significant parts
together: |a1|a2|a3|b1|b2|b3| -> |a1|b1|c1|a2|b2|c2|a3|b3|c3|
2) "bytedelta" - additionally stores differences between subsequent
values: |a1|a2|a3|b1|b2|b3| -> |a1|b1-a1|c1-b1|a2|b2-a2|c2-b2|a3|b3-a3|c3-b3|
For large datasets, in particular in 3D, the compression ratio can be
significantly better after applying these filters.
Inspired by https://aras-p.info/blog/2023/03/01/Float-Compression-7-More-Filtering-Optimization/
Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
For of all, update_shape now works with the conservative variables.
It is called in three points:
1) Just after the integration update or when the block were (de)refined.
2) Afted the boundary update.
3) If the unphysical cell correction is on, it is applied to blocks
which contain unphysical cells after they are corrected.
Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
This makes the multiple block refinement extremenly slow, especially
when job is restarted with the maximum refinement level increased.
Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
In the case of embedded integration method, the time step resulting from
the error could drop to very small values. In such situation, the next
time step is taken to a maximum value between the time step due to error
and the stability time step multiplied by the safe factor. By default
this factor is set to 0.01.
Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
The meaning of these variables was inverted. Therefore, the limiting of
positive variables was not working.
Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
It help with cross compilation and these flags can be added from the
command line, e.g., using
cmake <source_path> -DCMAKE_Fortran_FLAGS="-march=native".
Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
The period is controlled by two parameters:
'injection_time_start' - the beginning of the injection period,
'injection_time_stop' - the end of the injection period.
Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
The coefficient correspond to the maximum of the imaginary part of the
modified wave number to be 2e-6 and the integrated error to be 1.54e-11.
The subroutine was renamed to to OCMP9P, as pentadiagonal.
Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
The coefficient correspond to the maximum of the imaginary part of the
modified wave number to be 2e-6 and the integrated error to be 1.38e-11.
The subroutine was renamed to to OCMP7P, as pentadiagonal.
Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
The coefficient correspond to the maximum of the imaginary part of the
modified wave number to be 2e-6 and the integrated error to be 6.4e-12.
Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
There two variants selected using parameter 'ocmp_scheme_mode':
1) 'stable' - which guarantees the scheme numerical instability by
enforcing the stable dissipation errors
2) 'minimum' - which enforced the dissipation errors to be smaller than
2e-5
Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
Restore the original Suresh & Huynh limiter and add modification by
Ahn & Lee for compact schemes. Additionally, pass the variable
positivity flag and for positive variables modifie the lower limit
using the minimum value obtained from the cubic spline interpolation.
Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
This is an improvement in the case a job restarted with a higher
number of processes. The reading of data blocks is spread among new
processes, so it better balances memory.
Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>
By default this parameter is set to zero and the behavior is the same as
before. However, if this parameter is set to a value larger than zero,
it determines the driving time scale for the Ornstein–Uhlenbeck method,
and the injection power for the Alvelius method.
Signed-off-by: Grzegorz Kowal <grzegorz@amuncode.org>