HyPar  1.0
Finite-Difference Hyperbolic-Parabolic PDE Solver on Cartesian Grids
2D Euler Equations - Low-Mach Isentropic Vortex Convection

Location: hypar/Examples/2D/NavierStokes2D/LowMachVortexConvection_PETSc_IMEX (This directory contains all the input files needed to run this case. If there is a Run.m, run it in MATLAB to quickly set up, run, and visualize the example).

Governing equations: 2D Euler Equations (navierstokes2d.h - By default, NavierStokes2D::Re is set to -1 which makes the code skip the parabolic terms, i.e., the 2D Euler equations are solved.)

Reference: Ghosh, D., Constantinescu, E. M., "Semi-Implicit Time Integration of Atmospheric Flows with Characteristic-Based Flux Partitioning", SIAM Journal on Scientific Computing, 38 (3), 2016, A1848-A1875, http://dx.doi.org/10.1137/15M1044369.

The problem is solved here using implicit-explicit (IMEX) time integration, where the hyperbolic flux is partitioned into its entropy and acoustic components with the former integrated explicitly and the latter integrated implicitly. See the above reference.

Domain: \(0 \le x,y \le 10\), "periodic" (_PERIODIC_) boundary conditions.

Initial solution: The freestream flow is given by

\begin{equation} \rho_\infty = 1,\ u_\infty = 0.1,\ v_\infty = 0,\ p_\infty = 1 \end{equation}

and a vortex is introduced, specified as

\begin{align} \rho &= \left[ 1 - \frac{\left(\gamma-1\right)b^2}{8\gamma\pi^2} e^{1-r^2} \right]^{\frac{1}{\gamma-1}},\ p = \rho^\gamma, \\ u &= u_\infty - \frac{b}{2\pi} e^{\frac{1}{2}\left(1-r^2\right)} \left(y-y_c\right),\ v = v_\infty + \frac{b}{2\pi} e^{\frac{1}{2}\left(1-r^2\right)} \left(x-x_c\right), \end{align}

where \(b=0.5\) is the vortex strength and \(r = \left[(x-x_c)^2 + (y-y_c)^2 \right]^{1/2}\) is the distance from the vortex center \(\left(x_c,y_c\right) = \left(5,5\right)\).

Numerical method:

Input files required:

.petscrc

# See PETSc documentation for more details (https://petsc.org/release/overview/).
# Note that if the following are specified in this file, the corresponding inputs in solver.inp are *ignored*.
# + "-ts_dt" (time step size): ignores "dt" in solver.inp
# + "-ts_max_steps" (maximum number of time iterations): ignores "n_iter" in solver.inp
# + "-ts_max_time" (final simulation time): ignores "n_iter" X "dt" in solver.inp
# Use PETSc time-integration
-use-petscts
# Final time
-ts_max_time 100.0
# Time step size
-ts_dt 1.0
# Maximum number of iterations
-ts_max_steps 100
# Time integration scheme type - ARK
-ts_type arkimex
-ts_arkimex_type 4
# Specify the terms to treat explicitly and implicitly
# In this example, the hyperbolic flux is partitioned
# into its entropy and acoustic components: f = [f-df] + [df]
# [f-df] - entropy component
# [df] - acoustic component
-hyperbolic_f_explicit # treat [f-df] explicitly
-hyperbolic_df_implicit # treat [df] implicitly
-source_implicit # treat source term implicitly
# thus, time step size is limited by the [f-df] term, i.e.,
# the flow velocity.
# no time-step adaptivity
-ts_adapt_type none
# For linear problens, tell nonlinear solver (SNES) to only use the linear solver (KSP)
-snes_type ksponly
# Linear solver (KSP) type
-ksp_type gmres
# Set relative tolerance
-ksp_rtol 1e-10
# Set absolute tolerance
-ksp_atol 1e-10
# use a preconditioner for solving the system
-with_pc
# preconditioner type - SOR
-pc_type sor
-pc_sor_omega 1.0
-pc_sor_its 5
# apply right preconditioner
-ksp_pc_side RIGHT

solver.inp

begin
ndims 2
nvars 4
size 64 64
iproc 2 2
ghost 3
n_iter 2000
restart_iter 0
time_scheme rk
time_scheme_type 44
hyp_space_scheme upw5
hyp_flux_split yes
hyp_interp_type components
par_space_type nonconservative-2stage
par_space_scheme 4
dt 5.0000000000000003e-02
conservation_check yes
screen_op_iter 2
file_op_iter 10
op_file_format tecplot2d
ip_file_type binary
input_mode serial
output_mode serial
op_overwrite no
model navierstokes2d
end

boundary.inp

4
periodic 0 1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 1.0000000000000000e+01
periodic 0 -1 0.0000000000000000e+00 0.0000000000000000e+00 0.0000000000000000e+00 1.0000000000000000e+01
periodic 1 1 0.0000000000000000e+00 1.0000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00
periodic 1 -1 0.0000000000000000e+00 1.0000000000000000e+01 0.0000000000000000e+00 0.0000000000000000e+00

physics.inp

begin
gamma 1.3999999999999999e+00
upwinding roe
Pr 7.1999999999999997e-01
Re -1.0000000000000000e+00
Minf 1.0000000000000000e+00
gravity 0.0000000000000000e+00 0.0000000000000000e+00
rho_ref 1.0000000000000000e+00
p_ref 1.0000000000000000e+00
HB 0
R 2.8705799999999999e+02
end

To generate initial.inp (initial solution) and exact.inp (exact solution), compile and run the following code in the run directory:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
double power(double x,double a)
{
return(exp(a*log(x)));
}
int main(){
const double pi = 4.0*atan(1.0);
const double GAMMA = 1.4;
int NI,NJ,ndims,n_iter;
double dt;
char ip_file_type[50]; strcpy(ip_file_type,"ascii");
FILE *in, *out;
printf("Reading file \"solver.inp\"...\n");
in = fopen("solver.inp","r");
if (!in) {
printf("Error: Input file \"solver.inp\" not found. Default values will be used.\n");
return(0);
} else {
char word[500];
fscanf(in,"%s",word);
if (!strcmp(word, "begin")) {
while (strcmp(word, "end")) {
fscanf(in,"%s",word);
if (!strcmp(word, "ndims")) fscanf(in,"%d",&ndims);
else if (!strcmp(word, "size")) {
fscanf(in,"%d",&NI);
fscanf(in,"%d",&NJ);
} else if (!strcmp(word, "n_iter")) fscanf(in,"%d",&n_iter);
else if (!strcmp(word, "dt")) fscanf(in,"%lf",&dt);
else if (!strcmp(word, "ip_file_type")) fscanf(in,"%s",ip_file_type);
}
} else printf("Error: Illegal format in solver.inp. Crash and burn!\n");
}
fclose(in);
if (ndims != 2) {
printf("ndims is not 2 in solver.inp. this code is to generate 2D exact solution\n");
return(0);
}
printf("Grid:\t\t\t%d X %d\n",NI,NJ);
int i,j;
double dx = 10.0 / ((double)NI);
double dy = 10.0 / ((double)NJ);
double tf = (double)n_iter * dt;
double *x, *y, *u0, *u1, *u2, *u3;
x = (double*) calloc (NI , sizeof(double));
y = (double*) calloc (NJ , sizeof(double));
u0 = (double*) calloc (NI*NJ, sizeof(double));
u1 = (double*) calloc (NI*NJ, sizeof(double));
u2 = (double*) calloc (NI*NJ, sizeof(double));
u3 = (double*) calloc (NI*NJ, sizeof(double));
double u_inf = 0.1;
double v_inf = 0.0;
double b = 0.5;
double x0, y0;
x0 = 5.0, y0 = 5.0;
for (i = 0; i < NI; i++){
for (j = 0; j < NJ; j++){
x[i] = i*dx;
y[j] = j*dy;
int p = NJ*i + j;
double rx, ry;
rx = (x[i] - x0);
ry = (y[j] - y0);
if (rx < -5) { rx += 10; }
else if (rx > 5) { rx -= 10; }
double rsq = rx*rx + ry*ry;
double rho, u, v, P;
double du, dv;
rho = power(1.0 - ((GAMMA-1.0)*b*b)/(8.0*GAMMA*pi*pi) * exp(1.0-rsq), 1.0/(GAMMA-1.0));
P = power(rho,GAMMA);
du = - b/(2.0*pi) * exp(0.5*(1.0-rsq)) * ry;
dv = b/(2.0*pi) * exp(0.5*(1.0-rsq)) * rx;
u = u_inf + du;
v = v_inf + dv;
u0[p] = rho;
u1[p] = rho*u;
u2[p] = rho*v;
u3[p] = P/(GAMMA-1.0) + 0.5*rho*(u*u+v*v);
}
}
if (!strcmp(ip_file_type,"ascii")) {
printf("Writing ASCII exact solution file initial.inp\n");
out = fopen("initial.inp","w");
for (i = 0; i < NI; i++) fprintf(out,"%lf ",x[i]);
fprintf(out,"\n");
for (j = 0; j < NJ; j++) fprintf(out,"%lf ",y[j]);
fprintf(out,"\n");
for (j = 0; j < NJ; j++) {
for (i = 0; i < NI; i++) {
int p = NJ*i + j;
fprintf(out,"%lf ",u0[p]);
}
}
fprintf(out,"\n");
for (j = 0; j < NJ; j++) {
for (i = 0; i < NI; i++) {
int p = NJ*i + j;
fprintf(out,"%lf ",u1[p]);
}
}
fprintf(out,"\n");
for (j = 0; j < NJ; j++) {
for (i = 0; i < NI; i++) {
int p = NJ*i + j;
fprintf(out,"%lf ",u2[p]);
}
}
fprintf(out,"\n");
for (j = 0; j < NJ; j++) {
for (i = 0; i < NI; i++) {
int p = NJ*i + j;
fprintf(out,"%lf ",u3[p]);
}
}
fprintf(out,"\n");
fclose(out);
} else if ((!strcmp(ip_file_type,"binary")) || (!strcmp(ip_file_type,"bin"))) {
printf("Writing binary exact solution file initial.inp\n");
out = fopen("initial.inp","wb");
fwrite(x,sizeof(double),NI,out);
fwrite(y,sizeof(double),NJ,out);
double *U = (double*) calloc (4*NI*NJ,sizeof(double));
for (i=0; i < NI; i++) {
for (j = 0; j < NJ; j++) {
int p = NJ*i + j;
int q = NI*j + i;
U[4*q+0] = u0[p];
U[4*q+1] = u1[p];
U[4*q+2] = u2[p];
U[4*q+3] = u3[p];
}
}
fwrite(U,sizeof(double),4*NI*NJ,out);
free(U);
fclose(out);
}
x0 = 5.0+tf*u_inf, y0 = 5.0;
while (x0 > 10) x0 -= 10;
printf("Final time: %lf, Vortex center: %lf, %lf\n",tf,x0,y0);
for (i = 0; i < NI; i++){
for (j = 0; j < NJ; j++){
x[i] = i*dx;
y[j] = j*dy;
int p = NJ*i + j;
double rx, ry;
rx = (x[i] - x0);
ry = (y[j] - y0);
if (rx < -5) { rx += 10; }
else if (rx > 5) { rx -= 10; }
double rsq = rx*rx + ry*ry;
double rho, u, v, P;
double du, dv;
rho = power(1.0 - ((GAMMA-1.0)*b*b)/(8.0*GAMMA*pi*pi) * exp(1.0-rsq), 1.0/(GAMMA-1.0));
P = power(rho,GAMMA);
du = - b/(2.0*pi) * exp(0.5*(1.0-rsq)) * ry;
dv = b/(2.0*pi) * exp(0.5*(1.0-rsq)) * rx;
u = u_inf + du;
v = v_inf + dv;
u0[p] = rho;
u1[p] = rho*u;
u2[p] = rho*v;
u3[p] = P/(GAMMA-1.0) + 0.5*rho*(u*u+v*v);
}
}
if (!strcmp(ip_file_type,"ascii")) {
printf("Writing ASCII exact solution file exact.inp\n");
out = fopen("exact.inp","w");
for (i = 0; i < NI; i++) fprintf(out,"%lf ",x[i]);
fprintf(out,"\n");
for (j = 0; j < NJ; j++) fprintf(out,"%lf ",y[j]);
fprintf(out,"\n");
for (j = 0; j < NJ; j++) {
for (i = 0; i < NI; i++) {
int p = NJ*i + j;
fprintf(out,"%lf ",u0[p]);
}
}
fprintf(out,"\n");
for (j = 0; j < NJ; j++) {
for (i = 0; i < NI; i++) {
int p = NJ*i + j;
fprintf(out,"%lf ",u1[p]);
}
}
fprintf(out,"\n");
for (j = 0; j < NJ; j++) {
for (i = 0; i < NI; i++) {
int p = NJ*i + j;
fprintf(out,"%lf ",u2[p]);
}
}
fprintf(out,"\n");
for (j = 0; j < NJ; j++) {
for (i = 0; i < NI; i++) {
int p = NJ*i + j;
fprintf(out,"%lf ",u3[p]);
}
}
fprintf(out,"\n");
fclose(out);
} else if ((!strcmp(ip_file_type,"binary")) || (!strcmp(ip_file_type,"bin"))) {
printf("Writing binary exact solution file exact.inp\n");
out = fopen("exact.inp","wb");
fwrite(x,sizeof(double),NI,out);
fwrite(y,sizeof(double),NJ,out);
double *U = (double*) calloc (4*NI*NJ,sizeof(double));
for (i=0; i < NI; i++) {
for (j = 0; j < NJ; j++) {
int p = NJ*i + j;
int q = NI*j + i;
U[4*q+0] = u0[p];
U[4*q+1] = u1[p];
U[4*q+2] = u2[p];
U[4*q+3] = u3[p];
}
}
fwrite(U,sizeof(double),4*NI*NJ,out);
free(U);
fclose(out);
}
free(x);
free(y);
free(u0);
free(u1);
free(u2);
free(u3);
return(0);
}

Output:

Note that iproc is set to

  2 2

in solver.inp (i.e., 2 processors along x, and 2 processors along y). Thus, this example should be run with 4 MPI ranks (or change iproc).

After running the code, there should be 11 output files op_00000.dat, op_00001.dat, ... op_00010.dat; the first one is the solution at \(t=0\) and the final one is the solution at \(t=100\). Since HyPar::op_overwrite is set to no in solver.inp, separate files are written for solutions at each output time.

HyPar::op_file_format is set to tecplot2d in solver.inp, and thus, all the files are in a format that Tecplot (http://www.tecplot.com/) or other visualization software supporting the Tecplot format (e.g. VisIt - https://wci.llnl.gov/simulation/computer-codes/visit/) can read. In these files, the first two lines are the Tecplot headers, after which the data is written out as: the first two columns are grid indices, the next two columns are x and y coordinates, and the remaining columns are the solution components. HyPar::op_file_format can be set to text to get the solution files in plain text format (which can be read in and visualized in MATLAB for example).

The following plot shows the density contours at the final time t=1, obtained from plotting op_00010.dat:

Solution_2DNavStokLowMachVortexPETSc.gif

Since the exact solution is available at the final time (exact.inp is a copy of initial.inp), the numerical errors are calculated and reported on screen (see below) as well as errors.dat:

64 64 2 2 5.0000000000000003E-02 6.1770683980365186E-06 1.2849813954739874E-05 7.4165466944656612E-05 5.7820602999999998E+01 5.7823413000000002E+01

The numbers are: number of grid points in each dimension (HyPar::dim_global), number of processors in each dimension (MPIVariables::iproc), time step size (HyPar::dt), L1, L2, and L-infinity errors (HyPar::error), solver wall time (seconds) (i.e., not accounting for initialization, and cleaning up), and total wall time.

Since HyPar::ConservationCheck is set to yes in solver.inp, the code checks for conservation error and prints it to screen, as well as the file conservation.dat:

64 64 2 2 5.0000000000000003E-02 2.8569330699600794E-14 6.0407783007563024E-14 2.2713220193537609E-12 4.1079147059863583E-14

The numbers are: number of grid points in each dimension (HyPar::dim_global), number of processors in each dimension (MPIVariables::iproc), time step size (HyPar::dt), and conservation error (HyPar::ConservationError) of each component. Note that the conservation error depends on the accuracy with which the implicit systems are solved (see ksp_atol, ksp_rtol, snes_atol, snes_rtol in .petscrc).

The file function_counts.dat reports the computational expense (in terms of the number of function counts):

100
11202
0
10602
600
1100
500
9502

The numbers are, respectively,

Expected screen output:

HyPar - Parallel (MPI) version with 4 processes
Compiled with PETSc time integration.
Reading solver inputs from file "solver.inp".
No. of dimensions : 2
No. of variables : 4
Domain size : 64 64
Processes along each dimension : 2 2
No. of ghosts pts : 3
No. of iter. : 2000
Restart iteration : 0
Time integration scheme : PETSc
Spatial discretization scheme (hyperbolic) : upw5
Split hyperbolic flux term? : yes
Interpolation type for hyperbolic term : components
Spatial discretization type (parabolic ) : nonconservative-2stage
Spatial discretization scheme (parabolic ) : 4
Time Step : 5.000000E-02
Check for conservation : yes
Screen output iterations : 2
File output iterations : 10
Initial solution file type : binary
Initial solution read mode : serial
Solution file write mode : serial
Solution file format : tecplot2d
Overwrite solution file : no
Physical model : navierstokes2d
Partitioning domain.
Allocating data arrays.
Reading array from binary file initial.inp (Serial mode).
Volume integral of the initial solution:
0: 9.9980704056028713E+01
1: 9.9980713630968623E+00
2: -9.5749398781874717E-07
3: 2.5045940702743542E+02
Reading boundary conditions from "boundary.inp".
Boundary periodic: Along dimension 0 and face +1
Boundary periodic: Along dimension 0 and face -1
Boundary periodic: Along dimension 1 and face +1
Boundary periodic: Along dimension 1 and face -1
4 boundary condition(s) read.
Initializing solvers.
Initializing physics. Model = "navierstokes2d"
Reading physical model inputs from file "physics.inp".
Setting up PETSc time integration...
Implicit-Explicit time-integration:-
Hyperbolic (f-df) term: Explicit
Hyperbolic (df) term: Implicit
Parabolic term: Implicit
Source term: Implicit
SolvePETSc(): Problem type is linear.
** Starting PETSc time integration **
Writing solution file op_00000.dat.
Iteration: 2 Time: 2.000E+00 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 9.5940E-14
Iteration: 4 Time: 4.000E+00 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 2.1581E-13
Iteration: 6 Time: 6.000E+00 Max CFL: 8.716E+00 Max Diff. No.: -1.000E+00 Conservation loss: 3.1650E-13
Iteration: 8 Time: 8.000E+00 Max CFL: 8.716E+00 Max Diff. No.: -1.000E+00 Conservation loss: 3.3728E-13
Iteration: 10 Time: 1.000E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 3.3530E-13
Writing solution file op_00001.dat.
Iteration: 12 Time: 1.200E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 3.6849E-13
Iteration: 14 Time: 1.400E+01 Max CFL: 8.716E+00 Max Diff. No.: -1.000E+00 Conservation loss: 3.8965E-13
Iteration: 16 Time: 1.600E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 4.2744E-13
Iteration: 18 Time: 1.800E+01 Max CFL: 8.714E+00 Max Diff. No.: -1.000E+00 Conservation loss: 4.8305E-13
Iteration: 20 Time: 2.000E+01 Max CFL: 8.716E+00 Max Diff. No.: -1.000E+00 Conservation loss: 5.5125E-13
Writing solution file op_00002.dat.
Iteration: 22 Time: 2.200E+01 Max CFL: 8.716E+00 Max Diff. No.: -1.000E+00 Conservation loss: 6.2641E-13
Iteration: 24 Time: 2.400E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 7.0232E-13
Iteration: 26 Time: 2.600E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 7.7513E-13
Iteration: 28 Time: 2.800E+01 Max CFL: 8.716E+00 Max Diff. No.: -1.000E+00 Conservation loss: 8.4330E-13
Iteration: 30 Time: 3.000E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 9.0674E-13
Writing solution file op_00003.dat.
Iteration: 32 Time: 3.200E+01 Max CFL: 8.714E+00 Max Diff. No.: -1.000E+00 Conservation loss: 9.6282E-13
Iteration: 34 Time: 3.400E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 9.8751E-13
Iteration: 36 Time: 3.600E+01 Max CFL: 8.716E+00 Max Diff. No.: -1.000E+00 Conservation loss: 9.8823E-13
Iteration: 38 Time: 3.800E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 9.9288E-13
Iteration: 40 Time: 4.000E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 9.7545E-13
Writing solution file op_00004.dat.
Iteration: 42 Time: 4.200E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 9.3734E-13
Iteration: 44 Time: 4.400E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 8.8879E-13
Iteration: 46 Time: 4.600E+01 Max CFL: 8.714E+00 Max Diff. No.: -1.000E+00 Conservation loss: 7.5306E-13
Iteration: 48 Time: 4.800E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 9.6839E-13
Iteration: 50 Time: 5.000E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 1.1366E-12
Writing solution file op_00005.dat.
Iteration: 52 Time: 5.200E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 1.2336E-12
Iteration: 54 Time: 5.400E+01 Max CFL: 8.714E+00 Max Diff. No.: -1.000E+00 Conservation loss: 1.3524E-12
Iteration: 56 Time: 5.600E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 1.4533E-12
Iteration: 58 Time: 5.800E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 1.4730E-12
Iteration: 60 Time: 6.000E+01 Max CFL: 8.714E+00 Max Diff. No.: -1.000E+00 Conservation loss: 1.4715E-12
Writing solution file op_00006.dat.
Iteration: 62 Time: 6.200E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 1.5058E-12
Iteration: 64 Time: 6.400E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 1.5265E-12
Iteration: 66 Time: 6.600E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 1.5643E-12
Iteration: 68 Time: 6.800E+01 Max CFL: 8.714E+00 Max Diff. No.: -1.000E+00 Conservation loss: 1.6194E-12
Iteration: 70 Time: 7.000E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 1.6874E-12
Writing solution file op_00007.dat.
Iteration: 72 Time: 7.200E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 1.7621E-12
Iteration: 74 Time: 7.400E+01 Max CFL: 8.714E+00 Max Diff. No.: -1.000E+00 Conservation loss: 1.8378E-12
Iteration: 76 Time: 7.600E+01 Max CFL: 8.714E+00 Max Diff. No.: -1.000E+00 Conservation loss: 1.9104E-12
Iteration: 78 Time: 7.800E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 1.9785E-12
Iteration: 80 Time: 8.000E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 2.0420E-12
Writing solution file op_00008.dat.
Iteration: 82 Time: 8.200E+01 Max CFL: 8.714E+00 Max Diff. No.: -1.000E+00 Conservation loss: 2.0983E-12
Iteration: 84 Time: 8.400E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 2.1227E-12
Iteration: 86 Time: 8.600E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 2.1236E-12
Iteration: 88 Time: 8.800E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 2.1285E-12
Iteration: 90 Time: 9.000E+01 Max CFL: 8.714E+00 Max Diff. No.: -1.000E+00 Conservation loss: 2.1118E-12
Writing solution file op_00009.dat.
Iteration: 92 Time: 9.200E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 2.0735E-12
Iteration: 94 Time: 9.400E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 2.0251E-12
Iteration: 96 Time: 9.600E+01 Max CFL: 8.714E+00 Max Diff. No.: -1.000E+00 Conservation loss: 1.8890E-12
Iteration: 98 Time: 9.800E+01 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 2.1050E-12
Iteration: 100 Time: 1.000E+02 Max CFL: 8.715E+00 Max Diff. No.: -1.000E+00 Conservation loss: 2.2727E-12
Writing solution file op_00010.dat.
** Completed PETSc time integration **
Reading array from binary file exact.inp (Serial mode).
Computed errors:
L1 Error : 6.1770683980365186E-06
L2 Error : 1.2849813954739874E-05
Linfinity Error : 7.4165466944656612E-05
Conservation Errors:
2.8569330699600794E-14
6.0407783007563024E-14
2.2713220193537609E-12
4.1079147059863583E-14
Solver runtime (in seconds): 5.7820602999999998E+01
Total runtime (in seconds): 5.7823413000000002E+01
Deallocating arrays.
Finished.