diff --git a/Exec/RegTests/EnclosedFlame/GNUmakefile b/Exec/RegTests/EnclosedFlame/GNUmakefile index df5b0dc3d..613ea121b 100644 --- a/Exec/RegTests/EnclosedFlame/GNUmakefile +++ b/Exec/RegTests/EnclosedFlame/GNUmakefile @@ -1,16 +1,15 @@ -TOP = ../../../.. +TOP = ../../../Submodules AMREX_HOME ?= ${TOP}/amrex -PELELMEX_HOME ?= ${TOP}/PeleLMeX +PELELMEX_HOME ?= ${TOP}/.. PELE_PHYSICS_HOME ?= ${TOP}/PelePhysics AMREX_HYDRO_HOME ?= ${TOP}/AMReX-Hydro - # AMReX DIM = 2 DEBUG = FALSE PRECISION = DOUBLE VERBOSE = FALSE -TINY_PROFILE = FALSE +TINY_PROFILE = TRUE # Compilation COMP = gnu @@ -21,9 +20,19 @@ USE_HIP = FALSE # PeleLMeX +FUEGO_GAS = FALSE # PelePhysics -Chemistry_Model = drm19 -Eos_Model = Fuego -Transport_Model = Simple +ifeq ($(FUEGO_GAS), TRUE) + Chemistry_Model = posf10325 + Eos_Model = Fuego + Transport_Model = Simple +else + USE_LIBTORCH = FALSE + LIBTORCH_HOME = /home/bperry/libtorch + DEFINES += -D_GLIBCXX_USE_CXX11_ABI=0 + Eos_Model = Manifold + Chemistry_Model = Manifold2d + Transport_Model = Manifold +endif include $(PELELMEX_HOME)/Utils/Make.PeleLMeX diff --git a/Exec/RegTests/EnclosedFlame/README b/Exec/RegTests/EnclosedFlame/README new file mode 100644 index 000000000..0057421f9 --- /dev/null +++ b/Exec/RegTests/EnclosedFlame/README @@ -0,0 +1,39 @@ +Stuff that needs to be done to run this case + +-- COMPILE -- +make TPL -j +make -j + +-- Generate Turbulence initial condition -- +python gen_hit_ic.py -k0 4 -N 128 + +-- Run -- +srun -n 36 PeleLMeX2d.gnu.TPROF.MPI.ex input.nn + + +#### NOTES #### +Contained are files to run with an FGM+ANN model trained on a 1D premixed flame +and a CMLM model trained from corresponding 3D DNS + +Required files include a pmf data file used to set the initial condition. +In the input.nn file, set either + + pmf.datafile = "prem_posf10325_phi1_p1_t298_mani_cmlm.dat" +-- OR -- + pmf.datafile = "prem_posf10325_phi1_p1_t298_mani_fgm.dat" + +Also required are a neural network file and info file. +In the input.nn file, set either + + manifold.filename = cmlm_net.pnn + manifold.info_filename = cmlm_net_info.txt +-- OR -- + manifold.filename = fgm_net.pnn + manifold.info_filename = fgm_net_info.txt + +Note that the CMLM model is a 2D manifold while the FGM one is a 1D manifold. +This means the correct setting must be used in the GNUmakefile when compiling: + + Chemistry_Model = Manifold2d +-- OR -- + Chemistry_Model = Manifold \ No newline at end of file diff --git a/Exec/RegTests/EnclosedFlame/cmlm_net.pnn b/Exec/RegTests/EnclosedFlame/cmlm_net.pnn new file mode 100644 index 000000000..606d0505d Binary files /dev/null and b/Exec/RegTests/EnclosedFlame/cmlm_net.pnn differ diff --git a/Exec/RegTests/EnclosedFlame/cmlm_net.pt b/Exec/RegTests/EnclosedFlame/cmlm_net.pt new file mode 100644 index 000000000..4f05b9155 Binary files /dev/null and b/Exec/RegTests/EnclosedFlame/cmlm_net.pt differ diff --git a/Exec/RegTests/EnclosedFlame/cmlm_net_info.txt b/Exec/RegTests/EnclosedFlame/cmlm_net_info.txt new file mode 100644 index 000000000..a07057cee --- /dev/null +++ b/Exec/RegTests/EnclosedFlame/cmlm_net_info.txt @@ -0,0 +1,22 @@ +# Name of the neural network model +model_name = cmlm_dns +# Number of input dimensions +ndim = 2 +# Number of output dimensions +nvar = 17 +# Number of manifold parameters +nmanpar = 2 +# Names of input variables +dimnames = xi0 xi1 +# Names of output variables +varnames = Y-CO2 Y-CO Y-CH2O SRC_H2O SRC_H2 SRC_CO2 SRC_CO SRC_POSF10325 SRC_O2 T RHO lnRHO \ + invRHO DIFF VISC SRC_xi0 SRC_xi1 +# Definitions of input variables +def_xi0 = 22.34722900390625*Y-CO2 -396.7853088378906*Y-H2 53.42775344848633*Y-N2 \ + 23.05693817138672*Y-CO 3.7954090657876804e-05*Y-O2 5.909298488404602e-05*Y-H2O \ + -8.786284161033109e-05*Y-POSF10325 +def_xi1 = 2.3632654119865038e-05*Y-CO2 -0.5249142050743103*Y-H2 28.18173599243164*Y-N2 \ + -29.479734420776367*Y-CO -4.5221535401651636e-05*Y-O2 71.97798156738281*Y-H2O \ + -3.83632504963316e-05*Y-POSF10325 +# Biases to be used calculating input variables +manibiases = -40.21234130859375 -22.204334259033203 diff --git a/Exec/RegTests/EnclosedFlame/fgm_net.pnn b/Exec/RegTests/EnclosedFlame/fgm_net.pnn new file mode 100644 index 000000000..d074d5941 Binary files /dev/null and b/Exec/RegTests/EnclosedFlame/fgm_net.pnn differ diff --git a/Exec/RegTests/EnclosedFlame/fgm_net.pt b/Exec/RegTests/EnclosedFlame/fgm_net.pt new file mode 100644 index 000000000..19ef339b6 Binary files /dev/null and b/Exec/RegTests/EnclosedFlame/fgm_net.pt differ diff --git a/Exec/RegTests/EnclosedFlame/fgm_net_info.txt b/Exec/RegTests/EnclosedFlame/fgm_net_info.txt new file mode 100644 index 000000000..a1e272914 --- /dev/null +++ b/Exec/RegTests/EnclosedFlame/fgm_net_info.txt @@ -0,0 +1,18 @@ +# Name of the neural network model +model_name = premixed +# Number of input dimensions +ndim = 1 +# Number of output dimensions +nvar = 15 +# Number of manifold parameters +nmanpar = 1 +# Names of input variables +dimnames = xi0 +# Names of output variables +varnames = Y-CO2 Y-CO Y-CH2O SRC_H2O SRC_H2 SRC_CO2 SRC_CO SRC_POSF10325 SRC_O2 T RHO lnRHO DIFF \ + VISC SRC_xi0 +# Definitions of input variables +def_xi0 = 15.390820503234863*Y-CO2 15.390820503234863*Y-H2 0.0*Y-N2 15.390819549560547*Y-CO \ + 0.0*Y-O2 15.390820503234863*Y-H2O 0.0*Y-POSF10325 +# Biases to be used calculating input variables +manibiases = -2.206676721572876 diff --git a/Exec/RegTests/EnclosedFlame/gen_hit_ic.py b/Exec/RegTests/EnclosedFlame/gen_hit_ic.py new file mode 100755 index 000000000..cd3bf6543 --- /dev/null +++ b/Exec/RegTests/EnclosedFlame/gen_hit_ic.py @@ -0,0 +1,463 @@ +#!/usr/bin/env python +# +# Generate a table of the velocity fluctuations for the homogeneous +# isotropic turbulence case at a specific k0 (default to 4) +# +# Order of operations: +# 1. velocity fluctuations generated on a 512^3 grid in wavenumber space +# 2. Coefficients associated to wavenumbers that cannot be represented on +# the desired grid are set to 0 (sharp wavenumber cutoff) +# 3. inverse Fourier transform of the velocity fluctuations (512^3 grid) +# 4. velocity fluctuations resampled on the desired grid (N^3) +# +# The velocity fluctuations are normalized by urms0 so to get the +# actual velocity fluctuations, one must multiply these velocities by +# the appropriate urms0. +# +# + +# ======================================================================== +# +# Imports +# +# ======================================================================== +import argparse +import sys +import time +from datetime import timedelta +import numpy as np +import scipy.interpolate as spi +import matplotlib as mpl + +mpl.use("Agg") +import matplotlib.pyplot as plt + + +# ======================================================================== +# +# Parse arguments +# +# ======================================================================== +parser = argparse.ArgumentParser( + description="Generate the velocity fluctuations for the HIT IC" +) +parser.add_argument( + "-k0", help="Wave number containing highest energy", type=float, default=4.0 +) +parser.add_argument("-N", help="Resolution", type=int, default=16) +parser.add_argument( + "-s", "--seed", help="Random number generator seed", type=int, default=42 +) +parser.add_argument( + "-p", "--plot", help="Save a plot of the x-velocity", action="store_true" +) +args = parser.parse_args() + +# =============================================================================== +# +# Some defaults variables +# +# =============================================================================== +plt.rc("text", usetex=True) +plt.rc("font", family="serif", serif="Times") +cmap_med = [ + "#F15A60", + "#7AC36A", + "#5A9BD4", + "#FAA75B", + "#9E67AB", + "#CE7058", + "#D77FB4", + "#737373", +] +cmap = [ + "#EE2E2F", + "#008C48", + "#185AA9", + "#F47D23", + "#662C91", + "#A21D21", + "#B43894", + "#010202", +] +dashseq = [ + (None, None), + [10, 5], + [10, 4, 3, 4], + [3, 3], + [10, 4, 3, 4, 3, 4], + [3, 3], + [3, 3], +] +markertype = ["s", "d", "o", "p", "h"] + +# ======================================================================== +# +# Function definitions +# +# ======================================================================== +def div0(a, b): + """ Ignore division by 0, just replace it by 0, + + From: http://stackoverflow.com/questions/26248654/numpy-return-0-with-divide-by-zero + e.g. div0( [-1, 0, 1], 0 ) -> [0, 0, 0] + """ + with np.errstate(divide="ignore", invalid="ignore"): + c = np.true_divide(a, b) + c[~np.isfinite(c)] = 0 # -inf inf NaN + return c + + +# ======================================================================== +def abs2(x): + """This is equivalent to np.abs(x)**2 or x*np.conj(x) + + To make it faster, add this right before the function definition + import numba + @numba.vectorize([numba.float64(numba.complex128),numba.float32(numba.complex64)]) + """ + return x.real ** 2 + x.imag ** 2 + + +# ======================================================================== +# +# Main +# +# ======================================================================== + +# Timer +start = time.time() + +# ======================================================================== +# 1. velocity fluctuations generated on a 512^3 grid in wavenumber space + +# Dimension of the large cube +N = 256 +halfN = int(round(0.5 * N)) +xs = 0 +xe = 2.0 * np.pi * 0.01 +L = xe - xs +dx = L / N + +# Only work if N and args.N are even +if not ((args.N % 2 == 0) and N % 2 == 0): + print("N or args.N is not even. Exiting") + sys.exit(1) + +# Get cell centered values and meshed grid +x = np.linspace(xs, xe, N + 1) +xc = (x[1:] + x[:-1]) / 2 # get cell center coordinates +X, Y, Z = np.meshgrid(xc, xc, xc, indexing="ij") + +# Get the wave numbers and associated quantities +k = np.concatenate((np.arange(halfN), np.arange(-halfN, 0, 1)), axis=0) +khalf = np.arange(halfN + 1) +k1, k2, k3 = np.meshgrid(k, k, khalf, indexing="ij") +kmag = np.sqrt(k1 ** 2 + k2 ** 2 + k3 ** 2) +k12 = np.sqrt(k1 ** 2 + k2 ** 2) +k1k12 = div0(k1, k12) +k2k12 = div0(k2, k12) +k3kmag = div0(k3, kmag) +k12kmag = div0(k12, kmag) + +# Generate data + +# # Toy Fourier data corresponding to uo = cos(X) * cos(2*Y) * cos(3*Z) +# uo = np.cos(X) * np.cos(2*Y) * np.cos(3*Z) +# uf = np.fft.rfftn(uo) +# vf = np.copy(uf) +# wf = np.copy(uf) + +# Energy spectrum +Ek = ( + 16.0 + * np.sqrt(2.0 / np.pi) + * (kmag ** 4) + / (args.k0 ** 5) + * np.exp(-2.0 * (kmag ** 2) / (args.k0 ** 2)) +) + +# Draw random numbers +np.random.seed(args.seed) +phi1 = np.random.uniform(0, 2 * np.pi, np.shape(kmag)) +phi2 = np.random.uniform(0, 2 * np.pi, np.shape(kmag)) +phi3 = np.random.uniform(0, 2 * np.pi, np.shape(kmag)) + +# the random quantities +prefix = np.sqrt(2.0 * div0(Ek, 4.0 * np.pi * (kmag ** 2))) +a = prefix * np.exp(1j * phi1) * np.cos(phi3) +b = prefix * np.exp(1j * phi2) * np.sin(phi3) + +# the random velocities +uf = k2k12 * a + k1k12 * k3kmag * b +vf = k2k12 * k3kmag * b - k1k12 * a +wf = -k12kmag * b + +# Impose the 3D spherical symmetry (to ensure we have a real signal) +# equiv: uf[-l,-m,0] = np.conj(uf[ l, m,0]) for l=0..N/2 and m=0..N/2 +uf[N:halfN:-1, N:halfN:-1, 0] = np.conj(uf[1:halfN, 1:halfN, 0]) +# symmetry on first column +uf[N:halfN:-1, 0, 0] = np.conj(uf[1:halfN, 0, 0]) +# symmetry on first row +uf[0, N:halfN:-1, 0] = np.conj(uf[0, 1:halfN, 0]) +# symmetry about the (halfN,halfN) element +uf[halfN - 1 : 0 : -1, N : halfN - 1 : -1, 0] = np.conj( + uf[halfN + 1 : N, 1 : halfN + 1, 0] +) + +vf[N:halfN:-1, N:halfN:-1, 0] = np.conj(vf[1:halfN, 1:halfN, 0]) +vf[halfN - 1 : 0 : -1, N : halfN - 1 : -1, 0] = np.conj( + vf[halfN + 1 : N, 1 : halfN + 1, 0] +) +vf[N:halfN:-1, 0, 0] = np.conj(vf[1:halfN, 0, 0]) +vf[0, N:halfN:-1, 0] = np.conj(vf[0, 1:halfN, 0]) + +wf[N:halfN:-1, N:halfN:-1, 0] = np.conj(wf[1:halfN, 1:halfN, 0]) +wf[halfN - 1 : 0 : -1, N : halfN - 1 : -1, 0] = np.conj( + wf[halfN + 1 : N, 1 : halfN + 1, 0] +) +wf[N:halfN:-1, 0, 0] = np.conj(wf[1:halfN, 0, 0]) +wf[0, N:halfN:-1, 0] = np.conj(wf[0, 1:halfN, 0]) + +# Normalize. Because we are generating the data in wavenumber space, +# we have to multiply by N**3 because in the definition of the numpy +# ifftn there is a 1/N**n. +uf = uf * N ** 3 +vf = vf * N ** 3 +wf = wf * N ** 3 + +# # Quick check on energy content (make sure you add both the current +# # contribution and the one we are neglecting because we are assuming +# # real input data) +# print('Energy = int E(k) dk = 0.5 * int (uf**2 + vf**2 wf**2) dk1 dk2 dk3 = {0:.10f} ~= 3/2'.format( +# (np.sum(abs2(uf ) + abs2(vf ) + abs2(wf )) + +# np.sum(abs2(uf[:,:,1:-1]) + abs2(vf[:,:,1:-1]) + abs2(wf[:,:,1:-1]))) +# * 0.5 / N**6)) + +# if plotting, save the original field (before filtering) +if args.plot: + uo = np.fft.irfftn(uf) + Eko = ( + 16.0 + * np.sqrt(2.0 / np.pi) + * (khalf ** 4) + / (args.k0 ** 5) + * np.exp(-2.0 * (khalf ** 2) / (args.k0 ** 2)) + ) + + # Get the spectrum from 3D velocity field + kbins = np.arange(1, halfN + 1) + Nbins = len(kbins) + whichbin = np.digitize(kmag.flat, kbins) + ncount = np.bincount(whichbin) + + KI = (abs2(uf) + abs2(vf) + abs2(wf)) * 0.5 / N ** 6 + KI[:, :, 1:-1] += ( + (abs2(uf[:, :, 1:-1]) + abs2(vf[:, :, 1:-1]) + abs2(wf[:, :, 1:-1])) + * 0.5 + / N ** 6 + ) + + Eku = np.zeros(len(ncount) - 1) + for n in range(1, len(ncount)): + Eku[n - 1] = np.sum(KI.flat[whichbin == n]) + + ku = 0.5 * (kbins[0 : Nbins - 1] + kbins[1:Nbins]) + 1 + Eku = Eku[1:Nbins] + + +# ======================================================================== +# 2. Coefficients associated to wavenumbers that cannot be represented +# on the desired grid are set to 0 (sharp wavenumber cutoff) +kmagc = 0.5 * args.N +uf[kmag > kmagc] = 0.0 +vf[kmag > kmagc] = 0.0 +wf[kmag > kmagc] = 0.0 + + +# ======================================================================== +# 3. inverse Fourier transform of the velocity fluctuations (512^3 grid) +u = np.fft.irfftn(uf, s=(N, N, N)) +v = np.fft.irfftn(vf, s=(N, N, N)) +w = np.fft.irfftn(wf, s=(N, N, N)) + +# Another energy content check +print( + "Energy = 1/V * int E(x,y,z) dV = 0.5/V * int (u**2 + v**2 + w**2) dx dy dz = {0:.10f} ~= 3/2".format( + np.sum(u ** 2 + v ** 2 + w ** 2) * 0.5 * (dx / L) ** 3 + ) +) + +# # Enstrophy check +# _, dudy, dudz = np.gradient(u, dx) +# dvdx, _, dvdz = np.gradient(v, dx) +# dwdx, dwdy, _ = np.gradient(w, dx) +# wx = dwdy-dvdz +# wy = dudz-dwdx +# wz = dvdx-dudy +# lambda0 = 2.0/args.k0 +# print('Enstrophy = 0.5/V * int (wx**2 + wy**2 + wz**2) dx dy dz= +# {0:.10f} ~= '.format(np.sum(wx**2+wy**2+wz**2) * 0.5 * (dx/L)**3 * +# lambda0**2)) + +# ======================================================================== +# 4. velocity fluctuations re-sampled on the desired grid (N^3) +xr = np.linspace(xs, xe, args.N + 1) +xrc = (xr[1:] + xr[:-1]) / 2 +Xr, Yr, Zr = np.meshgrid(xrc, xrc, xrc, indexing="ij") + +Xr = Xr.reshape(-1, order="F") +Yr = Yr.reshape(-1, order="F") +Zr = Zr.reshape(-1, order="F") + +ur = spi.interpn((xc, xc, xc), u, (Xr, Yr, Zr), method="linear") +vr = spi.interpn((xc, xc, xc), v, (Xr, Yr, Zr), method="linear") +wr = spi.interpn((xc, xc, xc), w, (Xr, Yr, Zr), method="linear") + + +# ======================================================================== +# Save the data in Fortran ordering +fname = "hit_ic_{0:d}_{1:d}.dat".format(int(args.k0), args.N) +data = np.vstack((Xr, Yr, Zr, ur, vr, wr)).T +np.savetxt(fname, data, fmt="%.18e", delimiter=",", header="x, y, z, u, v, w") + + +# ======================================================================== +# plot (only u fluctuations) +if args.plot: + import matplotlib as mpl + + mpl.use("Agg") + import matplotlib.pyplot as plt + + datmin = u.min() + datmax = u.max() + # print("min/max u =",datmin,datmax) + + # Original data + # transpose and origin change bc I used meshgrid with ij and not xy + fig, ax = plt.subplots(nrows=3, ncols=3, figsize=(14, 14)) + ax[0, 0].imshow( + uo[:, :, 0].T, + origin="lower", + extent=[xs, xe, xs, xe], + cmap="RdBu_r", + vmin=datmin, + vmax=datmax, + ) + ax[0, 0].set_title("Original data (x,y)") + ax[0, 1].imshow( + uo[:, 0, :].T, + origin="lower", + extent=[xs, xe, xs, xe], + cmap="RdBu_r", + vmin=datmin, + vmax=datmax, + ) + ax[0, 1].set_title("Original data (x,z)") + ax[0, 2].imshow( + uo[0, :, :].T, + origin="lower", + extent=[xs, xe, xs, xe], + cmap="RdBu_r", + vmin=datmin, + vmax=datmax, + ) + ax[0, 2].set_title("Original data (y,z)") + + # Filtered original data + ax[1, 0].imshow( + u[:, :, 0].T, + origin="lower", + extent=[xs, xe, xs, xe], + cmap="RdBu_r", + vmin=datmin, + vmax=datmax, + ) + ax[1, 0].set_title("Filtered original data (x,y)") + ax[1, 1].imshow( + u[:, 0, :].T, + origin="lower", + extent=[xs, xe, xs, xe], + cmap="RdBu_r", + vmin=datmin, + vmax=datmax, + ) + ax[1, 1].set_title("Filtered original data (x,z)") + ax[1, 2].imshow( + u[0, :, :].T, + origin="lower", + extent=[xs, xe, xs, xe], + cmap="RdBu_r", + vmin=datmin, + vmax=datmax, + ) + ax[1, 2].set_title("Filtered original data (y,z)") + + # Downsampled filtered data + ur = ur.reshape(args.N, args.N, args.N, order="F") + ax[2, 0].imshow( + ur[:, :, 0].T, + origin="lower", + extent=[xs, xe, xs, xe], + cmap="RdBu_r", + vmin=datmin, + vmax=datmax, + ) + ax[2, 0].set_title("Downsampled data (x,y)") + ax[2, 1].imshow( + ur[:, 0, :].T, + origin="lower", + extent=[xs, xe, xs, xe], + cmap="RdBu_r", + vmin=datmin, + vmax=datmax, + ) + ax[2, 1].set_title("Downsampled data (x,z)") + ax[2, 2].imshow( + ur[0, :, :].T, + origin="lower", + extent=[xs, xe, xs, xe], + cmap="RdBu_r", + vmin=datmin, + vmax=datmax, + ) + ax[2, 2].set_title("Downsampled data (y,z)") + + plt.savefig("hit_ic_u_{0:d}_{1:d}.png".format(int(args.k0), args.N), format="png") + + # Fourier coefficients of original data + fig, ax = plt.subplots(nrows=2, ncols=3, figsize=(14, 8)) + ax[0, 0].imshow(np.real(uf[:, :, 0].T), origin="lower", cmap="RdBu_r") + ax[0, 0].set_title("Real Fourier coefficients (x,y)") + ax[0, 1].imshow(np.real(uf[:, 0, :].T), origin="lower", cmap="RdBu_r") + ax[0, 1].set_title("Real Fourier coefficients (x,z)") + ax[0, 2].imshow(np.real(uf[0, :, :].T), origin="lower", cmap="RdBu_r") + ax[0, 2].set_title("Real Fourier coefficients (y,z)") + ax[1, 0].imshow(np.imag(uf[:, :, 0].T), origin="lower", cmap="RdBu_r") + ax[1, 0].set_title("Imag Fourier coefficients (x,y)") + ax[1, 1].imshow(np.imag(uf[:, 0, :].T), origin="lower", cmap="RdBu_r") + ax[1, 1].set_title("Imag Fourier coefficients (x,z)") + ax[1, 2].imshow(np.imag(uf[0, :, :].T), origin="lower", cmap="RdBu_r") + ax[1, 2].set_title("Imag Fourier coefficients (y,z)") + plt.savefig("hit_ic_uf_{0:d}_{1:d}.png".format(int(args.k0), args.N), format="png") + + # Spectrum + plt.figure(20) + ax = plt.gca() + p = plt.loglog(khalf, Eko, color=cmap[-1], lw=2) + p[0].set_dashes(dashseq[0]) + p = plt.loglog(ku, Eku, color=cmap[0], lw=2) + p[0].set_dashes(dashseq[1]) + plt.ylim([1e-16, 10]) + plt.xlabel(r"$k$", fontsize=22, fontweight="bold") + plt.ylabel(r"$E(k)$", fontsize=22, fontweight="bold") + plt.setp(ax.get_xmajorticklabels(), fontsize=18, fontweight="bold") + plt.setp(ax.get_ymajorticklabels(), fontsize=18, fontweight="bold") + plt.savefig( + "hit_ic_spectrum_{0:d}_{1:d}.png".format(int(args.k0), args.N), format="png" + ) + +# output timer +end = time.time() - start +print("Elapsed time " + str(timedelta(seconds=end)) + " (or {0:f} seconds)".format(end)) diff --git a/Exec/RegTests/EnclosedFlame/input.manifold b/Exec/RegTests/EnclosedFlame/input.manifold new file mode 100644 index 000000000..c7691527c --- /dev/null +++ b/Exec/RegTests/EnclosedFlame/input.manifold @@ -0,0 +1,126 @@ +#----------------------DOMAIN DEFINITION------------------------ +#geometry.is_periodic = 1 1 # For each dir, 0: non-perio, 1: periodi +geometry.is_periodic = 0 0 # For each dir, 0: non-perio, 1: periodic +geometry.coord_sys = 0 # 0 => cart, 1 => RZ +geometry.prob_lo = 0.0 0.0 0.0 # x_lo y_lo (z_lo) +geometry.prob_hi = 0.02 0.02 0.016 # x_hi y_hi (z_hi) + +# >>>>>>>>>>>>> BC FLAGS <<<<<<<<<<<<<<<< +# Interior, Inflow, Outflow, Symmetry, +# SlipWallAdiab, NoSlipWallAdiab, SlipWallIsotherm, NoSlipWallIsotherm +#peleLM.lo_bc = Interior Interior +#peleLM.hi_bc = Interior Interior + +peleLM.lo_bc = Outflow Outflow +peleLM.hi_bc = Outflow Outflow + + + +#-------------------------AMR CONTROL---------------------------- +amr.n_cell = 128 128 32 # Level 0 number of cells in each direction +amr.v = 1 # AMR verbose +amr.max_level = 2 # maximum level number allowed +amr.ref_ratio = 2 2 2 2 2 # refinement ratio +amr.regrid_int = 5 # how often to regrid +amr.n_error_buf = 6 6 6 6 # number of buffer cells in error est +amr.grid_eff = 0.7 # what constitutes an efficient grid +amr.blocking_factor = 16 # block factor in grid generation (min box size) +amr.max_grid_size = 128 # max box size + + +#--------------------------- Problem ------------------------------- +prob.P_mean = 101325.0 +prob.standoff = -0.0175 +prob.flame_radius = 0.001 +prob.pertmag = 0.0 #0.0002 +pmf.datafile = "prem_posf10325_phi1_p1_t298_mani.dat" +pmf.do_cellAverage = 0 + +#-------------------------PeleLM CONTROL---------------------------- +peleLM.v = 2 +peleLM.incompressible = 0 +peleLM.rho = 1.17 +peleLM.mu = 0.0 +peleLM.sdc_iterMax = 2 +peleLM.floor_species = 0 +peleLM.num_divu_iter = 1 #1 +peleLM.num_init_iter = 3 # 3 + +peleLM.do_temporals = 0 +peleLM.temporal_int = 2 +peleLM.mass_balance = 1 + +#amr.restart = chk00005 +amr.check_int = 100 +amr.plot_int = 10 +amr.max_step = 1000 +amr.dt_shrink = 0.01 +amr.stop_time = 1.0 +#amr.stop_time = 1.00 +amr.cfl = 0.15 +amr.derive_plot_vars = avg_pressure mag_vort mass_fractions maniout + +# --------------- INPUTS TO CHEMISTRY REACTOR --------------- +peleLM.chem_integrator = "ReactorRK64" +ode.rk64_nsubsteps_guess = 1 +ode.rk64_nsubsteps_min = 1 +peleLM.use_typ_vals_chem = 1 # Use species/temp typical values in CVODE +ode.rtol = 1.0e-6 # Relative tolerance of the chemical solve +ode.atol = 1.0e-5 # Absolute tolerance factor applied on typical values +cvode.solve_type = denseAJ_direct # CVODE Linear solve type (for Newton direction) +cvode.max_order = 4 # CVODE max BDF order. + +#--------------------REFINEMENT CONTROL------------------------ + +amr.refinement_indicators = magVort temp tempval +amr.magVort.max_level = 1 +amr.magVort.value_greater = 5000.0 +amr.magVort.field_name = mag_vort + +amr.temp.max_level = 3 +amr.temp.adjacent_difference_greater = 25 +amr.temp.field_name = temp + +amr.tempval.max_level = 2 +amr.tempval.value_greater = 150000 +amr.tempval.field_name = temp + +#amr.refinement_indicators = yH +#amr.yH.max_level = 5 +#amr.yH.value_greater = 3.0e-7 +#amr.yH.field_name = Y(H) + +#--------------------LINEAR SOLVER CONTROL------------------------ +nodal_proj.verbose = 2 +nodal_proj.rtol = 2.0e-11 +amrex.fpe_trap_invalid = 1 +amrex.fpe_trap_zero = 1 +amrex.fpe_trap_overflow = 1 + +#----------------------- Manifold Stuff ---------------------------- +manifold.model = Table +manifold.v = 1 +manifold.filename = prem_posf10325_phi1_p1_t298.ctb +eos.nominal_pressure_cgs = 1013250.0 +peleLM.use_wbar = 0 +peleLM.chi_correction_type = "DivuFirstIter" +#peleLM.chi_correction_type = "NoDivu" +eos.has_mani_src = true +eos.use_log_density = false +eos.compute_temperature = true + +# ----------------------- HIT IC ---------------------------- +ic.hitIC = 1 +ic.input_resolution = 128 +ic.uin_norm = 1.0 +ic.urms0 = 4.0 +ic.lscale = 25.132741228718 +#ic.lscale = 12.56637061436 +#ic.lscale = 6.283185307179 +#ic.lscale = 3.1415926536 +#ic.lscale = 1.57079632679489662 +ic.offset = 0 #-0.031415926536 +ic.input_name = hit_ic_4_128.dat +ic.input_binaryformat = 0 +ic.buffer_boundary = 0.25 +ic.buffer_thickness = 0.03 \ No newline at end of file diff --git a/Exec/RegTests/EnclosedFlame/input.nn b/Exec/RegTests/EnclosedFlame/input.nn new file mode 100644 index 000000000..b0cf2d328 --- /dev/null +++ b/Exec/RegTests/EnclosedFlame/input.nn @@ -0,0 +1,131 @@ +#----------------------DOMAIN DEFINITION------------------------ +#geometry.is_periodic = 1 1 # For each dir, 0: non-perio, 1: periodi +geometry.is_periodic = 0 0 # For each dir, 0: non-perio, 1: periodic +geometry.coord_sys = 0 # 0 => cart, 1 => RZ +geometry.prob_lo = 0.0 0.0 0.0 # x_lo y_lo (z_lo) +geometry.prob_hi = 0.02 0.02 0.016 # x_hi y_hi (z_hi) + +# >>>>>>>>>>>>> BC FLAGS <<<<<<<<<<<<<<<< +# Interior, Inflow, Outflow, Symmetry, +# SlipWallAdiab, NoSlipWallAdiab, SlipWallIsotherm, NoSlipWallIsotherm +#peleLM.lo_bc = Interior Interior +#peleLM.hi_bc = Interior Interior + +peleLM.lo_bc = Outflow Outflow +peleLM.hi_bc = Outflow Outflow + + + +#-------------------------AMR CONTROL---------------------------- +amr.n_cell = 128 128 32 # Level 0 number of cells in each direction +amr.v = 1 # AMR verbose +amr.max_level = 3 # maximum level number allowed +amr.ref_ratio = 2 2 2 2 2 # refinement ratio +amr.regrid_int = 5 # how often to regrid +amr.n_error_buf = 6 6 6 6 # number of buffer cells in error est +amr.grid_eff = 0.7 # what constitutes an efficient grid +amr.blocking_factor = 16 # block factor in grid generation (min box size) +amr.max_grid_size = 128 # max box size + + +#--------------------------- Problem ------------------------------- +prob.P_mean = 101325.0 +prob.standoff = -0.0175 +prob.flame_radius = 0.001 +prob.pertmag = 0.0 #0.0002 +#pmf.datafile = "prem_posf10325_phi1_p1_t298_mani_fgm.dat" +pmf.datafile = "prem_posf10325_phi1_p1_t298_mani_cmlm.dat" +pmf.do_cellAverage = 0 + +#-------------------------PeleLM CONTROL---------------------------- +peleLM.v = 2 +peleLM.incompressible = 0 +peleLM.rho = 1.17 +peleLM.mu = 0.0 +peleLM.sdc_iterMax = 2 +peleLM.floor_species = 0 +peleLM.num_divu_iter = 1 #1 +peleLM.num_init_iter = 3 # 3 + +peleLM.do_temporals = 0 +peleLM.temporal_int = 2 +peleLM.mass_balance = 1 + +#amr.restart = chk00005 +amr.check_int = 100 +amr.plot_int = 10 +amr.max_step = 1000 +amr.dt_shrink = 0.01 +amr.stop_time = 1.0 +#amr.stop_time = 1.00 +amr.cfl = 0.15 +amr.derive_plot_vars = avg_pressure mag_vort mass_fractions # maniout + +# --------------- INPUTS TO CHEMISTRY REACTOR --------------- +peleLM.chem_integrator = "ReactorRK64" +ode.rk64_nsubsteps_guess = 1 +ode.rk64_nsubsteps_min = 1 +peleLM.use_typ_vals_chem = 1 # Use species/temp typical values in CVODE +ode.rtol = 1.0e-6 # Relative tolerance of the chemical solve +ode.atol = 1.0e-5 # Absolute tolerance factor applied on typical values +cvode.solve_type = denseAJ_direct # CVODE Linear solve type (for Newton direction) +cvode.max_order = 4 # CVODE max BDF order. + +#--------------------REFINEMENT CONTROL------------------------ + +amr.refinement_indicators = magVort temp tempval +amr.magVort.max_level = 1 +amr.magVort.value_greater = 5000.0 +amr.magVort.field_name = mag_vort + +amr.temp.max_level = 3 +amr.temp.adjacent_difference_greater = 25 +amr.temp.field_name = temp + +amr.tempval.max_level = 2 +amr.tempval.value_greater = 150000 +amr.tempval.field_name = temp + +#amr.refinement_indicators = yH +#amr.yH.max_level = 5 +#amr.yH.value_greater = 3.0e-7 +#amr.yH.field_name = Y(H) + +#--------------------LINEAR SOLVER CONTROL------------------------ +nodal_proj.verbose = 2 +nodal_proj.rtol = 2.0e-11 +amrex.fpe_trap_invalid = 1 +amrex.fpe_trap_zero = 1 +amrex.fpe_trap_overflow = 1 + +#----------------------- Manifold Stuff ---------------------------- +manifold.model = NeuralNet +manifold.v = 1 +#manifold.filename = fgm_net.pnn +manifold.filename = cmlm_net.pnn +manifold.cmlm_net = 1 +#manifold.info_filename = fgm_net_info.txt +manifold.info_filename = cmlm_net_info.txt +eos.nominal_pressure_cgs = 1013250.0 +peleLM.use_wbar = 0 +peleLM.chi_correction_type = "DivuFirstIter" +#peleLM.chi_correction_type = "NoDivu" +eos.has_mani_src = true +eos.density_lookup_type = log +eos.compute_temperature = true + +# ----------------------- HIT IC ---------------------------- +ic.hitIC = 1 +ic.input_resolution = 128 +ic.uin_norm = 1.0 +ic.urms0 = 4.0 +ic.lscale = 25.132741228718 +#ic.lscale = 12.56637061436 +#ic.lscale = 6.283185307179 +#ic.lscale = 3.1415926536 +#ic.lscale = 1.57079632679489662 +ic.offset = 0 #-0.031415926536 +ic.input_name = hit_ic_4_128.dat +ic.input_binaryformat = 0 +ic.buffer_boundary = 0.25 +ic.buffer_thickness = 0.03 \ No newline at end of file diff --git a/Exec/RegTests/EnclosedFlame/input.posf b/Exec/RegTests/EnclosedFlame/input.posf new file mode 100644 index 000000000..9b56efa7f --- /dev/null +++ b/Exec/RegTests/EnclosedFlame/input.posf @@ -0,0 +1,115 @@ +#----------------------DOMAIN DEFINITION------------------------ +#geometry.is_periodic = 1 1 # For each dir, 0: non-perio, 1: periodi +geometry.is_periodic = 0 0 # For each dir, 0: non-perio, 1: periodic +geometry.coord_sys = 0 # 0 => cart, 1 => RZ +geometry.prob_lo = 0.0 0.0 0.0 # x_lo y_lo (z_lo) +geometry.prob_hi = 0.02 0.02 0.016 # x_hi y_hi (z_hi) + +# >>>>>>>>>>>>> BC FLAGS <<<<<<<<<<<<<<<< +# Interior, Inflow, Outflow, Symmetry, +# SlipWallAdiab, NoSlipWallAdiab, SlipWallIsotherm, NoSlipWallIsotherm +#peleLM.lo_bc = Interior Interior +#peleLM.hi_bc = Interior Interior + +peleLM.lo_bc = Outflow Outflow +peleLM.hi_bc = Outflow Outflow + + +#-------------------------AMR CONTROL---------------------------- +amr.n_cell = 128 128 32 # Level 0 number of cells in each direction +amr.v = 1 # AMR verbose +amr.max_level = 3 # maximum level number allowed +amr.ref_ratio = 2 2 2 2 2 # refinement ratio +amr.regrid_int = 5 # how often to regrid +amr.n_error_buf = 2 2 2 2 # number of buffer cells in error est +amr.grid_eff = 0.7 # what constitutes an efficient grid +amr.blocking_factor = 16 # block factor in grid generation (min box size) +amr.max_grid_size = 128 # max box size + + +#--------------------------- Problem ------------------------------- +prob.P_mean = 101325.0 +prob.standoff = -0.0175 +prob.flame_radius = 0.001 +prob.pertmag = 0.0 #0.0002 +pmf.datafile = "prem_posf10325_phi1_p1_t298.dat" +pmf.do_cellAverage = 0 + +#-------------------------PeleLM CONTROL---------------------------- +peleLM.v = 2 +peleLM.incompressible = 0 +peleLM.rho = 1.17 +peleLM.mu = 0.0 +peleLM.sdc_iterMax = 2 +peleLM.floor_species = 0 +peleLM.num_divu_iter = 1 +peleLM.num_init_iter = 3 + +peleLM.do_temporals = 0 +peleLM.temporal_int = 2 +peleLM.mass_balance = 1 + +# amr.restart = chk00100 +amr.check_int = 100 +amr.plot_int = 10 +amr.max_step = 1000 +amr.dt_shrink = 0.01 +amr.stop_time = 1.0 +#amr.stop_time = 1.00 +amr.cfl = 0.15 +amr.derive_plot_vars = avg_pressure mag_vort mass_fractions inst_src_spec + +# --------------- INPUTS TO CHEMISTRY REACTOR --------------- +peleLM.chem_integrator = "ReactorCvode" +peleLM.use_typ_vals_chem = 1 # Use species/temp typical values in CVODE +ode.rtol = 1.0e-6 # Relative tolerance of the chemical solve +ode.atol = 1.0e-5 # Absolute tolerance factor applied on typical values +cvode.solve_type = denseAJ_direct # CVODE Linear solve type (for Newton direction) +cvode.max_order = 4 # CVODE max BDF order. + +#--------------------REFINEMENT CONTROL------------------------ + +amr.refinement_indicators = magVort temp tempval +amr.magVort.max_level = 1 +amr.magVort.value_greater = 5000.0 +amr.magVort.field_name = mag_vort + +amr.temp.max_level = 3 +amr.temp.adjacent_difference_greater = 25 +amr.temp.field_name = temp + +amr.tempval.max_level = 2 +amr.tempval.value_greater = 150000 +amr.tempval.field_name = temp + +#amr.refinement_indicators = yH +#amr.yH.max_level = 5 +#amr.yH.value_greater = 3.0e-7 +#amr.yH.field_name = Y(H) + + +#--------------------LINEAR SOLVER CONTROL------------------------ +nodal_proj.verbose = 2 +nodal_proj.rtol = 2.0e-11 +amrex.fpe_trap_invalid = 1 +amrex.fpe_trap_zero = 1 +amrex.fpe_trap_overflow = 1 + +peleLM.use_wbar = 1 + + +# ----------------------- HIT IC ---------------------------- +ic.hitIC = 1 +ic.input_resolution = 128 +ic.uin_norm = 1.0 +ic.urms0 = 2.0 +#ic.lscale = 25.132741228718 +ic.lscale = 12.56637061436 +#ic.lscale = 6.283185307179 +#ic.lscale = 3.1415926536 +#ic.lscale = 1.57079632679489662 +ic.offset = 0 #-0.031415926536 +ic.input_name = hit_ic_4_128.dat +ic.input_binaryformat = 0 +ic.buffer_boundary = 0.25 +ic.buffer_thickness = 0.03 \ No newline at end of file diff --git a/Exec/RegTests/EnclosedFlame/pelelm_prob.H b/Exec/RegTests/EnclosedFlame/pelelm_prob.H index 1125cf48e..18e0acee8 100644 --- a/Exec/RegTests/EnclosedFlame/pelelm_prob.H +++ b/Exec/RegTests/EnclosedFlame/pelelm_prob.H @@ -11,6 +11,48 @@ #include #include +// ----------------------------------------------------------- +// Search for the closest index in an array to a given value +// using the bisection technique. +// INPUTS/OUTPUTS: +// xtable(0:n-1) => array to search in (ascending order) +// n => array size +// x => x location +// idxlo <=> output st. xtable(idxlo) <= x < xtable(idxlo+1) +// ----------------------------------------------------------- +AMREX_GPU_DEVICE +AMREX_FORCE_INLINE +void +locate(const amrex::Real* xtable, const int n, const amrex::Real& x, int& idxlo) +{ + // If x is out of bounds, return boundary index + if (x >= xtable[n - 1]) { + idxlo = n - 1; + return; + } + if (x <= xtable[0]) { + idxlo = 0; + return; + } + + // Do the bisection + idxlo = 0; + int idxhi = n - 1; + bool notdone = true; + while (notdone) { + if (idxhi - idxlo <= 1) { + notdone = false; + } else { + const int idxmid = (idxhi + idxlo) / 2; + if (x >= xtable[idxmid]) { + idxlo = idxmid; + } else { + idxhi = idxmid; + } + } + } +} + AMREX_GPU_DEVICE AMREX_FORCE_INLINE void pelelm_initdata(int i, int j, int k, @@ -19,16 +61,19 @@ void pelelm_initdata(int i, int j, int k, amrex::Array4 const& aux, amrex::GeometryData const& geomdata, ProbParm const& prob_parm, - pele::physics::PMF::PmfData::DataContainer const * pmf_data) + pele::physics::PMF::PmfData::DataContainer const * pmf_data, + const pele::physics::eos::EosParm* eosparm) { const amrex::Real* prob_lo = geomdata.ProbLo(); const amrex::Real* prob_hi = geomdata.ProbHi(); const amrex::Real* dx = geomdata.CellSize(); - AMREX_D_TERM(const amrex::Real x = prob_lo[0] + (i+0.5)*dx[0];, + /*AMREX_D_TERM(const amrex::Real x = prob_lo[0] + (i+0.5)*dx[0];, const amrex::Real y = prob_lo[1] + (j+0.5)*dx[1];, - const amrex::Real z = prob_lo[2] + (k+0.5)*dx[2];); - + const amrex::Real z = prob_lo[2] + (k+0.5)*dx[2];); */ + const amrex::Real x = prob_lo[0] + (i+0.5)*dx[0]; + const amrex::Real y = prob_lo[1] + (j+0.5)*dx[1]; + const amrex::Real z = prob_lo[2] + (k+0.5)*dx[2]; AMREX_D_TERM(const amrex::Real Lx = prob_hi[0] - prob_lo[0];, const amrex::Real Ly = prob_hi[1] - prob_lo[1];, const amrex::Real Lz = prob_hi[2] - prob_lo[2]); @@ -39,7 +84,7 @@ void pelelm_initdata(int i, int j, int k, constexpr amrex::Real Pi = 3.14159265358979323846264338327950288; - auto eos = pele::physics::PhysicsType::eos(); + auto eos = pele::physics::PhysicsType::eos(eosparm); amrex::GpuArray pmf_vals = {0.0}; amrex::Real molefrac[NUM_SPECIES] = {0.0}; amrex::Real massfrac[NUM_SPECIES] = {0.0}; @@ -49,12 +94,12 @@ void pelelm_initdata(int i, int j, int k, + (y-yc)*(y-yc), + (z-zc)*(z-zc))); - if (prob_parm.pertmag > 0.0) + if (prob_parm.pertmag > 0.0) { #if ( AMREX_SPACEDIM == 2 ) amrex::Real angle = std::atan2((y-yc),(x-xc)); - pert = prob_parm.pertmag * + pert = prob_parm.pertmag * (0.7 * std::sin(2*angle) + //1.023 * std::sin(2 * (angle - 0.004598) / radius2) + //0.945 * std::sin(3 * (angle - 0.00712435) / radius2) + @@ -62,14 +107,14 @@ void pelelm_initdata(int i, int j, int k, 1.4 * std::sin(4 * angle )); } - amrex::Real y1 = 3.6 - (radius - prob_parm.standoff - 0.5*dx[1] + pert)*100; - amrex::Real y2 = 3.6 - (radius - prob_parm.standoff + 0.5*dx[1] + pert)*100; + amrex::Real y1 = (prob_parm.flame_radius - (radius + prob_parm.standoff - 0.5*dx[1] + pert))*100; + amrex::Real y2 = (prob_parm.flame_radius - (radius + prob_parm.standoff + 0.5*dx[1] + pert))*100; #elif ( AMREX_SPACEDIM == 3 ) amrex::Real angle = std::atan2((y-yc),(x-xc)); amrex::Real angle2 = std::atan2((z-zc),(y-yc)); - pert = prob_parm.pertmag * + pert = prob_parm.pertmag * (0.5 * std::sin(2*angle) + 0.7 * std::sin(8 * angle ) + 1.1 * std::sin(4 * angle )) * @@ -78,8 +123,8 @@ void pelelm_initdata(int i, int j, int k, 0.85 * std::sin(16 * angle2 )); } - amrex::Real y1 = 3.6 - (radius - prob_parm.standoff - 1.42*dx[1] + pert)*100; - amrex::Real y2 = 3.6 - (radius - prob_parm.standoff + 1.42*dx[1] + pert)*100; +amrex::Real y1 = (prob_parm.flame_radius - (radius + prob_parm.standoff - 1.42*dx[1] + pert))*100; +amrex::Real y2 = (prob_parm.flame_radius - (radius + prob_parm.standoff + 1.42*dx[1] + pert))*100; #endif amrex::Real ymean = 0.5 * (y1+y2); @@ -87,11 +132,6 @@ void pelelm_initdata(int i, int j, int k, state(i,j,k,TEMP) = pmf_vals[0];; - for (int n = 0; n < NUM_SPECIES; n++){ - molefrac[n] = pmf_vals[3 + n]; - } - eos.X2Y(molefrac, massfrac); - state(i,j,k,VELX) = 0.0; #if ( AMREX_SPACEDIM == 2 ) state(i,j,k,VELY) = pmf_vals[1]*1e-2; @@ -100,6 +140,25 @@ void pelelm_initdata(int i, int j, int k, state(i,j,k,VELZ) = pmf_vals[1]*1e-2; #endif +#ifdef USE_MANIFOLD_EOS + for (int n = 0; n < NUM_SPECIES-1; n++){ + massfrac[n] = pmf_vals[3 + n]; + } + amrex::Real rho_temp, tmp1, tmp2; + eos.PYT2R(tmp1, massfrac, tmp2, rho_temp); + rho_temp *= 1.0e3; // CGS -> MKS conversion + state(i,j,k,DENSITY) = rho_temp; + state(i,j,k,RHOH) = 0.0; // No RhoH transport in manifold model + + for (int n = 0; n < NUM_SPECIES-1; n++) { + state(i,j,k,FIRSTSPEC+n) = massfrac[n] * rho_temp; + } + state(i,j,k,FIRSTSPEC+NUM_SPECIES-1) = rho_temp; +#else + for (int n = 0; n < NUM_SPECIES; n++){ + molefrac[n] = pmf_vals[3 + n]; + } + eos.X2Y(molefrac, massfrac); amrex::Real P_cgs = prob_parm.P_mean * 10.0; // Density @@ -116,6 +175,133 @@ void pelelm_initdata(int i, int j, int k, for (int n = 0; n < NUM_SPECIES; n++) { state(i,j,k,FIRSTSPEC+n) = massfrac[n] * state(i,j,k,DENSITY); } +#endif + + // Read in turbulent fluctuations from MarcHDF + if (prob_parm.hitIC) { + amrex::Real xtf[3] = {x, y, z}; + amrex::Real u[3] = {0.0}; + amrex::Real mod[3] = {0.0}; + int idx[3] = {0}; + int idxp1[3] = {0}; + amrex::Real slp[3] = {0.0}; + for (int cnt = 0; cnt < 3; cnt++) { + mod[cnt] = std::fmod(xtf[cnt], prob_parm.Linput); + locate(prob_parm.d_xarray, prob_parm.input_resolution, mod[cnt], idx[cnt]); + idxp1[cnt] = (idx[cnt] + 1) % prob_parm.input_resolution; + slp[cnt] = (mod[cnt] - prob_parm.d_xarray[idx[cnt]]) / prob_parm.d_xdiff[idx[cnt]]; + } + int inSize = prob_parm.input_resolution; + + const amrex::Real f0 = (1 - slp[0]) * (1 - slp[1]) * (1 - slp[2]); + const amrex::Real f1 = slp[0] * (1 - slp[1]) * (1 - slp[2]); + const amrex::Real f2 = (1 - slp[0]) * slp[1] * (1 - slp[2]); + const amrex::Real f3 = (1 - slp[0]) * (1 - slp[1]) * slp[2]; + const amrex::Real f4 = slp[0] * (1 - slp[1]) * slp[2]; + const amrex::Real f5 = (1 - slp[0]) * slp[1] * slp[2]; + const amrex::Real f6 = slp[0] * slp[1] * (1 - slp[2]); + const amrex::Real f7 = slp[0] * slp[1] * slp[2]; + u[0] = + prob_parm.d_uinput + [idx[0] + inSize * (idx[1] + inSize * idx[2])] * + f0 + + prob_parm.d_uinput + [idxp1[0] + inSize * (idx[1] + inSize * idx[2])] * + f1 + + prob_parm.d_uinput + [idx[0] + inSize * (idxp1[1] + inSize * idx[2])] * + f2 + + prob_parm.d_uinput + [idx[0] + inSize * (idx[1] + inSize * idxp1[2])] * + f3 + + prob_parm.d_uinput + [idxp1[0] + inSize * (idx[1] + inSize * idxp1[2])] * + f4 + + prob_parm.d_uinput + [idx[0] + inSize * (idxp1[1] + inSize * idxp1[2])] * + f5 + + prob_parm.d_uinput + [idxp1[0] + inSize * (idxp1[1] + inSize * idx[2])] * + f6 + + prob_parm.d_uinput + [idxp1[0] + + inSize * (idxp1[1] + inSize * idxp1[2])] * + f7; + u[1] = + prob_parm.d_vinput + [idx[0] + inSize * (idx[1] + inSize * idx[2])] * + f0 + + prob_parm.d_vinput + [idxp1[0] + inSize * (idx[1] + inSize * idx[2])] * + f1 + + prob_parm.d_vinput + [idx[0] + inSize * (idxp1[1] + inSize * idx[2])] * + f2 + + prob_parm.d_vinput + [idx[0] + inSize * (idx[1] + inSize * idxp1[2])] * + f3 + + prob_parm.d_vinput + [idxp1[0] + inSize * (idx[1] + inSize * idxp1[2])] * + f4 + + prob_parm.d_vinput + [idx[0] + inSize * (idxp1[1] + inSize * idxp1[2])] * + f5 + + prob_parm.d_vinput + [idxp1[0] + inSize * (idxp1[1] + inSize * idx[2])] * + f6 + + prob_parm.d_vinput + [idxp1[0] + + inSize * (idxp1[1] + inSize * idxp1[2])] * + f7; + u[2] = + prob_parm.d_winput + [idx[0] + inSize * (idx[1] + inSize * idx[2])] * + f0 + + prob_parm.d_winput + [idxp1[0] + inSize * (idx[1] + inSize * idx[2])] * + f1 + + prob_parm.d_winput + [idx[0] + inSize * (idxp1[1] + inSize * idx[2])] * + f2 + + prob_parm.d_winput + [idx[0] + inSize * (idx[1] + inSize * idxp1[2])] * + f3 + + prob_parm.d_winput + [idxp1[0] + inSize * (idx[1] + inSize * idxp1[2])] * + f4 + + prob_parm.d_winput + [idx[0] + inSize * (idxp1[1] + inSize * idxp1[2])] * + f5 + + prob_parm.d_winput + [idxp1[0] + inSize * (idxp1[1] + inSize * idx[2])] * + f6 + + prob_parm.d_winput + [idxp1[0] + + inSize * (idxp1[1] + inSize * idxp1[2])] * + f7; + AMREX_D_TERM( + const amrex::Real decayx = + (0.5 * + (std::tanh((xtf[0] - (prob_lo[0] + prob_parm.buffer_boundary*Lx)) / (prob_parm.buffer_thickness*Lx)) + 1)) * + (0.5 * + (std::tanh(-(xtf[0] - (prob_hi[0] - prob_parm.buffer_boundary*Lx)) / (prob_parm.buffer_thickness*Lx)) + 1));, + const amrex::Real decayy = + (0.5 * + (std::tanh((xtf[1] - (prob_lo[1] + prob_parm.buffer_boundary*Ly)) / (prob_parm.buffer_thickness*Ly)) + 1)) * + (0.5 * + (std::tanh(-(xtf[1] - (prob_hi[1] - prob_parm.buffer_boundary*Ly)) / (prob_parm.buffer_thickness*Ly)) + 1));, + const amrex::Real decayz = + (0.5 * + (std::tanh((xtf[2] - (prob_lo[2] + prob_parm.buffer_boundary*Lz)) / (prob_parm.buffer_thickness*Lz)) + 1)) * + (0.5 * + (std::tanh(-(xtf[2] - (prob_hi[2] - prob_parm.buffer_boundary*Lz)) / (prob_parm.buffer_thickness*Lz)) + 1));) + u[0] *= AMREX_D_TERM(decayx, * decayy, * decayz); + u[1] *= AMREX_D_TERM(decayx, * decayy, * decayz); + u[2] *= AMREX_D_TERM(decayx, * decayy, * decayz); + AMREX_D_TERM(state(i,j,k,VELX) = u[0];, + state(i,j,k,VELY) = u[1];, + state(i,j,k,VELZ) = u[2];) + } } AMREX_GPU_DEVICE @@ -130,7 +316,8 @@ bcnormal( const amrex::Real time, amrex::GeometryData const& geomdata, ProbParm const& prob_parm, - pele::physics::PMF::PmfData::DataContainer const *pmf_data) + pele::physics::PMF::PmfData::DataContainer const *pmf_data, + const pele::physics::eos::EosParm* eosparm) { const amrex::Real* prob_lo = geomdata.ProbLo(); } diff --git a/Exec/RegTests/EnclosedFlame/pelelm_prob.cpp b/Exec/RegTests/EnclosedFlame/pelelm_prob.cpp index e9d50dd88..59b289382 100644 --- a/Exec/RegTests/EnclosedFlame/pelelm_prob.cpp +++ b/Exec/RegTests/EnclosedFlame/pelelm_prob.cpp @@ -1,14 +1,225 @@ #include #include + +// ----------------------------------------------------------- +// Read a binary file +// INPUTS/OUTPUTS: +// iname => filename +// nx => input resolution +// ny => input resolution +// nz => input resolution +// data <= output data +// ----------------------------------------------------------- +void +read_binary( + const std::string& iname, + const size_t nx, + const size_t ny, + const size_t nz, + const size_t ncol, + amrex::Vector& data /*needs to be double*/) +{ + std::ifstream infile(iname, std::ios::in | std::ios::binary); + if (not infile.is_open()) { + amrex::Abort("Unable to open input file " + iname); + } + + for (size_t i = 0; i < nx * ny * nz * ncol; i++) { + infile.read(reinterpret_cast(&data[i]), sizeof(data[i])); + } + infile.close(); +} + +AMREX_FORCE_INLINE +std::string +read_file(std::ifstream& in) +{ + return static_cast( + std::stringstream() << in.rdbuf()) + .str(); +} + +// ----------------------------------------------------------- +// Read a csv file +// INPUTS/OUTPUTS: +// iname => filename +// nx => input resolution +// ny => input resolution +// nz => input resolution +// data <= output data +// ----------------------------------------------------------- +void +read_csv( + const std::string& iname, + const size_t nx, + const size_t ny, + const size_t nz, + amrex::Vector& data) +{ + std::ifstream infile(iname, std::ios::in); + const std::string memfile = read_file(infile); + if (not infile.is_open()) { + amrex::Abort("Unable to open input file " + iname); + } + infile.close(); + std::istringstream iss(memfile); + + // Read the file + size_t nlines = 0; + std::string firstline; + std::string line; + std::getline(iss, firstline); // skip header + while (getline(iss, line)) { + ++nlines; + } + + // Quick sanity check + if (nlines != nx * ny * nz) { + amrex::Abort( + "Number of lines in the input file (= " + std::to_string(nlines) + + ") does not match the input resolution (=" + std::to_string(nx) + ")"); + } + + // Read the data from the file + iss.clear(); + iss.seekg(0, std::ios::beg); + std::getline(iss, firstline); // skip header + int cnt = 0; + while (std::getline(iss, line)) { + std::istringstream linestream(line); + std::string value; + while (getline(linestream, value, ',')) { + std::istringstream sinput(value); + sinput >> data[cnt]; + cnt++; + } + } +} + + void PeleLM::readProbParm() { amrex::ParmParse pp("prob"); - + std::string type; pp.query("P_mean", PeleLM::prob_parm->P_mean); pp.query("standoff", PeleLM::prob_parm->standoff); pp.query("pertmag", PeleLM::prob_parm->pertmag); + pp.query("flame_radius", PeleLM::prob_parm->flame_radius); PeleLM::pmf_data.initialize(); + + // HIT init + amrex::ParmParse ppic("ic"); + ppic.query("hitIC", PeleLM::prob_parm->hitIC); + ppic.query("input_resolution", PeleLM::prob_parm->input_resolution); + ppic.query("uin_norm", PeleLM::prob_parm->uin_norm); + ppic.query("lscale", PeleLM::prob_parm->lscale); + ppic.query("offset", PeleLM::prob_parm->offset); + ppic.query("urms0", PeleLM::prob_parm->urms0); + /* + amrex::Vector win_lo( + AMREX_SPACEDIM, std::numeric_limits::lowest()); + amrex::Vector win_hi( + AMREX_SPACEDIM, std::numeric_limits::max()); + ppic.queryarr("win_lo", win_lo, 0, AMREX_SPACEDIM); + ppic.queryarr("win_hi", win_hi, 0, AMREX_SPACEDIM); + for (int i = 0; i < AMREX_SPACEDIM; i++) { + PeleLM::prob_parm->win_lo[i] = win_lo[i]; + PeleLM::prob_parm->win_hi[i] = win_hi[i]; + } + ppic.query("win_slope", PeleLM::prob_parm->win_slope); */ + + if (PeleLM::prob_parm->hitIC) { + amrex::Print() << "Initializing HIT data \n"; + + std::string datafile; + ppic.query("input_name",datafile); + int binfmt = 0; // Default is ASCII format + ppic.query("input_binaryformat",binfmt); + ppic.query("buffer_boundary",PeleLM::prob_parm->buffer_boundary); + ppic.query("buffer_thickness",PeleLM::prob_parm->buffer_thickness); + + // Read initial velocity field + const size_t nx = PeleLM::prob_parm->input_resolution; + const size_t ny = PeleLM::prob_parm->input_resolution; + const size_t nz = PeleLM::prob_parm->input_resolution; + amrex::Vector data(nx * ny * nz * 6); /* this needs to be double */ + if (binfmt) { + read_binary(datafile, nx, ny, nz, 6, data); + } else { + read_csv(datafile, nx, ny, nz, data); + } + + // Extract position and velocities + amrex::Vector xinput; + amrex::Vector uinput; + amrex::Vector vinput; + amrex::Vector winput; + amrex::Vector xdiff; + amrex::Vector xarray; + + xinput.resize(nx * ny * nz); + uinput.resize(nx * ny * nz); + vinput.resize(nx * ny * nz); + winput.resize(nx * ny * nz); + + for (int i = 0; i < xinput.size(); i++) { + xinput[i] = (data[0 + i * 6] + PeleLM::prob_parm->offset) / + PeleLM::prob_parm->lscale; + uinput[i] = data[3 + i * 6] * PeleLM::prob_parm->urms0 / PeleLM::prob_parm->uin_norm; + vinput[i] = data[4 + i * 6] * PeleLM::prob_parm->urms0 / PeleLM::prob_parm->uin_norm; + winput[i] = data[5 + i * 6] * PeleLM::prob_parm->urms0 / PeleLM::prob_parm->uin_norm; + } + + // Get the xarray table and the differences. + xarray.resize(nx); + for (int i = 0; i < xarray.size(); i++) { + xarray[i] = xinput[i]; + } + xdiff.resize(nx); + std::adjacent_difference( + xarray.begin(), + xarray.end(), + xdiff.begin()); + xdiff[0] = xdiff[1]; + + // Make sure the search array is increasing + if (not std::is_sorted( + xarray.begin(), + xarray.end())) { + amrex::Abort("Error: non ascending x-coordinate array."); + } + PeleLM::prob_parm->Linput = (xarray[nx - 1] + 0.5 * xdiff[nx - 1]) - (xarray[0] - 0.5 * xdiff[0]); + + // Initialize PeleLM::prob_parm containers + PeleLM::prob_parm->d_xarray = (amrex::Real*) amrex::The_Arena()->alloc(nx*sizeof(amrex::Real)); + PeleLM::prob_parm->d_xdiff = (amrex::Real*) amrex::The_Arena()->alloc(nx*sizeof(amrex::Real)); + PeleLM::prob_parm->d_uinput = (amrex::Real*) amrex::The_Arena()->alloc(nx*ny*nz*sizeof(amrex::Real)); + PeleLM::prob_parm->d_vinput = (amrex::Real*) amrex::The_Arena()->alloc(nx*ny*nz*sizeof(amrex::Real)); + PeleLM::prob_parm->d_winput = (amrex::Real*) amrex::The_Arena()->alloc(nx*ny*nz*sizeof(amrex::Real)); + + // Copy into PeleLM::prob_parm + amrex::Gpu::copy(amrex::Gpu::hostToDevice, + xarray.begin(), + xarray.end(), + PeleLM::prob_parm->d_xarray); + amrex::Gpu::copy(amrex::Gpu::hostToDevice, + xdiff.begin(), + xdiff.end(), + PeleLM::prob_parm->d_xdiff); + amrex::Gpu::copy(amrex::Gpu::hostToDevice, + uinput.begin(), + uinput.end(), + PeleLM::prob_parm->d_uinput); + amrex::Gpu::copy(amrex::Gpu::hostToDevice, + vinput.begin(), + vinput.end(), + PeleLM::prob_parm->d_vinput); + amrex::Gpu::copy(amrex::Gpu::hostToDevice, + winput.begin(), + winput.end(), + PeleLM::prob_parm->d_winput); + } } diff --git a/Exec/RegTests/EnclosedFlame/pelelm_prob_parm.H b/Exec/RegTests/EnclosedFlame/pelelm_prob_parm.H index e09474c39..15e480e72 100644 --- a/Exec/RegTests/EnclosedFlame/pelelm_prob_parm.H +++ b/Exec/RegTests/EnclosedFlame/pelelm_prob_parm.H @@ -11,6 +11,33 @@ struct ProbParm amrex::Real P_mean = 101325.0_rt; amrex::Real standoff = 0.0_rt; amrex::Real pertmag = 0.0004_rt; + amrex::Real flame_radius = 0.036_rt; int meanFlowDir = 1; + + // stuff for HIT init + int hitIC = 0; + int input_resolution = 0; + amrex::Real uin_norm = 1.0; + amrex::Real lscale = 1.0; + amrex::Real offset = 0.0; + amrex::Real urms0 = 0.0; + amrex::Real Linput = 0.0; + amrex::Real buffer_boundary = 1.0/6.0; + amrex::Real buffer_thickness = 1.0/24.0; + /* +#if (AMREX_SPACEDIM == 2) + amrex::GpuArray win_lo = {0.0, 0.0}; + amrex::GpuArray win_hi = {0.0, 0.0}; +#elif (AMREX_SPACEDIM == 3) + amrex::GpuArray win_lo = {0.0, 0.0, 0.0}; + amrex::GpuArray win_hi = {0.0, 0.0, 0.0}; +#endif + amrex::Real win_slope = 1.0; + */ + amrex::Real* d_uinput = nullptr; + amrex::Real* d_vinput = nullptr; + amrex::Real* d_winput = nullptr; + amrex::Real* d_xarray = nullptr; + amrex::Real* d_xdiff = nullptr; }; #endif diff --git a/Exec/RegTests/EnclosedFlame/prem_posf10325_phi1_p1_t298_mani_cmlm.dat b/Exec/RegTests/EnclosedFlame/prem_posf10325_phi1_p1_t298_mani_cmlm.dat new file mode 100644 index 000000000..caadcda27 --- /dev/null +++ b/Exec/RegTests/EnclosedFlame/prem_posf10325_phi1_p1_t298_mani_cmlm.dat @@ -0,0 +1,467 @@ +VARIABLES = "X" "temp" "u" "rho" "X0" "X1" "XRHO" + ZONE I=7 FORMAT=POINT +0 298 34.8937627534755 0.00124434631149345 -1.84575416142009 -1.9669814428205 0.00124434631149345 +0.25 297.999999984168 34.893762751973 0.00124434631154703 -1.84575416155904 -1.96698144285881 0.00124434631154703 +0.625 297.999999957538 34.8937627533132 0.00124434631149924 -1.84575416564254 -1.96698144312598 0.00124434631149924 +0.875 297.999999945698 34.8937627969749 0.00124434630994223 -1.84575420761983 -1.96698144587563 0.00124434630994223 +1.125 297.999999937779 34.8937633603001 0.00124434628985349 -1.84575473380633 -1.96698148034545 0.00124434628985349 +1.3125 297.999999933769 34.8937680541311 0.00124434612246684 -1.84575911159707 -1.96698176712825 0.00124434612246684 +1.4375 297.999999938779 34.8937937461882 0.00124434520626348 -1.84578307093487 -1.96698333662097 0.00124434520626348 +1.5 298.000000008838 34.893862166211 0.00124434276634652 -1.84584687068423 -1.96698751552689 0.00124434276634652 +1.53125 298.000000354116 34.8939703946097 0.00124433890684812 -1.84594776615373 -1.96699412262914 0.00124433890684812 +1.5625 298.000002600507 34.8942348455359 0.00124432947644872 -1.84619415247947 -1.96701024806838 0.00124432947644872 +1.59375 298.000017109898 34.8948816972049 0.00124430641012644 -1.84679587037306 -1.96704957428772 0.00124430641012644 +1.609375 298.000054021737 34.8955575142777 0.00124428231182957 -1.84742223713172 -1.96709038633896 0.00124428231182957 +1.625 298.000191496813 34.8967294677149 0.00124424052450636 -1.84850065443229 -1.96716025068196 0.00124424052450636 +1.640625 298.000703424781 34.8987794512259 0.00124416743677761 -1.85035816631704 -1.96727916337715 0.00124416743677761 +1.6484375 298.001482168706 34.900404801262 0.00124410949453962 -1.85179113293596 -1.96736900105676 0.00124410949453962 +1.65625 298.003320978804 34.9027094660245 0.00124402734460588 -1.85374437385266 -1.96748777384682 0.00124402734460588 +1.6640625 298.007662060393 34.9060651851617 0.00124390774916386 -1.85640980140421 -1.96764148250282 0.00124390774916386 +1.671875 298.017907867441 34.911149867484 0.00124372657851686 -1.86005357679394 -1.9678326072877 0.00124372657851686 +1.67578125 298.028254691576 34.914838566909 0.00124359518070472 -1.86238221619922 -1.96793860019521 0.00124359518070472 +1.6796875 298.045632279284 34.9198094314422 0.00124341815387958 -1.86514819055422 -1.96804355272798 0.00124341815387958 +1.68359375 298.074812157408 34.9267119377669 0.00124317241928522 -1.86844042150636 -1.9681343908165 0.00124317241928522 +1.6875 298.123797407622 34.9365955876015 0.00124282072272685 -1.87236955655494 -1.9681874806124 0.00124282072272685 +1.69140625 298.206003092519 34.9511726169973 0.00124230238150577 -1.87707503478509 -1.96816155292139 0.00124230238150577 +1.6953125 298.343896997878 34.9732553850972 0.00124151796856094 -1.88273511205261 -1.96798615712135 0.00124151796856094 +1.697265625 298.447838433245 34.9888534819295 0.00124096449753455 -1.88601059795165 -1.96779796641664 0.00124096449753455 +1.69921875 298.586912377952 35.0089314039162 0.00124025279379877 -1.88964046227777 -1.96750584077455 0.00124025279379877 +1.701171875 298.772938971218 35.0349250902412 0.00123933260514246 -1.89367303468296 -1.96707323325299 0.00123933260514246 +1.703125 299.02167962781 35.0687429588502 0.00123813747860574 -1.89816541876138 -1.96645202850474 0.00123813747860574 +1.705078125 299.354126784364 35.1129200450358 0.00123657972426411 -1.90318541422424 -1.96557912077174 0.00123657972426411 +1.70703125 299.798198218524 35.1708205187829 0.001234543987036 -1.90881386589658 -1.96437209260839 0.001234543987036 +1.708984375 300.390949975215 35.2469022709408 0.00123187917794712 -1.91514750942281 -1.96272383256171 0.00123187917794712 +1.7109375 301.18144434709 35.3470599936427 0.00122838858473156 -1.92230237364819 -1.96049595700152 0.00122838858473156 +1.712890625 302.234428346791 35.479065546264 0.0012238181682143 -1.93041776997944 -1.95751098291999 0.0012238181682143 +1.71484375 303.634985694917 35.6531254620811 0.00121784344156664 -1.939660837055 -1.95354337465817 0.00121784344156664 +1.716796875 305.49430751991 35.8825735657342 0.00121005604423842 -1.95023149980186 -1.94830991574164 0.00121005604423842 +1.71875 307.956661216001 36.1847091748208 0.00119995230110642 -1.96236753441672 -1.94146041150147 0.00119995230110642 +1.720703125 311.207490601472 36.5817743584422 0.0011869278026148 -1.97634921523137 -1.93257058620385 0.0011869278026148 +1.7216796875 313.218899504869 36.826757462324 0.00117903198804328 -1.98418549562488 -1.9271489024592 0.00117903198804328 +1.72265625 315.544983764667 37.1095750674478 0.0011700464097135 -1.99265157413129 -1.92096498632483 0.0011700464097135 +1.7236328125 318.230892943963 37.4356498804729 0.00115985498375463 -2.00180387321497 -1.91393379978562 0.00115985498375463 +1.724609375 321.326988456517 37.8110350174876 0.00114834003022429 -2.01170243127425 -1.90596641844101 0.00114834003022429 +1.7255859375 324.889066474049 38.2424427736459 0.00113538576400612 -2.02241056047821 -1.8969714759274 0.00113538576400612 +1.7265625 328.978474033601 38.7372610811867 0.0011208826826048 -2.03399432198744 -1.88685708543577 0.0011208826826048 +1.7275390625 333.662084243707 39.3035536183837 0.00110473280737972 -2.04652179692442 -1.87553326099068 0.00110473280737972 +1.72802734375 336.255344166808 39.6169808846 0.00109599278301311 -2.05319421297885 -1.86935788497313 0.00109599278301311 +1.728515625 339.031612702225 39.9524349976872 0.00108679045826435 -2.06014032318532 -1.86283422905277 0.00108679045826435 +1.72900390625 342.00143431415 40.3111923988594 0.00107711835253054 -2.06736950355418 -1.8559519650671 0.00107711835253054 +1.7294921875 345.17565112428 40.6945671660944 0.00106697105225468 -2.07489092039665 -1.84870150780646 0.00106697105225468 +1.72998046875 348.565372709255 41.1039076335614 0.00105634543416455 -2.08271342883645 -1.84107412715253 0.00105634543416455 +1.73046875 352.181940992129 41.5405924458247 0.00104524087411847 -2.09084545489639 -1.83306205546008 0.00104524087411847 +1.73095703125 356.036890527416 42.0060260851582 0.00103365943437509 -2.09929486083233 -1.82465858513049 0.00103365943437509 +1.7314453125 360.141904315656 42.5016338907322 0.00102160602293027 -2.10806879162163 -1.81585815257283 0.00102160602293027 +1.73193359375 364.508765437012 43.0288566076748 0.0010090885185766 -2.11717350064819 -1.8066564042078 0.0010090885185766 +1.732421875 369.149304907372 43.5891445181792 0.00099611785578342 -2.12661415253656 -1.79705023999669 0.00099611785578342 +1.73291015625 374.075346273425 44.1839512212511 0.000982708064235282 -2.13639460102269 -1.78703782992354 0.000982708064235282 +1.7333984375 379.298647570444 44.8147271413977 0.000968876258898226 -2.14651713974106 -1.77661859895258 0.000968876258898226 +1.73388671875 384.830841363642 45.4829128592149 0.000954642577784096 -2.15698222388731 -1.76579317624796 0.000954642577784096 +1.734375 390.683373676226 46.189932367756 0.000940030066106415 -2.16778816083852 -1.75456330485812 0.000940030066106415 +1.73486328125 396.867442670492 46.937186367278 0.00092506450720574 -2.17893076808396 -1.74293170867664 0.00092506450720574 +1.7353515625 403.393937989265 47.7260457168753 0.000909774202385976 -2.19040299720034 -1.73090191426742 0.000909774202385976 +1.73583984375 410.273381680658 48.5578451645276 0.00089418970355661 -2.20219452307241 -1.71847802604516 0.00089418970355661 +1.736328125 417.515871618159 49.433877476547 0.000878343504225427 -2.21429129824084 -1.70566445437832 0.000878343504225427 +1.73681640625 425.131028289496 50.3553880839418 0.000862269695832555 -2.22667507266749 -1.69246559713326 0.000862269695832555 +1.737060546875 429.082865212638 50.8338192434276 0.000854154297489364 -2.23299616641541 -1.68569040205079 0.000854154297489364 +1.7373046875 433.132819125388 51.3242601600385 0.000845992227204718 -2.23937987415045 -1.67881680739599 0.000845992227204718 +1.737548828125 437.281968758065 51.8268561852728 0.000837788134491765 -2.24582186016715 -1.67184492395418 0.000837788134491765 +1.73779296875 441.531352526692 52.341748853723 0.000829546702362006 -2.25231732982994 -1.6647747448564 0.000829546702362006 +1.738037109375 445.881967506303 52.8690758256036 0.000821272633891997 -2.25886100336156 -1.65760612574333 0.000821272633891997 +1.73828125 450.334768354645 53.4089708272166 0.000812970639189014 -2.2654470883231 -1.65033876483595 0.000812970639189014 +1.738525390625 454.890666381404 53.9615636131708 0.000804645422435035 -2.27206925156568 -1.64297218218589 0.000804645422435035 +1.73876953125 459.550528727709 54.5269799462222 0.000796301669162531 -2.27872059055255 -1.63550569831153 0.000796301669162531 +1.739013671875 464.31517765723 55.1053415950334 0.000787944033834483 -2.28539360412874 -1.62793841229183 0.000787944033834483 +1.7392578125 469.185389959466 55.6967663500436 0.000779577127796745 -2.2920801628009 -1.62026917938448 0.000779577127796745 +1.739501953125 474.161896465124 56.301368057561 0.000771205507666031 -2.29877147859707 -1.61249658823744 0.000771205507666031 +1.73974609375 479.24538167272 56.9192566721004 0.000762833664211871 -2.30545807458401 -1.60461893776919 0.000762833664211871 +1.739990234375 484.436483485103 57.5505383269064 0.000754466011784561 -2.31212975412708 -1.59663421379515 0.000754466011784561 +1.740234375 489.735793053796 58.1953154224705 0.000746106878335608 -2.31877556997135 -1.58854006547563 0.000746106878335608 +1.740478515625 495.14385472842 58.8536867327962 0.000737760496070835 -2.32538379324647 -1.5803337816719 0.000737760496070835 +1.74072265625 500.661166108133 59.5257475290683 0.00072943099276951 -2.3319418824788 -1.57201226728634 0.00072943099276951 +1.740966796875 506.288178191309 60.2115897202897 0.000721122383796852 -2.33843645272542 -1.56357201967846 0.000721122383796852 +1.7412109375 512.025295619187 60.9113020103885 0.000712838564830652 -2.34485324492126 -1.55500910523516 0.000712838564830652 +1.741455078125 517.872877009057 61.6249700711654 0.000704583305316293 -2.3511770955655 -1.54631913619062 0.000704583305316293 +1.74169921875 523.831235371978 62.3526767304606 0.000696360242658454 -2.35739190685469 -1.53749724778003 0.000696360242658454 +1.741943359375 529.900638609736 63.0945021747424 0.000688172877152023 -2.36348061739512 -1.52853807582423 0.000688172877152023 +1.7421875 536.08131008575 63.8505241653431 0.000680024567648798 -2.36942517361971 -1.51943573483552 0.000680024567648798 +1.742431640625 542.373429264286 64.6208182674482 0.000671918527951725 -2.37520650206045 -1.51018379674901 0.000671918527951725 +1.74267578125 548.777132412263 65.4054580908508 0.00066385782392354 -2.38080448262399 -1.50077527037928 0.00066385782392354 +1.742919921875 555.292513358064 66.2045155415099 0.000655845371292222 -2.38619792303505 -1.49120258171126 0.000655845371292222 +1.7431640625 561.91962430176 67.0180610827642 0.000647883934131935 -2.39136453463677 -1.481457555145 0.000647883934131935 +1.743408203125 568.658476671299 67.8461640050843 0.000639976123994671 -2.396280909735 -1.47153139581257 0.000639976123994671 +1.74365234375 575.509042019294 68.6888927030948 0.000632124399665188 -2.40092250071748 -1.46141467310838 0.000632124399665188 +1.743896484375 582.471252955648 69.5463149585539 0.00062433106750904 -2.40526360118071 -1.4510973055735 0.00062433106750904 +1.744140625 589.545004111295 70.4184982278948 0.000616598282382016 -2.40927732934593 -1.44056854730118 0.000616598282382016 +1.744384765625 596.730153128775 71.3055099327844 0.000608928049067882 -2.41293561405714 -1.42981697603684 0.000608928049067882 +1.74462890625 604.026521676091 72.2074177521036 0.000601322224210115 -2.41620918370664 -1.41883048317378 0.000601322224210115 +1.744873046875 611.433896480561 73.1242899135552 0.000593782518703252 -2.41906755847176 -1.40759626586762 0.000593782518703252 +1.7451171875 618.95203037995 74.0561954830038 0.000586310500509271 -2.42147904628225 -1.39610082151296 0.000586310500509271 +1.745361328125 626.58064338908 75.0032046494314 0.000578907597864684 -2.42341074300947 -1.3843299448653 0.000578907597864684 +1.74560546875 634.319423780489 75.9653890032375 0.000571575102844876 -2.42482853741109 -1.37226872811772 0.000571575102844876 +1.745849609375 642.168029178419 76.9428218052929 0.000564314175253398 -2.42569712144105 -1.35990156428502 0.000564314175253398 +1.74609375 650.126087666412 77.9355782439769 0.00055712584680486 -2.42598000660121 -1.34721215428809 0.00055712584680486 +1.746337890625 658.193198909261 78.9437356770486 0.000550011025572041 -2.42563954709394 -1.33418351818029 0.000550011025572041 +1.74658203125 666.368935290825 79.9673738548288 0.000542970500669589 -2.4246369706233 -1.32079801101126 0.000542970500669589 +1.746826171875 674.652843070333 81.0065751208256 0.000536004947148396 -2.42293241778912 -1.30703734388049 0.000536004947148396 +1.7470703125 683.044443560344 82.061424585399 0.000529114931077125 -2.42048499112403 -1.29288261079664 0.000529114931077125 +1.747314453125 691.543234330455 83.1320102675579 0.00052230091478961 -2.41725281494703 -1.27831432203128 0.00052230091478961 +1.74755859375 700.148690442083 84.2184231994121 0.000515563262278842 -2.41319310733292 -1.26331244472895 0.000515563262278842 +1.747802734375 708.860265720453 85.320757487106 0.000508902244720867 -2.40826226563963 -1.24785645161802 0.000508902244720867 +1.748046875 717.677394070904 86.4391103213214 0.000502318046114272 -2.40241596719373 -1.23192537875714 0.000502318046114272 +1.748291015625 726.599490848079 87.5735819296584 0.000495810769022997 -2.39560928689366 -1.21549789334408 0.000495810769022997 +1.74853515625 735.625954287165 88.7242754622621 0.000489380440412676 -2.3877968336499 -1.19855237270679 0.000489380440412676 +1.748779296875 744.756167007146 89.8912968010903 0.000483027017572925 -2.37893290775725 -1.18106699570235 0.000483027017572925 +1.7490234375 753.989497596997 91.0747542821874 0.000476750394119553 -2.36897168144061 -1.16301984784344 0.000476750394119553 +1.749267578125 763.325302295981 92.2747583182427 0.000470550406077641 -2.35786740537323 -1.1443890418002 0.000470550406077641 +1.7493896484375 768.031564351383 92.881128898013 0.000467478437792021 -2.35185380389245 -1.13481892048527 0.000467478437792021 +1.74951171875 772.763336599711 93.4917127817231 0.000464425388070754 -2.3455296267331 -1.12509057853316 0.000464425388070754 +1.7496337890625 777.520569333587 94.1065300477005 0.000461391201715935 -2.33888884895644 -1.1152010123567 0.000461391201715935 +1.749755859375 782.303141623456 94.7255906028213 0.000458375869812039 -2.33192572693173 -1.10514758871051 0.000458375869812039 +1.7498779296875 787.110968425558 95.3489094691526 0.000455379355944279 -2.32463446126447 -1.09492753548045 0.000455379355944279 +1.75 791.943964378732 95.9765016474976 0.000452401621613351 -2.31700932431514 -1.08453812145251 0.000452401621613351 +1.7501220703125 796.802043871577 96.6083820840877 0.00044944262644195 -2.30904467182835 -1.07397666314397 0.00044944262644195 +1.750244140625 801.685121109957 97.2445656341937 0.000446502328383211 -2.30073495520281 -1.06324053201889 0.000446502328383211 +1.7503662109375 806.593110186606 97.8850670226193 0.000443580683929798 -2.29207473441232 -1.05232716208974 0.000443580683929798 +1.75048828125 811.525925150671 98.5299008007419 0.000440677648324927 -2.28305869160394 -1.04123405792578 0.000440677648324927 +1.7506103515625 816.483480078943 99.1790813001329 0.000437793175774023 -2.27368164538153 -1.02995880306852 0.000437793175774023 +1.750732421875 821.465689146633 99.8326225823784 0.00043492721965816 -2.26393856579426 -1.01849906887123 0.00043492721965816 +1.7508544921875 826.47246669903 100.490538385127 0.00043207973274814 -2.25382459003544 -1.00685262376107 0.00043207973274814 +1.7509765625 831.503727322049 101.152842063986 0.000429250667420165 -2.24333503886703 -0.995017342938134 0.000429250667420165 +1.7510986328125 836.559385912716 101.819546530326 0.000426439975871983 -2.23246543376337 -0.98299121850329 0.000426439975871983 +1.751220703125 841.639357747336 102.490664184538 0.000423647610340477 -2.22121151478748 -0.97077237002765 0.000423647610340477 +1.7513427734375 846.743558548282 103.166206844888 0.00042087352331947 -2.20956925918069 -0.958359055548197 0.00042087352331947 +1.75146484375 851.871904547035 103.846185671479 0.000418117667778585 -2.19753490066969 -0.945749682996453 0.000418117667778585 +1.7515869140625 857.024312543904 104.530611085492 0.000415379997382044 -2.18510494946058 -0.932942822038417 0.000415379997382044 +1.751708984375 862.200699962037 105.219492683211 0.000412660466707981 -2.1722762129065 -0.919937216321955 0.000412660466707981 +1.7518310546875 867.400984895802 105.912839145074 0.000409959031467179 -2.15904581681122 -0.906731796105401 0.000409959031467179 +1.751953125 872.625086150663 106.610658139215 0.000407275648721716 -2.14541122732992 -0.893325691248513 0.000407275648721716 +1.7520751953125 877.872923274461 107.312956219825 0.00040461027710229 -2.131370273416 -0.879718244531105 0.00040461027710229 +1.752197265625 883.144416576937 108.019738719823 0.000401962877024554 -2.11692116975378 -0.865909025267566 0.000401962877024554 +1.7523193359375 888.439487136766 108.731009638215 0.00039933341090322 -2.1020625401023 -0.851897843168214 0.00039933341090322 +1.75244140625 893.758056792808 109.446771521677 0.000396721843364 -2.0867934409674 -0.837684762401818 0.000396721843364 +1.7525634765625 899.100048118363 110.167025340835 0.000394128141452052 -2.07111338549978 -0.823270115793498 0.000394128141452052 +1.752685546875 904.465384374571 110.89177036082 0.000391552274836903 -2.0550223675117 -0.808654519096979 0.000391552274836903 +1.7528076171875 909.853989441462 111.621004006685 0.000388994216012269 -2.03852088547512 -0.793838885254615 0.000388994216012269 +1.7529296875 915.265787722464 112.354721723365 0.000386453940490558 -2.02160996636901 -0.778824438568179 0.000386453940490558 +1.7530517578125 920.700704020228 113.092916830843 0.000383931426990422 -2.00429118920477 -0.763612728673344 0.000383931426990422 +1.753173828125 926.158663379417 113.835580374338 0.000381426657616804 -1.986566708062 -0.748205644218721 0.000381426657616804 +1.7532958984375 931.639590893935 114.582700970379 0.000378939618031728 -1.96843927443428 -0.732605426124522 0.000378939618031728 +1.75341796875 937.143411473732 115.334264648595 0.000376470297615167 -1.94991225868356 -0.716814680300622 0.000376470297615167 +1.7535400390625 942.670049568608 116.090254690343 0.000374018689613969 -1.93098967036798 -0.700836389677807 0.000374018689613969 +1.753662109375 948.219428844016 116.850651464156 0.000371584791277975 -1.91167617721391 -0.684673925414149 0.000371584791277975 +1.7537841796875 953.791471805939 117.615432259251 0.000369168603981261 -1.89197712246374 -0.66833105711007 0.000369168603981261 +1.75390625 959.38609937011 118.384571117352 0.000366770133327378 -1.87189854034676 -0.651811961879048 0.000366770133327378 +1.7540283203125 965.003230372703 119.158038664187 0.000364389389236454 -1.85144716938091 -0.635121232092722 0.000364389389236454 +1.754150390625 970.64278101784 119.935801941138 0.000362026386012956 -1.83063046323131 -0.618263881634036 0.000362026386012956 +1.7542724609375 976.304664259636 120.717824238601 0.000359681142391878 -1.80945659882511 -0.60124535047148 0.000359681142391878 +1.75439453125 981.988789114762 121.504064931714 0.00035735368156208 -1.7879344814358 -0.584071507379733 0.00035735368156208 +1.7545166015625 987.695059903721 122.294479320222 0.00035504403116467 -1.76607374643891 -0.566748650622365 0.00035504403116467 +1.754638671875 993.423375418048 123.089018473321 0.000352752223265113 -1.74388475746458 -0.54928350642712 0.000352752223265113 +1.7547607421875 999.173628012693 123.887629081394 0.000350478294297082 -1.72137860065801 -0.531683225076399 0.000350478294297082 +1.7548828125 1004.94570262199 124.690253315677 0.000348222284977015 -1.69856707480647 -0.513955374463407 0.000348222284977015 +1.7550048828125 1010.739467502 125.496827680566 0.000345984242992055 -1.67546267691419 -0.496107930829435 0.000345984242992055 +1.755126953125 1016.55477736225 126.30728342107 0.000343764221238536 -1.65207858330697 -0.47814926677276 0.000343764221238536 +1.7552490234375 1022.3914769216 127.121547007172 0.00034156227597363 -1.62842862602684 -0.460088136390873 0.00034156227597363 +1.75537109375 1028.24939931206 127.939540002747 0.000339378466728916 -1.60452726431826 -0.441933657407876 0.000339378466728916 +1.7554931640625 1034.1283647677 128.761178994364 0.000337212856066951 -1.58038955112187 -0.423695290238893 0.000337212856066951 +1.755615234375 1040.02817925391 129.586375537756 0.000335065509303522 -1.55603109453407 -0.405382813966895 0.000335065509303522 +1.7557373046875 1045.94863304444 130.415036123937 0.000332936494195624 -1.5314680142432 -0.387006299239154 0.000332936494195624 +1.755859375 1051.88949925394 131.247062165941 0.000330825880595803 -1.50671689301409 -0.368576078129227 0.000330825880595803 +1.7559814453125 1057.85053233558 132.082350007921 0.000328733740073813 -1.4817947233585 -0.350102711050717 0.000328733740073813 +1.756103515625 1063.83146655463 132.920790957438 0.000326660145506852 -1.4567188495831 -0.331596950843572 0.000326660145506852 +1.7562255859375 1069.83201444989 133.762271342198 0.000324605170640273 -1.43150690549522 -0.313069704208186 0.000324605170640273 +1.75634765625 1075.85186529611 134.606672591829 0.000322568889620853 -1.40617674809137 -0.294531990690942 0.000322568889620853 +1.7564697265625 1081.89068358177 135.45387134546 0.000320551376505343 -1.38074638764286 -0.275994899480633 0.000320551376505343 +1.756591796875 1087.94810751746 136.303739585272 0.000318552704747172 -1.35523391463972 -0.257469544303859 0.000318552704747172 +1.7567138671875 1094.02374759042 137.156144796201 0.000316572946664969 -1.3296574241372 -0.23896701676 0.000316572946664969 +1.7568359375 1100.11718518241 138.010950151494 0.000314612172896368 -1.30403493808542 -0.220498338457805 0.000314612172896368 +1.7569580078125 1106.22797126707 138.868014723657 0.000312670451841565 -1.27838432629533 -0.202074412363419 0.000312670451841565 +1.757080078125 1112.35562520431 139.727193719892 0.000310747849100722 -1.25272322672274 -0.183705973782356 0.000310747849100722 +1.7572021484375 1118.49963364792 140.588338740949 0.00030884442691018 -1.22706896580184 -0.165403541434859 0.00030884442691018 +1.75732421875 1124.65944958377 141.45129806197 0.000306960243581957 -1.20143847957084 -0.147177369085913 0.000306960243581957 +1.7574462890625 1130.83449151285 142.315916933446 0.000305095352951915 -1.17584823636719 -0.129037398214766 0.000305095352951915 +1.757568359375 1137.02414279568 143.182037900521 0.000303249803841084 -1.15031416184995 -0.110993212194995 0.000303249803841084 +1.7576904296875 1143.22775116962 144.04950113804 0.000301423639535692 -1.1248515671316 -0.0930539924718232 0.000301423639535692 +1.7578125 1149.44462845296 144.918144799151 0.000299616897290204 -1.09947508074006 -0.0752284771838205 0.000299616897290204 +1.7579345703125 1155.67405044401 145.787805374375 0.000297829607858709 -1.07419858514938 -0.0575249226866923 0.000297829607858709 +1.758056640625 1161.91525702556 146.658318058674 0.000296061795058451 -1.04903515851988 -0.0399510683739734 0.000296061795058451 +1.7581787109375 1168.16745247854 147.529517122991 0.000294313475370421 -1.02399702229229 -0.0225141051941762 0.000294313475370421 +1.75830078125 1174.42980601097 148.4012362877 0.000292584657580011 -0.99909549515192 -0.00522064817787182 0.000292584657580011 +1.7584228515625 1180.70145250111 149.273309094181 0.000290875342461924 -0.974340953870502 0.0119232867122641 0.000290875342461924 +1.758544921875 1186.98149345613 150.145569272107 0.000289185522511355 -0.949742801385632 0.0289123011933938 0.000289185522511355 +1.7586669921875 1193.26899818024 151.017851098508 0.000287515181724615 -0.925309442451415 0.0457416285346746 0.000287515181724615 +1.7587890625 1199.56300514835 151.889989746539 0.000285864295430192 -0.901048267038121 0.0624071425892936 0.000285864295430192 +1.7589111328125 1205.86252357435 152.761821620115 0.000284232830172187 -0.876965641622597 0.0789053619048019 0.000284232830172187 +1.759033203125 1212.16653516555 153.633184672761 0.000282620743645935 -0.853066908355039 0.09523344893406 0.000282620743645935 +1.7591552734375 1218.4739960475 154.50391870726 0.000281027984686571 -0.829356392039742 0.11138920439252 0.000281027984686571 +1.75927734375 1224.78383884682 155.373865654888 0.000279454493309088 -0.805837414728153 0.127371056900895 0.000279454493309088 +1.7593994140625 1231.09497491243 156.242869831434 0.000277900200799498 -0.782512317670317 0.143178048080479 0.000277900200799498 +1.759521484375 1237.40629665952 157.110778169378 0.000276365029854505 -0.759382490241677 0.158809813351343 0.000276365029854505 +1.7596435546875 1243.71668001382 157.977440423994 0.000274848894768205 -0.73644840543168 0.174266558701383 0.000274848894768205 +1.759765625 1250.02498693863 158.842709353649 0.000273351701662219 -0.713709661351402 0.189549033774352 0.000273351701662219 +1.7598876953125 1256.33006802017 159.706440872555 0.000271873348756913 -0.691165028218627 0.20465850162384 0.000271873348756913 +1.760009765625 1262.63076509307 160.568494177038 0.00027041372667928 -0.668812500160932 0.219596705552842 0.00027041372667928 +1.7601318359375 1268.92591388122 161.428731844299 0.000268972718804458 -0.64664935119896 0.234365833443793 0.000268972718804458 +1.76025390625 1275.2143466357 162.287019905322 0.000267550201626002 -0.624672194684955 0.248968480038673 0.000267550201626002 +1.7603759765625 1281.49489474614 163.143227891632 0.000266146045151361 -0.602877045501039 0.263407607605664 0.000266146045151361 +1.760498046875 1287.76639130867 163.997228858127 0.00026476011331747 -0.581259384273075 0.27768650546356 0.00026476011331747 +1.7606201171875 1294.02767362855 164.848899382187 0.000263392264422731 -0.559814222893394 0.291808748804677 0.000263392264422731 +1.7607421875 1300.277585643 165.698119541847 0.000262042351570296 -0.53853617062876 0.305778157270506 0.000262042351570296 +1.7608642578125 1306.51498024541 166.544772873561 0.000260710223118996 -0.517419500142154 0.31959875369829 0.000260710223118996 +1.760986328125 1312.73872149908 167.388746312806 0.000259395723137123 -0.496458212758846 0.333274723454895 0.000259395723137123 +1.7611083984375 1318.9476867254 168.229930118204 0.000258098691855678 -0.475646102382093 0.346810374727504 0.000258098691855678 +1.76123046875 1325.14076845835 169.068217782669 0.000256818966116732 -0.454976817469579 0.360210100133035 0.000256818966116732 +1.7613525390625 1331.31687625371 169.903505932425 0.000255556379814028 -0.434443920577365 0.373478339951177 0.000255556379814028 +1.761474609375 1337.47493834888 170.73569421733 0.000254310764322079 -0.41404094500237 0.386619547267969 0.000254310764322079 +1.7615966796875 1343.61390316572 171.564685193429 0.000253081948911438 -0.393761448131841 0.399638155267095 0.000253081948911438 +1.76171875 1349.73274065571 172.390384201091 0.000251869761147192 -0.373599061164185 0.412538546872028 0.000251869761147192 +1.7618408203125 1355.83044348407 173.212699239376 0.000250674027268984 -0.353547534941164 0.425325026894892 0.000250674027268984 +1.761962890625 1361.90602805546 174.031540839931 0.000249494572550361 -0.333600781672423 0.438001796818863 0.000249494572550361 +1.7620849609375 1367.95853538132 174.846821940781 0.000248331221636452 -0.313752912425876 0.450572932288207 0.000248331221636452 +1.76220703125 1373.98703179461 175.658457762963 0.000247183798858539 -0.293998270288682 0.463042363354294 0.000247183798858539 +1.7623291015625 1379.99060951493 176.46636569008 0.000246052128525194 -0.274331459188026 0.475413857479101 0.000246052128525194 +1.762451171875 1385.9683870723 177.270465153428 0.000244936035189206 -0.254747368391783 0.487691005274428 0.000244936035189206 +1.7625732421875 1391.91950959498 178.070677522383 0.000243835343890566 -0.235241192775725 0.4998772089154 0.000243835343890566 +1.7626953125 1397.84314897124 178.866926002295 0.000242749880375412 -0.215808448980084 0.511975673144971 0.000242749880375412 +1.7628173828125 1403.73850389233 179.659135539271 0.000241679471291644 -0.196444987623806 0.523989398757227 0.000241679471291644 +1.762939453125 1409.60479978779 180.447232733727 0.000240623944361596 -0.177147001767821 0.535921178432467 0.000240623944361596 +1.7630615234375 1415.44128866102 181.231145761679 0.000239583128532952 -0.157911031869617 0.547773594769179 0.000239583128532952 +1.76318359375 1421.24724883716 182.010804305438 0.000238556854108563 -0.138733967461725 0.559549020359562 0.000238556854108563 +1.7633056640625 1427.02198463152 182.786139492247 0.000237544952856703 -0.119613045844616 0.571249619723616 0.000237544952856703 +1.763427734375 1432.76482595014 183.557083842324 0.000236547258102675 -0.100545848053756 0.582877352934378 0.000236547258102675 +1.7635498046875 1438.47512783109 184.323571224555 0.000235563604803416 -0.0815302924067183 0.594433980738785 0.000235563604803416 +1.763671875 1444.15226993725 185.085536821061 0.000234593829606219 -0.0625646259135166 0.605921070994423 0.000234593829606219 +1.7637939453125 1449.7956560086 185.842917098769 0.000233637770893199 -0.0436474138342504 0.617340006239218 0.000233637770893199 +1.763916015625 1455.4047132839 186.595649788938 0.000232695268812748 -0.0247775276815929 0.628691992206832 0.000232695268812748 +1.7640380859375 1460.97889189884 187.343673872702 0.000231766165299504 -0.00595413192581873 0.639978067123206 0.000231766165299504 +1.76416015625 1466.51766426921 188.086929573477 0.000230850304084073 0.0128233303233856 0.65119911160949 0.000230850304084073 +1.7642822265625 1472.02052446507 188.825358354189 0.000229947530693953 0.0315551524186901 0.662355859040307 0.000229947530693953 +1.764404296875 1477.48698758336 189.558902920192 0.000229057692446697 0.0502413798300907 0.673448906209561 0.000229057692446697 +1.7645263671875 1482.91658912321 190.287507225689 0.000228180638436753 0.0688818261335626 0.684478724165878 0.000228180638436753 +1.7646484375 1488.30888437045 191.011116484703 0.000227316219516754 0.08747608915602 0.695445669102792 0.000227316219516754 +1.7647705078125 1493.66344779408 191.729677184272 0.000226464288274556 0.106023567087277 0.706349993185054 0.000226464288274556 +1.764892578125 1498.97987245975 192.443137101045 0.000225624699006689 0.124523474418687 0.717191855219625 0.000225624699006689 +1.7650146484375 1504.25776946196 193.151445319007 0.000224797307689223 0.142974857572511 0.727971331085271 0.000224797307689223 +1.76513671875 1509.49676737884 193.854552249527 0.000223981971946606 0.16137661010913 0.7386884238473 0.000223981971946606 +1.7652587890625 1514.69651174993 194.552409651551 0.000223178551019286 0.179727487418035 0.749343073496693 0.000223178551019286 +1.765380859375 1519.85666457985 195.24497065329 0.000222386905730477 0.198026120819584 0.759935166266452 0.000222386905730477 +1.7655029296875 1524.97690386746 195.932189773227 0.000221606898452705 0.216271031016873 0.770464543483822 0.000221606898452705 +1.765625 1530.05692316218 196.614022941865 0.000220838393074385 0.234460640855751 0.780931009930669 0.000220838393074385 +1.7657470703125 1535.09643114657 197.29042752221 0.000220081254966882 0.252593287361876 0.791334341690415 0.000220081254966882 +1.765869140625 1540.09515124612 197.961362330484 0.00021933535095214 0.270667233043092 0.801674293471685 0.00021933535095214 +1.7659912109375 1545.05282126462 198.626787655082 0.00021860054927127 0.288680676447051 0.811950605400359 0.00021860054927127 +1.76611328125 1549.96919304571 199.286665275409 0.00021787671955403 0.306631761985066 0.822163009285209 0.00021787671955403 +1.7662353515625 1554.84403215834 199.94095847866 0.000217163732789504 0.324518589028322 0.832311234358112 0.000217163732789504 +1.766357421875 1559.67711760659 200.589632076255 0.000216461461297816 0.342339220307359 0.842395012506774 0.000216461461297816 +1.7664794921875 1564.46824156138 201.232652418062 0.000215769778703109 0.360091689629627 0.852414083008181 0.000215769778703109 +1.7666015625 1569.21720911387 201.8699874062 0.0002150885599076 0.377774008956798 0.862368196785283 0.0002150885599076 +1.7667236328125 1573.92383804841 202.501606506489 0.00021441768106685 0.395384174866024 0.872257120203439 0.00021441768106685 +1.766845703125 1578.58795863463 203.127480759539 0.000213757019566019 0.412920174443428 0.882080638432249 0.000213757019566019 +1.7669677734375 1583.20941343621 203.747582789501 0.000213106453997245 0.430379990636588 0.891838558391786 0.000213106453997245 +1.76708984375 1587.78805713633 204.36188681249 0.000212465864137874 0.447761607113982 0.901530711309764 0.000212465864137874 +1.7672119140625 1592.32375637716 204.970368642729 0.000211835130929645 0.465063012663506 0.911156954911174 0.000211835130929645 +1.767333984375 1596.81638961325 205.573005698519 0.000211214136458596 0.482282205176396 0.92071717526758 0.000211214136458596 +1.7674560546875 1601.26584697667 206.169777005989 0.000210602763935749 0.499417195243787 0.930211288324418 0.000210602763935749 +1.767578125 1605.67203015361 206.760663202799 0.000210000897678356 0.516466009411118 0.939639241134056 0.000210000897678356 +1.7677001953125 1610.03485227037 207.345646539734 0.000209408423091766 0.533426693119296 0.94900101281322 0.000209408423091766 +1.767822265625 1614.35423778868 207.924710882417 0.000208825226651702 0.550297313366464 0.958296615247825 0.000208825226651702 +1.7679443359375 1618.63012240846 208.497841710999 0.000208251195887022 0.567075961117418 0.967526093562356 0.000208251195887022 +1.76806640625 1622.86245297783 209.065026120101 0.000207686219362764 0.583760753494481 0.976689526377122 0.000207686219362764 +1.7681884765625 1627.05118740883 209.626252816823 0.000207130186663551 0.60034983576837 0.985787025866006 0.000207130186663551 +1.768310546875 1631.19629459878 210.181512119164 0.000206582988377184 0.616841383175988 0.994818737635654 0.000206582988377184 +1.7684326171875 1635.29775435563 210.73079595255 0.000206044516078505 0.633233602585427 1.00378484043836 0.000206044516078505 +1.7685546875 1639.3555573277 211.274097846873 0.000205514662313376 0.649524734024681 1.01268554573462 0.000205514662313376 +1.7686767578125 1643.36970493595 211.811412931785 0.000204993320582857 0.665713052094041 1.02152109711911 0.000204993320582857 +1.768798828125 1647.34020930937 212.342737932457 0.000204480385327457 0.681796867274166 1.03029176962173 0.000204480385327457 +1.7689208984375 1651.26709322178 212.868071163736 0.000203975751911557 0.697774527141362 1.03899786889425 0.000203975751911557 +1.76904296875 1655.15039003063 213.387412524805 0.000203479316607873 0.713644417505144 1.04763973029641 0.000203479316607873 +1.7691650390625 1658.99014361625 213.900763492227 0.000202990976582084 0.729404963472732 1.05621771788779 0.000202990976582084 +1.769287109375 1662.78640832209 214.408127113575 0.000202510629877494 0.745054630450056 1.0647322233368 0.000202510629877494 +1.7694091796875 1666.53924889456 214.909507999476 0.000202038175399856 0.760591925089514 1.07318366475645 0.000202038175399856 +1.76953125 1670.24874042298 215.404912316195 0.000201573512902267 0.776015396182082 1.08157248547195 0.000201573512902267 +1.7696533203125 1673.91496827823 215.894347776633 0.000201116542970243 0.79132363550363 1.08989915273025 0.000201116542970243 +1.769775390625 1677.53802805095 216.377823631953 0.000200667167006875 0.806515278619962 1.09816415635877 0.000200667167006875 +1.7698974609375 1681.11802548748 216.855350661517 0.000200225287218221 0.821589005647176 1.10636800737903 0.000200225287218221 +1.77001953125 1684.65507642471 217.326941163434 0.000199790806598818 0.836543541974798 1.11451123658204 0.000199790806598818 +1.7701416015625 1688.14930672209 217.792608943464 0.00019936362891746 0.85137765894973 1.12259439307253 0.00019936362891746 +1.770263671875 1691.60085219162 218.252369304433 0.00019894365870316 0.866090174523507 1.13061804278715 0.00019894365870316 +1.7703857421875 1695.00985852452 218.706239034001 0.000198530801231423 0.880679953861673 1.1385827669932 0.000198530801231423 +1.7705078125 1698.37648121521 219.154236392917 0.000198124962510756 0.895145909916124 1.14648916077268 0.000198124962510756 +1.7706298828125 1701.70088548122 219.596381101523 0.000197726049269553 0.909487003959683 1.1543378314976 0.000197726049269553 +1.770751953125 1704.98324617992 220.032694326793 0.000197333968943261 0.9237022460822 1.1621293973017 0.000197333968943261 +1.7708740234375 1708.22374772056 220.463198667503 0.00019694862966198 0.937790695647628 1.169864485554 0.00019694862966198 +1.77099609375 1711.4225839724 220.887918139927 0.000196569940238413 0.951751461710721 1.17754373133792 0.000196569940238413 +1.7711181640625 1714.57995816765 221.306878161593 0.000196197810156299 0.965583703393548 1.18516777594267 0.000196197810156299 +1.771240234375 1717.69608279999 221.720105535505 0.000195832149559254 0.9792866302178 1.19273726536978 0.000195832149559254 +1.7713623046875 1720.77117951722 222.127628432465 0.000195472869240149 0.992859502395333 1.20025284885958 0.000195472869240149 +1.771484375 1723.80547900904 222.529476373661 0.000195119880630953 1.00630163107385 1.20771517744347 0.000195119880630953 +1.7716064453125 1726.7992208885 222.92568021144 0.000194773095793164 1.01961237853637 1.21512490252329 0.000194773095793164 +1.771728515625 1729.75265356796 223.316272110281 0.000194432427408751 1.03279115835507 1.22248267448507 0.000194432427408751 +1.7718505859375 1732.66603412837 223.701285525834 0.000194097788771739 1.04583743549704 1.22978914134814 0.000194097788771739 +1.77197265625 1735.5396281826 224.080755184192 0.000193769093780348 1.05875072638061 1.23704494745405 0.000193769093780348 +1.7720947265625 1738.37370973168 224.454717059206 0.000193446256929812 1.07153059888476 1.24425073220011 0.000193446256929812 +1.772216796875 1741.16856101483 224.823208349947 0.000193129193305785 1.08417667230609 1.25140712881861 0.000193129193305785 +1.7723388671875 1743.92447235199 225.186267456194 0.000192817818578478 1.09668861726715 1.25851476320557 0.000192817818578478 +1.7724609375 1746.64174197993 225.543933954094 0.000192512048997396 1.1090661555735 1.2655742528029 0.000192512048997396 +1.7725830078125 1749.32067588064 225.896248569792 0.000192211801386835 1.12130906001875 1.27258620553376 0.000192211801386835 +1.772705078125 1751.96158760308 226.243253153225 0.000191916993142012 1.133417154139 1.2795512187961 0.000191916993142012 +1.7728271484375 1754.56479807719 226.584990649889 0.000191627542225951 1.14539031191652 1.28646987851515 0.000191627542225951 +1.77294921875 1757.13063542116 226.921505072786 0.000191343367167031 1.1572284574308 1.29334275825627 0.000191343367167031 +1.7730712890625 1759.65943474099 227.252841472322 0.000191064387057286 1.16893156445972 1.30017041840073 0.000191064387057286 +1.773193359375 1762.15153792332 227.579045906425 0.000190790521551361 1.18049965603049 1.30695340538486 0.000190790521551361 +1.7733154296875 1764.60729342068 227.900165408648 0.000190521690866235 1.19193280391924 1.31369225100371 0.000190521690866235 +1.7734375 1767.02705603031 228.21624795648 0.000190257815781576 1.20323112810254 1.32038747178037 0.000190257815781576 +1.7735595703125 1769.41118666554 228.527342437726 0.000189998817640845 1.21439479616023 1.3270395684007 0.000189998817640845 +1.773681640625 1771.76005212108 228.833498617117 0.000189744618353023 1.2254240226298 1.33364902521469 0.000189744618353023 +1.7738037109375 1774.07402483132 229.134767101068 0.000189495140395044 1.23631906831594 1.34021630980408 0.000189495140395044 +1.77392578125 1776.35348262284 229.431199302676 0.000189250306814833 1.24708023955315 1.3467418726155 0.000189250306814833 +1.7740478515625 1778.59880846052 229.722847404983 0.000189010041235021 1.25770788742506 1.35322614665975 0.000189010041235021 +1.774169921875 1780.81039018835 230.009764348451 0.000188774267837572 1.26820241125777 1.35966954972936 0.000188774267837572 +1.7744140625 1785.13360569734 230.569577546798 0.000188315931883993 1.28878120228677 1.37242734325724 0.000188315931883993 +1.774658203125 1789.32698414993 231.111171794855 0.000187874625540938 1.30883619994217 1.38502696153065 0.000187874625540938 +1.77490234375 1793.39376905704 231.634991904538 0.000187449765261078 1.32837203953013 1.39747106598978 0.000187449765261078 +1.775146484375 1797.33725612469 232.141490772525 0.000187040777216277 1.34739396824986 1.40976203784045 0.000187040777216277 +1.775390625 1801.16078413154 232.631128101247 0.000186647097540759 1.36590781135628 1.42190198403859 0.000186647097540759 +1.775634765625 1804.86772567261 233.104369104838 0.000186268172595707 1.38391993666961 1.43389274650389 0.000186268172595707 +1.77587890625 1808.46147784136 233.561683209376 0.000185903459249452 1.40143721775078 1.44573591419417 0.000185903459249452 +1.776123046875 1811.94545292202 234.003542756582 0.000185552425167517 1.4184669960472 1.45743283766416 0.000185552425167517 +1.7763671875 1815.32306916376 234.430421720053 0.000185214549106873 1.43501704231505 1.46898464573546 0.000185214549106873 +1.776611328125 1818.59774170704 234.84279444311 0.000184889321208809 1.45109551761161 1.48039226389436 0.000184889321208809 +1.77685546875 1821.77287373028 235.241134406889 0.000184576243285028 1.46671093414748 1.49165643404211 0.000184576243285028 +1.777099609375 1824.85184788178 235.625913037086 0.000184274829091816 1.48187211627489 1.50277773522535 0.000184274829091816 +1.77734375 1827.83801805737 235.997598556983 0.000183984604587499 1.49658816187164 1.51375660498829 0.000183984604587499 +1.777587890625 1830.734701579 236.356654894039 0.000183705108168753 1.51086840437075 1.52459336100813 0.000183705108168753 +1.77783203125 1833.54517182333 236.703540646255 0.000183435890881863 1.52472237566042 1.53528822269345 0.000183435890881863 +1.778076171875 1836.27265134291 237.038708113899 0.000183176516605512 1.53815977006013 1.5458413324546 0.000183176516605512 +1.7783203125 1838.92030551489 237.362602401202 0.000182926562202233 1.55119040955935 1.5562527763819 0.000182926562202233 +1.778564453125 1841.49123674523 237.675660591688 0.000182685617636245 1.56382421047648 1.56652260409878 0.000182685617636245 +1.77880859375 1843.9884792484 237.978310999842 0.000182453286055995 1.57607115167914 1.57665084759131 0.000182453286055995 +1.779052734375 1846.41499441528 238.270972500934 0.000182229183840275 1.58794124447496 1.58663753884456 0.000182229183840275 +1.779296875 1848.77366677444 238.55405393976 0.000182012940607375 1.59944450426541 1.59648272615392 0.000182012940607375 +1.779541015625 1851.06730054531 238.8279536183 0.000181804199187287 1.61059092402781 1.6061864890079 0.000181804199187287 +1.77978515625 1853.29861677489 239.093058861378 0.000181602615557438 1.62139044966955 1.61574895147033 0.000181602615557438 +1.780029296875 1855.47025104406 239.349745658705 0.000181407858742931 1.63185295727931 1.62517029402173 0.000181407858742931 +1.7802734375 1857.58475172401 239.598378380865 0.000181219610682677 1.64198823227711 1.63445076384152 0.000181219610682677 +1.780517578125 1859.64457875883 239.839309566419 0.00018103756606313 1.65180595045182 1.64359068354116 0.00018103756606313 +1.78076171875 1861.65210294637 240.07287977654 0.000180861432121691 1.66131566085465 1.6525904583774 0.000180861432121691 +1.781005859375 1863.60960568638 240.299417513402 0.000180690928422057 1.67052677050492 1.66145058199482 0.000180690928422057 +1.78125 1865.51927916238 240.519239197955 0.000180525786603977 1.67944853085199 1.67017164076113 0.000180525786603977 +1.781494140625 1867.38322692207 240.732649202778 0.000180365750110052 1.68809002592677 1.67875431677405 0.000180365750110052 +1.78173828125 1869.20346482001 240.939939935207 0.00018021057389226 1.69646016210708 1.68719938962585 0.00018021057389226 +1.781982421875 1870.9819222857 241.14139196613 0.00018006002410093 1.7045676594149 1.69550773702176 0.00018006002410093 +1.7822265625 1872.72044388039 241.337274199663 0.000179913877758917 1.71242104425832 1.70368033435227 0.000179913877758917 +1.782470703125 1874.4207911065 241.527844078991 0.000179771922423632 1.72002864352781 1.71171825332289 0.000179771922423632 +1.78271484375 1876.08464443429 241.713347823837 0.000179633955839535 1.72739857995256 1.71962265974534 0.000179633955839535 +1.782958984375 1877.71360551222 241.894020695101 0.000179499785583588 1.73453876862507 1.72739481059429 0.000179499785583588 +1.783203125 1879.30919952859 242.07008728239 0.000179369228706028 1.74145691459868 1.73503605043053 0.000179369228706028 +1.783447265625 1880.8728776942 242.241761810464 0.000179242111368665 1.74816051146657 1.74254780728872 0.000179242111368665 +1.78369140625 1882.4060198178 242.409248460845 0.000179118268482755 1.75465684083313 1.74993158812264 0.000179118268482755 +1.783935546875 1883.90993694815 242.572741704986 0.000178997543348333 1.76095297258908 1.7571889738967 0.000178997543348333 +1.7841796875 1885.38587405884 242.732426645853 0.000178879787296696 1.76705576590713 1.76432161440462 0.000178879787296696 +1.784423828125 1886.83501275417 242.888479364958 0.000178764859337549 1.77297187087966 1.77133122289213 0.000178764859337549 +1.78466796875 1888.25847397684 243.041067272158 0.000178652625812176 1.7787077307201 1.77821957055188 0.000178652625812176 +1.784912109375 1889.65732070008 243.190349455792 0.000178542960053774 1.78426958446067 1.78498848095425 0.000178542960053774 +1.78515625 1891.03256058924 243.336477031148 0.00017843574205598 1.78966347007591 1.79163982446796 0.00017843574205598 +1.785400390625 1892.38514861985 243.479593485287 0.000178330858150396 1.79489522797449 1.79817551272248 0.000178330858150396 +1.78564453125 1893.71598964084 243.619835016667 0.000178228200693825 1.79997050479858 1.80459749315309 0.000178228200693825 +1.785888671875 1895.0259408738 243.75733086821 0.000178127667765761 1.80489475748039 1.81090774366658 0.000178127667765761 +1.7861328125 1896.31581434044 243.892203652585 0.000178029162876528 1.80967325750721 1.8171082674595 0.000178029162876528 +1.786376953125 1897.58637921224 244.024569668842 0.000177932594686398 1.81431109535128 1.82320108801518 0.000177932594686398 +1.78662109375 1898.83836407731 244.154539209525 0.00017783787673585 1.8188131850241 1.8291882443012 0.00017783787673585 +1.786865234375 1900.07245912111 244.28221685773 0.000177744927187099 1.82318426871981 1.83507178618639 0.000177744927187099 +1.787109375 1901.28931821829 244.407701786435 0.000177653668567552 1.82742892372487 1.84085377135806 0.000177653668567552 +1.78759765625 1903.67321600111 244.652401192113 0.000177475980767235 1.8355497061187 1.85211574450107 0.000177475980767235 +1.7880859375 1905.9955547025 244.889439000667 0.000177304195011178 1.84321922423892 1.86299838655384 0.000177304195011178 +1.78857421875 1908.26042375257 245.119435564199 0.000177137829764298 1.85046830466869 1.87351791129261 0.000177137829764298 +1.7890625 1910.47150828968 245.342949259942 0.000176976452675816 1.85732560221081 1.88369030582644 0.000176976452675816 +1.78955078125 1912.63213458937 245.560482975086 0.000176819675230974 1.86381774179516 1.89353125001727 0.000176819675230974 +1.7900390625 1914.74531054504 245.772489951562 0.000176667147970688 1.86996945472036 1.90305605010941 0.000176667147970688 +1.79052734375 1916.81376159617 245.979379033873 0.000176518556230724 1.87580370851356 1.91227958532983 0.000176518556230724 +1.791015625 1918.8399625127 246.181519366425 0.00017637361635243 1.88134182997233 1.92121626618032 0.00017637361635243 +1.79150390625 1920.82616544188 246.379244587873 0.000176232072318565 1.88660362117938 1.92988000312886 0.000176232072318565 +1.7919921875 1922.77442460958 246.57285656952 0.000176093692770199 1.89160746845617 1.9382841844368 0.000176093692770199 +1.79248046875 1924.68661804626 246.762628742897 0.000175958268363603 1.89637044435143 1.94644166191161 0.000175958268363603 +1.79296875 1926.56446668074 246.948809059275 0.000175825609429286 1.90090840285717 1.95436474345227 0.000175825609429286 +1.79345703125 1928.4095511156 247.131622620675 0.000175695543898762 1.90523606810791 1.96206519134481 0.000175695543898762 +1.7939453125 1930.2233263677 247.311274018628 0.000175567915467925 1.90936711686341 1.96955422536101 0.000175567915467925 +1.79443359375 1932.00713482787 247.487949413787 0.000175442581969183 1.91331425510111 1.97684252981212 0.000175442581969183 +1.794921875 1933.76221766672 247.661818392741 0.000175319413922794 1.91708929017127 1.98394026445882 0.000175319413922794 +1.7958984375 1937.18972869619 248.001662189604 0.000175079168699232 1.92415326851586 1.99758722819251 0.000175079168699232 +1.796875 1940.51626896789 248.332047445441 0.000174846240343778 1.93065585203133 2.01058654737734 0.000174846240343778 +1.7978515625 1943.74894303665 248.653867755303 0.000174619945570148 1.93666401626548 2.02300122345687 0.000174619945570148 +1.798828125 1946.89398386433 248.967876549471 0.000174399707526697 1.94223588831958 2.0348875648765 0.000174399707526697 +1.7998046875 1949.95689664516 249.274711879704 0.000174185036768824 1.94742198135428 2.04629578363326 0.000174185036768824 +1.80078125 1952.94257381611 249.574916448622 0.000173975515940022 1.95226625292241 2.05727058076183 0.000173975515940022 +1.8017578125 1955.85538788241 249.868953883968 0.00017377078736853 1.95680701220333 2.06785170550822 0.00017377078736853 +1.802734375 1958.69926699952 250.157222027882 0.000173570542972591 1.96107769784403 2.07807447910584 0.000173570542972591 +1.8037109375 1961.47775701881 250.440063837188 0.000173374516006528 1.96510754508527 2.08797027835341 0.000173374516006528 +1.8046875 1964.19407280263 250.717776359001 0.000173182474284395 1.96892215820291 2.09756697712537 0.000173182474284395 +1.8056640625 1966.85114095049 250.990618146373 0.000172994214596982 1.97254400199997 2.10688934589419 0.000172994214596982 +1.806640625 1969.45163558756 251.25881540604 0.000172809558095616 1.9759928247149 2.11595941090831 0.000172809558095616 +1.80859375 1974.4904483448 251.781990317506 0.000172450479099698 1.98242034581943 2.13339101465786 0.000172450479099698 +1.810546875 1979.3343823836 252.288930461171 0.000172103963422055 1.98833779660198 2.15002792948374 0.000172103963422055 +1.8125 1983.99827469999 252.780695056226 0.000171769148949987 1.99383238377118 2.16597233550874 0.000171769148949987 +1.814453125 1988.49505379664 253.258159719915 0.000171445314574242 1.99897309372024 2.18130629106564 0.000171445314574242 +1.81640625 1992.83608770638 253.72206516183 0.00017113184395226 2.00381489030545 2.19609619510175 0.00017113184395226 +1.818359375 1997.03144955058 254.173051649505 0.000170828199848676 2.00840188229719 2.21039622679643 0.000170828199848676 +1.8203125 2001.09012387962 254.611683533621 0.000170533905834576 2.01276972473781 2.22425099507421 0.000170533905834576 +1.822265625 2005.02016951448 255.038466770191 0.000170248533151562 2.01694744894101 2.23769758018997 0.000170248533151562 +1.82421875 2008.82884981095 255.453861480015 0.000169971691224391 2.02095886485881 2.25076710854711 0.000169971691224391 +1.826171875 2012.52273807416 255.858290974591 0.000169703020765317 2.024823642186 2.2634859690345 0.000169703020765317 +1.828125 2016.10780362139 256.252148250847 0.000169442188731962 2.02855814927974 2.27587675264677 0.000169442188731962 +1.830078125 2019.58948230592 256.635800646599 0.000169188884629954 2.03217610913678 2.28795897458276 0.000169188884629954 +1.83203125 2022.97273379461 257.009593100238 0.000168942817831612 2.03568911791659 2.29974961562146 0.000168942817831612 +1.8359375 2029.4578466054 257.728712440581 0.000168471430513336 2.04242510321387 2.32248296473757 0.000168471430513336 +1.83984375 2035.61398069769 258.413539894722 0.000168024960642302 2.04883703075274 2.34423243225092 0.000168024960642302 +1.84375 2041.46932709181 259.066398802418 0.000167601530232818 2.05496924156738 2.36507977508388 0.000167601530232818 +1.84765625 2047.04845214618 259.689421202635 0.000167199436430557 2.0608556079217 2.3850937135768 0.000167199436430557 +1.8515625 2052.37292033772 260.28456732218 0.000166817131417221 2.06652248998179 2.40433323810145 0.000166817131417221 +1.85546875 2057.46178046796 260.853640532368 0.000166453206422513 2.0719907782638 2.422849815699 0.000166453206422513 +1.859375 2062.33195222811 261.398299960362 0.000166106378200874 2.07727732566691 2.44068893400787 0.000166106378200874 +1.86328125 2066.99853692994 261.920071649149 0.000165775477234437 2.08239596523268 2.45789121338771 0.000165775477234437 +1.8671875 2071.47506933754 262.420358659844 0.000165459437283165 2.08735824221536 2.47449322708457 0.000165459437283165 +1.87109375 2075.77372310263 262.900450289043 0.000165157286068984 2.0921739462536 2.49052811902896 0.000165157286068984 +1.875 2079.90547919462 263.361530473379 0.000164868136961827 2.09685150187485 2.50602607830213 0.000164868136961827 +1.87890625 2083.88026444369 263.804685410613 0.000164591181576068 2.1013982574619 2.52101470985893 0.000164591181576068 +1.8828125 2087.70706560564 264.230910409762 0.000164325683206953 2.10582070069778 2.53551932818644 0.000164325683206953 +1.88671875 2091.39402300527 264.641115975407 0.000164070971050201 2.11012462026646 2.54956319118 0.000164070971050201 +1.890625 2094.9485065708 265.036133115909 0.00016382643516495 2.11431522798376 2.56316768216959 0.00016382643516495 +1.89453125 2098.37717529824 265.416717794197 0.000163591522190075 2.11839725230573 2.57635242976615 0.000163591522190075 +1.8984375 2101.68601644147 265.783554107061 0.000163365732032833 2.12237501547034 2.58913529059399 0.000163365732032833 +1.90625 2107.96044041112 266.477941901052 0.000162940033872416 2.13002440754065 2.61352437813314 0.000162940033872416 +1.9140625 2113.84817880574 267.128161250941 0.000162543419895642 2.13731345388415 2.63657593767856 0.000162543419895642 +1.921875 2119.38565838668 267.738453431833 0.000162172912871153 2.14426772304262 2.65840159562645 0.000162172912871153 +1.9296875 2124.60456865995 268.312509647439 0.000161825942957916 2.1509100777399 2.67909994888884 0.000161825942957916 +1.9375 2129.53257773567 268.853550742766 0.000161500284305516 2.1572610893144 2.6987583557939 0.000161500284305516 +1.9453125 2134.19389821965 269.364391093819 0.000161194004543624 2.16333935213574 2.71745435041581 0.000161194004543624 +1.953125 2138.60972970191 269.8474892883 0.000160905424752016 2.16916172219897 2.73525678789543 0.000160905424752016 +1.9609375 2142.79859632845 270.304987270044 0.000160633088279363 2.17474350350309 2.7522267642879 0.000160633088279363 +1.96875 2146.77659054052 270.73873908717 0.000160375737248291 2.18009859898903 2.76841834283372 0.000160375737248291 +1.9765625 2150.55752611817 271.150329877943 0.00016013229599454 2.18523963885147 2.78387909346992 0.00016013229599454 +1.984375 2154.15298697893 271.541084697227 0.000159901861376448 2.19017809872233 2.79865029252679 0.000159901861376448 +2 2160.81548817764 272.263423970232 0.000159477627404071 2.19947232242695 2.82620344802522 0.000159477627404071 +2.015625 2166.92508352826 272.92425907718 0.000159091482123493 2.20811295194724 2.85163651746975 0.000159091482123493 +2.03125 2172.54871229477 273.531238353629 0.000158738450298053 2.21616468512187 2.87518608893789 0.000158738450298053 +2.046875 2177.74179956255 274.090657070055 0.000158414465304261 2.22368315583311 2.89705022841519 0.000158414465304261 +2.0625 2182.54999983712 274.607669553968 0.000158116213416126 2.23071623453022 2.91739427539321 0.000158116213416126 +2.078125 2187.01016226081 275.086403620064 0.000157841043082227 2.23730501110733 2.93635446249499 0.000157841043082227 +2.09375 2191.15039601833 275.529972263562 0.000157586938831486 2.24348455053419 2.9540394042204 0.000157586938831486 +2.125 2198.52567793768 276.317780456901 0.000157137643527359 2.25469725054543 2.98578529145123 0.000157137643527359 +2.15625 2205.04355930961 277.012357034113 0.000156743638987489 2.26473128523654 3.01401821384768 0.000156743638987489 +2.1875 2210.84192309116 277.629011596058 0.000156395488485508 2.27375333890716 3.03927311244378 0.000156395488485508 +2.21875 2216.02927250145 278.179726080293 0.000156085871168197 2.28189792085841 3.06197464333285 0.000156085871168197 +2.25 2220.69146869582 278.673942467049 0.000155809059513848 2.28927403166443 3.08246169089334 0.000155809059513848 +2.28125 2224.89545592135 279.118981782747 0.000155560630845316 2.29596955421914 3.10100084567116 0.000155560630845316 +2.3125 2228.68930678965 279.520029259249 0.000155337436828031 2.30205390164695 3.1177887865213 0.000155337436828031 +2.375 2235.11444452729 280.197272761326 0.00015496198253357 2.31254028255726 3.14641592978922 0.00015496198253357 +2.4375 2240.53285387984 280.76740495231 0.000154647313477501 2.32145795309579 3.17066750195563 0.000154647313477501 +2.5 2245.13891352883 281.251389873953 0.000154381192241149 2.32908867373278 3.19136058452057 0.000154381192241149 +2.5625 2249.07804556151 281.664850934015 0.000154154573225979 2.33564591254287 3.20910963633363 0.000154154573225979 +2.625 2252.45448559457 282.018916969203 0.000153961036923916 2.34128756764636 3.22435837360132 0.000153961036923916 +2.75 2257.663110205 282.563669911928 0.000153664216290407 2.35013190498805 3.24801812774829 0.000153664216290407 +2.875 2261.67768374799 282.983062198644 0.000153436479738958 2.35698281899817 3.26630863040547 0.000153436479738958 +3 2264.79333442518 283.308290116936 0.000153260340076466 2.36231551136235 3.2805328296994 0.000153260340076466 +3.25 2268.84023493667 283.729745767299 0.000153032685285812 2.36934160048949 3.29909659119597 0.000153032685285812 +3.5 2271.47595591476 284.004004176916 0.000152884903916657 2.37393485996741 3.31121284226823 0.000152884903916657 +4 2274.05796435308 284.272499221049 0.000152740504304282 2.3784477183641 3.32310193190385 0.000152740504304282 diff --git a/Exec/RegTests/EnclosedFlame/prem_posf10325_phi1_p1_t298_mani_fgm.dat b/Exec/RegTests/EnclosedFlame/prem_posf10325_phi1_p1_t298_mani_fgm.dat new file mode 100644 index 000000000..2165a0090 --- /dev/null +++ b/Exec/RegTests/EnclosedFlame/prem_posf10325_phi1_p1_t298_mani_fgm.dat @@ -0,0 +1,467 @@ +VARIABLES = "X" "temp" "u" "rho" "X0" "XRHO" + ZONE I=6 FORMAT=POINT +0 298 34.8937627534755 0.00124434631149345 -2.2066767215986 0.00124434631149345 +0.25 297.999999984168 34.893762751973 0.00124434631154703 -2.20667672156483 0.00124434631154703 +0.625 297.999999957538 34.8937627533132 0.00124434631149924 -2.2066767214257 0.00124434631149924 +0.875 297.999999945698 34.8937627969749 0.00124434630994223 -2.20667671999604 0.00124434630994223 +1.125 297.999999937779 34.8937633603001 0.00124434628985349 -2.20667670207569 0.00124434628985349 +1.3125 297.999999933769 34.8937680541311 0.00124434612246684 -2.20667655298045 0.00124434612246684 +1.4375 297.999999938779 34.8937937461882 0.00124434520626348 -2.20667573697417 0.00124434520626348 +1.5 298.000000008838 34.893862166211 0.00124434276634652 -2.20667356393331 0.00124434276634652 +1.53125 298.000000354116 34.8939703946097 0.00124433890684812 -2.20667012677617 0.00124433890684812 +1.5625 298.000002600507 34.8942348455359 0.00124432947644872 -2.2066617296114 0.00124432947644872 +1.59375 298.000017109898 34.8948816972049 0.00124430641012644 -2.20664119979752 0.00124430641012644 +1.609375 298.000054021737 34.8955575142777 0.00124428231182957 -2.20661977679783 0.00124428231182957 +1.625 298.000191496813 34.8967294677149 0.00124424052450636 -2.20658272229454 0.00124424052450636 +1.640625 298.000703424781 34.8987794512259 0.00124416743677761 -2.20651828393609 0.00124416743677761 +1.6484375 298.001482168706 34.900404801262 0.00124410949453962 -2.20646774286643 0.00124410949453962 +1.65625 298.003320978804 34.9027094660245 0.00124402734460588 -2.20639721466499 0.00124402734460588 +1.6640625 298.007662060393 34.9060651851617 0.00124390774916386 -2.20629719708803 0.00124390774916386 +1.671875 298.017907867441 34.911149867484 0.00124372657851686 -2.20615176951341 0.00124372657851686 +1.67578125 298.028254691576 34.914838566909 0.00124359518070472 -2.20605131520751 0.00124359518070472 +1.6796875 298.045632279284 34.9198094314422 0.00124341815387958 -2.20592209024731 0.00124341815387958 +1.68359375 298.074812157408 34.9267119377669 0.00124317241928522 -2.20575193322534 0.00124317241928522 +1.6875 298.123797407622 34.9365955876015 0.00124282072272685 -2.20552191296355 0.00124282072272685 +1.69140625 298.206003092519 34.9511726169973 0.00124230238150577 -2.20520209737521 0.00124230238150577 +1.6953125 298.343896997878 34.9732553850972 0.00124151796856094 -2.20474458305522 0.00124151796856094 +1.697265625 298.447838433245 34.9888534819295 0.00124096449753455 -2.20443510926636 0.00124096449753455 +1.69921875 298.586912377952 35.0089314039162 0.00124025279379877 -2.20404818663596 0.00124025279379877 +1.701171875 298.772938971218 35.0349250902412 0.00123933260514246 -2.20356053791496 0.00123933260514246 +1.703125 299.02167962781 35.0687429588502 0.00123813747860574 -2.20294144738483 0.00123813747860574 +1.705078125 299.354126784364 35.1129200450358 0.00123657972426411 -2.20215036987622 0.00123657972426411 +1.70703125 299.798198218524 35.1708205187829 0.001234543987036 -2.20113379892426 0.001234543987036 +1.708984375 300.390949975215 35.2469022709408 0.00123187917794712 -2.19982119172995 0.00123187917794712 +1.7109375 301.18144434709 35.3470599936427 0.00122838858473156 -2.19811971600533 0.00122838858473156 +1.712890625 302.234428346791 35.479065546264 0.0012238181682143 -2.19590756542495 0.0012238181682143 +1.71484375 303.634985694917 35.6531254620811 0.00121784344156664 -2.19302560659521 0.00121784344156664 +1.716796875 305.49430751991 35.8825735657342 0.00121005604423842 -2.18926720487477 0.00121005604423842 +1.71875 307.956661216001 36.1847091748208 0.00119995230110642 -2.18436627945001 0.00119995230110642 +1.720703125 311.207490601472 36.5817743584422 0.0011869278026148 -2.17798402504643 0.0011869278026148 +1.7216796875 313.218899504869 36.826757462324 0.00117903198804328 -2.17406151800562 0.00117903198804328 +1.72265625 315.544983764667 37.1095750674478 0.0011700464097135 -2.16955072840869 0.0011700464097135 +1.7236328125 318.230892943963 37.4356498804729 0.00115985498375463 -2.16436968533077 0.00115985498375463 +1.724609375 321.326988456517 37.8110350174876 0.00114834003022429 -2.15842753571002 0.00114834003022429 +1.7255859375 324.889066474049 38.2424427736459 0.00113538576400612 -2.15162436063562 0.00113538576400612 +1.7265625 328.978474033601 38.7372610811867 0.0011208826826048 -2.14385122548977 0.0011208826826048 +1.7275390625 333.662084243707 39.3035536183837 0.00110473280737972 -2.13499051806137 0.00110473280737972 +1.72802734375 336.255344166808 39.6169808846 0.00109599278301311 -2.13008357954881 0.00109599278301311 +1.728515625 339.031612702225 39.9524349976872 0.00108679045826435 -2.12484051499504 0.00108679045826435 +1.72900390625 342.00143431415 40.3111923988594 0.00107711835253054 -2.11924265466171 0.00107711835253054 +1.7294921875 345.17565112428 40.6945671660944 0.00106697105225468 -2.11327088006211 0.00106697105225468 +1.72998046875 348.565372709255 41.1039076335614 0.00105634543416455 -2.10690568222467 0.00105634543416455 +1.73046875 352.181940992129 41.5405924458247 0.00104524087411847 -2.10012722746186 0.00104524087411847 +1.73095703125 356.036890527416 42.0060260851582 0.00103365943437509 -2.0929154290547 0.00103365943437509 +1.7314453125 360.141904315656 42.5016338907322 0.00102160602293027 -2.08525002423344 0.00102160602293027 +1.73193359375 364.508765437012 43.0288566076748 0.0010090885185766 -2.07711065544612 0.0010090885185766 +1.732421875 369.149304907372 43.5891445181792 0.00099611785578342 -2.06847695471897 0.00099611785578342 +1.73291015625 374.075346273425 44.1839512212511 0.000982708064235282 -2.05932862974606 0.000982708064235282 +1.7333984375 379.298647570444 44.8147271413977 0.000968876258898226 -2.04964555021026 0.000968876258898226 +1.73388671875 384.830841363642 45.4829128592149 0.000954642577784096 -2.03940783274081 0.000954642577784096 +1.734375 390.683373676226 46.189932367756 0.000940030066106415 -2.02859592286183 0.000940030066106415 +1.73486328125 396.867442670492 46.937186367278 0.00092506450720574 -2.01719067228444 0.00092506450720574 +1.7353515625 403.393937989265 47.7260457168753 0.000909774202385976 -2.00517340994608 0.000909774202385976 +1.73583984375 410.273381680658 48.5578451645276 0.00089418970355661 -1.99252600530203 0.00089418970355661 +1.736328125 417.515871618159 49.433877476547 0.000878343504225427 -1.97923092252344 0.000878343504225427 +1.73681640625 425.131028289496 50.3553880839418 0.000862269695832555 -1.9652712644443 0.000862269695832555 +1.737060546875 429.082865212638 50.8338192434276 0.000854154297489364 -1.95800132574001 0.000854154297489364 +1.7373046875 433.132819125388 51.3242601600385 0.000845992227204718 -1.95055396682949 0.000845992227204718 +1.737548828125 437.281968758065 51.8268561852728 0.000837788134491765 -1.9429271119532 0.000837788134491765 +1.73779296875 441.531352526692 52.341748853723 0.000829546702362006 -1.93511873098792 0.000829546702362006 +1.738037109375 445.881967506303 52.8690758256036 0.000821272633891997 -1.92712683896693 0.000821272633891997 +1.73828125 450.334768354645 53.4089708272166 0.000812970639189014 -1.9189494959917 0.000812970639189014 +1.738525390625 454.890666381404 53.9615636131708 0.000804645422435035 -1.91058480676256 0.000804645422435035 +1.73876953125 459.550528727709 54.5269799462222 0.000796301669162531 -1.90203091987953 0.000796301669162531 +1.739013671875 464.31517765723 55.1053415950334 0.000787944033834483 -1.89328602691418 0.000787944033834483 +1.7392578125 469.185389959466 55.6967663500436 0.000779577127796745 -1.88434836125496 0.000779577127796745 +1.739501953125 474.161896465124 56.301368057561 0.000771205507666031 -1.87521619672895 0.000771205507666031 +1.73974609375 479.24538167272 56.9192566721004 0.000762833664211871 -1.86588784600408 0.000762833664211871 +1.739990234375 484.436483485103 57.5505383269064 0.000754466011784561 -1.85636165877603 0.000754466011784561 +1.740234375 489.735793053796 58.1953154224705 0.000746106878335608 -1.84663601974536 0.000746106878335608 +1.740478515625 495.14385472842 58.8536867327962 0.000737760496070835 -1.83670934639061 0.000737760496070835 +1.74072265625 500.661166108133 59.5257475290683 0.00072943099276951 -1.82658008654362 0.00072943099276951 +1.740966796875 506.288178191309 60.2115897202897 0.000721122383796852 -1.81624671577393 0.000721122383796852 +1.7412109375 512.025295619187 60.9113020103885 0.000712838564830652 -1.80570773458977 0.000712838564830652 +1.741455078125 517.872877009057 61.6249700711654 0.000704583305316293 -1.79496166546304 0.000704583305316293 +1.74169921875 523.831235371978 62.3526767304606 0.000696360242658454 -1.78400704968623 0.000696360242658454 +1.741943359375 529.900638609736 63.0945021747424 0.000688172877152023 -1.7728424440702 0.000688172877152023 +1.7421875 536.08131008575 63.8505241653431 0.000680024567648798 -1.76146641749091 0.000680024567648798 +1.742431640625 542.373429264286 64.6208182674482 0.000671918527951725 -1.74987754729454 0.000671918527951725 +1.74267578125 548.777132412263 65.4054580908508 0.00066385782392354 -1.73807441557063 0.00066385782392354 +1.742919921875 555.292513358064 66.2045155415099 0.000655845371292222 -1.72605560530301 0.000655845371292222 +1.7431640625 561.91962430176 67.0180610827642 0.000647883934131935 -1.71381969640928 0.000647883934131935 +1.743408203125 568.658476671299 67.8461640050843 0.000639976123994671 -1.70136526167976 0.000639976123994671 +1.74365234375 575.509042019294 68.6888927030948 0.000632124399665188 -1.6886908626286 0.000632124399665188 +1.743896484375 582.471252955648 69.5463149585539 0.00062433106750904 -1.67579504526934 0.00062433106750904 +1.744140625 589.545004111295 70.4184982278948 0.000616598282382016 -1.66267633582975 0.000616598282382016 +1.744384765625 596.730153128775 71.3055099327844 0.000608928049067882 -1.64933323642138 0.000608928049067882 +1.74462890625 604.026521676091 72.2074177521036 0.000601322224210115 -1.63576422068121 0.000601322224210115 +1.744873046875 611.433896480561 73.1242899135552 0.000593782518703252 -1.62196772940475 0.000593782518703252 +1.7451171875 618.95203037995 74.0561954830038 0.000586310500509271 -1.6079421661926 0.000586310500509271 +1.745361328125 626.58064338908 75.0032046494314 0.000578907597864684 -1.59368589313453 0.000578907597864684 +1.74560546875 634.319423780489 75.9653890032375 0.000571575102844876 -1.57919722655883 0.000571575102844876 +1.745849609375 642.168029178419 76.9428218052929 0.000564314175253398 -1.56447443287834 0.000564314175253398 +1.74609375 650.126087666412 77.9355782439769 0.00055712584680486 -1.54951572456806 0.00055712584680486 +1.746337890625 658.193198909261 78.9437356770486 0.000550011025572041 -1.53431925631457 0.000550011025572041 +1.74658203125 666.368935290825 79.9673738548288 0.000542970500669589 -1.51888312138294 0.000542970500669589 +1.746826171875 674.652843070333 81.0065751208256 0.000536004947148396 -1.50320534825267 0.000536004947148396 +1.7470703125 683.044443560344 82.061424585399 0.000529114931077125 -1.4872838975823 0.000529114931077125 +1.747314453125 691.543234330455 83.1320102675579 0.00052230091478961 -1.47111665957104 0.00052230091478961 +1.74755859375 700.148690442083 84.2184231994121 0.000515563262278842 -1.454701451796 0.000515563262278842 +1.747802734375 708.860265720453 85.320757487106 0.000508902244720867 -1.43803601761625 0.000508902244720867 +1.748046875 717.677394070904 86.4391103213214 0.000502318046114272 -1.42111802524897 0.000502318046114272 +1.748291015625 726.599490848079 87.5735819296584 0.000495810769022997 -1.40394506763841 0.000495810769022997 +1.74853515625 735.625954287165 88.7242754622621 0.000489380440412676 -1.38651466325581 0.000489380440412676 +1.748779296875 744.756167007146 89.8912968010903 0.000483027017572925 -1.36882425798596 0.000483027017572925 +1.7490234375 753.989497596997 91.0747542821874 0.000476750394119553 -1.35087122827368 0.000476750394119553 +1.749267578125 763.325302295981 92.2747583182427 0.000470550406077641 -1.33265288573052 0.000470550406077641 +1.7493896484375 768.031564351383 92.881128898013 0.000467478437792021 -1.32341561456526 0.000467478437792021 +1.74951171875 772.763336599711 93.4917127817231 0.000464425388070754 -1.31410998066224 0.000464425388070754 +1.7496337890625 777.520569333587 94.1065300477005 0.000461391201715935 -1.30473547795661 0.000461391201715935 +1.749755859375 782.303141623456 94.7255906028213 0.000458375869812039 -1.29529187752209 0.000458375869812039 +1.7498779296875 787.110968425558 95.3489094691526 0.000455379355944279 -1.28577880796901 0.000455379355944279 +1.75 791.943964378732 95.9765016474976 0.000452401621613351 -1.27619589580794 0.000452401621613351 +1.7501220703125 796.802043871577 96.6083820840877 0.00044944262644195 -1.26654276591123 0.00044944262644195 +1.750244140625 801.685121109957 97.2445656341937 0.000446502328383211 -1.25681904202497 0.000446502328383211 +1.7503662109375 806.593110186606 97.8850670226193 0.000443580683929798 -1.24702434732548 0.000443580683929798 +1.75048828125 811.525925150671 98.5299008007419 0.000440677648324927 -1.23715830503174 0.000440677648324927 +1.7506103515625 816.483480078943 99.1790813001329 0.000437793175774023 -1.22722053906779 0.000437793175774023 +1.750732421875 821.465689146633 99.8326225823784 0.00043492721965816 -1.21721067478659 0.00043492721965816 +1.7508544921875 826.47246669903 100.490538385127 0.00043207973274814 -1.20712833974974 0.00043207973274814 +1.7509765625 831.503727322049 101.152842063986 0.000429250667420165 -1.19697316457404 0.000429250667420165 +1.7510986328125 836.559385912716 101.819546530326 0.000426439975871983 -1.18674478383968 0.000426439975871983 +1.751220703125 841.639357747336 102.490664184538 0.000423647610340477 -1.17644283707083 0.000423647610340477 +1.7513427734375 846.743558548282 103.166206844888 0.00042087352331947 -1.16606696978341 0.00042087352331947 +1.75146484375 851.871904547035 103.846185671479 0.000418117667778585 -1.15561683460999 0.000418117667778585 +1.7515869140625 857.024312543904 104.530611085492 0.000415379997382044 -1.14509209249713 0.000415379997382044 +1.751708984375 862.200699962037 105.219492683211 0.000412660466707981 -1.13449241398418 0.000412660466707981 +1.7518310546875 867.400984895802 105.912839145074 0.000409959031467179 -1.12381748055822 0.000409959031467179 +1.751953125 872.625086150663 106.610658139215 0.000407275648721716 -1.11306698609406 0.000407275648721716 +1.7520751953125 877.872923274461 107.312956219825 0.00040461027710229 -1.10224063837305 0.00040461027710229 +1.752197265625 883.144416576937 108.019738719823 0.000401962877024554 -1.0913381606883 0.000401962877024554 +1.7523193359375 888.439487136766 108.731009638215 0.00039933341090322 -1.08035929352969 0.00039933341090322 +1.75244140625 893.758056792808 109.446771521677 0.000396721843364 -1.06930379635479 0.000396721843364 +1.7525634765625 899.100048118363 110.167025340835 0.000394128141452052 -1.05817144943752 0.000394128141452052 +1.752685546875 904.465384374571 110.89177036082 0.000391552274836903 -1.04696205579967 0.000391552274836903 +1.7528076171875 909.853989441462 111.621004006685 0.000388994216012269 -1.03567544321532 0.000388994216012269 +1.7529296875 915.265787722464 112.354721723365 0.000386453940490558 -1.02431146629076 0.000386453940490558 +1.7530517578125 920.700704020228 113.092916830843 0.000383931426990422 -1.01287000860903 0.000383931426990422 +1.753173828125 926.158663379417 113.835580374338 0.000381426657616804 -1.00135098493861 0.000381426657616804 +1.7532958984375 931.639590893935 114.582700970379 0.000378939618031728 -0.989754343493157 0.000378939618031728 +1.75341796875 937.143411473732 115.334264648595 0.000376470297615167 -0.978080068239852 0.000376470297615167 +1.7535400390625 942.670049568608 116.090254690343 0.000374018689613969 -0.966328181240259 0.000374018689613969 +1.753662109375 948.219428844016 116.850651464156 0.000371584791277975 -0.954498745017986 0.000371584791277975 +1.7537841796875 953.791471805939 117.615432259251 0.000369168603981261 -0.942591864935387 0.000369168603981261 +1.75390625 959.38609937011 118.384571117352 0.000366770133327378 -0.930607691569648 0.000366770133327378 +1.7540283203125 965.003230372703 119.158038664187 0.000364389389236454 -0.918546423068153 0.000364389389236454 +1.754150390625 970.64278101784 119.935801941138 0.000362026386012956 -0.906408307470817 0.000362026386012956 +1.7542724609375 976.304664259636 120.717824238601 0.000359681142391878 -0.89419364497629 0.000359681142391878 +1.75439453125 981.988789114762 121.504064931714 0.00035735368156208 -0.881902790136903 0.00035735368156208 +1.7545166015625 987.695059903721 122.294479320222 0.00035504403116467 -0.869536153958081 0.00035504403116467 +1.754638671875 993.423375418048 123.089018473321 0.000352752223265113 -0.857094205883541 0.000352752223265113 +1.7547607421875 999.173628012693 123.887629081394 0.000350478294297082 -0.84457747564139 0.000350478294297082 +1.7548828125 1004.94570262199 124.690253315677 0.000348222284977015 -0.831986554931694 0.000348222284977015 +1.7550048828125 1010.739467502 125.496827680566 0.000345984242992055 -0.819322098839898 0.000345984242992055 +1.755126953125 1016.55477736225 126.30728342107 0.000343764221238536 -0.806584827109327 0.000343764221238536 +1.7552490234375 1022.3914769216 127.121547007172 0.00034156227597363 -0.793775525222014 0.00034156227597363 +1.75537109375 1028.24939931206 127.939540002747 0.000339378466728916 -0.780895045220618 0.000339378466728916 +1.7554931640625 1034.1283647677 128.761178994364 0.000337212856066951 -0.767944306260176 0.000337212856066951 +1.755615234375 1040.02817925391 129.586375537756 0.000335065509303522 -0.754924294872019 0.000335065509303522 +1.7557373046875 1045.94863304444 130.415036123937 0.000332936494195624 -0.74183606492194 0.000332936494195624 +1.755859375 1051.88949925394 131.247062165941 0.000330825880595803 -0.728680737249226 0.000330825880595803 +1.7559814453125 1057.85053233558 132.082350007921 0.000328733740073813 -0.715459498975266 0.000328733740073813 +1.756103515625 1063.83146655463 132.920790957438 0.000326660145506852 -0.70217360247256 0.000326660145506852 +1.7562255859375 1069.83201444989 133.762271342198 0.000324605170640273 -0.688824363991223 0.000324605170640273 +1.75634765625 1075.85186529611 134.606672591829 0.000322568889620853 -0.675413161940265 0.000322568889620853 +1.7564697265625 1081.89068358177 135.45387134546 0.000320551376505343 -0.661941434829337 0.000320551376505343 +1.756591796875 1087.94810751746 136.303739585272 0.000318552704747172 -0.6484106788755 0.000318552704747172 +1.7567138671875 1094.02374759042 137.156144796201 0.000316572946664969 -0.634822445290846 0.000316572946664969 +1.7568359375 1100.11718518241 138.010950151494 0.000314612172896368 -0.621178337262791 0.000314612172896368 +1.7569580078125 1106.22797126707 138.868014723657 0.000312670451841565 -0.607480006652777 0.000312670451841565 +1.757080078125 1112.35562520431 139.727193719892 0.000310747849100722 -0.593729150433116 0.000310747849100722 +1.7572021484375 1118.49963364792 140.588338740949 0.00030884442691018 -0.579927506896435 0.00030884442691018 +1.75732421875 1124.65944958377 141.45129806197 0.000306960243581957 -0.566076851664064 0.000306960243581957 +1.7574462890625 1130.83449151285 142.315916933446 0.000305095352951915 -0.552178993536415 0.000305095352951915 +1.757568359375 1137.02414279568 143.182037900521 0.000303249803841084 -0.538235770215536 0.000303249803841084 +1.7576904296875 1143.22775116962 144.04950113804 0.000301423639535692 -0.524249043949728 0.000301423639535692 +1.7578125 1149.44462845296 144.918144799151 0.000299616897290204 -0.510220697133294 0.000299616897290204 +1.7579345703125 1155.67405044401 145.787805374375 0.000297829607858709 -0.496152627914378 0.000297829607858709 +1.758056640625 1161.91525702556 146.658318058674 0.000296061795058451 -0.48204674584428 0.000296061795058451 +1.7581787109375 1168.16745247854 147.529517122991 0.000294313475370421 -0.467904967621868 0.000294313475370421 +1.75830078125 1174.42980601097 148.4012362877 0.000292584657580011 -0.453729212964625 0.000292584657580011 +1.7584228515625 1180.70145250111 149.273309094181 0.000290875342461924 -0.439521400657231 0.000290875342461924 +1.758544921875 1186.98149345613 150.145569272107 0.000289185522511355 -0.425283444803816 0.000289185522511355 +1.7586669921875 1193.26899818024 151.017851098508 0.000287515181724615 -0.411017251330428 0.000287515181724615 +1.7587890625 1199.56300514835 151.889989746539 0.000285864295430192 -0.396724714756743 0.000285864295430192 +1.7589111328125 1205.86252357435 152.761821620115 0.000284232830172187 -0.382407715275735 0.000284232830172187 +1.759033203125 1212.16653516555 153.633184672761 0.000282620743645935 -0.368068116151017 0.000282620743645935 +1.7591552734375 1218.4739960475 154.50391870726 0.000281027984686571 -0.35370776146275 0.000281027984686571 +1.75927734375 1224.78383884682 155.373865654888 0.000279454493309088 -0.33932847420035 0.000279454493309088 +1.7593994140625 1231.09497491243 156.242869831434 0.000277900200799498 -0.324932054723813 0.000277900200799498 +1.759521484375 1237.40629665952 157.110778169378 0.000276365029854505 -0.310520279581413 0.000276365029854505 +1.7596435546875 1243.71668001382 157.977440423994 0.000274848894768205 -0.296094900694903 0.000274848894768205 +1.759765625 1250.02498693863 158.842709353649 0.000273351701662219 -0.281657644890791 0.000273351701662219 +1.7598876953125 1256.33006802017 159.706440872555 0.000271873348756913 -0.267210213778584 0.000271873348756913 +1.760009765625 1262.63076509307 160.568494177038 0.00027041372667928 -0.252754283946264 0.00027041372667928 +1.7601318359375 1268.92591388122 161.428731844299 0.000268972718804458 -0.238291507464965 0.000268972718804458 +1.76025390625 1275.2143466357 162.287019905322 0.000267550201626002 -0.223823512666919 0.000267550201626002 +1.7603759765625 1281.49489474614 163.143227891632 0.000266146045151361 -0.209351905181565 0.000266146045151361 +1.760498046875 1287.76639130867 163.997228858127 0.00026476011331747 -0.194878269188349 0.00026476011331747 +1.7606201171875 1294.02767362855 164.848899382187 0.000263392264422731 -0.180404168867771 0.000263392264422731 +1.7607421875 1300.277585643 165.698119541847 0.000262042351570296 -0.165931150005518 0.000262042351570296 +1.7608642578125 1306.51498024541 166.544772873561 0.000260710223118996 -0.151460741729 0.000260710223118996 +1.760986328125 1312.73872149908 167.388746312806 0.000259395723137123 -0.136994458331632 0.000259395723137123 +1.7611083984375 1318.9476867254 168.229930118204 0.000258098691855678 -0.122533801162642 0.000258098691855678 +1.76123046875 1325.14076845835 169.068217782669 0.000256818966116732 -0.108080260540416 0.000256818966116732 +1.7613525390625 1331.31687625371 169.903505932425 0.000255556379814028 -0.0936353176686264 0.000255556379814028 +1.761474609375 1337.47493834888 170.73569421733 0.000254310764322079 -0.0792004465161571 0.000254310764322079 +1.7615966796875 1343.61390316572 171.564685193429 0.000253081948911438 -0.0647771156438566 0.000253081948911438 +1.76171875 1349.73274065571 172.390384201091 0.000251869761147192 -0.0503667899447224 0.000251869761147192 +1.7618408203125 1355.83044348407 173.212699239376 0.000250674027268984 -0.0359709322833082 0.000250674027268984 +1.761962890625 1361.90602805546 174.031540839931 0.000249494572550361 -0.0215910050084553 0.000249494572550361 +1.7620849609375 1367.95853538132 174.846821940781 0.000248331221636452 -0.00722847132913751 0.000248331221636452 +1.76220703125 1373.98703179461 175.658457762963 0.000247183798858539 0.00711520346544248 0.000247183798858539 +1.7623291015625 1379.99060951493 176.46636569008 0.000246052128525194 0.0214385509460215 0.000246052128525194 +1.762451171875 1385.9683870723 177.270465153428 0.000244936035189206 0.0357400986574223 0.000244936035189206 +1.7625732421875 1391.91950959498 178.070677522383 0.000243835343890566 0.0500183694049854 0.000243835343890566 +1.7626953125 1397.84314897124 178.866926002295 0.000242749880375412 0.0642718807206641 0.000242749880375412 +1.7628173828125 1403.73850389233 179.659135539271 0.000241679471291644 0.0784991445035246 0.000241679471291644 +1.762939453125 1409.60479978779 180.447232733727 0.000240623944361596 0.092698666835894 0.000240623944361596 +1.7630615234375 1415.44128866102 181.231145761679 0.000239583128532952 0.106868947965614 0.000239583128532952 +1.76318359375 1421.24724883716 182.010804305438 0.000238556854108563 0.121008482452263 0.000238556854108563 +1.7633056640625 1427.02198463152 182.786139492247 0.000237544952856703 0.135115759464328 0.000237544952856703 +1.763427734375 1432.76482595014 183.557083842324 0.000236547258102675 0.149189263221245 0.000236547258102675 +1.7635498046875 1438.47512783109 184.323571224555 0.000235563604803416 0.163227473565753 0.000235563604803416 +1.763671875 1444.15226993725 185.085536821061 0.000234593829606219 0.177228866658757 0.000234593829606219 +1.7637939453125 1449.7956560086 185.842917098769 0.000233637770893199 0.191191915780086 0.000233637770893199 +1.763916015625 1455.4047132839 186.595649788938 0.000232695268812748 0.205115092226494 0.000232695268812748 +1.7640380859375 1460.97889189884 187.343673872702 0.000231766165299504 0.218996866291112 0.000231766165299504 +1.76416015625 1466.51766426921 188.086929573477 0.000230850304084073 0.232835708313687 0.000230850304084073 +1.7642822265625 1472.02052446507 188.825358354189 0.000229947530693953 0.246630089787438 0.000229947530693953 +1.764404296875 1477.48698758336 189.558902920192 0.000229057692446697 0.260378484512891 0.000229057692446697 +1.7645263671875 1482.91658912321 190.287507225689 0.000228180638436753 0.274079369784686 0.000228180638436753 +1.7646484375 1488.30888437045 191.011116484703 0.000227316219516754 0.287731227603341 0.000227316219516754 +1.7647705078125 1493.66344779408 191.729677184272 0.000226464288274556 0.301332545899678 0.000226464288274556 +1.764892578125 1498.97987245975 192.443137101045 0.000225624699006689 0.314881819765138 0.000225624699006689 +1.7650146484375 1504.25776946196 193.151445319007 0.000224797307689223 0.328377552677867 0.000224797307689223 +1.76513671875 1509.49676737884 193.854552249527 0.000223981971946606 0.341818257718896 0.000223981971946606 +1.7652587890625 1514.69651174993 194.552409651551 0.000223178551019286 0.355202458771116 0.000223178551019286 +1.765380859375 1519.85666457985 195.24497065329 0.000222386905730477 0.368528691696585 0.000222386905730477 +1.7655029296875 1524.97690386746 195.932189773227 0.000221606898452705 0.381795505486724 0.000221606898452705 +1.765625 1530.05692316218 196.614022941865 0.000220838393074385 0.395001463382425 0.000220838393074385 +1.7657470703125 1535.09643114657 197.29042752221 0.000220081254966882 0.408145143960858 0.000220081254966882 +1.765869140625 1540.09515124612 197.961362330484 0.00021933535095214 0.42122514218724 0.00021933535095214 +1.7659912109375 1545.05282126462 198.626787655082 0.00021860054927127 0.434240070429524 0.00021860054927127 +1.76611328125 1549.96919304571 199.286665275409 0.00021787671955403 0.447188559435568 0.00021787671955403 +1.7662353515625 1554.84403215834 199.94095847866 0.000217163732789504 0.460069259272457 0.000217163732789504 +1.766357421875 1559.67711760659 200.589632076255 0.000216461461297816 0.472880840227548 0.000216461461297816 +1.7664794921875 1564.46824156138 201.232652418062 0.000215769778703109 0.485621993672592 0.000215769778703109 +1.7666015625 1569.21720911387 201.8699874062 0.0002150885599076 0.498291432890837 0.0002150885599076 +1.7667236328125 1573.92383804841 202.501606506489 0.00021441768106685 0.510887893868574 0.00021441768106685 +1.766845703125 1578.58795863463 203.127480759539 0.000213757019566019 0.523410136052588 0.000213757019566019 +1.7669677734375 1583.20941343621 203.747582789501 0.000213106453997245 0.535856943074225 0.000213106453997245 +1.76708984375 1587.78805713633 204.36188681249 0.000212465864137874 0.548227123442099 0.000212465864137874 +1.7672119140625 1592.32375637716 204.970368642729 0.000211835130929645 0.56051951120488 0.000211835130929645 +1.767333984375 1596.81638961325 205.573005698519 0.000211214136458596 0.57273296658464 0.000211214136458596 +1.7674560546875 1601.26584697667 206.169777005989 0.000210602763935749 0.584866376583931 0.000210602763935749 +1.767578125 1605.67203015361 206.760663202799 0.000210000897678356 0.596918655566174 0.000210000897678356 +1.7677001953125 1610.03485227037 207.345646539734 0.000209408423091766 0.608888745811666 0.000209408423091766 +1.767822265625 1614.35423778868 207.924710882417 0.000208825226651702 0.620775618050108 0.000208825226651702 +1.7679443359375 1618.63012240846 208.497841710999 0.000208251195887022 0.632578271970714 0.000208251195887022 +1.76806640625 1622.86245297783 209.065026120101 0.000207686219362764 0.644295736710102 0.000207686219362764 +1.7681884765625 1627.05118740883 209.626252816823 0.000207130186663551 0.655927071320343 0.000207130186663551 +1.768310546875 1631.19629459878 210.181512119164 0.000206582988377184 0.667471365215505 0.000206582988377184 +1.7684326171875 1635.29775435563 210.73079595255 0.000206044516078505 0.678927738599546 0.000206044516078505 +1.7685546875 1639.3555573277 211.274097846873 0.000205514662313376 0.690295342873712 0.000205514662313376 +1.7686767578125 1643.36970493595 211.811412931785 0.000204993320582857 0.701573361025545 0.000204993320582857 +1.768798828125 1647.34020930937 212.342737932457 0.000204480385327457 0.712761007998026 0.000204480385327457 +1.7689208984375 1651.26709322178 212.868071163736 0.000203975751911557 0.723857531039982 0.000203975751911557 +1.76904296875 1655.15039003063 213.387412524805 0.000203479316607873 0.73486221003656 0.000203479316607873 +1.7691650390625 1658.99014361625 213.900763492227 0.000202990976582084 0.745774357820661 0.000202990976582084 +1.769287109375 1662.78640832209 214.408127113575 0.000202510629877494 0.756593320464157 0.000202510629877494 +1.7694091796875 1666.53924889456 214.909507999476 0.000202038175399856 0.767318477548698 0.000202038175399856 +1.76953125 1670.24874042298 215.404912316195 0.000201573512902267 0.777949242416028 0.000201573512902267 +1.7696533203125 1673.91496827823 215.894347776633 0.000201116542970243 0.78848506239669 0.000201116542970243 +1.769775390625 1677.53802805095 216.377823631953 0.000200667167006875 0.79892541901722 0.000200667167006875 +1.7698974609375 1681.11802548748 216.855350661517 0.000200225287218221 0.809269828184466 0.000200225287218221 +1.77001953125 1684.65507642471 217.326941163434 0.000199790806598818 0.819517840347195 0.000199790806598818 +1.7701416015625 1688.14930672209 217.792608943464 0.00019936362891746 0.829669040634058 0.00019936362891746 +1.770263671875 1691.60085219162 218.252369304433 0.00019894365870316 0.839723048967024 0.00019894365870316 +1.7703857421875 1695.00985852452 218.706239034001 0.000198530801231423 0.849679520150115 0.000198530801231423 +1.7705078125 1698.37648121521 219.154236392917 0.000198124962510756 0.859538143932249 0.000198124962510756 +1.7706298828125 1701.70088548122 219.596381101523 0.000197726049269553 0.869298645044488 0.000197726049269553 +1.770751953125 1704.98324617992 220.032694326793 0.000197333968943261 0.878960783209751 0.000197333968943261 +1.7708740234375 1708.22374772056 220.463198667503 0.00019694862966198 0.888524353126386 0.00019694862966198 +1.77099609375 1711.4225839724 220.887918139927 0.000196569940238413 0.89798918442261 0.000196569940238413 +1.7711181640625 1714.57995816765 221.306878161593 0.000196197810156299 0.907355141583832 0.000196197810156299 +1.771240234375 1717.69608279999 221.720105535505 0.000195832149559254 0.916622123850466 0.000195832149559254 +1.7713623046875 1720.77117951722 222.127628432465 0.000195472869240149 0.925790065087176 0.000195472869240149 +1.771484375 1723.80547900904 222.529476373661 0.000195119880630953 0.934858933622248 0.000195119880630953 +1.7716064453125 1726.7992208885 222.92568021144 0.000194773095793164 0.943828732057899 0.000194773095793164 +1.771728515625 1729.75265356796 223.316272110281 0.000194432427408751 0.952699497049779 0.000194432427408751 +1.7718505859375 1732.66603412837 223.701285525834 0.000194097788771739 0.961471299057197 0.000194097788771739 +1.77197265625 1735.5396281826 224.080755184192 0.000193769093780348 0.970144242062872 0.000193769093780348 +1.7720947265625 1738.37370973168 224.454717059206 0.000193446256929812 0.978718463262297 0.000193446256929812 +1.772216796875 1741.16856101483 224.823208349947 0.000193129193305785 0.98719413272333 0.000193129193305785 +1.7723388671875 1743.92447235199 225.186267456194 0.000192817818578478 0.995571453015551 0.000192817818578478 +1.7724609375 1746.64174197993 225.543933954094 0.000192512048997396 1.00385065880967 0.000192512048997396 +1.7725830078125 1749.32067588064 225.896248569792 0.000192211801386835 1.01203201644775 0.000192211801386835 +1.772705078125 1751.96158760308 226.243253153225 0.000191916993142012 1.02011582348367 0.000191916993142012 +1.7728271484375 1754.56479807719 226.584990649889 0.000191627542225951 1.02810240819511 0.000191627542225951 +1.77294921875 1757.13063542116 226.921505072786 0.000191343367167031 1.03599212906703 0.000191343367167031 +1.7730712890625 1759.65943474099 227.252841472322 0.000191064387057286 1.04378537424741 0.000191064387057286 +1.773193359375 1762.15153792332 227.579045906425 0.000190790521551361 1.05148256097567 0.000190790521551361 +1.7733154296875 1764.60729342068 227.900165408648 0.000190521690866235 1.05908413498485 0.000190521690866235 +1.7734375 1767.02705603031 228.21624795648 0.000190257815781576 1.06659056987779 0.000190257815781576 +1.7735595703125 1769.41118666554 228.527342437726 0.000189998817640845 1.07400236647862 0.000189998817640845 +1.773681640625 1771.76005212108 228.833498617117 0.000189744618353023 1.08132005216017 0.000189744618353023 +1.7738037109375 1774.07402483132 229.134767101068 0.000189495140395044 1.08854418014846 0.000189495140395044 +1.77392578125 1776.35348262284 229.431199302676 0.000189250306814833 1.09567532880502 0.000189250306814833 +1.7740478515625 1778.59880846052 229.722847404983 0.000189010041235021 1.10271410088842 0.000189010041235021 +1.774169921875 1780.81039018835 230.009764348451 0.000188774267837572 1.10966112314099 0.000188774267837572 +1.7744140625 1785.13360569734 230.569577546798 0.000188315931883993 1.12327380200478 0.000188315931883993 +1.774658203125 1789.32698414993 231.111171794855 0.000187874625540938 1.13652905687036 0.000187874625540938 +1.77490234375 1793.39376905704 231.634991904538 0.000187449765261078 1.14943264669584 0.000187449765261078 +1.775146484375 1797.33725612469 232.141490772525 0.000187040777216277 1.16199063162797 0.000187040777216277 +1.775390625 1801.16078413154 232.631128101247 0.000186647097540759 1.17420934588434 0.000186647097540759 +1.775634765625 1804.86772567261 233.104369104838 0.000186268172595707 1.18609537012365 0.000186268172595707 +1.77587890625 1808.46147784136 233.561683209376 0.000185903459249452 1.19765550351654 0.000185903459249452 +1.776123046875 1811.94545292202 234.003542756582 0.000185552425167517 1.2088967357249 0.000185552425167517 +1.7763671875 1815.32306916376 234.430421720053 0.000185214549106873 1.21982621898867 0.000185214549106873 +1.776611328125 1818.59774170704 234.84279444311 0.000184889321208809 1.23045124051409 0.000184889321208809 +1.77685546875 1821.77287373028 235.241134406889 0.000184576243285028 1.24077919534663 0.000184576243285028 +1.777099609375 1824.85184788178 235.625913037086 0.000184274829091816 1.25081755990281 0.000184274829091816 +1.77734375 1827.83801805737 235.997598556983 0.000183984604587499 1.26057386632185 0.000183984604587499 +1.777587890625 1830.734701579 236.356654894039 0.000183705108168753 1.27005567778385 0.000183705108168753 +1.77783203125 1833.54517182333 236.703540646255 0.000183435890881863 1.27927056492651 0.000183435890881863 +1.778076171875 1836.27265134291 237.038708113899 0.000183176516605512 1.28822608347461 0.000183176516605512 +1.7783203125 1838.92030551489 237.362602401202 0.000182926562202233 1.29692975317958 0.000182926562202233 +1.778564453125 1841.49123674523 237.675660591688 0.000182685617636245 1.30538903814881 0.000182685617636245 +1.77880859375 1843.9884792484 237.978310999842 0.000182453286055995 1.3136113286239 0.000182453286055995 +1.779052734375 1846.41499441528 238.270972500934 0.000182229183840275 1.32160392425213 0.000182229183840275 +1.779296875 1848.77366677444 238.55405393976 0.000182012940607375 1.32937401887512 0.000182012940607375 +1.779541015625 1851.06730054531 238.8279536183 0.000181804199187287 1.33692868684285 0.000181804199187287 +1.77978515625 1853.29861677489 239.093058861378 0.000181602615557438 1.34427487084566 0.000181602615557438 +1.780029296875 1855.47025104406 239.349745658705 0.000181407858742931 1.35141937124168 0.000181407858742931 +1.7802734375 1857.58475172401 239.598378380865 0.000181219610682677 1.35836883684375 0.000181219610682677 +1.780517578125 1859.64457875883 239.839309566419 0.00018103756606313 1.36512975711918 0.00018103756606313 +1.78076171875 1861.65210294637 240.07287977654 0.000180861432121691 1.37170845574423 0.000180861432121691 +1.781005859375 1863.60960568638 240.299417513402 0.000180690928422057 1.37811108544761 0.000180690928422057 +1.78125 1865.51927916238 240.519239197955 0.000180525786603977 1.38434362407024 0.000180525786603977 +1.781494140625 1867.38322692207 240.732649202778 0.000180365750110052 1.39041187176285 0.000180365750110052 +1.78173828125 1869.20346482001 240.939939935207 0.00018021057389226 1.39632144923948 0.00018021057389226 +1.781982421875 1870.9819222857 241.14139196613 0.00018006002410093 1.4020777970027 0.00018006002410093 +1.7822265625 1872.72044388039 241.337274199663 0.000179913877758917 1.40768617545476 0.000179913877758917 +1.782470703125 1874.4207911065 241.527844078991 0.000179771922423632 1.4131516658096 0.000179771922423632 +1.78271484375 1876.08464443429 241.713347823837 0.000179633955839535 1.4184791717216 0.000179633955839535 +1.782958984375 1877.71360551222 241.894020695101 0.000179499785583588 1.42367342154853 0.000179499785583588 +1.783203125 1879.30919952859 242.07008728239 0.000179369228706028 1.42873897117027 0.000179369228706028 +1.783447265625 1880.8728776942 242.241761810464 0.000179242111368665 1.43368020728676 0.000179242111368665 +1.78369140625 1882.4060198178 242.409248460845 0.000179118268482755 1.43850135112377 0.000179118268482755 +1.783935546875 1883.90993694815 242.572741704986 0.000178997543348333 1.44320646247931 0.000178997543348333 +1.7841796875 1885.38587405884 242.732426645853 0.000178879787296696 1.44779944404773 0.000178879787296696 +1.784423828125 1886.83501275417 242.888479364958 0.000178764859337549 1.45228404596332 0.000178764859337549 +1.78466796875 1888.25847397684 243.041067272158 0.000178652625812176 1.45666387051125 0.000178652625812176 +1.784912109375 1889.65732070008 243.190349455792 0.000178542960053774 1.46094237695642 0.000178542960053774 +1.78515625 1891.03256058924 243.336477031148 0.00017843574205598 1.46512288644816 0.00017843574205598 +1.785400390625 1892.38514861985 243.479593485287 0.000178330858150396 1.46920858696068 0.000178330858150396 +1.78564453125 1893.71598964084 243.619835016667 0.000178228200693825 1.4732025382363 0.000178228200693825 +1.785888671875 1895.0259408738 243.75733086821 0.000178127667765761 1.47710767670018 0.000178127667765761 +1.7861328125 1896.31581434044 243.892203652585 0.000178029162876528 1.48092682032153 0.000178029162876528 +1.786376953125 1897.58637921224 244.024569668842 0.000177932594686398 1.48466267339784 0.000177932594686398 +1.78662109375 1898.83836407731 244.154539209525 0.00017783787673585 1.48831783124404 0.00017783787673585 +1.786865234375 1900.07245912111 244.28221685773 0.000177744927187099 1.49189478476982 0.000177744927187099 +1.787109375 1901.28931821829 244.407701786435 0.000177653668567552 1.49539592512711 0.000177653668567552 +1.78759765625 1903.67321600111 244.652401192113 0.000177475980767235 1.50217535456772 0.000177475980767235 +1.7880859375 1905.9955547025 244.889439000667 0.000177304195011178 1.50868034324997 0.000177304195011178 +1.78857421875 1908.26042375257 245.119435564199 0.000177137829764298 1.51492676530377 0.000177137829764298 +1.7890625 1910.47150828968 245.342949259942 0.000176976452675816 1.520929297484 0.000176976452675816 +1.78955078125 1912.63213458937 245.560482975086 0.000176819675230974 1.52670152542959 0.000176819675230974 +1.7900390625 1914.74531054504 245.772489951562 0.000176667147970688 1.53225604060881 0.000176667147970688 +1.79052734375 1916.81376159617 245.979379033873 0.000176518556230724 1.53760452840139 0.000176518556230724 +1.791015625 1918.8399625127 246.181519366425 0.00017637361635243 1.54275784786852 0.00017637361635243 +1.79150390625 1920.82616544188 246.379244587873 0.000176232072318565 1.54772610381944 0.000176232072318565 +1.7919921875 1922.77442460958 246.57285656952 0.000176093692770199 1.55251871180789 0.000176093692770199 +1.79248046875 1924.68661804626 246.762628742897 0.000175958268363603 1.55714445669031 0.000175958268363603 +1.79296875 1926.56446668074 246.948809059275 0.000175825609429286 1.5616115453573 0.000175825609429286 +1.79345703125 1928.4095511156 247.131622620675 0.000175695543898762 1.56592765421851 0.000175695543898762 +1.7939453125 1930.2233263677 247.311274018628 0.000175567915467925 1.57009997198102 0.000175567915467925 +1.79443359375 1932.00713482787 247.487949413787 0.000175442581969183 1.57413523821703 0.000175442581969183 +1.794921875 1933.76221766672 247.661818392741 0.000175319413922794 1.5780397782803 0.000175319413922794 +1.7958984375 1937.18972869619 248.001662189604 0.000175079168699232 1.58547089885933 0.000175079168699232 +1.796875 1940.51626896789 248.332047445441 0.000174846240343778 1.59245474230867 0.000174846240343778 +1.7978515625 1943.74894303665 248.653867755303 0.000174619945570148 1.59902960985888 0.000174619945570148 +1.798828125 1946.89398386433 248.967876549471 0.000174399707526697 1.60522971224945 0.000174399707526697 +1.7998046875 1949.95689664516 249.274711879704 0.000174185036768824 1.61108570232504 0.000174185036768824 +1.80078125 1952.94257381611 249.574916448622 0.000173975515940022 1.61662512280066 0.000173975515940022 +1.8017578125 1955.85538788241 249.868953883968 0.00017377078736853 1.62187278518743 0.00017377078736853 +1.802734375 1958.69926699952 250.157222027882 0.000173570542972591 1.62685109239072 0.000173570542972591 +1.8037109375 1961.47775701881 250.440063837188 0.000173374516006528 1.63158031482467 0.000173374516006528 +1.8046875 1964.19407280263 250.717776359001 0.000173182474284395 1.6360788278506 0.000173182474284395 +1.8056640625 1966.85114095049 250.990618146373 0.000172994214596982 1.64036331678639 0.000172994214596982 +1.806640625 1969.45163558756 251.25881540604 0.000172809558095616 1.64444895458339 0.000172809558095616 +1.80859375 1974.4904483448 251.781990317506 0.000172450479099698 1.65205992577417 0.000172450479099698 +1.810546875 1979.3343823836 252.288930461171 0.000172103963422055 1.65905197131787 0.000172103963422055 +1.8125 1983.99827469999 252.780695056226 0.000171769148949987 1.6655052395174 0.000171769148949987 +1.814453125 1988.49505379664 253.258159719915 0.000171445314574242 1.67148763304445 0.000171445314574242 +1.81640625 1992.83608770638 253.72206516183 0.00017113184395226 1.67705693937449 0.00017113184395226 +1.818359375 1997.03144955058 254.173051649505 0.000170828199848676 1.68226252863331 0.000170828199848676 +1.8203125 2001.09012387962 254.611683533621 0.000170533905834576 1.68714672084644 0.000170533905834576 +1.822265625 2005.02016951448 255.038466770191 0.000170248533151562 1.691745896832 0.000170248533151562 +1.82421875 2008.82884981095 255.453861480015 0.000169971691224391 1.69609140766005 0.000169971691224391 +1.826171875 2012.52273807416 255.858290974591 0.000169703020765317 1.70021032379006 0.000169703020765317 +1.828125 2016.10780362139 256.252148250847 0.000169442188731962 1.70412605477696 0.000169442188731962 +1.830078125 2019.58948230592 256.635800646599 0.000169188884629954 1.70785886238757 0.000169188884629954 +1.83203125 2022.97273379461 257.009593100238 0.000168942817831612 1.71142628263467 0.000168942817831612 +1.8359375 2029.4578466054 257.728712440581 0.000168471430513336 1.7181049256631 0.000168471430513336 +1.83984375 2035.61398069769 258.413539894722 0.000168024960642302 1.72431387464733 0.000168024960642302 +1.84375 2041.46932709181 259.066398802418 0.000167601530232818 1.7301279329757 0.000167601530232818 +1.84765625 2047.04845214618 259.689421202635 0.000167199436430557 1.73560558085127 0.000167199436430557 +1.8515625 2052.37292033772 260.28456732218 0.000166817131417221 1.7407929195289 0.000166817131417221 +1.85546875 2057.46178046796 260.853640532368 0.000166453206422513 1.74572660195538 0.000166453206422513 +1.859375 2062.33195222811 261.398299960362 0.000166106378200874 1.75043603131244 0.000166106378200874 +1.86328125 2066.99853692994 261.920071649149 0.000165775477234437 1.7549450185013 0.000165775477234437 +1.8671875 2071.47506933754 262.420358659844 0.000165459437283165 1.75927303598646 0.000165459437283165 +1.87109375 2075.77372310263 262.900450289043 0.000165157286068984 1.76343616876509 0.000165157286068984 +1.875 2079.90547919462 263.361530473379 0.000164868136961827 1.7674478368863 0.000164868136961827 +1.87890625 2083.88026444369 263.804685410613 0.000164591181576068 1.77131934459397 0.000164591181576068 +1.8828125 2087.70706560564 264.230910409762 0.000164325683206953 1.7750602966907 0.000164325683206953 +1.88671875 2091.39402300527 264.641115975407 0.000164070971050201 1.77867891154057 0.000164070971050201 +1.890625 2094.9485065708 265.036133115909 0.00016382643516495 1.78218225067195 0.00016382643516495 +1.89453125 2098.37717529824 265.416717794197 0.000163591522190075 1.78557637419529 0.000163591522190075 +1.8984375 2101.68601644147 265.783554107061 0.000163365732032833 1.7888664087161 0.000163365732032833 +1.90625 2107.96044041112 266.477941901052 0.000162940033872416 1.79514165917093 0.000162940033872416 +1.9140625 2113.84817880574 267.128161250941 0.000162543419895642 1.8010796462384 0.000162543419895642 +1.921875 2119.38565838668 267.738453431833 0.000162172912871153 1.80670936760586 0.000162172912871153 +1.9296875 2124.60456865995 268.312509647439 0.000161825942957916 1.81205585908698 0.000161825942957916 +1.9375 2129.53257773567 268.853550742766 0.000161500284305516 1.81714097870856 0.000161500284305516 +1.9453125 2134.19389821965 269.364391093819 0.000161194004543624 1.82198394913555 0.000161194004543624 +1.953125 2138.60972970191 269.8474892883 0.000160905424752016 1.82660173701185 0.000160905424752016 +1.9609375 2142.79859632845 270.304987270044 0.000160633088279363 1.83100930652268 0.000160633088279363 +1.96875 2146.77659054052 270.73873908717 0.000160375737248291 1.83521975698901 0.000160375737248291 +1.9765625 2150.55752611817 271.150329877943 0.00016013229599454 1.83924431899797 0.00016013229599454 +1.984375 2154.15298697893 271.541084697227 0.000159901861376448 1.84309209560762 0.000159901861376448 +2 2160.81548817764 272.263423970232 0.000159477627404071 1.85026925169967 0.000159477627404071 +2.015625 2166.92508352826 272.92425907718 0.000159091482123493 1.85690684167072 0.000159091482123493 +2.03125 2172.54871229477 273.531238353629 0.000158738450298053 1.86306299074808 0.000158738450298053 +2.046875 2177.74179956255 274.090657070055 0.000158414465304261 1.86878704333883 0.000158414465304261 +2.0625 2182.54999983712 274.607669553968 0.000158116213416126 1.87412048613127 0.000158116213416126 +2.078125 2187.01016226081 275.086403620064 0.000157841043082227 1.8790973209993 0.000157841043082227 +2.09375 2191.15039601833 275.529972263562 0.000157586938831486 1.88374323879649 0.000157586938831486 +2.125 2198.52567793768 276.317780456901 0.000157137643527359 1.89207198980065 0.000157137643527359 +2.15625 2205.04355930961 277.012357034113 0.000156743638987489 1.89949143248619 0.000156743638987489 +2.1875 2210.84192309116 277.629011596058 0.000156395488485508 1.90613703626984 0.000156395488485508 +2.21875 2216.02927250145 278.179726080293 0.000156085871168197 1.912117861984 0.000156085871168197 +2.25 2220.69146869582 278.673942467049 0.000155809059513848 1.91752169154279 0.000155809059513848 +2.28125 2224.89545592135 279.118981782747 0.000155560630845316 1.92241794693714 0.000155560630845316 +2.3125 2228.68930678965 279.520029259249 0.000155337436828031 1.92685677268207 0.000155337436828031 +2.375 2235.11444452729 280.197272761326 0.00015496198253357 1.93440771710936 0.00015496198253357 +2.4375 2240.53285387984 280.76740495231 0.000154647313477501 1.94081292642889 0.000154647313477501 +2.5 2245.13891352883 281.251389873953 0.000154381192241149 1.94628426412623 0.000154381192241149 +2.5625 2249.07804556151 281.664850934015 0.000154154573225979 1.95098293677416 0.000154154573225979 +2.625 2252.45448559457 282.018916969203 0.000153961036923916 1.95502598380474 0.000153961036923916 +2.75 2257.663110205 282.563669911928 0.000153664216290407 1.96128145050862 0.000153664216290407 +2.875 2261.67768374799 282.983062198644 0.000153436479738958 1.96612315623534 0.000153436479738958 +3 2264.79333442518 283.308290116936 0.000153260340076466 1.96989384809508 0.000153260340076466 +3.25 2268.84023493667 283.729745767299 0.000153032685285812 1.97480144290867 0.000153032685285812 +3.5 2271.47595591476 284.004004176916 0.000152884903916657 1.97800702709629 0.000152884903916657 +4 2274.05796435308 284.272499221049 0.000152740504304282 1.98115427626406 0.000152740504304282 diff --git a/Exec/RegTests/FlameSheet/GNUmakefile b/Exec/RegTests/FlameSheet/GNUmakefile index d3f82f9aa..8ca1771e8 100644 --- a/Exec/RegTests/FlameSheet/GNUmakefile +++ b/Exec/RegTests/FlameSheet/GNUmakefile @@ -18,13 +18,21 @@ USE_MPI = TRUE USE_OMP = FALSE USE_CUDA = FALSE USE_HIP = FALSE +FUEGO_GAS = TRUE +USE_LIBTORCH = FALSE # PeleLMeX USE_EFIELD = FALSE # PelePhysics -Chemistry_Model = drm19 -Eos_Model = Fuego -Transport_Model = Simple +ifeq ($(FUEGO_GAS), TRUE) + Chemistry_Model = drm19 + Eos_Model = Fuego + Transport_Model = Simple +else + Eos_Model = Manifold + Chemistry_Model = Manifold + Transport_Model = Manifold +endif include $(PELELMEX_HOME)/Utils/Make.PeleLMeX diff --git a/Exec/RegTests/FlameSheet/drm19.yaml b/Exec/RegTests/FlameSheet/drm19.yaml new file mode 100644 index 000000000..c013836b8 --- /dev/null +++ b/Exec/RegTests/FlameSheet/drm19.yaml @@ -0,0 +1,606 @@ +description: |- + <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><> OH + M # Reaction 1 + type: three-body + rate-constant: {A: 5.0e+17, b: -1.0, Ea: 0.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: O + H2 <=> H + OH # Reaction 2 + rate-constant: {A: 5.0e+04, b: 2.67, Ea: 6290.0} +- equation: O + HO2 <=> OH + O2 # Reaction 3 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 0.0} +- equation: O + CH2 <=> H + HCO # Reaction 4 + rate-constant: {A: 8.0e+13, b: 0.0, Ea: 0.0} +- equation: O + CH2(S) <=> H + HCO # Reaction 5 + rate-constant: {A: 1.5e+13, b: 0.0, Ea: 0.0} +- equation: O + CH3 <=> H + CH2O # Reaction 6 + rate-constant: {A: 8.43e+13, b: 0.0, Ea: 0.0} +- equation: O + CH4 <=> OH + CH3 # Reaction 7 + rate-constant: {A: 1.02e+09, b: 1.5, Ea: 8600.0} +- equation: O + CO + M <=> CO2 + M # Reaction 8 + type: three-body + rate-constant: {A: 6.02e+14, b: 0.0, Ea: 3000.0} + efficiencies: {H2: 2.0, O2: 6.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 3.5, + C2H6: 3.0, AR: 0.5} +- equation: O + HCO <=> OH + CO # Reaction 9 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: O + HCO <=> H + CO2 # Reaction 10 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: O + CH2O <=> OH + HCO # Reaction 11 + rate-constant: {A: 3.9e+13, b: 0.0, Ea: 3540.0} +- equation: O + C2H4 <=> CH3 + HCO # Reaction 12 + rate-constant: {A: 1.92e+07, b: 1.83, Ea: 220.0} +- equation: O + C2H5 <=> CH3 + CH2O # Reaction 13 + rate-constant: {A: 1.32e+14, b: 0.0, Ea: 0.0} +- equation: O + C2H6 <=> OH + C2H5 # Reaction 14 + rate-constant: {A: 8.98e+07, b: 1.92, Ea: 5690.0} +- equation: O2 + CO <=> O + CO2 # Reaction 15 + rate-constant: {A: 2.5e+12, b: 0.0, Ea: 4.78e+04} +- equation: O2 + CH2O <=> HO2 + HCO # Reaction 16 + rate-constant: {A: 1.0e+14, b: 0.0, Ea: 4.0e+04} +- equation: H + O2 + M <=> HO2 + M # Reaction 17 + type: three-body + rate-constant: {A: 2.8e+18, b: -0.86, Ea: 0.0} + efficiencies: {O2: 0.0, H2O: 0.0, CO: 0.75, CO2: 1.5, C2H6: 1.5, N2: 0.0, + AR: 0.0} +- equation: H + 2 O2 <=> HO2 + O2 # Reaction 18 + rate-constant: {A: 3.0e+20, b: -1.72, Ea: 0.0} +- equation: H + O2 + H2O <=> HO2 + H2O # Reaction 19 + rate-constant: {A: 9.38e+18, b: -0.76, Ea: 0.0} +- equation: H + O2 + N2 <=> HO2 + N2 # Reaction 20 + rate-constant: {A: 3.75e+20, b: -1.72, Ea: 0.0} +- equation: H + O2 + AR <=> HO2 + AR # Reaction 21 + rate-constant: {A: 7.0e+17, b: -0.8, Ea: 0.0} +- equation: H + O2 <=> O + OH # Reaction 22 + rate-constant: {A: 8.3e+13, b: 0.0, Ea: 1.4413e+04} +- equation: 2 H + M <=> H2 + M # Reaction 23 + type: three-body + rate-constant: {A: 1.0e+18, b: -1.0, Ea: 0.0} + efficiencies: {H2: 0.0, H2O: 0.0, CH4: 2.0, CO2: 0.0, C2H6: 3.0, AR: 0.63} +- equation: 2 H + H2 <=> 2 H2 # Reaction 24 + rate-constant: {A: 9.0e+16, b: -0.6, Ea: 0.0} +- equation: 2 H + H2O <=> H2 + H2O # Reaction 25 + rate-constant: {A: 6.0e+19, b: -1.25, Ea: 0.0} +- equation: 2 H + CO2 <=> H2 + CO2 # Reaction 26 + rate-constant: {A: 5.5e+20, b: -2.0, Ea: 0.0} +- equation: H + OH + M <=> H2O + M # Reaction 27 + type: three-body + rate-constant: {A: 2.2e+22, b: -2.0, Ea: 0.0} + efficiencies: {H2: 0.73, H2O: 3.65, CH4: 2.0, C2H6: 3.0, AR: 0.38} +- equation: H + HO2 <=> O2 + H2 # Reaction 28 + rate-constant: {A: 2.8e+13, b: 0.0, Ea: 1068.0} +- equation: H + HO2 <=> 2 OH # Reaction 29 + rate-constant: {A: 1.34e+14, b: 0.0, Ea: 635.0} +- equation: H + CH2 (+M) <=> CH3 (+M) # Reaction 30 + type: falloff + low-P-rate-constant: {A: 3.2e+27, b: -3.14, Ea: 1230.0} + high-P-rate-constant: {A: 2.5e+16, b: -0.8, Ea: 0.0} + Troe: {A: 0.68, T3: 78.0, T1: 1995.0, T2: 5590.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: H + CH3 (+M) <=> CH4 (+M) # Reaction 31 + type: falloff + low-P-rate-constant: {A: 2.477e+33, b: -4.76, Ea: 2440.0} + high-P-rate-constant: {A: 1.27e+16, b: -0.63, Ea: 383.0} + Troe: {A: 0.783, T3: 74.0, T1: 2941.0, T2: 6964.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: H + CH4 <=> CH3 + H2 # Reaction 32 + rate-constant: {A: 6.6e+08, b: 1.62, Ea: 1.084e+04} +- equation: H + HCO (+M) <=> CH2O (+M) # Reaction 33 + type: falloff + low-P-rate-constant: {A: 1.35e+24, b: -2.57, Ea: 1425.0} + high-P-rate-constant: {A: 1.09e+12, b: 0.48, Ea: -260.0} + Troe: {A: 0.7824, T3: 271.0, T1: 2755.0, T2: 6570.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: H + HCO <=> H2 + CO # Reaction 34 + rate-constant: {A: 7.34e+13, b: 0.0, Ea: 0.0} +- equation: H + CH2O (+M) <=> CH3O (+M) # Reaction 35 + type: falloff + low-P-rate-constant: {A: 2.2e+30, b: -4.8, Ea: 5560.0} + high-P-rate-constant: {A: 5.4e+11, b: 0.454, Ea: 2600.0} + Troe: {A: 0.758, T3: 94.0, T1: 1555.0, T2: 4200.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0} +- equation: H + CH2O <=> HCO + H2 # Reaction 36 + rate-constant: {A: 2.3e+10, b: 1.05, Ea: 3275.0} +- equation: H + CH3O <=> OH + CH3 # Reaction 37 + rate-constant: {A: 3.2e+13, b: 0.0, Ea: 0.0} +- equation: H + C2H4 (+M) <=> C2H5 (+M) # Reaction 38 + type: falloff + low-P-rate-constant: {A: 1.2e+42, b: -7.62, Ea: 6970.0} + high-P-rate-constant: {A: 1.08e+12, b: 0.454, Ea: 1820.0} + Troe: {A: 0.9753, T3: 210.0, T1: 984.0, T2: 4374.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: H + C2H5 (+M) <=> C2H6 (+M) # Reaction 39 + type: falloff + low-P-rate-constant: {A: 1.99e+41, b: -7.08, Ea: 6685.0} + high-P-rate-constant: {A: 5.21e+17, b: -0.99, Ea: 1580.0} + Troe: {A: 0.8422, T3: 125.0, T1: 2219.0, T2: 6882.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: H + C2H6 <=> C2H5 + H2 # Reaction 40 + rate-constant: {A: 1.15e+08, b: 1.9, Ea: 7530.0} +- equation: H2 + CO (+M) <=> CH2O (+M) # Reaction 41 + type: falloff + low-P-rate-constant: {A: 5.07e+27, b: -3.42, Ea: 8.435e+04} + high-P-rate-constant: {A: 4.3e+07, b: 1.5, Ea: 7.96e+04} + Troe: {A: 0.932, T3: 197.0, T1: 1540.0, T2: 1.03e+04} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: OH + H2 <=> H + H2O # Reaction 42 + rate-constant: {A: 2.16e+08, b: 1.51, Ea: 3430.0} +- equation: 2 OH <=> O + H2O # Reaction 43 + rate-constant: {A: 3.57e+04, b: 2.4, Ea: -2110.0} +- equation: OH + HO2 <=> O2 + H2O # Reaction 44 + rate-constant: {A: 2.9e+13, b: 0.0, Ea: -500.0} +- equation: OH + CH2 <=> H + CH2O # Reaction 45 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 0.0} +- equation: OH + CH2(S) <=> H + CH2O # Reaction 46 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: OH + CH3 <=> CH2 + H2O # Reaction 47 + rate-constant: {A: 5.6e+07, b: 1.6, Ea: 5420.0} +- equation: OH + CH3 <=> CH2(S) + H2O # Reaction 48 + rate-constant: {A: 2.501e+13, b: 0.0, Ea: 0.0} +- equation: OH + CH4 <=> CH3 + H2O # Reaction 49 + rate-constant: {A: 1.0e+08, b: 1.6, Ea: 3120.0} +- equation: OH + CO <=> H + CO2 # Reaction 50 + rate-constant: {A: 4.76e+07, b: 1.228, Ea: 70.0} +- equation: OH + HCO <=> H2O + CO # Reaction 51 + rate-constant: {A: 5.0e+13, b: 0.0, Ea: 0.0} +- equation: OH + CH2O <=> HCO + H2O # Reaction 52 + rate-constant: {A: 3.43e+09, b: 1.18, Ea: -447.0} +- equation: OH + C2H6 <=> C2H5 + H2O # Reaction 53 + rate-constant: {A: 3.54e+06, b: 2.12, Ea: 870.0} +- equation: HO2 + CH2 <=> OH + CH2O # Reaction 54 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 0.0} +- equation: HO2 + CH3 <=> O2 + CH4 # Reaction 55 + rate-constant: {A: 1.0e+12, b: 0.0, Ea: 0.0} +- equation: HO2 + CH3 <=> OH + CH3O # Reaction 56 + rate-constant: {A: 2.0e+13, b: 0.0, Ea: 0.0} +- equation: HO2 + CO <=> OH + CO2 # Reaction 57 + rate-constant: {A: 1.5e+14, b: 0.0, Ea: 2.36e+04} +- equation: CH2 + O2 <=> OH + HCO # Reaction 58 + rate-constant: {A: 1.32e+13, b: 0.0, Ea: 1500.0} +- equation: CH2 + H2 <=> H + CH3 # Reaction 59 + rate-constant: {A: 5.0e+05, b: 2.0, Ea: 7230.0} +- equation: CH2 + CH3 <=> H + C2H4 # Reaction 60 + rate-constant: {A: 4.0e+13, b: 0.0, Ea: 0.0} +- equation: CH2 + CH4 <=> 2 CH3 # Reaction 61 + rate-constant: {A: 2.46e+06, b: 2.0, Ea: 8270.0} +- equation: CH2(S) + N2 <=> CH2 + N2 # Reaction 62 + rate-constant: {A: 1.5e+13, b: 0.0, Ea: 600.0} +- equation: CH2(S) + AR <=> CH2 + AR # Reaction 63 + rate-constant: {A: 9.0e+12, b: 0.0, Ea: 600.0} +- equation: CH2(S) + O2 <=> H + OH + CO # Reaction 64 + rate-constant: {A: 2.8e+13, b: 0.0, Ea: 0.0} +- equation: CH2(S) + O2 <=> CO + H2O # Reaction 65 + rate-constant: {A: 1.2e+13, b: 0.0, Ea: 0.0} +- equation: CH2(S) + H2 <=> CH3 + H # Reaction 66 + rate-constant: {A: 7.0e+13, b: 0.0, Ea: 0.0} +- equation: CH2(S) + H2O <=> CH2 + H2O # Reaction 67 + rate-constant: {A: 3.0e+13, b: 0.0, Ea: 0.0} +- equation: CH2(S) + CH3 <=> H + C2H4 # Reaction 68 + rate-constant: {A: 1.2e+13, b: 0.0, Ea: -570.0} +- equation: CH2(S) + CH4 <=> 2 CH3 # Reaction 69 + rate-constant: {A: 1.6e+13, b: 0.0, Ea: -570.0} +- equation: CH2(S) + CO <=> CH2 + CO # Reaction 70 + rate-constant: {A: 9.0e+12, b: 0.0, Ea: 0.0} +- equation: CH2(S) + CO2 <=> CH2 + CO2 # Reaction 71 + rate-constant: {A: 7.0e+12, b: 0.0, Ea: 0.0} +- equation: CH2(S) + CO2 <=> CO + CH2O # Reaction 72 + rate-constant: {A: 1.4e+13, b: 0.0, Ea: 0.0} +- equation: CH3 + O2 <=> O + CH3O # Reaction 73 + rate-constant: {A: 2.675e+13, b: 0.0, Ea: 2.88e+04} +- equation: CH3 + O2 <=> OH + CH2O # Reaction 74 + rate-constant: {A: 3.6e+10, b: 0.0, Ea: 8940.0} +- equation: 2 CH3 (+M) <=> C2H6 (+M) # Reaction 75 + type: falloff + low-P-rate-constant: {A: 1.77e+50, b: -9.67, Ea: 6220.0} + high-P-rate-constant: {A: 2.12e+16, b: -0.97, Ea: 620.0} + Troe: {A: 0.5325, T3: 151.0, T1: 1038.0, T2: 4970.0} + efficiencies: {H2: 2.0, H2O: 6.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0, + AR: 0.7} +- equation: 2 CH3 <=> H + C2H5 # Reaction 76 + rate-constant: {A: 4.99e+12, b: 0.1, Ea: 1.06e+04} +- equation: CH3 + HCO <=> CH4 + CO # Reaction 77 + rate-constant: {A: 2.648e+13, b: 0.0, Ea: 0.0} +- equation: CH3 + CH2O <=> HCO + CH4 # Reaction 78 + rate-constant: {A: 3320.0, b: 2.81, Ea: 5860.0} +- equation: CH3 + C2H6 <=> C2H5 + CH4 # Reaction 79 + rate-constant: {A: 6.14e+06, b: 1.74, Ea: 1.045e+04} +- equation: HCO + H2O <=> H + CO + H2O # Reaction 80 + rate-constant: {A: 2.244e+18, b: -1.0, Ea: 1.7e+04} +- equation: HCO + M <=> H + CO + M # Reaction 81 + type: three-body + rate-constant: {A: 1.87e+17, b: -1.0, Ea: 1.7e+04} + efficiencies: {H2: 2.0, H2O: 0.0, CH4: 2.0, CO: 1.5, CO2: 2.0, C2H6: 3.0} +- equation: HCO + O2 <=> HO2 + CO # Reaction 82 + rate-constant: {A: 7.6e+12, b: 0.0, Ea: 400.0} +- equation: CH3O + O2 <=> HO2 + CH2O # Reaction 83 + rate-constant: {A: 4.28e-13, b: 7.6, Ea: -3530.0} +- equation: C2H5 + O2 <=> HO2 + C2H4 # Reaction 84 + rate-constant: {A: 8.4e+11, b: 0.0, Ea: 3875.0} diff --git a/Exec/RegTests/FlameSheet/get_pmfdat_and_ctable.py b/Exec/RegTests/FlameSheet/get_pmfdat_and_ctable.py new file mode 100644 index 000000000..5b8cb3fa5 --- /dev/null +++ b/Exec/RegTests/FlameSheet/get_pmfdat_and_ctable.py @@ -0,0 +1,180 @@ +import cantera as ct +import numpy as np +import pandas as pd +from collections import OrderedDict, defaultdict +import ctable_tools as ctable + +# Thermo Conditions +press = ct.one_atm +temp = 298.0 +phi = 1.0 +fuel = 'CH4' +oxid = 'O2:1.0, N2:3.76' +mechanism = 'drm19.yaml' +trans = 'Mix' +progvars = ["CO2","H2O","CO","H2"] +ctable_specs = ["CO2","H2O","CO","H2","N2","O2","OH"] +outfile_prefix = 'prem_drm19_phi1_p1_t298' +# net_info_file = None +net_info_file = "cmlm_net_info.txt" + +def load_info_file(filename): + """Load neural net info file.""" + + with open(filename, 'r') as file: + umap = defaultdict(list) + line_cont = False + for line in file: + try: + com_idx = line.index("#") + except: + com_idx = None + if com_idx is not None: + line = line[:com_idx].strip() + if (not line): continue + if not line_cont: + varname, value = line.split(' = ') + else: + value = line + umap[varname.strip()] += value.strip().rstrip("\\").split() + line_cont = line.strip().endswith("\\") + + dimnames = umap["dimnames"] + defn0 = "def_" + dimnames[0] + coeff = np.zeros((len(dimnames), len(umap[defn0])), dtype=np.float32) + varidx = np.zeros((len(dimnames), len(umap[defn0])), dtype=np.int32) + srcidx = np.zeros((len(dimnames), len(umap[defn0])), dtype=np.int32) + combmap = dict() + + for i in range(len(dimnames)): + defn = "def_" + dimnames[i] + for j, item in enumerate(umap[defn]): + + c, v = item.split("*") + c = c.strip() + v = v.strip() + + coeff[i,j] = float(c) + varidx[i,j] = umap["varnames"].index(v) + combmap[v] = j + + if v.startswith("Y-"): + v = v[2:] + try: + idx = umap["varnames"].index("SRC_" + v) + except ValueError: + idx = -1 + srcidx[i,j] = idx + + manibiases = np.fromiter(map(float, umap["manibiases"]), dtype=np.float32) + return umap, coeff, varidx, srcidx, manibiases, combmap + +# Read info file if one is provided +if net_info_file is not None: + umap, coeff, varidx, srcidx, manibiases, combmap = load_info_file(net_info_file) +else: + coeff, varidx, srcidx, manibiases, combmap = (None,)*5 + umap = defaultdict(list) + +# Flame Numerics +width = 0.1 +loglevel = 1 +ratio = 2 +slope = 0.05 +curve = 0.05 +prune = 0.02 +max_points = 10000 + +# Set up the flame +gas = ct.Solution(mechanism) +gas.set_equivalence_ratio(phi, fuel, oxid) +gas.TP = temp, press +flame = ct.FreeFlame(gas, width=width) +flame.set_refine_criteria(ratio=ratio, slope=slope, curve=curve, prune=prune) +flame.set_max_grid_points(1,max_points) +flame.transport_model = trans + +# Solve Flame +flame.solve() + +# Get all desired data +data = pd.DataFrame() +data["X"] = flame.grid +data["T"] = flame.T +data["VEL"] = flame.velocity +data["RHO"] = flame.density_mass +data["DIFF"] = flame.thermal_conductivity / flame.cp_mass +data["VISC"] = flame.viscosity + +specXdata = pd.DataFrame(flame.X.T, + columns=gas.species_names) +specYdata = pd.DataFrame(flame.Y.T, + columns=gas.species_names) + +rxnrates = flame.net_production_rates.T * list(gas.molecular_weights) +specRRdata = pd.DataFrame(rxnrates,columns=gas.species_names) + +# Compute prgress variable and its source +# ensure prog is monotonic +# source term 0 at min and max to ensure boundedness +data["PROG"] = specYdata[progvars].sum(axis=1) +prog = np.array(data["PROG"]) +mono = np.min((prog[1:] - prog[:-1]) >= 0) +if not mono: print("WARNING: Nonmonotonic progress variable") +data["SRC_PROG"] = specRRdata[progvars].sum(axis=1) +data.loc[0,"SRC_PROG"] = 0.0 +data.loc[len(flame.grid)-1,"SRC_PROG"] = 0.0 + +# Compute manifold variable(s) for net +for i, dim in enumerate(umap["dimnames"]): + data[dim] = 0.0 + for k in combmap: + if k.startswith('Y-'): + k_slc = k[2:] + else: + k_slc = k + data[dim] += coeff[i, combmap[k]] * specYdata[k_slc] + +# Convert to CGS units +ctable.convert_chemtable_units(data) + +# Make the chemtable +chemtable = data.drop(columns=(["VEL","X","PROG"]+umap["dimnames"])) +for spec in ctable_specs: + chemtable["Y-"+spec] = specYdata[spec] +chemtable = pd.DataFrame(chemtable.values, + columns = chemtable.columns, + index = pd.MultiIndex.from_product([data["PROG"]],names=['PROG'])) +ctable.write_chemtable_binary(outfile_prefix+'.ctb', chemtable, "1DFGM") +ctable.print_chemtable(chemtable) +#print(chemtable) + +chemtable.drop(columns=["SRC_PROG"], inplace=True) +ctable.write_chemtable_binary(outfile_prefix+'_norxn.ctb', chemtable, "1DFGM") +ctable.print_chemtable(chemtable) + +# Make the PMF dat files: Detailed Chem and Manifold +def write_dat_file(fname, df): + with open(fname,'w') as fi: + line1 = "".join(["VARIABLES ="] + + [' "{}"'.format(var.split(' ')[0]) for var in df.columns[:4]] + + [' "{}"'.format(var.upper()) for var in df.columns[4:]]) + fi.write(line1+'\n') + line2 = " ZONE I={} FORMAT=POINT\n".format(df.shape[1]) + fi.write(line2) + print('Reformated file has these variables:') + print(line1) + for idex, row in df.iterrows(): + linen = "".join(['{:<26.15g}'.format(x) for x in row])+'\n' + fi.write(linen) + +rename = {'VEL':'u', 'T':'temp','RHO':'rho'} +keepvars = ["X","T","VEL","RHO"] +df = data[keepvars].rename(columns=rename) +df2 = pd.DataFrame(data[["PROG","RHO"]].values, columns=['X0','XRHO']) +df3 = pd.DataFrame(data[umap["dimnames"]+["RHO"]].values, + columns=([f"X{i}" for i in range(len(umap["dimnames"]))]+['XRHO'])) + +write_dat_file(outfile_prefix+'.dat', pd.concat([df,specXdata],axis=1)) +write_dat_file(outfile_prefix+'_mani.dat', pd.concat([df,df2],axis=1)) +write_dat_file(outfile_prefix+'_mani_nn.dat', pd.concat([df,df3],axis=1)) diff --git a/Exec/RegTests/FlameSheet/input.drm19 b/Exec/RegTests/FlameSheet/input.drm19 new file mode 100644 index 000000000..4a67b41c6 --- /dev/null +++ b/Exec/RegTests/FlameSheet/input.drm19 @@ -0,0 +1,103 @@ +#----------------------DOMAIN DEFINITION------------------------ +geometry.is_periodic = 1 0 # For each dir, 0: non-perio, 1: periodic +geometry.coord_sys = 0 # 0 => cart, 1 => RZ +geometry.prob_lo = 0.0 0.0 0.0 # x_lo y_lo (z_lo) +geometry.prob_hi = 0.003 0.012 0.016 # x_hi y_hi (z_hi) + +# >>>>>>>>>>>>> BC FLAGS <<<<<<<<<<<<<<<< +# Interior, Inflow, Outflow, Symmetry, +# SlipWallAdiab, NoSlipWallAdiab, SlipWallIsotherm, NoSlipWallIsotherm +peleLM.lo_bc = Interior Inflow +peleLM.hi_bc = Interior Outflow + + +#-------------------------AMR CONTROL---------------------------- +amr.n_cell = 32 128 32 # Level 0 number of cells in each direction +amr.v = 1 # AMR verbose +amr.max_level = 2 # maximum level number allowed +amr.ref_ratio = 2 2 2 2 # refinement ratio +amr.regrid_int = 5 # how often to regrid +amr.n_error_buf = 1 1 2 2 # number of buffer cells in error est +amr.grid_eff = 0.7 # what constitutes an efficient grid +amr.blocking_factor = 16 # block factor in grid generation (min box size) +amr.max_grid_size = 64 # max box size + + +#--------------------------- Problem ------------------------------- +prob.P_mean = 101325.0 +prob.standoff = -.03 +prob.pertmag = 0.00005 +pmf.datafile = "prem_drm19_phi1_p1_t298.dat" + +#-------------------------PeleLM CONTROL---------------------------- +peleLM.v = 3 +peleLM.incompressible = 0 +peleLM.rho = 1.17 +peleLM.mu = 0.0 +peleLM.sdc_iterMax = 2 +peleLM.floor_species = 0 + +peleLM.do_temporals = 1 +peleLM.temporal_int = 2 +peleLM.mass_balance = 1 + +#amr.restart = chk00005 +#amr.check_int = 20 +amr.plot_int = 100 +amr.max_step = 20000 +amr.dt_shrink = 0.01 +amr.stop_time = 0.01 +#amr.stop_time = 1.00 +amr.cfl = 0.5 +amr.derive_plot_vars = avg_pressure mag_vort mass_fractions # mixture_fraction progress_variable + +# ------------------- INPUTS DERIVED DIAGS ------------------ +peleLM.fuel_name = CH4 +#peleLM.mixtureFraction.format = Cantera +#peleLM.mixtureFraction.type = mass +#peleLM.mixtureFraction.oxidTank = O2:0.233 N2:0.767 +#peleLM.mixtureFraction.fuelTank = H2:0.5 CH4:0.5 +#peleLM.progressVariable.format = Cantera +#peleLM.progressVariable.weights = CO:1.0 CO2:1.0 +#peleLM.progressVariable.coldState = CO:0.0 CO2:0.0 +#peleLM.progressVariable.hotState = CO:0.000002 CO2:0.0666 + +# --------------- INPUTS TO CHEMISTRY REACTOR --------------- +peleLM.chem_integrator = "ReactorCvode" +peleLM.use_typ_vals_chem = 1 # Use species/temp typical values in CVODE +ode.rtol = 1.0e-6 # Relative tolerance of the chemical solve +ode.atol = 1.0e-5 # Absolute tolerance factor applied on typical values +cvode.solve_type = denseAJ_direct # CVODE Linear solve type (for Newton direction) +cvode.max_order = 4 # CVODE max BDF order. + +mac_proj.verbose = 2 +nodal_proj.verbose = 2 + +#--------------------REFINEMENT CONTROL------------------------ +amr.refinement_indicators = temp +amr.temp.max_level = 3 +amr.temp.adjacent_difference_greater = 10 +amr.temp.field_name = temp + +#amr.refinement_indicators = magVort +#amr.magVort.max_level = 1 +#amr.magVort.value_greater = 500.0 +#amr.magVort.field_name = mag_vort + +#amr.refinement_indicators = yH +#amr.yH.max_level = 3 +#amr.yH.value_greater = 1.0e-6 +#amr.yH.field_name = Y(H) + +#amrex.fpe_trap_invalid = 1 +#amrex.fpe_trap_zero = 1 +#amrex.fpe_trap_overflow = 1 + +#----------------------- Manifold Stuff ---------------------------- +#manifold.model = Table +#manifold.v = 1 +#manifold.filename = prem_drm19_phi1_p1_t298.ctb +#eos.nominal_pressure_cgs = 1013250.0 +#peleLM.use_wbar = 0 +#peleLM.chi_correction_type = "DivuFirstIter" +#peleLM.chi_correction_type = "NoDivu" \ No newline at end of file diff --git a/Exec/RegTests/FlameSheet/input.manifold b/Exec/RegTests/FlameSheet/input.manifold new file mode 100644 index 000000000..250a82b36 --- /dev/null +++ b/Exec/RegTests/FlameSheet/input.manifold @@ -0,0 +1,103 @@ +#----------------------DOMAIN DEFINITION------------------------ +geometry.is_periodic = 1 0 # For each dir, 0: non-perio, 1: periodic +geometry.coord_sys = 0 # 0 => cart, 1 => RZ +geometry.prob_lo = 0.0 0.0 0.0 # x_lo y_lo (z_lo) +geometry.prob_hi = 0.003 0.012 0.016 # x_hi y_hi (z_hi) + +# >>>>>>>>>>>>> BC FLAGS <<<<<<<<<<<<<<<< +# Interior, Inflow, Outflow, Symmetry, +# SlipWallAdiab, NoSlipWallAdiab, SlipWallIsotherm, NoSlipWallIsotherm +peleLM.lo_bc = Interior Inflow +peleLM.hi_bc = Interior Outflow + + +#-------------------------AMR CONTROL---------------------------- +amr.n_cell = 32 128 32 # Level 0 number of cells in each direction +amr.v = 1 # AMR verbose +amr.max_level = 2 # maximum level number allowed +amr.ref_ratio = 2 2 2 2 # refinement ratio +amr.regrid_int = 5 # how often to regrid +amr.n_error_buf = 1 1 2 2 # number of buffer cells in error est +amr.grid_eff = 0.7 # what constitutes an efficient grid +amr.blocking_factor = 16 # block factor in grid generation (min box size) +amr.max_grid_size = 64 # max box size + + +#--------------------------- Problem ------------------------------- +prob.P_mean = 101325.0 +prob.standoff = -.03 +prob.pertmag = 0.00005 +pmf.datafile = "prem_drm19_phi1_p1_t298_mani.dat" + +#-------------------------PeleLM CONTROL---------------------------- +peleLM.v = 3 +peleLM.incompressible = 0 +peleLM.rho = 1.17 +peleLM.mu = 0.0 +peleLM.sdc_iterMax = 4 +peleLM.floor_species = 0 + +peleLM.do_temporals = 1 +peleLM.temporal_int = 2 +peleLM.mass_balance = 1 + +#amr.restart = chk00005 +#amr.check_int = 20 +amr.plot_int = 100 +amr.max_step = 20202 +amr.dt_shrink = 0.01 +amr.stop_time = 0.01 +#amr.stop_time = 1.00 +amr.cfl = 0.5 +amr.derive_plot_vars = avg_pressure mag_vort mass_fractions # mixture_fraction progress_variable + +# ------------------- INPUTS DERIVED DIAGS ------------------ +peleLM.fuel_name = CH4 +#peleLM.mixtureFraction.format = Cantera +#peleLM.mixtureFraction.type = mass +#peleLM.mixtureFraction.oxidTank = O2:0.233 N2:0.767 +#peleLM.mixtureFraction.fuelTank = H2:0.5 CH4:0.5 +#peleLM.progressVariable.format = Cantera +#peleLM.progressVariable.weights = CO:1.0 CO2:1.0 +#peleLM.progressVariable.coldState = CO:0.0 CO2:0.0 +#peleLM.progressVariable.hotState = CO:0.000002 CO2:0.0666 + +# --------------- INPUTS TO CHEMISTRY REACTOR --------------- +peleLM.chem_integrator = "ReactorRK64" +peleLM.use_typ_vals_chem = 1 # Use species/temp typical values in CVODE +ode.rtol = 1.0e-6 # Relative tolerance of the chemical solve +ode.atol = 1.0e-5 # Absolute tolerance factor applied on typical values +cvode.solve_type = denseAJ_direct # CVODE Linear solve type (for Newton direction) +cvode.max_order = 4 # CVODE max BDF order. + +mac_proj.verbose = 2 +nodal_proj.verbose = 2 + +#--------------------REFINEMENT CONTROL------------------------ +amr.refinement_indicators = temp +amr.temp.max_level = 3 +amr.temp.adjacent_difference_greater = 10 +amr.temp.field_name = temp + +#amr.refinement_indicators = magVort +#amr.magVort.max_level = 1 +#amr.magVort.value_greater = 500.0 +#amr.magVort.field_name = mag_vort + +#amr.refinement_indicators = yH +#amr.yH.max_level = 3 +#amr.yH.value_greater = 1.0e-6 +#amr.yH.field_name = Y(H) + +#amrex.fpe_trap_invalid = 1 +#amrex.fpe_trap_zero = 1 +#amrex.fpe_trap_overflow = 1 + +#----------------------- Manifold Stuff ---------------------------- +manifold.model = Table +manifold.v = 1 +manifold.filename = prem_drm19_phi1_p1_t298.ctb +eos.nominal_pressure_cgs = 1013250.0 +peleLM.use_wbar = 0 +peleLM.chi_correction_type = "DivuFirstIter" +#peleLM.chi_correction_type = "NoDivu" diff --git a/Exec/RegTests/FlameSheet/input.nn b/Exec/RegTests/FlameSheet/input.nn new file mode 100644 index 000000000..57c1ca117 --- /dev/null +++ b/Exec/RegTests/FlameSheet/input.nn @@ -0,0 +1,114 @@ +#----------------------DOMAIN DEFINITION------------------------ +geometry.is_periodic = 1 0 # For each dir, 0: non-perio, 1: periodic +geometry.coord_sys = 0 # 0 => cart, 1 => RZ +geometry.prob_lo = 0.0 0.0 0.0 # x_lo y_lo (z_lo) +geometry.prob_hi = 0.003 0.012 0.016 # x_hi y_hi (z_hi) + +# >>>>>>>>>>>>> BC FLAGS <<<<<<<<<<<<<<<< +# Interior, Inflow, Outflow, Symmetry, +# SlipWallAdiab, NoSlipWallAdiab, SlipWallIsotherm, NoSlipWallIsotherm +peleLM.lo_bc = Interior Inflow +peleLM.hi_bc = Interior Outflow + + +#-------------------------AMR CONTROL---------------------------- +amr.n_cell = 32 128 32 # Level 0 number of cells in each direction +amr.v = 1 # AMR verbose +amr.max_level = 2 # maximum level number allowed +amr.ref_ratio = 2 2 2 2 # refinement ratio +amr.regrid_int = 5 # how often to regrid +amr.n_error_buf = 1 1 2 2 # number of buffer cells in error est +amr.grid_eff = 0.7 # what constitutes an efficient grid +amr.blocking_factor = 16 # block factor in grid generation (min box size) +amr.max_grid_size = 64 # max box size + + +#--------------------------- Problem ------------------------------- +prob.P_mean = 101325.0 +prob.standoff = -.03 +prob.pertmag = 0.00005 +pmf.datafile = "prem_drm19_phi1_p1_t298_mani_nn.dat" + +#-------------------------PeleLM CONTROL---------------------------- +peleLM.v = 3 +peleLM.incompressible = 0 +peleLM.rho = 1.17 +peleLM.mu = 0.0 +peleLM.sdc_iterMax = 4 +peleLM.floor_species = 0 + +peleLM.do_temporals = 1 +peleLM.temporal_int = 2 +peleLM.mass_balance = 1 + +#amr.restart = chk00005 +#amr.check_int = 20 +amr.plot_int = 10 +amr.max_step = 20000 +amr.dt_shrink = 0.01 +amr.stop_time = 0.01 +#amr.stop_time = 1.00 +amr.cfl = 0.5 +amr.derive_plot_vars = avg_pressure mag_vort mass_fractions # mixture_fraction progress_variable + +# ------------------- INPUTS DERIVED DIAGS ------------------ +peleLM.fuel_name = CH4 +#peleLM.mixtureFraction.format = Cantera +#peleLM.mixtureFraction.type = mass +#peleLM.mixtureFraction.oxidTank = O2:0.233 N2:0.767 +#peleLM.mixtureFraction.fuelTank = H2:0.5 CH4:0.5 +#peleLM.progressVariable.format = Cantera +#peleLM.progressVariable.weights = CO:1.0 CO2:1.0 +#peleLM.progressVariable.coldState = CO:0.0 CO2:0.0 +#peleLM.progressVariable.hotState = CO:0.000002 CO2:0.0666 + +# --------------- INPUTS TO CHEMISTRY REACTOR --------------- +peleLM.chem_integrator = "ReactorRK64" +peleLM.use_typ_vals_chem = 1 # Use species/temp typical values in CVODE +ode.rtol = 1.0e-6 # Relative tolerance of the chemical solve +ode.atol = 1.0e-5 # Absolute tolerance factor applied on typical values +ode.rk64_nsubsteps_guess = 1 +ode.rk64_nsubsteps_min = 1 +cvode.solve_type = denseAJ_direct # CVODE Linear solve type (for Newton direction) +cvode.max_order = 4 # CVODE max BDF order. + +mac_proj.verbose = 2 +mac_proj.rtol = 1e-8 +mac_proj.atol = 1e-8 +nodal_proj.verbose = 2 +nodal_proj.rtol = 1e-8 +nodal_proj.atol = 1e-8 +diffusion.rtol = 1e-8 +diffusion.atol = 1e-8 +tensor_diffusion.rtol = 1e-8 +tensor_diffusion.atol = 1e-8 + +#--------------------REFINEMENT CONTROL------------------------ +amr.refinement_indicators = temp +amr.temp.max_level = 3 +amr.temp.adjacent_difference_greater = 10 +amr.temp.field_name = temp + +#amr.refinement_indicators = magVort +#amr.magVort.max_level = 1 +#amr.magVort.value_greater = 500.0 +#amr.magVort.field_name = mag_vort + +#amr.refinement_indicators = yH +#amr.yH.max_level = 3 +#amr.yH.value_greater = 1.0e-6 +#amr.yH.field_name = Y(H) + +#amrex.fpe_trap_invalid = 1 +#amrex.fpe_trap_zero = 1 +#amrex.fpe_trap_overflow = 1 + +#----------------------- Manifold Stuff ---------------------------- +manifold.model = NeuralNet +manifold.v = 1 +manifold.filename = cmlm_net.pt +manifold.info_filename = cmlm_net_info.txt +eos.nominal_pressure_cgs = 1013250.0 +peleLM.use_wbar = 0 +peleLM.chi_correction_type = "DivuFirstIter" +#peleLM.chi_correction_type = "NoDivu" diff --git a/Exec/RegTests/FlameSheet/pelelm_prob.H b/Exec/RegTests/FlameSheet/pelelm_prob.H index 6bf71d29d..f522aed61 100644 --- a/Exec/RegTests/FlameSheet/pelelm_prob.H +++ b/Exec/RegTests/FlameSheet/pelelm_prob.H @@ -19,7 +19,8 @@ void pelelm_initdata(int i, int j, int k, amrex::Array4 const& /*aux*/, amrex::GeometryData const& geomdata, ProbParm const& prob_parm, - pele::physics::PMF::PmfData::DataContainer const * pmf_data) + pele::physics::PMF::PmfData::DataContainer const * pmf_data, + const pele::physics::eos::EosParm* eosparm) { const amrex::Real* prob_lo = geomdata.ProbLo(); const amrex::Real* prob_hi = geomdata.ProbHi(); @@ -35,17 +36,17 @@ void pelelm_initdata(int i, int j, int k, constexpr amrex::Real Pi = 3.14159265358979323846264338327950288; - auto eos = pele::physics::PhysicsType::eos(); + auto eos = pele::physics::PhysicsType::eos(eosparm); amrex::GpuArray pmf_vals = {0.0}; amrex::Real molefrac[NUM_SPECIES] = {0.0}; amrex::Real massfrac[NUM_SPECIES] = {0.0}; amrex::Real pert = 0.0; - if (prob_parm.pertmag > 0.0) + if (prob_parm.pertmag > 0.0) { #if ( AMREX_SPACEDIM == 2 ) - pert = prob_parm.pertmag * + pert = prob_parm.pertmag * (1.0 * std::sin(2 * Pi * 4 * x / Lx) + 1.023 * std::sin(2 * Pi * 2 * (x - 0.004598) / Lx) + 0.945 * std::sin(2 * Pi * 3 * (x - 0.00712435) / Lx) + @@ -73,12 +74,35 @@ void pelelm_initdata(int i, int j, int k, amrex::Real y1 = (z - prob_parm.standoff - 0.5*dx[2] + pert)*100; amrex::Real y2 = (z - prob_parm.standoff + 0.5*dx[2] + pert)*100; #endif + pele::physics::PMF::pmf(pmf_data,y1, y2, pmf_vals); + state(i,j,k,TEMP) = pmf_vals[0]; +#ifdef USE_MANIFOLD_EOS +// Setup for manifold EOS + for (int n = 0; n < NUM_SPECIES-1; n++){ + massfrac[n] = pmf_vals[3 + n]; + } - pele::physics::PMF::pmf(pmf_data,y1, y2, pmf_vals); + state(i,j,k,VELX) = 0; +#if ( AMREX_SPACEDIM == 2 ) + state(i,j,k,VELY) = pmf_vals[1]*1e-2; +#elif ( AMREX_SPACEDIM == 3 ) + state(i,j,k,VELY) = 0; + state(i,j,k,VELZ) = pmf_vals[1]*1e-2; +#endif - state(i,j,k,TEMP) = pmf_vals[0];; + amrex::Real rho_temp, tmp1, tmp2; + eos.PYT2R(tmp1, massfrac, tmp2, rho_temp); + rho_temp *= 1.0e3; // CGS -> MKS conversion + state(i,j,k,DENSITY) = rho_temp; + state(i,j,k,RHOH) = 0.0; // No RhoH transport in manifold model + for (int n = 0; n < NUM_SPECIES-1; n++) { + state(i,j,k,FIRSTSPEC+n) = massfrac[n] * rho_temp; + } + state(i,j,k,FIRSTSPEC+NUM_SPECIES-1) = rho_temp; +#else +// setup for detailed chem for (int n = 0; n < NUM_SPECIES; n++){ molefrac[n] = pmf_vals[3 + n]; } @@ -108,6 +132,7 @@ void pelelm_initdata(int i, int j, int k, for (int n = 0; n < NUM_SPECIES; n++) { state(i,j,k,FIRSTSPEC+n) = massfrac[n] * state(i,j,k,DENSITY); } +#endif } AMREX_GPU_DEVICE @@ -122,14 +147,15 @@ bcnormal( const amrex::Real /*time*/, amrex::GeometryData const& geomdata, ProbParm const& prob_parm, - pele::physics::PMF::PmfData::DataContainer const *pmf_data) + pele::physics::PMF::PmfData::DataContainer const *pmf_data, + const pele::physics::eos::EosParm* eosparm) { const amrex::Real* prob_lo = geomdata.ProbLo(); amrex::GpuArray pmf_vals = {0.0}; amrex::Real molefrac[NUM_SPECIES] = {0.0}; amrex::Real massfrac[NUM_SPECIES] = {0.0}; - auto eos = pele::physics::PhysicsType::eos(); + auto eos = pele::physics::PhysicsType::eos(eosparm); if (sgn == 1) { pele::physics::PMF::pmf(pmf_data,prob_lo[idir], prob_lo[idir], pmf_vals); @@ -142,6 +168,8 @@ bcnormal( #endif s_ext[TEMP] = pmf_vals[0]; + +#ifndef USE_MANIFOLD_EOS for (int n = 0; n < NUM_SPECIES; n++){ molefrac[n] = pmf_vals[3 + n]; } @@ -159,6 +187,19 @@ bcnormal( for (int n = 0; n < NUM_SPECIES; n++) { s_ext[FIRSTSPEC+n] = massfrac[n] * s_ext[DENSITY]; } +#else + for (int n = 0; n < NUM_SPECIES; n++){ + massfrac[n] = pmf_vals[3 + n]; + } + amrex::Real P_dummy, rho_cgs; + eos.PYT2R(P_dummy, massfrac, s_ext[TEMP], rho_cgs); + s_ext[DENSITY] = rho_cgs *1.0e3; + s_ext[RHOH] = 0.0; + for (int n = 0; n < NUM_SPECIES-1; n++) { + s_ext[FIRSTSPEC+n] = massfrac[n] * s_ext[DENSITY]; + } + s_ext[FIRSTSPEC+NUM_SPECIES-1] = s_ext[DENSITY]; +#endif } } diff --git a/Source/PeleLM.H b/Source/PeleLM.H index 041928c05..29a70e3cb 100644 --- a/Source/PeleLM.H +++ b/Source/PeleLM.H @@ -66,17 +66,17 @@ class PeleLM : public amrex::AmrCore { amrex::Real time, bool initial = false) override; - virtual void MakeNewLevelFromScratch( int lev, + virtual void MakeNewLevelFromScratch( int lev, amrex::Real time, const amrex::BoxArray& ba, const amrex::DistributionMapping& dm) override; - virtual void ErrorEst( int lev, + virtual void ErrorEst( int lev, amrex::TagBoxArray& tags, amrex::Real time, int ng) override; - virtual void MakeNewLevelFromCoarse( int lev, + virtual void MakeNewLevelFromCoarse( int lev, amrex::Real time, const amrex::BoxArray& ba, const amrex::DistributionMapping& dm) override; @@ -145,7 +145,7 @@ class PeleLM : public amrex::AmrCore { LevelData (amrex::BoxArray const& ba, amrex::DistributionMapping const& dm, amrex::FabFactory const& factory, - int a_incompressible, int a_has_divu, + int a_incompressible, int a_has_divu, int a_nAux, int a_nGrowState); // cell-centered state multifabs @@ -270,7 +270,7 @@ class PeleLM : public amrex::AmrCore { // MAC PROJECTION void resetMacProjector(); - + // Predict face velocity using Godunov void predictVelocity(std::unique_ptr &advData); @@ -307,7 +307,7 @@ class PeleLM : public amrex::AmrCore { // compute cell-centered diffusivity (stored in LevelData) void calcViscosity(const PeleLM::TimeStamp &a_time); void calcDiffusivity(const PeleLM::TimeStamp &a_time); - + // get edge-centered diffusivity on a per level / per comp basis amrex::Array getDiffusivity(int lev, int beta_comp, int ncomp, int doZeroVisc, @@ -326,19 +326,20 @@ class PeleLM : public amrex::AmrCore { // add wbar term to the species fluxes void addWbarTerm(const amrex::Vector> &a_fluxes, - const amrex::Vector> &a_wbarfluxes, + const amrex::Vector> &a_wbarfluxes, amrex::Vector const &a_spec, amrex::Vector const &a_rho, amrex::Vector const &a_beta); - // Ensure sum of specues diffusion fluxes sum to 0 + // Ensure species diffusion fluxes sum to 0 + template void adjustSpeciesFluxes(const amrex::Vector> &a_fluxes, amrex::Vector const &a_spec); // Compute enthalpy flux due to species diffusion void computeSpeciesEnthalpyFlux(const amrex::Vector> &a_fluxes, amrex::Vector const &a_temp); - + void differentialDiffusionUpdate(std::unique_ptr &advData, std::unique_ptr &diffData); @@ -413,7 +414,7 @@ class PeleLM : public amrex::AmrCore { const amrex::Vector &a_velForce, int nGrowForce, int add_gradP); - + void getVelForces(const TimeStamp &a_time, int lev, amrex::MultiFab* a_divTau, @@ -722,7 +723,7 @@ class PeleLM : public amrex::AmrCore { // Typical values void setTypicalValues(const PeleLM::TimeStamp &a_time, int is_init = 0); void updateTypicalValuesChem(); - + void checkMemory(const std::string &a_message); // Mixture fraction & Progress variable @@ -768,14 +769,14 @@ class PeleLM : public amrex::AmrCore { void getEBDistance(int a_lev, - amrex::MultiFab &a_signDistLev); + amrex::MultiFab &a_signDistLev); void extendSignedDistance( amrex::MultiFab *a_signDist, amrex::Real a_extendFactor); // static_cast factory into ebfactory - amrex::EBFArrayBoxFactory const& - EBFactory (int lev) const noexcept { + amrex::EBFArrayBoxFactory const& + EBFactory (int lev) const noexcept { return static_cast(*m_factory[lev]); } @@ -789,10 +790,10 @@ class PeleLM : public amrex::AmrCore { void advanceSetup(); - void oneSDC(int sdcIter, + void oneSDC(int sdcIter, std::unique_ptr &advData, std::unique_ptr &diffData); - + void copyTransportOldToNew(); void copyStateNewToOld(int nGhost = 0); void copyPressNewToOld(); @@ -876,7 +877,7 @@ class PeleLM : public amrex::AmrCore { amrex::Real &norm); int testExitNewton(int newtonIter, - const amrex::Real &max_res); + const amrex::Real &max_res); void updateNLState(const amrex::Vector &a_update); @@ -1045,6 +1046,11 @@ class PeleLM : public amrex::AmrCore { static pele::physics::transport::TransportParams< pele::physics::PhysicsType::transport_type> trans_parms; + // EOS pointer + static pele::physics::eos::EosParams< + pele::physics::PhysicsType::eos_type> eos_parms; + static std::unique_ptr manfunc_par; + // Reactor pointer std::string m_chem_integrator; std::unique_ptr m_reactor; @@ -1053,7 +1059,7 @@ class PeleLM : public amrex::AmrCore { pele::physics::turbinflow::TurbInflow turb_inflow; // Diagnostics - amrex::Vector> m_diagnostics; + amrex::Vector> m_diagnostics; // Linear solvers std::unique_ptr m_diffusion_op; @@ -1099,7 +1105,7 @@ class PeleLM : public amrex::AmrCore { amrex::Real m_dtChangeMax = 1.1; amrex::Real m_stop_time = -1.0; amrex::Real m_max_dt = 1e12; - int m_nstep = -1; + int m_nstep = -1; int m_max_step = -1; int m_regrid_int = -1; @@ -1121,7 +1127,10 @@ class PeleLM : public amrex::AmrCore { // DivU dt int m_divu_checkFlag = 1; amrex::Real m_divu_dtFactor = 0.5; - amrex::Real m_divu_rhoMin = 0.1; + amrex::Real m_divu_rhoMin = 0.1; + + // Chi correction + std::string m_chi_correction_type = "DivuEveryIter"; // Aux data size int m_nAux = 0; @@ -1187,7 +1196,7 @@ class PeleLM : public amrex::AmrCore { amrex::Array m_domainRhoHFlux; amrex::Array m_domainRhoYFlux; amrex::Array m_domainUmacFlux; - + std::ofstream tmpStateFile; std::ofstream tmpMassFile; std::ofstream tmpSpecFile; @@ -1255,19 +1264,23 @@ class PeleLM : public amrex::AmrCore { // Nodal projection int m_nodal_mg_max_coarsening_level = 100; - amrex::Real m_nodal_mg_rtol = 1.0e-11; + amrex::Real m_nodal_mg_rtol = 1.0e-11; amrex::Real m_nodal_mg_atol = 1.0e-14; std::string m_hypre_namespace_nodal = "nodal_hypre"; // MAC projection int m_mac_mg_verbose = 0; int m_mac_mg_max_coarsening_level = 100; - amrex::Real m_mac_mg_rtol = 1.0e-11; + amrex::Real m_mac_mg_rtol = 1.0e-11; amrex::Real m_mac_mg_atol = 1.0e-14; std::string m_hypre_namespace_mac = "mac_hypre"; //----------------------------------------------------------------------------- }; +template <> +void PeleLM::adjustSpeciesFluxes(const amrex::Vector> &a_fluxes, + amrex::Vector const &a_spec); + void writeBuildInfo(); #endif diff --git a/Source/PeleLM.cpp b/Source/PeleLM.cpp index 0577aab54..7206ff4b4 100644 --- a/Source/PeleLM.cpp +++ b/Source/PeleLM.cpp @@ -5,6 +5,10 @@ using namespace amrex; pele::physics::transport::TransportParams< pele::physics::PhysicsType::transport_type> PeleLM::trans_parms; +pele::physics::eos::EosParams< + pele::physics::PhysicsType::eos_type> + PeleLM::eos_parms; +std::unique_ptr PeleLM::manfunc_par; PeleLM::PeleLM() = default; @@ -13,11 +17,15 @@ PeleLM::~PeleLM() for (int lev = 0; lev <= finest_level; ++lev) { ClearLevel(lev); } - + if (!m_incompressible) { + eos_parms.deallocate(); +#ifdef USE_MANIFOLD_EOS + manfunc_par->deallocate(); +#endif trans_parms.deallocate(); m_reactor->close(); - } + } closeTempFile(); typical_values.clear(); @@ -35,7 +43,7 @@ PeleLM::LevelData* PeleLM::getLevelDataPtr(int lev, const PeleLM::TimeStamp &a_time, int /*useUMac*/) { AMREX_ASSERT(a_time==AmrOldTime || a_time==AmrNewTime || a_time==AmrHalfTime); - if ( a_time == AmrOldTime ) { + if ( a_time == AmrOldTime ) { return m_leveldata_old[lev].get(); } else if ( a_time == AmrNewTime ) { return m_leveldata_new[lev].get(); diff --git a/Source/PeleLMAdvection.cpp b/Source/PeleLMAdvection.cpp index 0d611a75a..d2f787ef2 100644 --- a/Source/PeleLMAdvection.cpp +++ b/Source/PeleLMAdvection.cpp @@ -37,7 +37,7 @@ void PeleLM::computeVelocityAdvTerm(std::unique_ptr &advData) int add_gradP = 1; getVelForces(AmrOldTime,GetVecOfPtrs(divtau),GetVecOfPtrs(velForces),nGrow_force,add_gradP); - auto bcRecVel = fetchBCRecArray(VELX,AMREX_SPACEDIM); + auto bcRecVel = fetchBCRecArray(VELX,AMREX_SPACEDIM); auto bcRecVel_d = convertToDeviceVector(bcRecVel); auto AdvTypeVel = fetchAdvTypeArray(VELX,AMREX_SPACEDIM); auto AdvTypeVel_d = convertToDeviceVector(AdvTypeVel); @@ -102,11 +102,11 @@ void PeleLM::computeVelocityAdvTerm(std::unique_ptr &advData) m_advection_type); } #ifdef AMREX_USE_EB - EB_set_covered_faces(GetArrOfPtrs(fluxes[lev]),0.); - EB_set_covered_faces(GetArrOfPtrs(faces[lev]),0.); + EB_set_covered_faces(GetArrOfPtrs(fluxes[lev]),0.); + EB_set_covered_faces(GetArrOfPtrs(faces[lev]),0.); #endif } - + //---------------------------------------------------------------- // Average down fluxes to ensure C/F consistency for (int lev = finest_level; lev > 0; --lev) { @@ -241,6 +241,7 @@ void PeleLM::getScalarAdvForce(std::unique_ptr &advData, // Get t^{n} data pointer auto ldata_p = getLevelDataPtr(lev,AmrOldTime); auto ldataR_p = getLevelDataReactPtr(lev); + auto const* leosparm = eos_parms.device_eos_parm(); #ifdef AMREX_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -258,12 +259,12 @@ void PeleLM::getScalarAdvForce(std::unique_ptr &advData, auto const& extRhoH = m_extSource[lev]->const_array(mfi,RHOH); auto const& fY = advData->Forcing[lev].array(mfi,0); auto const& fT = advData->Forcing[lev].array(mfi,NUM_SPECIES); - amrex::ParallelFor(bx, [rho, rhoY, T, dn, ddn, r, fY, fT, extRhoY, extRhoH, dp0dt=m_dp0dt, + amrex::ParallelFor(bx, [rho, rhoY, T, dn, ddn, r, fY, fT, extRhoY, extRhoH, leosparm, dp0dt=m_dp0dt, is_closed_ch=m_closed_chamber, do_react=m_do_react] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { buildAdvectionForcing( i, j, k, rho, rhoY, T, dn, ddn, r, extRhoY, extRhoH, - dp0dt, is_closed_ch, do_react, fY, fT ); + dp0dt, is_closed_ch, do_react, fY, fT, leosparm ); }); } } @@ -283,11 +284,11 @@ void PeleLM::computeScalarAdvTerms(std::unique_ptr &advData) auto bcRecSpec_d = convertToDeviceVector(bcRecSpec); auto AdvTypeSpec = fetchAdvTypeArray(FIRSTSPEC,NUM_SPECIES); auto AdvTypeSpec_d = convertToDeviceVector(AdvTypeSpec); - auto bcRecTemp = fetchBCRecArray(TEMP,1); + auto bcRecTemp = fetchBCRecArray(TEMP,1); auto bcRecTemp_d = convertToDeviceVector(bcRecTemp); auto AdvTypeTemp = fetchAdvTypeArray(TEMP,1); auto AdvTypeTemp_d = convertToDeviceVector(AdvTypeTemp); - auto bcRecRhoH = fetchBCRecArray(RHOH,1); + auto bcRecRhoH = fetchBCRecArray(RHOH,1); auto bcRecRhoH_d = convertToDeviceVector(bcRecRhoH); auto AdvTypeRhoH = fetchAdvTypeArray(RHOH,1); auto AdvTypeRhoH_d = convertToDeviceVector(AdvTypeRhoH); @@ -304,7 +305,7 @@ void PeleLM::computeScalarAdvTerms(std::unique_ptr &advData) //---------------------------------------------------------------- // Loop over levels and get the fluxes - for (int lev = 0; lev <= finest_level; ++lev) { + for (int lev = 0; lev <= finest_level; ++lev) { // Get level data ptr Old auto ldata_p = getLevelDataPtr(lev,AmrOldTime); @@ -459,16 +460,21 @@ void PeleLM::computeScalarAdvTerms(std::unique_ptr &advData) { rho_ed(i,j,k) = 0.0; }); - } else if (flagfab.getType(ebx) != FabType::regular ) { // EB containing boxes + } else if (flagfab.getType(ebx) != FabType::regular ) { // EB containing boxes const auto& afrac = areafrac[idim]->array(mfi); amrex::ParallelFor(ebx, [rho_ed, rhoY_ed, afrac] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { rho_ed(i,j,k) = 0.0; if (afrac(i,j,k) > 0.0) { // Uncovered faces +#ifndef USE_MANIFOLD_EOS + //TODO BAP: Get rid of ifdef for this and below for (int n = 0; n < NUM_SPECIES; n++) { rho_ed(i,j,k) += rhoY_ed(i,j,k,n); } +#else + rho_ed(i,j,k) = rhoY_ed(i,j,k,NUM_SPECIES-1); +#endif } }); } else // Regular boxes @@ -477,9 +483,13 @@ void PeleLM::computeScalarAdvTerms(std::unique_ptr &advData) AMREX_GPU_DEVICE (int i, int j, int k) noexcept { rho_ed(i,j,k) = 0.0; +#ifndef USE_MANIFOLD_EOS for (int n = 0; n < NUM_SPECIES; n++) { rho_ed(i,j,k) += rhoY_ed(i,j,k,n); } +#else + rho_ed(i,j,k) = rhoY_ed(i,j,k,NUM_SPECIES-1); +#endif }); } } @@ -530,6 +540,7 @@ void PeleLM::computeScalarAdvTerms(std::unique_ptr &advData) for (MFIter mfi(ldata_p->state,TilingIfNotGPU()); mfi.isValid(); ++mfi) { Box const& bx = mfi.tilebox(); + auto const* leosparm = eos_parms.device_eos_parm(); #ifdef AMREX_USE_EB auto const& flagfab = ebfact.getMultiEBCellFlagFab()[mfi]; @@ -548,24 +559,24 @@ void PeleLM::computeScalarAdvTerms(std::unique_ptr &advData) { rhoHm(i,j,k) = 0.0; }); - } else if (flagfab.getType(ebx) != FabType::regular ) { // EB containing boxes + } else if (flagfab.getType(ebx) != FabType::regular ) { // EB containing boxes const auto& afrac = areafrac[idim]->array(mfi); - amrex::ParallelFor(ebx, [rho, rhoY, T, rhoHm, afrac] + amrex::ParallelFor(ebx, [rho, rhoY, T, rhoHm, afrac, leosparm] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { if (afrac(i,j,k) <= 0.0) { // Covered faces rhoHm(i,j,k) = 0.0; } else { - getRHmixGivenTY( i, j, k, rho, rhoY, T, rhoHm ); + getRHmixGivenTY( i, j, k, rho, rhoY, T, rhoHm, leosparm ); } }); } else // Regular boxes #endif { - amrex::ParallelFor(ebx, [rho, rhoY, T, rhoHm] + amrex::ParallelFor(ebx, [rho, rhoY, T, rhoHm, leosparm] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - getRHmixGivenTY( i, j, k, rho, rhoY, T, rhoHm ); + getRHmixGivenTY( i, j, k, rho, rhoY, T, rhoHm, leosparm ); }); } } @@ -610,7 +621,7 @@ void PeleLM::computeScalarAdvTerms(std::unique_ptr &advData) m_advection_type); } #ifdef AMREX_USE_EB - EB_set_covered_faces(GetArrOfPtrs(fluxes[lev]),0.); + EB_set_covered_faces(GetArrOfPtrs(fluxes[lev]),0.); #endif } @@ -720,10 +731,15 @@ void PeleLM::computeScalarAdvTerms(std::unique_ptr &advData) amrex::ParallelFor(bx, [aofrho, aofrhoY] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { +#ifndef USE_MANIFOLD_EOS + //TODO BAP: get rid of ifdef here aofrho(i,j,k) = 0.0; for (int n = 0; n < NUM_SPECIES; n++) { aofrho(i,j,k) += aofrhoY(i,j,k,n); } +#else + aofrho(i,j,k) = aofrhoY(i,j,k,NUM_SPECIES-1); +#endif }); } } @@ -781,7 +797,7 @@ void PeleLM::computePassiveAdvTerms(std::unique_ptr &advData, //---------------------------------------------------------------- // Loop over levels and get the fluxes - for (int lev = 0; lev <= finest_level; ++lev) { + for (int lev = 0; lev <= finest_level; ++lev) { // Get level data ptr Old auto ldata_p = getLevelDataPtr(lev,AmrOldTime); diff --git a/Source/PeleLMBC.cpp b/Source/PeleLMBC.cpp index 1034337d0..ba7454988 100644 --- a/Source/PeleLMBC.cpp +++ b/Source/PeleLMBC.cpp @@ -85,14 +85,14 @@ InterpBase* PeleLM::getInterpolator() { // // Get EB-aware interpolater when needed // -#ifdef AMREX_USE_EB +#ifdef AMREX_USE_EB return (EBFactory(0).isAllRegular()) ? &mf_cell_cons_interp : &eb_mf_cell_cons_interp; #else return &mf_cell_cons_interp; #endif } - + void PeleLM::setBoundaryConditions() { // Initialize the BCRecs @@ -116,7 +116,7 @@ void PeleLM::setBoundaryConditions() { m_bcrec_state[VELX+idim].setHi(idim2,tang_vel_bc[hi_bc[idim2]]); } } - } + } // General forces: use int_dir in interior and foextrap otherwise for (int i = 0; i < sizeForceBC; i++) { @@ -328,6 +328,7 @@ void PeleLM::fillpatch_state(int lev, int nGhost) { ProbParm const* lprobparm = prob_parm_d; pele::physics::PMF::PmfData::DataContainer const* lpmfdata = pmf_data.getDeviceData(); + auto const* leosparm = eos_parms.device_eos_parm(); int nCompState = ( m_incompressible ) ? AMREX_SPACEDIM : NVAR; @@ -335,7 +336,7 @@ void PeleLM::fillpatch_state(int lev, if (lev == 0) { PhysBCFunct> bndry_func(geom[lev], fetchBCRecArray(0,nCompState), - PeleLMCCFillExtDirState{lprobparm, lpmfdata, + PeleLMCCFillExtDirState{lprobparm, lpmfdata, leosparm, m_nAux, turb_inflow.is_initialized()}); FillPatchSingleLevel(a_state, IntVect(nGhost), a_time, {&(m_leveldata_old[lev]->state),&(m_leveldata_new[lev]->state)}, @@ -346,10 +347,10 @@ void PeleLM::fillpatch_state(int lev, auto* mapper = getInterpolator(); PhysBCFunct> crse_bndry_func(geom[lev-1], fetchBCRecArray(0,nCompState), - PeleLMCCFillExtDirState{lprobparm, lpmfdata, + PeleLMCCFillExtDirState{lprobparm, lpmfdata, leosparm, m_nAux, turb_inflow.is_initialized()}); PhysBCFunct> fine_bndry_func(geom[lev], fetchBCRecArray(0,nCompState), - PeleLMCCFillExtDirState{lprobparm, lpmfdata, + PeleLMCCFillExtDirState{lprobparm, lpmfdata, leosparm, m_nAux, turb_inflow.is_initialized()}); FillPatchTwoLevels(a_state, IntVect(nGhost), a_time, {&(m_leveldata_old[lev-1]->state),&(m_leveldata_new[lev-1]->state)}, @@ -372,11 +373,12 @@ void PeleLM::fillpatch_density(int lev, int nGhost) { ProbParm const* lprobparm = prob_parm_d; pele::physics::PMF::PmfData::DataContainer const* lpmfdata = pmf_data.getDeviceData(); + auto const* leosparm = eos_parms.device_eos_parm(); if (lev == 0) { // Density PhysBCFunct> bndry_func_rho(geom[lev], fetchBCRecArray(DENSITY,1), - PeleLMCCFillExtDirDens{lprobparm, lpmfdata, m_nAux}); + PeleLMCCFillExtDirDens{lprobparm, lpmfdata, leosparm, m_nAux}); FillPatchSingleLevel(a_density, IntVect(nGhost), a_time, {&(m_leveldata_old[lev]->state),&(m_leveldata_new[lev]->state)}, {m_t_old[lev], m_t_new[lev]},DENSITY,rho_comp,1,geom[lev], bndry_func_rho, 0); @@ -387,10 +389,10 @@ void PeleLM::fillpatch_density(int lev, auto* mapper = getInterpolator(); // Density - PhysBCFunct> crse_bndry_func_rho(geom[lev-1], fetchBCRecArray(DENSITY,1), - PeleLMCCFillExtDirDens{lprobparm, lpmfdata, m_nAux}); + PhysBCFunct> crse_bndry_func_rho(geom[lev-1], fetchBCRecArray(DENSITY,1), + PeleLMCCFillExtDirDens{lprobparm, lpmfdata, leosparm, m_nAux}); PhysBCFunct> fine_bndry_func_rho(geom[lev], fetchBCRecArray(DENSITY,1), - PeleLMCCFillExtDirDens{lprobparm, lpmfdata, m_nAux}); + PeleLMCCFillExtDirDens{lprobparm, lpmfdata, leosparm, m_nAux}); FillPatchTwoLevels(a_density, IntVect(nGhost), a_time, {&(m_leveldata_old[lev-1]->state),&(m_leveldata_new[lev-1]->state)}, {m_t_old[lev-1], m_t_new[lev-1]}, @@ -410,11 +412,12 @@ void PeleLM::fillpatch_species(int lev, int nGhost) { ProbParm const* lprobparm = prob_parm_d; pele::physics::PMF::PmfData::DataContainer const* lpmfdata = pmf_data.getDeviceData(); + auto const* leosparm = eos_parms.device_eos_parm(); if (lev == 0) { // Species PhysBCFunct> bndry_func(geom[lev], fetchBCRecArray(FIRSTSPEC,NUM_SPECIES), - PeleLMCCFillExtDirSpec{lprobparm, lpmfdata, m_nAux}); + PeleLMCCFillExtDirSpec{lprobparm, lpmfdata, leosparm, m_nAux}); FillPatchSingleLevel(a_species, IntVect(nGhost), a_time, {&(m_leveldata_old[lev]->state),&(m_leveldata_new[lev]->state)}, {m_t_old[lev], m_t_new[lev]},FIRSTSPEC,rhoY_comp,NUM_SPECIES,geom[lev], bndry_func, 0); @@ -425,9 +428,9 @@ void PeleLM::fillpatch_species(int lev, // Species PhysBCFunct> crse_bndry_func(geom[lev-1], fetchBCRecArray(FIRSTSPEC,NUM_SPECIES), - PeleLMCCFillExtDirSpec{lprobparm, lpmfdata, m_nAux}); + PeleLMCCFillExtDirSpec{lprobparm, lpmfdata, leosparm, m_nAux}); PhysBCFunct> fine_bndry_func(geom[lev], fetchBCRecArray(FIRSTSPEC,NUM_SPECIES), - PeleLMCCFillExtDirSpec{lprobparm, lpmfdata, m_nAux}); + PeleLMCCFillExtDirSpec{lprobparm, lpmfdata, leosparm, m_nAux}); FillPatchTwoLevels(a_species, IntVect(nGhost), a_time, {&(m_leveldata_old[lev-1]->state),&(m_leveldata_new[lev-1]->state)}, {m_t_old[lev-1], m_t_new[lev-1]}, @@ -447,9 +450,10 @@ void PeleLM::fillpatch_temp(int lev, int nGhost) { ProbParm const* lprobparm = prob_parm_d; pele::physics::PMF::PmfData::DataContainer const* lpmfdata = pmf_data.getDeviceData(); + auto const* leosparm = eos_parms.device_eos_parm(); if (lev == 0) { PhysBCFunct> bndry_func(geom[lev], fetchBCRecArray(TEMP,1), - PeleLMCCFillExtDirTemp{lprobparm, lpmfdata, m_nAux}); + PeleLMCCFillExtDirTemp{lprobparm, lpmfdata, leosparm, m_nAux}); FillPatchSingleLevel(a_temp, IntVect(nGhost), a_time, {&(m_leveldata_old[lev]->state),&(m_leveldata_new[lev]->state)}, {m_t_old[lev], m_t_new[lev]},TEMP,temp_comp,1,geom[lev], bndry_func, 0); @@ -459,9 +463,9 @@ void PeleLM::fillpatch_temp(int lev, auto* mapper = getInterpolator(); PhysBCFunct> crse_bndry_func(geom[lev-1], fetchBCRecArray(TEMP,1), - PeleLMCCFillExtDirTemp{lprobparm, lpmfdata, m_nAux}); + PeleLMCCFillExtDirTemp{lprobparm, lpmfdata, leosparm, m_nAux}); PhysBCFunct> fine_bndry_func(geom[lev], fetchBCRecArray(TEMP,1), - PeleLMCCFillExtDirTemp{lprobparm, lpmfdata, m_nAux}); + PeleLMCCFillExtDirTemp{lprobparm, lpmfdata, leosparm, m_nAux}); FillPatchTwoLevels(a_temp, IntVect(nGhost), a_time, {&(m_leveldata_old[lev-1]->state),&(m_leveldata_new[lev-1]->state)}, {m_t_old[lev-1], m_t_new[lev-1]}, @@ -544,11 +548,12 @@ void PeleLM::fillpatch_nE(int lev, int nGhost) { ProbParm const* lprobparm = prob_parm_d; pele::physics::PMF::PmfData::DataContainer const* lpmfdata = pmf_data.getDeviceData(); + auto const* leosparm = eos_parms.device_eos_parm(); if (lev == 0) { // nE PhysBCFunct> bndry_func(geom[lev], fetchBCRecArray(NE,1), - PeleLMCCFillExtDirnE{lprobparm, lpmfdata, m_nAux}); + PeleLMCCFillExtDirnE{lprobparm, lpmfdata, leosparm, m_nAux}); FillPatchSingleLevel(a_nE, IntVect(nGhost), a_time, {&(m_leveldata_old[lev]->nE),&(m_leveldata_new[lev]->nE)}, {m_t_old[lev], m_t_new[lev]},0,0,1,geom[lev], bndry_func, 0); @@ -559,10 +564,10 @@ void PeleLM::fillpatch_nE(int lev, auto* mapper = getInterpolator(); // nE - PhysBCFunct> crse_bndry_func(geom[lev-1], fetchBCRecArray(NE,1), - PeleLMCCFillExtDirnE{lprobparm, lpmfdata, m_nAux}); + PhysBCFunct> crse_bndry_func(geom[lev-1], fetchBCRecArray(NE,1), + PeleLMCCFillExtDirnE{lprobparm, lpmfdata, leosparm, m_nAux}); PhysBCFunct> fine_bndry_func(geom[lev], fetchBCRecArray(NE,1), - PeleLMCCFillExtDirnE{lprobparm, lpmfdata, m_nAux}); + PeleLMCCFillExtDirnE{lprobparm, lpmfdata, leosparm, m_nAux}); FillPatchTwoLevels(a_nE, IntVect(nGhost), a_time, {&(m_leveldata_old[lev-1]->nE),&(m_leveldata_new[lev-1]->nE)}, {m_t_old[lev-1], m_t_new[lev-1]}, @@ -582,11 +587,12 @@ void PeleLM::fillpatch_phiV(int lev, int nGhost) { ProbParm const* lprobparm = prob_parm_d; pele::physics::PMF::PmfData::DataContainer const* lpmfdata = pmf_data.getDeviceData(); + auto const* leosparm = eos_parms.device_eos_parm(); if (lev == 0) { // Density PhysBCFunct> bndry_func(geom[lev], fetchBCRecArray(PHIV,1), - PeleLMCCFillExtDirPhiV{lprobparm, lpmfdata, m_nAux}); + PeleLMCCFillExtDirPhiV{lprobparm, lpmfdata, leosparm, m_nAux}); FillPatchSingleLevel(a_phiV, IntVect(nGhost), a_time, {&(m_leveldata_old[lev]->phiV),&(m_leveldata_new[lev]->phiV)}, {m_t_old[lev], m_t_new[lev]},0,0,1,geom[lev], bndry_func, 0); @@ -597,10 +603,10 @@ void PeleLM::fillpatch_phiV(int lev, auto* mapper = getInterpolator(); // Density - PhysBCFunct> crse_bndry_func(geom[lev-1], fetchBCRecArray(PHIV,1), - PeleLMCCFillExtDirPhiV{lprobparm, lpmfdata, m_nAux}); + PhysBCFunct> crse_bndry_func(geom[lev-1], fetchBCRecArray(PHIV,1), + PeleLMCCFillExtDirPhiV{lprobparm, lpmfdata, leosparm, m_nAux}); PhysBCFunct> fine_bndry_func(geom[lev], fetchBCRecArray(PHIV,1), - PeleLMCCFillExtDirPhiV{lprobparm, lpmfdata, m_nAux}); + PeleLMCCFillExtDirPhiV{lprobparm, lpmfdata, leosparm, m_nAux}); FillPatchTwoLevels(a_phiV, IntVect(nGhost), a_time, {&(m_leveldata_old[lev-1]->phiV),&(m_leveldata_new[lev-1]->phiV)}, {m_t_old[lev-1], m_t_new[lev-1]}, @@ -683,6 +689,7 @@ void PeleLM::fillcoarsepatch_state(int lev, AMREX_ASSERT(lev>0); ProbParm const* lprobparm = prob_parm_d; pele::physics::PMF::PmfData::DataContainer const* lpmfdata = pmf_data.getDeviceData(); + auto const* leosparm = eos_parms.device_eos_parm(); int nCompState = ( m_incompressible ) ? AMREX_SPACEDIM : NVAR; @@ -692,10 +699,10 @@ void PeleLM::fillcoarsepatch_state(int lev, auto* mapper = getInterpolator(); PhysBCFunct> crse_bndry_func(geom[lev-1], fetchBCRecArray(0,nCompState), - PeleLMCCFillExtDirState{lprobparm, lpmfdata, + PeleLMCCFillExtDirState{lprobparm, lpmfdata, leosparm, m_nAux, turb_inflow.is_initialized()}); PhysBCFunct> fine_bndry_func(geom[lev], fetchBCRecArray(0,nCompState), - PeleLMCCFillExtDirState{lprobparm, lpmfdata, + PeleLMCCFillExtDirState{lprobparm, lpmfdata, leosparm, m_nAux, turb_inflow.is_initialized()}); InterpFromCoarseLevel(a_state, IntVect(nGhost), a_time, m_leveldata_new[lev-1]->state, 0, 0, nCompState, @@ -775,14 +782,15 @@ void PeleLM::fillcoarsepatch_nE(int lev, int nGhost) { ProbParm const* lprobparm = prob_parm_d; pele::physics::PMF::PmfData::DataContainer const* lpmfdata = pmf_data.getDeviceData(); + auto const* leosparm = eos_parms.device_eos_parm(); // Interpolator auto* mapper = getInterpolator(); PhysBCFunct> crse_bndry_func(geom[lev-1], fetchBCRecArray(NE,1), - PeleLMCCFillExtDirnE{lprobparm, lpmfdata, m_nAux}); + PeleLMCCFillExtDirnE{lprobparm, lpmfdata, leosparm, m_nAux}); PhysBCFunct> fine_bndry_func(geom[lev], fetchBCRecArray(NE,1), - PeleLMCCFillExtDirnE{lprobparm, lpmfdata, m_nAux}); + PeleLMCCFillExtDirnE{lprobparm, lpmfdata, leosparm, m_nAux}); InterpFromCoarseLevel(a_nE, IntVect(nGhost), a_time, m_leveldata_new[lev-1]->nE, 0, 0, 1, geom[lev-1], geom[lev], @@ -797,14 +805,15 @@ void PeleLM::fillcoarsepatch_phiV(int lev, int nGhost) { ProbParm const* lprobparm = prob_parm_d; pele::physics::PMF::PmfData::DataContainer const* lpmfdata = pmf_data.getDeviceData(); + auto const* leosparm = eos_parms.device_eos_parm(); // Interpolator auto* mapper = getInterpolator(); PhysBCFunct> crse_bndry_func(geom[lev-1], fetchBCRecArray(PHIV,1), - PeleLMCCFillExtDirPhiV{lprobparm, lpmfdata, m_nAux}); + PeleLMCCFillExtDirPhiV{lprobparm, lpmfdata, leosparm, m_nAux}); PhysBCFunct> fine_bndry_func(geom[lev], fetchBCRecArray(PHIV,1), - PeleLMCCFillExtDirPhiV{lprobparm, lpmfdata, m_nAux}); + PeleLMCCFillExtDirPhiV{lprobparm, lpmfdata, leosparm, m_nAux}); InterpFromCoarseLevel(a_phiV, IntVect(nGhost), a_time, m_leveldata_new[lev-1]->phiV, 0, 0, 1, geom[lev-1], geom[lev], @@ -819,7 +828,7 @@ void PeleLM::setInflowBoundaryVel(MultiFab &a_vel, int lev, TimeStamp a_time) { BL_PROFILE_VAR("PeleLM::setInflowBoundaryVel()", setInflowBoundaryVel); - + Real time = getTime(lev, a_time); // Create a dummy BCRec from Velocity BCRec keeping only Inflow and set the other to bogus @@ -838,14 +847,15 @@ void PeleLM::setInflowBoundaryVel(MultiFab &a_vel, dummyVelBCRec[idim].setHi(idim2,BCType::bogus); } } - } + } fillTurbInflow(a_vel, 0, lev, time); ProbParm const* lprobparm = prob_parm_d; pele::physics::PMF::PmfData::DataContainer const* lpmfdata = pmf_data.getDeviceData(); + auto const* leosparm = eos_parms.device_eos_parm(); PhysBCFunct> bndry_func(geom[lev], dummyVelBCRec, - PeleLMCCFillExtDirState{lprobparm, lpmfdata, + PeleLMCCFillExtDirState{lprobparm, lpmfdata, leosparm, m_nAux, turb_inflow.is_initialized()}); bndry_func(a_vel, 0, AMREX_SPACEDIM, a_vel.nGrowVect(), time, 0); diff --git a/Source/PeleLMBCfill.H b/Source/PeleLMBCfill.H index 3af828c2d..8e6083419 100644 --- a/Source/PeleLMBCfill.H +++ b/Source/PeleLMBCfill.H @@ -11,14 +11,16 @@ struct PeleLMCCFillExtDirState ProbParm const* lprobparm; pele::physics::PMF::PmfData::DataContainer const* lpmfdata; + pele::physics::eos::EosParm const* leosparm; const int m_nAux; int m_do_turbInflow = 0; AMREX_GPU_HOST constexpr PeleLMCCFillExtDirState(ProbParm const* a_prob_parm, pele::physics::PMF::PmfData::DataContainer const* a_pmf_data, + pele::physics::eos::EosParm const* a_eos_parm, int a_nAux, int do_turbInflow) - : lprobparm(a_prob_parm), lpmfdata(a_pmf_data), + : lprobparm(a_prob_parm), lpmfdata(a_pmf_data), leosparm(a_eos_parm), m_nAux(a_nAux), m_do_turbInflow(do_turbInflow) {} AMREX_GPU_DEVICE @@ -65,7 +67,7 @@ struct PeleLMCCFillExtDirState } } // bcnormal() is defined in pelelm_prob.H in problem directory in /Exec - bcnormal(x, m_nAux, s_ext, idir, 1, time, geom, *lprobparm, lpmfdata); + bcnormal(x, m_nAux, s_ext, idir, 1, time, geom, *lprobparm, lpmfdata, leosparm); state(iv,n) = s_ext[n]; } } @@ -90,7 +92,7 @@ struct PeleLMCCFillExtDirState } } // bcnormal() is defined in pelelm_prob.H in problem directory in /Exec - bcnormal(x, m_nAux, s_ext, idir, -1, time, geom, *lprobparm, lpmfdata); + bcnormal(x, m_nAux, s_ext, idir, -1, time, geom, *lprobparm, lpmfdata, leosparm); state(iv,n) = s_ext[n]; } } @@ -103,12 +105,15 @@ struct PeleLMCCFillExtDirSpec ProbParm const* lprobparm; pele::physics::PMF::PmfData::DataContainer const* lpmfdata; + pele::physics::eos::EosParm const* leosparm; const int m_nAux; AMREX_GPU_HOST constexpr PeleLMCCFillExtDirSpec(ProbParm const* a_prob_parm, - pele::physics::PMF::PmfData::DataContainer const* a_pmf_data, int a_nAux) - : lprobparm(a_prob_parm), lpmfdata(a_pmf_data), m_nAux(a_nAux) {} + pele::physics::PMF::PmfData::DataContainer const* a_pmf_data, + pele::physics::eos::EosParm const* a_eos_parm, + int a_nAux) + : lprobparm(a_prob_parm), lpmfdata(a_pmf_data), leosparm(a_eos_parm), m_nAux(a_nAux) {} AMREX_GPU_DEVICE void operator()( @@ -145,7 +150,7 @@ struct PeleLMCCFillExtDirSpec if ((bc[idir] == amrex::BCType::ext_dir) and (iv[idir] < domlo[idir])) { // bcnormal() is defined in pelelm_prob.H in problem directory in /Exec - bcnormal(x, m_nAux, s_ext, idir, 1, time, geom, *lprobparm, lpmfdata); + bcnormal(x, m_nAux, s_ext, idir, 1, time, geom, *lprobparm, lpmfdata, leosparm); rhoY(iv,dcomp+n) = s_ext[FIRSTSPEC+n]; @@ -153,7 +158,7 @@ struct PeleLMCCFillExtDirSpec } else if ((bc[idir+AMREX_SPACEDIM] == amrex::BCType::ext_dir) and (iv[idir] > domhi[idir])) { // bcnormal() is defined in pelelm_prob.H in problem directory in /Exec - bcnormal(x, m_nAux, s_ext, idir, -1, time, geom, *lprobparm, lpmfdata); + bcnormal(x, m_nAux, s_ext, idir, -1, time, geom, *lprobparm, lpmfdata, leosparm); rhoY(iv,dcomp+n) = s_ext[FIRSTSPEC+n]; } @@ -167,12 +172,15 @@ struct PeleLMCCFillExtDirDens ProbParm const* lprobparm; pele::physics::PMF::PmfData::DataContainer const* lpmfdata; + pele::physics::eos::EosParm const* leosparm; const int m_nAux; AMREX_GPU_HOST constexpr PeleLMCCFillExtDirDens(ProbParm const* a_prob_parm, - pele::physics::PMF::PmfData::DataContainer const* a_pmf_data, int a_nAux) - : lprobparm(a_prob_parm), lpmfdata(a_pmf_data), m_nAux(a_nAux) {} + pele::physics::PMF::PmfData::DataContainer const* a_pmf_data, + pele::physics::eos::EosParm const* a_eos_parm, + int a_nAux) + : lprobparm(a_prob_parm), lpmfdata(a_pmf_data), leosparm(a_eos_parm), m_nAux(a_nAux) {} AMREX_GPU_DEVICE void operator()( @@ -207,7 +215,7 @@ struct PeleLMCCFillExtDirDens if ((bc[idir] == amrex::BCType::ext_dir) and (iv[idir] < domlo[idir])) { // bcnormal() is defined in pelelm_prob.H in problem directory in /Exec - bcnormal(x, m_nAux, s_ext, idir, 1, time, geom, *lprobparm, lpmfdata); + bcnormal(x, m_nAux, s_ext, idir, 1, time, geom, *lprobparm, lpmfdata, leosparm); state(iv,dcomp) = s_ext[DENSITY]; @@ -215,7 +223,7 @@ struct PeleLMCCFillExtDirDens } else if ((bc[idir+AMREX_SPACEDIM] == amrex::BCType::ext_dir) and (iv[idir] > domhi[idir])) { // bcnormal() is defined in pelelm_prob.H in problem directory in /Exec - bcnormal(x, m_nAux, s_ext, idir, -1, time, geom, *lprobparm, lpmfdata); + bcnormal(x, m_nAux, s_ext, idir, -1, time, geom, *lprobparm, lpmfdata, leosparm); state(iv,dcomp) = s_ext[DENSITY]; @@ -229,12 +237,15 @@ struct PeleLMCCFillExtDirRhoH ProbParm const* lprobparm; pele::physics::PMF::PmfData::DataContainer const* lpmfdata; + pele::physics::eos::EosParm const* leosparm; const int m_nAux; AMREX_GPU_HOST constexpr PeleLMCCFillExtDirRhoH(ProbParm const* a_prob_parm, - pele::physics::PMF::PmfData::DataContainer const* a_pmf_data, int a_nAux) - : lprobparm(a_prob_parm), lpmfdata(a_pmf_data), m_nAux(a_nAux) {} + pele::physics::PMF::PmfData::DataContainer const* a_pmf_data, + pele::physics::eos::EosParm const* a_eos_parm, + int a_nAux) + : lprobparm(a_prob_parm), lpmfdata(a_pmf_data), leosparm(a_eos_parm), m_nAux(a_nAux) {} AMREX_GPU_DEVICE void operator()( @@ -269,7 +280,7 @@ struct PeleLMCCFillExtDirRhoH if ((bc[idir] == amrex::BCType::ext_dir) and (iv[idir] < domlo[idir])) { // bcnormal() is defined in pelelm_prob.H in problem directory in /Exec - bcnormal(x, m_nAux, s_ext, idir, 1, time, geom, *lprobparm, lpmfdata); + bcnormal(x, m_nAux, s_ext, idir, 1, time, geom, *lprobparm, lpmfdata, leosparm); rhoH(iv) = s_ext[RHOH]; @@ -277,7 +288,7 @@ struct PeleLMCCFillExtDirRhoH } else if ((bc[idir+AMREX_SPACEDIM] == amrex::BCType::ext_dir) and (iv[idir] > domhi[idir])) { // bcnormal() is defined in pelelm_prob.H in problem directory in /Exec - bcnormal(x, m_nAux, s_ext, idir, -1, time, geom, *lprobparm, lpmfdata); + bcnormal(x, m_nAux, s_ext, idir, -1, time, geom, *lprobparm, lpmfdata, leosparm); rhoH(iv) = s_ext[RHOH]; @@ -291,12 +302,15 @@ struct PeleLMCCFillExtDirTemp ProbParm const* lprobparm; pele::physics::PMF::PmfData::DataContainer const* lpmfdata; + pele::physics::eos::EosParm const* leosparm; const int m_nAux; AMREX_GPU_HOST constexpr PeleLMCCFillExtDirTemp(ProbParm const* a_prob_parm, - pele::physics::PMF::PmfData::DataContainer const* a_pmf_data, int a_nAux) - : lprobparm(a_prob_parm), lpmfdata(a_pmf_data), m_nAux(a_nAux) {} + pele::physics::PMF::PmfData::DataContainer const* a_pmf_data, + pele::physics::eos::EosParm const* a_eos_parm, + int a_nAux) + : lprobparm(a_prob_parm), lpmfdata(a_pmf_data), leosparm(a_eos_parm), m_nAux(a_nAux) {} AMREX_GPU_DEVICE void operator()( @@ -331,7 +345,7 @@ struct PeleLMCCFillExtDirTemp if ((bc[idir] == amrex::BCType::ext_dir) and (iv[idir] < domlo[idir])) { // bcnormal() is defined in pelelm_prob.H in problem directory in /Exec - bcnormal(x, m_nAux, s_ext, idir, 1, time, geom, *lprobparm, lpmfdata); + bcnormal(x, m_nAux, s_ext, idir, 1, time, geom, *lprobparm, lpmfdata, leosparm); state(iv,dcomp) = s_ext[TEMP]; @@ -339,7 +353,7 @@ struct PeleLMCCFillExtDirTemp } else if ((bc[idir+AMREX_SPACEDIM] == amrex::BCType::ext_dir) and (iv[idir] > domhi[idir])) { // bcnormal() is defined in pelelm_prob.H in problem directory in /Exec - bcnormal(x, m_nAux, s_ext, idir, -1, time, geom, *lprobparm, lpmfdata); + bcnormal(x, m_nAux, s_ext, idir, -1, time, geom, *lprobparm, lpmfdata, leosparm); state(iv,dcomp) = s_ext[TEMP]; @@ -354,12 +368,15 @@ struct PeleLMCCFillExtDirnE ProbParm const* lprobparm; pele::physics::PMF::PmfData::DataContainer const* lpmfdata; + pele::physics::eos::EosParm const* leosparm; const int m_nAux; AMREX_GPU_HOST constexpr PeleLMCCFillExtDirnE(ProbParm const* a_prob_parm, - pele::physics::PMF::PmfData::DataContainer const* a_pmf_data, int a_nAux) - : lprobparm(a_prob_parm), lpmfdata(a_pmf_data), m_nAux(a_nAux) {} + pele::physics::PMF::PmfData::DataContainer const* a_pmf_data, + pele::physics::eos::EosParm const* a_eos_parm, + int a_nAux) + : lprobparm(a_prob_parm), lpmfdata(a_pmf_data), leosparm(a_eos_parm), m_nAux(a_nAux) {} AMREX_GPU_DEVICE void operator()( @@ -394,7 +411,7 @@ struct PeleLMCCFillExtDirnE if ((bc[idir] == amrex::BCType::ext_dir) and (iv[idir] < domlo[idir])) { // bcnormal() is defined in pelelm_prob.H in problem directory in /Exec - bcnormal(x, m_nAux, s_ext, idir, 1, time, geom, *lprobparm, lpmfdata); + bcnormal(x, m_nAux, s_ext, idir, 1, time, geom, *lprobparm, lpmfdata, leosparm); nE(iv) = s_ext[NE]; @@ -402,7 +419,7 @@ struct PeleLMCCFillExtDirnE } else if ((bc[idir+AMREX_SPACEDIM] == amrex::BCType::ext_dir) and (iv[idir] > domhi[idir])) { // bcnormal() is defined in pelelm_prob.H in problem directory in /Exec - bcnormal(x, m_nAux, s_ext, idir, -1, time, geom, *lprobparm, lpmfdata); + bcnormal(x, m_nAux, s_ext, idir, -1, time, geom, *lprobparm, lpmfdata, leosparm); nE(iv) = s_ext[NE]; @@ -418,12 +435,15 @@ struct PeleLMCCFillExtDirPhiV ProbParm const* lprobparm; pele::physics::PMF::PmfData::DataContainer const* lpmfdata; + pele::physics::eos::EosParm const* leosparm; const int m_nAux; AMREX_GPU_HOST constexpr PeleLMCCFillExtDirPhiV(ProbParm const* a_prob_parm, - pele::physics::PMF::PmfData::DataContainer const* a_pmf_data, int a_nAux) - : lprobparm(a_prob_parm), lpmfdata(a_pmf_data), m_nAux(a_nAux) {} + pele::physics::PMF::PmfData::DataContainer const* a_pmf_data, + pele::physics::eos::EosParm const* a_eos_parm, + int a_nAux) + : lprobparm(a_prob_parm), lpmfdata(a_pmf_data), leosparm(a_eos_parm), m_nAux(a_nAux) {} AMREX_GPU_DEVICE void operator()( @@ -458,7 +478,7 @@ struct PeleLMCCFillExtDirPhiV if ((bc[idir] == amrex::BCType::ext_dir) and (iv[idir] < domlo[idir])) { // bcnormal() is defined in pelelm_prob.H in problem directory in /Exec - bcnormal(x, m_nAux, s_ext, idir, 1, time, geom, *lprobparm, lpmfdata); + bcnormal(x, m_nAux, s_ext, idir, 1, time, geom, *lprobparm, lpmfdata, leosparm); phiV(iv) = s_ext[PHIV]; @@ -466,7 +486,7 @@ struct PeleLMCCFillExtDirPhiV } else if ((bc[idir+AMREX_SPACEDIM] == amrex::BCType::ext_dir) and (iv[idir] > domhi[idir])) { // bcnormal() is defined in pelelm_prob.H in problem directory in /Exec - bcnormal(x, m_nAux, s_ext, idir, -1, time, geom, *lprobparm, lpmfdata); + bcnormal(x, m_nAux, s_ext, idir, -1, time, geom, *lprobparm, lpmfdata, leosparm); phiV(iv) = s_ext[PHIV]; @@ -515,10 +535,10 @@ struct umacFill const int numcomp, amrex::GeometryData const& /*geom*/, const amrex::Real /*time*/, - const amrex::BCRec* bcr, + const amrex::BCRec* bcr, const int bcomp, const int /*orig_comp*/) const - { + { // Abort if this function is expected to fill an ext_dir BC. for (int n = bcomp; n < bcomp+numcomp; ++n) { const amrex::BCRec& bc = bcr[n]; @@ -526,7 +546,7 @@ struct umacFill || bc.lo(1) == amrex::BCType::ext_dir || bc.hi(1) == amrex::BCType::ext_dir, || bc.lo(2) == amrex::BCType::ext_dir || bc.hi(2) == amrex::BCType::ext_dir ) ) { amrex::Abort("PeleLM::umacFill: umac should not have BCType::ext_dir"); - } - } - } + } + } + } }; diff --git a/Source/PeleLMDeriveFunc.H b/Source/PeleLMDeriveFunc.H index 55d21270d..38c199534 100644 --- a/Source/PeleLMDeriveFunc.H +++ b/Source/PeleLMDeriveFunc.H @@ -11,6 +11,13 @@ // Forward declaration of PeleLM class PeleLM; +#ifdef USE_MANIFOLD_EOS +void pelelm_dermaniout (PeleLM* a_pelelm, const amrex::Box& bx, amrex::FArrayBox& derfab, int dcomp, int ncomp, + const amrex::FArrayBox& statefab, const amrex::FArrayBox& pressfab, + const amrex::Geometry& geomdata, + amrex::Real time, const amrex::Vector &bcrec, int level); +#endif + void pelelm_dermassfrac (PeleLM* a_pelelm, const amrex::Box& bx, amrex::FArrayBox& derfab, int dcomp, int ncomp, const amrex::FArrayBox& statefab, const amrex::FArrayBox& pressfab, const amrex::Geometry& geomdata, diff --git a/Source/PeleLMDeriveFunc.cpp b/Source/PeleLMDeriveFunc.cpp index c829af4ef..eab92dd4f 100644 --- a/Source/PeleLMDeriveFunc.cpp +++ b/Source/PeleLMDeriveFunc.cpp @@ -29,6 +29,58 @@ void pelelm_dertemp (PeleLM* a_pelelm, const Box& bx, FArrayBox& derfab, int dco }); } +// +// Extract output quantities from manifold +// +#ifdef USE_MANIFOLD_EOS +void pelelm_dermaniout (PeleLM* a_pelelm, const Box& bx, FArrayBox& derfab, int dcomp, int ncomp, + const FArrayBox& statefab, const FArrayBox& /*pressfab*/, + const Geometry& /*geomdata*/, + Real /*time*/, const Vector& /*bcrec*/, int /*level*/) + +{ + auto manf_data = &a_pelelm->manfunc_par->host_manfunc_data(); + int nmanivar = manf_data->Nvar; + + AMREX_ASSERT(derfab.box().contains(bx)); + AMREX_ASSERT(statefab.box().contains(bx)); + AMREX_ASSERT(derfab.nComp() >= dcomp + ncomp); + AMREX_ASSERT(statefab.nComp() >= NUM_SPECIES+1); + AMREX_ASSERT(ncomp == nmanivar); + AMREX_ASSERT(!a_pelelm->m_incompressible); + + auto const in_dat = statefab.array(); + auto der = derfab.array(dcomp); + amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + amrex::Real rhoinv = 1.0 / in_dat(i,j,k,DENSITY); + amrex::Real maniparm[NUM_SPECIES-1]; + for (int n = 0; n < NUM_SPECIES - 1; n++) { + maniparm[n] = in_dat(i,j,k,FIRSTSPEC+n) * rhoinv; + } + + // TODO: make this more elegant + pele::physics::ManifoldFunc* manfunc; + if(manf_data->manmodel == pele::physics::ManifoldModel::TABLE) + { + pele::physics::TabFuncParams::TabFuncData* tf_data = + static_cast(manf_data); + manfunc = new pele::physics::TabFunc(tf_data); + } + else + { + pele::physics::NNFuncParams::NNFuncData* nnf_data = + static_cast(manf_data); + manfunc = new pele::physics::NNFunc(nnf_data); + } + manfunc->get_all_values(maniparm, der.ptr(i,j,k)); + + delete manfunc; + } + ); +} +#endif + // // Extract species mass fractions Y_n // @@ -70,6 +122,7 @@ void pelelm_dermolefrac (PeleLM* a_pelelm, const Box& bx, FArrayBox& derfab, int AMREX_ASSERT(!a_pelelm->m_incompressible); auto const in_dat = statefab.array(); auto der = derfab.array(dcomp); + auto const* leosparm = a_pelelm->eos_parms.device_eos_parm(); amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { @@ -79,7 +132,7 @@ void pelelm_dermolefrac (PeleLM* a_pelelm, const Box& bx, FArrayBox& derfab, int for (int n = 0; n < NUM_SPECIES; n++) { Yt[n] = in_dat(i,j,k,FIRSTSPEC+n) * rhoinv; } - auto eos = pele::physics::PhysicsType::eos(); + auto eos = pele::physics::PhysicsType::eos(leosparm); eos.Y2X(Yt,Xt); for (int n = 0; n < NUM_SPECIES; n++) { der(i,j,k,n) = Xt[n]; @@ -247,7 +300,7 @@ void pelelm_derprogvar (PeleLM* a_pelelm, const Box& bx, FArrayBox& derfab, int { AMREX_ASSERT(derfab.box().contains(bx)); AMREX_ASSERT(statefab.box().contains(bx)); - AMREX_ASSERT(ncomp == 1); + AMREX_ASSERT(ncomp == 1); if (a_pelelm->m_C0 < 0.0) amrex::Abort("Progress variable not initialized"); @@ -262,22 +315,22 @@ void pelelm_derprogvar (PeleLM* a_pelelm, const Box& bx, FArrayBox& derfab, int amrex::GpuArray Cweights; for (int n=0; nm_Cweights[n]; - } + } amrex::ParallelFor(bx, [=,revert=a_pelelm->m_Crevert] AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { + { amrex::Real rho_inv = 1.0_rt / density(i,j,k); prog_var(i,j,k) = 0.0_rt; for (int n = 0; ntrans_parms.device_trans_parm(); + auto const* leosparm = a_pelelm->eos_parms.device_eos_parm(); amrex::ParallelFor(bx, - [rhoY,T,rhoD,lambda,mu,ltransparm] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + [rhoY,T,rhoD,lambda,mu,ltransparm, leosparm] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - getTransportCoeff(i, j, k, rhoY, T, rhoD, lambda, mu, ltransparm); + getTransportCoeff(i, j, k, rhoY, T, rhoD, lambda, mu, ltransparm, leosparm); }); } @@ -354,9 +408,10 @@ void pelelm_derlambda (PeleLM* a_pelelm, const Box& bx, FArrayBox& derfab, int d auto lambda = derfab.array(dcomp); auto mu = dummies.array(0); auto const* ltransparm = a_pelelm->trans_parms.device_trans_parm(); + auto const* leosparm = a_pelelm->eos_parms.device_eos_parm(); amrex::ParallelFor(bx, - [rhoY,T,rhoD,lambda,mu,ltransparm] AMREX_GPU_DEVICE (int i, int j, int k) noexcept + [rhoY,T,rhoD,lambda,mu,ltransparm,leosparm] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - getTransportCoeff(i, j, k, rhoY, T, rhoD, lambda, mu, ltransparm); + getTransportCoeff(i, j, k, rhoY, T, rhoD, lambda, mu, ltransparm, leosparm); }); } diff --git a/Source/PeleLMDiffusion.cpp b/Source/PeleLMDiffusion.cpp index fbbacd356..21e0a65e7 100644 --- a/Source/PeleLMDiffusion.cpp +++ b/Source/PeleLMDiffusion.cpp @@ -88,13 +88,13 @@ void PeleLM::computeDifferentialDiffusionTerms(const TimeStamp &a_time, GetVecOfPtrs(diffData->Dn), 0, GetVecOfArrOfPtrs(fluxes), 0, NUM_SPECIES, 1, bcRecSpec_d.dataPtr(), -1.0, m_dt); - auto bcRecTemp = fetchBCRecArray(TEMP,1); + auto bcRecTemp = fetchBCRecArray(TEMP,1); auto bcRecTemp_d = convertToDeviceVector(bcRecTemp); fluxDivergenceRD(GetVecOfConstPtrs(getTempVect(AmrOldTime)), 0, GetVecOfPtrs(diffData->Dn), NUM_SPECIES, GetVecOfArrOfPtrs(fluxes), NUM_SPECIES, 1, 1, bcRecTemp_d.dataPtr(), -1.0, m_dt); - auto bcRecRhoH = fetchBCRecArray(RHOH,1); + auto bcRecRhoH = fetchBCRecArray(RHOH,1); auto bcRecRhoH_d = convertToDeviceVector(bcRecRhoH); fluxDivergenceRD(GetVecOfConstPtrs(getRhoHVect(AmrOldTime)), 0, GetVecOfPtrs(diffData->Dn), NUM_SPECIES+1, @@ -111,13 +111,13 @@ void PeleLM::computeDifferentialDiffusionTerms(const TimeStamp &a_time, GetVecOfPtrs(diffData->Dnp1), 0, GetVecOfArrOfPtrs(fluxes), 0, NUM_SPECIES, 1, bcRecSpec_d.dataPtr(), -1.0, m_dt); - auto bcRecTemp = fetchBCRecArray(TEMP,1); + auto bcRecTemp = fetchBCRecArray(TEMP,1); auto bcRecTemp_d = convertToDeviceVector(bcRecTemp); fluxDivergenceRD(GetVecOfConstPtrs(getTempVect(AmrNewTime)), 0, GetVecOfPtrs(diffData->Dnp1), NUM_SPECIES, GetVecOfArrOfPtrs(fluxes), NUM_SPECIES, 1, 1, bcRecTemp_d.dataPtr(), -1.0, m_dt); - auto bcRecRhoH = fetchBCRecArray(RHOH,1); + auto bcRecRhoH = fetchBCRecArray(RHOH,1); auto bcRecRhoH_d = convertToDeviceVector(bcRecRhoH); fluxDivergenceRD(GetVecOfConstPtrs(getRhoHVect(AmrNewTime)), 0, GetVecOfPtrs(diffData->Dnp1), NUM_SPECIES+1, @@ -197,8 +197,11 @@ void PeleLM::computeDifferentialDiffusionFluxes(const TimeStamp &a_time, } // Adjust species diffusion fluxes to ensure their sum is zero - adjustSpeciesFluxes(a_fluxes, + // TODO BAP: Make this more elegant + //#ifndef USE_MANIFOLD_EOS + adjustSpeciesFluxes(a_fluxes, GetVecOfConstPtrs(getSpeciesVect(a_time))); + //#endif //---------------------------------------------------------------- //---------------------------------------------------------------- @@ -250,6 +253,7 @@ void PeleLM::addWbarTerm(const Vector > &a_spflu for (int lev = 0; lev <= finest_level; ++lev) { Wbar[lev].define(grids[lev],dmap[lev],1,nGrow,MFInfo(),Factory(lev)); + auto const* leosparm = eos_parms.device_eos_parm(); #ifdef AMREX_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -260,10 +264,10 @@ void PeleLM::addWbarTerm(const Vector > &a_spflu auto const& rho_arr = a_rho[lev]->const_array(mfi); auto const& rhoY_arr = a_spec[lev]->const_array(mfi); auto const& Wbar_arr = Wbar[lev].array(mfi); - amrex::ParallelFor(gbx, [rho_arr, rhoY_arr, Wbar_arr] + amrex::ParallelFor(gbx, [rho_arr, rhoY_arr, Wbar_arr, leosparm] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - getMwmixGivenRY(i, j, k, rho_arr, rhoY_arr, Wbar_arr); + getMwmixGivenRY(i, j, k, rho_arr, rhoY_arr, Wbar_arr, leosparm); }); } } @@ -299,6 +303,7 @@ void PeleLM::addWbarTerm(const Vector > &a_spflu Array beta_ec = getDiffusivity(lev, 0, NUM_SPECIES, doZeroVisc, bcRecSpec, *a_beta[lev]); const Box& domain = geom[lev].Domain(); + auto const* leosparm = eos_parms.device_eos_parm(); bool use_harmonic_avg = m_harm_avg_cen2edge ? true : false; #ifdef AMREX_USE_OMP @@ -340,10 +345,10 @@ void PeleLM::addWbarTerm(const Vector > &a_spflu // Wbar flux is : - \rho Y_m / \overline{W} * D_m * \nabla \overline{W} // with beta_m = \rho * D_m below - amrex::ParallelFor(ebx, [need_wbar_fluxes, gradWbar_ar, beta_ar, rhoY, spFlux_ar, spwbarFlux_ar] + amrex::ParallelFor(ebx, [need_wbar_fluxes, gradWbar_ar, beta_ar, rhoY, spFlux_ar, spwbarFlux_ar, leosparm] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - auto eos = pele::physics::PhysicsType::eos(); + auto eos = pele::physics::PhysicsType::eos(leosparm); // Get Wbar from rhoYs amrex::Real rho = 0.0; for (int n = 0; n < NUM_SPECIES; n++) { @@ -372,8 +377,9 @@ void PeleLM::addWbarTerm(const Vector > &a_spflu } } -void PeleLM::adjustSpeciesFluxes(const Vector > &a_spfluxes, - Vector const &a_spec) +template +void PeleLM::adjustSpeciesFluxes(const Vector > & a_spfluxes, + Vector const & a_spec) { BL_PROFILE("PeleLM::adjustSpeciesFluxes()"); @@ -468,6 +474,14 @@ void PeleLM::adjustSpeciesFluxes(const Vector > } } +template <> +void PeleLM::adjustSpeciesFluxes(const Vector > & /*a_spfluxes*/, + Vector const & /*a_spec*/) +{ + // Manifold Model: "Species" don't sum to unity, so no need to adjust the fluxes + BL_PROFILE("PeleLM::adjustSpeciesFluxes()"); +} + void PeleLM::computeSpeciesEnthalpyFlux(const Vector > &a_fluxes, Vector const &a_temp) { @@ -487,6 +501,8 @@ void PeleLM::computeSpeciesEnthalpyFlux(const Vector &advDat fillPatchSpecies(AmrNewTime); // Adjust species diffusion fluxes to ensure their sum is zero - adjustSpeciesFluxes(GetVecOfArrOfPtrs(fluxes), + // TODO BAP: Make this more elegant + //#ifndef USE_MANIFOLD_EOS + adjustSpeciesFluxes(GetVecOfArrOfPtrs(fluxes), GetVecOfConstPtrs(getSpeciesVect(AmrNewTime))); + //#endif // Average down fluxes^{np1,kp1} getDiffusionOp()->avgDownFluxes(GetVecOfArrOfPtrs(fluxes),0,NUM_SPECIES); @@ -787,6 +806,7 @@ void PeleLM::deltaTIter_prepare(const Vector &a_rhs, auto ldataOld_p = getLevelDataPtr(lev,AmrOldTime); auto ldataNew_p = getLevelDataPtr(lev,AmrNewTime); + auto const* leosparm = eos_parms.device_eos_parm(); #ifdef AMREX_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -819,7 +839,7 @@ void PeleLM::deltaTIter_prepare(const Vector &a_rhs, + force(i,j,k) + fourier(i,j,k) + diffDiff(i,j,k)); // Get \rho * Cp_{mix} - getCpmixGivenRYT( i, j, k, rho, rhoY, T, rhocp ); + getCpmixGivenRYT( i, j, k, rho, rhoY, T, rhocp, leosparm ); rhocp(i,j,k) *= rho(i,j,k); // Save T @@ -884,6 +904,7 @@ void PeleLM::deltaTIter_update(int a_dtiter, for (int lev = 0; lev <= finest_level; ++lev) { auto ldata_p = getLevelDataPtr(lev,AmrNewTime); + auto const* leosparm = eos_parms.device_eos_parm(); #ifdef AMREX_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -896,10 +917,10 @@ void PeleLM::deltaTIter_update(int a_dtiter, auto const& T = ldata_p->state.const_array(mfi,TEMP); auto const& rhoHm = ldata_p->state.array(mfi,RHOH); - amrex::ParallelFor(bx, [rho, rhoY, T, rhoHm] + amrex::ParallelFor(bx, [rho, rhoY, T, rhoHm, leosparm] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - getRHmixGivenTY( i, j, k, rho, rhoY, T, rhoHm ); + getRHmixGivenTY( i, j, k, rho, rhoY, T, rhoHm, leosparm); }); } } diff --git a/Source/PeleLMEos.cpp b/Source/PeleLMEos.cpp index 3c52d4ae4..398f45b2f 100644 --- a/Source/PeleLMEos.cpp +++ b/Source/PeleLMEos.cpp @@ -20,6 +20,7 @@ void PeleLM::setThermoPress(int lev, const TimeStamp &a_time) { AMREX_ASSERT(a_time == AmrOldTime || a_time == AmrNewTime); auto ldata_p = getLevelDataPtr(lev,a_time); + auto const* leosparm = eos_parms.device_eos_parm(); #ifdef AMREX_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -33,10 +34,10 @@ void PeleLM::setThermoPress(int lev, const TimeStamp &a_time) { auto const& T = ldata_p->state.const_array(mfi,TEMP); auto const& P = ldata_p->state.array(mfi,RHORT); - amrex::ParallelFor(bx, [rho, rhoY, T, P] + amrex::ParallelFor(bx, [rho, rhoY, T, P, leosparm] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - getPGivenRTY( i, j, k, rho, rhoY, T, P ); + getPGivenRTY( i, j, k, rho, rhoY, T, P, leosparm); }); } } @@ -91,6 +92,8 @@ void PeleLM::calcDivU(int is_init, const auto& ebfact = EBFactory(lev); #endif + auto const* leosparm = eos_parms.device_eos_parm(); + #ifdef AMREX_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif @@ -125,23 +128,23 @@ void PeleLM::calcDivU(int is_init, { divu(i,j,k) = 0.0; }); - } else if (flagfab.getType(bx) != FabType::regular ) { // EB containing boxes - amrex::ParallelFor(bx, [ rhoY, T, SpecD, Fourier, DiffDiff, r, extRhoY, extRhoH, divu, use_react, flag] + } else if (flagfab.getType(bx) != FabType::regular ) { // EB containing boxes + amrex::ParallelFor(bx, [ rhoY, T, SpecD, Fourier, DiffDiff, r, extRhoY, extRhoH, divu, use_react, flag, leosparm] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { if ( flag(i,j,k).isCovered() ) { divu(i,j,k) = 0.0; } else { - compute_divu( i, j, k, rhoY, T, SpecD, Fourier, DiffDiff, r, extRhoY, extRhoH, divu, use_react ); + compute_divu( i, j, k, rhoY, T, SpecD, Fourier, DiffDiff, r, extRhoY, extRhoH, divu, use_react, leosparm ); } }); } else #endif { - amrex::ParallelFor(bx, [ rhoY, T, SpecD, Fourier, DiffDiff, r, extRhoY, extRhoH, divu, use_react] + amrex::ParallelFor(bx, [ rhoY, T, SpecD, Fourier, DiffDiff, r, extRhoY, extRhoH, divu, use_react, leosparm] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - compute_divu( i, j, k, rhoY, T, SpecD, Fourier, DiffDiff, r, extRhoY, extRhoH, divu, use_react ); + compute_divu( i, j, k, rhoY, T, SpecD, Fourier, DiffDiff, r, extRhoY, extRhoH, divu, use_react, leosparm ); }); } } @@ -188,6 +191,7 @@ void PeleLM::setTemperature(int lev, const TimeStamp &a_time) { AMREX_ASSERT(a_time == AmrOldTime || a_time == AmrNewTime); auto ldata_p = getLevelDataPtr(lev,a_time); + auto const* leosparm = eos_parms.device_eos_parm(); #ifdef AMREX_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -201,10 +205,10 @@ void PeleLM::setTemperature(int lev, const TimeStamp &a_time) { auto const& rhoh = ldata_p->state.const_array(mfi,RHOH); auto const& T = ldata_p->state.array(mfi,TEMP); - amrex::ParallelFor(bx, [rho, rhoY, rhoh, T] + amrex::ParallelFor(bx, [rho, rhoY, rhoh, T, leosparm] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - getTfromHY( i, j, k, rho, rhoY, rhoh, T); + getTfromHY( i, j, k, rho, rhoY, rhoh, T, leosparm); }); } } @@ -268,6 +272,7 @@ PeleLM::adjustPandDivU(std::unique_ptr &advData) auto ldataOld_p = getLevelDataPtr(lev,AmrOldTime); auto ldataNew_p = getLevelDataPtr(lev,AmrNewTime); + auto const* leosparm = eos_parms.device_eos_parm(); ThetaHalft[lev].reset(new MultiFab(grids[lev], dmap[lev], 1, 0, MFInfo(), *m_factory[lev])); @@ -285,8 +290,8 @@ PeleLM::adjustPandDivU(std::unique_ptr &advData) amrex::ParallelFor(bx, [=,pOld=m_pOld,pNew=m_pNew] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - Real gammaInv_o = getGammaInv(i,j,k,rhoYo,T_o); - Real gammaInv_n = getGammaInv(i,j,k,rhoYn,T_n); + Real gammaInv_o = getGammaInv(i,j,k,rhoYo,T_o,leosparm); + Real gammaInv_n = getGammaInv(i,j,k,rhoYn,T_n,leosparm); theta(i,j,k) = 0.5 * (gammaInv_o/pOld + gammaInv_n/pNew); }); } @@ -312,10 +317,10 @@ PeleLM::adjustPandDivU(std::unique_ptr &advData) // mac_divu is now delta_S advData->mac_divu[lev].plus(-Sbar,0,1); } - + // Compute 1/Volume * int(U_inflow)dA across all boundary faces amrex::Real umacFluxBalance = AMREX_D_TERM( m_domainUmacFlux[0] + m_domainUmacFlux[1], - + m_domainUmacFlux[2] + m_domainUmacFlux[3], + + m_domainUmacFlux[2] + m_domainUmacFlux[3], + m_domainUmacFlux[4] + m_domainUmacFlux[5]); Real divu_vol = umacFluxBalance/m_uncoveredVol; diff --git a/Source/PeleLMInit.cpp b/Source/PeleLMInit.cpp index 10c33192e..f76de53d4 100644 --- a/Source/PeleLMInit.cpp +++ b/Source/PeleLMInit.cpp @@ -102,7 +102,7 @@ void PeleLM::MakeNewLevelFromScratch( int lev, if ( lev == 0 && m_signDistNeeded) { // Set up CC signed distance container to control EB refinement m_signedDist0.reset(new MultiFab(grids[lev], dmap[lev], 1, 1, MFInfo(), *m_factory[lev])); - + // Estimate the maximum distance we need in terms of level 0 dx: Real extentFactor = static_cast(nErrorBuf(0)); for (int ilev = 1; ilev <= max_level; ++ilev) { @@ -358,6 +358,7 @@ void PeleLM::initLevelData(int lev) { // Prob/PMF datas ProbParm const* lprobparm = prob_parm_d; pele::physics::PMF::PmfData::DataContainer const* lpmfdata = pmf_data.getDeviceData(); + auto const* leosparm = eos_parms.device_eos_parm(); #ifdef AMREX_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -377,9 +378,9 @@ void PeleLM::initLevelData(int lev) { { pelelm_initdata(i, j, k, m_incompressible, state_arr, aux_arr, #ifdef PELE_USE_EFIELD - ne_arr, phiV_arr, + ne_arr, phiV_arr, #endif - geomdata, *lprobparm, lpmfdata); + geomdata, *lprobparm, lpmfdata, leosparm); }); } diff --git a/Source/PeleLMPlot.cpp b/Source/PeleLMPlot.cpp index 21cd471da..376c611f1 100644 --- a/Source/PeleLMPlot.cpp +++ b/Source/PeleLMPlot.cpp @@ -353,36 +353,36 @@ void PeleLM::WriteHeader(const std::string& name, bool is_checkpoint) const void PeleLM::WriteCheckPointFile() { BL_PROFILE("PeleLM::WriteCheckPointFile()"); - + const std::string& checkpointname = amrex::Concatenate(m_check_file, m_nstep, m_ioDigits); - + if (m_verbose) { amrex::Print() << "\n Writting checkpoint file: " << checkpointname << "\n"; } - + amrex::PreBuildDirectorHierarchy(checkpointname, level_prefix, finest_level + 1, true); bool is_checkpoint = true; WriteHeader(checkpointname, is_checkpoint); WriteJobInfo(checkpointname); - + for(int lev = 0; lev <= finest_level; ++lev) - { + { VisMF::Write(m_leveldata_new[lev]->state, amrex::MultiFabFileFullPrefix(lev, checkpointname, level_prefix, "state")); - + VisMF::Write(m_leveldata_new[lev]->gp, amrex::MultiFabFileFullPrefix(lev, checkpointname, level_prefix, "gradp")); - + VisMF::Write(m_leveldata_new[lev]->press, amrex::MultiFabFileFullPrefix(lev, checkpointname, level_prefix, "p")); - + if (!m_incompressible) { if (m_has_divu) { VisMF::Write(m_leveldata_new[lev]->divu, amrex::MultiFabFileFullPrefix(lev, checkpointname, level_prefix, "divU")); } - + if (m_do_react) { VisMF::Write(m_leveldatareact[lev]->I_R, amrex::MultiFabFileFullPrefix(lev, checkpointname, level_prefix, "I_R")); @@ -395,7 +395,7 @@ void PeleLM::WriteCheckPointFile() VisMF::Write(m_leveldata_new[lev]->nE, amrex::MultiFabFileFullPrefix(lev, checkpointname, level_prefix, "nE")); #endif - } + } } #ifdef PELELM_USE_SPRAY if (theSprayPC() != nullptr && do_spray_particles) { @@ -431,12 +431,12 @@ void PeleLM::ReadCheckPointFile() Vector fileCharPtr; ParallelDescriptor::ReadAndBcastFile(File, fileCharPtr); std::string fileCharPtrString(fileCharPtr.dataPtr()); - std::istringstream is(fileCharPtrString, std::istringstream::in); + std::istringstream is(fileCharPtrString, std::istringstream::in); std::string line, word; - // Start reading from checkpoint file - + // Start reading from checkpoint file + // Title line std::getline(is, line); @@ -578,6 +578,10 @@ void PeleLM::initLevelDataFromPlt(int a_lev, Abort(" initializing data from a pltfile only available for low-Mach simulations"); } +#ifdef USE_MANIFOLD_EOS + Abort(" initializing data from a pltfile not available for Manifold Eos"); +#endif + amrex::Print() << " initData on level " << a_lev << " from pltfile " << a_dataPltFile << "\n"; // Use PelePhysics PltFileManager @@ -590,8 +594,8 @@ void PeleLM::initLevelDataFromPlt(int a_lev, int idT = -1, idV = -1, idY = -1, nSpecPlt = 0; for (int i = 0; i < plt_vars.size(); ++i) { std::string firstChars = plt_vars[i].substr(0, 2); - if (plt_vars[i] == "temp") idT = i; - if (plt_vars[i] == "x_velocity") idV = i; + if (plt_vars[i] == "temp") idT = i; + if (plt_vars[i] == "x_velocity") idV = i; if (firstChars == "Y(" && idY < 0 ) { // species might not be ordered in the order of the current mech. idY = i; } @@ -636,6 +640,7 @@ void PeleLM::initLevelDataFromPlt(int a_lev, ldata_p->gp.setVal(0.0); ProbParm const* lprobparm = prob_parm_d; + auto const* leosparm = eos_parms.device_eos_parm(); // Enforce rho and rhoH consistent with temperature and mixture // TODO the above handles species mapping (to some extent), but nothing enforce @@ -653,16 +658,17 @@ void PeleLM::initLevelDataFromPlt(int a_lev, amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - auto eos = pele::physics::PhysicsType::eos(); + auto eos = pele::physics::PhysicsType::eos(leosparm); Real massfrac[NUM_SPECIES] = {0.0}; Real sumYs = 0.0; + // TODO : is this the best way to Init when species don't add to 1? for (int n = 0; n < NUM_SPECIES; n++){ massfrac[n] = rhoY_arr(i,j,k,n); - if (n != N2_ID) { - sumYs += massfrac[n]; - } + sumYs += massfrac[n]; + } + for (int n = 0; n < NUM_SPECIES; n++){ + massfrac[n] /= sumYs; } - massfrac[N2_ID] = 1.0 - sumYs; // Get density Real P_cgs = lprobparm->P_mean * 10.0; @@ -674,7 +680,7 @@ void PeleLM::initLevelDataFromPlt(int a_lev, Real h_cgs = 0.0; eos.TY2H(temp_arr(i,j,k), massfrac, h_cgs); rhoH_arr(i,j,k) = h_cgs * 1.0e-4 * rho_arr(i,j,k); - + // Fill rhoYs for (int n = 0; n < NUM_SPECIES; n++){ rhoY_arr(i,j,k,n) = massfrac[n] * rho_arr(i,j,k); @@ -766,7 +772,7 @@ void PeleLM::WriteJobInfo(const std::string& path) const jobInfoFile << " maximum zones = "; for(int idim = 0; idim < AMREX_SPACEDIM; idim++) { - jobInfoFile << geom[lev].Domain().length(idim) << " "; + jobInfoFile << geom[lev].Domain().length(idim) << " "; } jobInfoFile << "\n\n"; } diff --git a/Source/PeleLMReactions.cpp b/Source/PeleLMReactions.cpp index ca533318d..c2f6be823 100644 --- a/Source/PeleLMReactions.cpp +++ b/Source/PeleLMReactions.cpp @@ -217,6 +217,7 @@ void PeleLM::advanceChemistry(int lev, #endif //VisMF::Write(chemAvgDownIR,"avgDownIRNewBA_Level"+std::to_string(lev)+"_step"+std::to_string(m_nstep)); + auto const* leosparm = eos_parms.device_eos_parm(); #ifdef AMREX_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) #endif @@ -283,7 +284,7 @@ void PeleLM::advanceChemistry(int lev, } else { // Use forcing and averaged down IR to advance species/rhoH/temp Real dt_incr = a_dt; - linearChemForcing(bx, rhoY_o, extF_rhoY, temp_o, rhoH_o, extF_rhoH, fcl, avgIR, dt_incr); + linearChemForcing(bx, rhoY_o, extF_rhoY, temp_o, rhoH_o, extF_rhoH, fcl, avgIR, dt_incr, leosparm); } // Convert CGS -> MKS @@ -389,6 +390,7 @@ void PeleLM::computeInstantaneousReactionRate(int lev, { BL_PROFILE("PeleLM::computeInstantaneousReactionRate()"); auto ldata_p = getLevelDataPtr(lev,a_time); + auto const* leosparm = eos_parms.device_eos_parm(); #ifdef AMREX_USE_EB auto const& ebfact = EBFactory(lev); @@ -415,7 +417,7 @@ void PeleLM::computeInstantaneousReactionRate(int lev, rhoYdot(i,j,k,n) = 0.0; }); } else if (flagfab.getType(bx) != FabType::regular ) { // EB containing boxes - amrex::ParallelFor(bx, [rhoY, rhoH, T, rhoYdot, flag] + amrex::ParallelFor(bx, [rhoY, rhoH, T, rhoYdot, flag, leosparm] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { if ( flag(i,j,k).isCovered() ) { @@ -423,16 +425,16 @@ void PeleLM::computeInstantaneousReactionRate(int lev, rhoYdot(i,j,k,n) = 0.0; } } else { - reactionRateRhoY( i, j, k, rhoY, rhoH, T, rhoYdot ); + reactionRateRhoY( i, j, k, rhoY, rhoH, T, rhoYdot, leosparm ); } }); } else #endif { - amrex::ParallelFor(bx, [rhoY, rhoH, T, rhoYdot] + amrex::ParallelFor(bx, [rhoY, rhoH, T, rhoYdot, leosparm] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - reactionRateRhoY( i, j, k, rhoY, rhoH, T, rhoYdot ); + reactionRateRhoY( i, j, k, rhoY, rhoH, T, rhoYdot, leosparm ); }); } } @@ -481,6 +483,7 @@ void PeleLM::getHeatRelease(int a_lev, { auto ldataNew_p = getLevelDataPtr(a_lev,AmrNewTime); auto ldataR_p = getLevelDataReactPtr(a_lev); + auto const* leosparm = eos_parms.device_eos_parm(); #ifdef AMREX_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -496,10 +499,10 @@ void PeleLM::getHeatRelease(int a_lev, auto const& T = ldataNew_p->state.const_array(mfi,TEMP); auto const& Hi = EnthFab.array(); auto const& HRR = a_HR->array(mfi); - amrex::ParallelFor(bx, [T, Hi, HRR, react] + amrex::ParallelFor(bx, [T, Hi, HRR, react, leosparm] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - getHGivenT( i, j, k, T, Hi ); + getHGivenT( i, j, k, T, Hi, leosparm); HRR(i,j,k) = 0.0; for (int n = 0; n < NUM_SPECIES; n++) { HRR(i,j,k) -= Hi(i,j,k,n) * react(i,j,k,n); diff --git a/Source/PeleLMSetup.cpp b/Source/PeleLMSetup.cpp index 373b95915..7d02778b8 100644 --- a/Source/PeleLMSetup.cpp +++ b/Source/PeleLMSetup.cpp @@ -49,6 +49,24 @@ void PeleLM::Setup() { // Setup the state variables variablesSetup(); + // Load manifold if needed (must happen before derived setup) +#ifdef USE_MANIFOLD_EOS + amrex::ParmParse pp("manifold"); + std::string manifold_model; + pp.get("model", manifold_model); + if(manifold_model == "Table") + { + manfunc_par.reset(new pele::physics::TabFuncParams()); + amrex::Print() << " Initialization of Table (CPP)... \n"; + } + else if(manifold_model == "NeuralNet") + { + manfunc_par.reset(new pele::physics::NNFuncParams()); + amrex::Print() << " Initialization of Neural Net Func. (CPP)... \n"; + } + manfunc_par->initialize(); +#endif + // Derived variables derivedSetup(); @@ -76,8 +94,16 @@ void PeleLM::Setup() { // Initialize EOS and others if (!m_incompressible) { + amrex::Print() << " Initialization of EOS (CPP)... \n"; +#ifdef USE_MANIFOLD_EOS + eos_parms.allocate(manfunc_par->device_manfunc_data()); + amrex::Print() << " Initialization of Transport ... \n"; + trans_parms.allocate(manfunc_par->device_manfunc_data()); +#else + eos_parms.allocate(); amrex::Print() << " Initialization of Transport ... \n"; trans_parms.allocate(); +#endif if (m_do_react) { int reactor_type = 2; int ncells_chem = 1; @@ -87,6 +113,8 @@ void PeleLM::Setup() { pp.query("chem_integrator",m_chem_integrator); m_reactor = pele::physics::reactions::ReactorBase::create(m_chem_integrator); m_reactor->init(reactor_type, ncells_chem); + // Give the eosparm to the reactor + m_reactor->set_eos_parm(eos_parms.device_eos_parm()); // For ReactorNull, we need to also skip instantaneous RR used in divU if (m_chem_integrator == "ReactorNull") { m_skipInstantRR = 1; @@ -106,8 +134,11 @@ void PeleLM::Setup() { } // Mixture fraction & Progress variable + // TODO: Take mixture fraction and progress variable if they are manifold coordinates +#ifndef USE_MANIFOLD_EOS initMixtureFraction(); initProgressVariable(); +#endif // Initiliaze turbulence injection turb_inflow.init(Geom(0)); @@ -129,7 +160,7 @@ void PeleLM::Setup() { m_pNew = prob_parm->P_mean; // Copy problem parameters into device copy - Gpu::copy(Gpu::hostToDevice, prob_parm, prob_parm+1,prob_parm_d); + Gpu::copy(Gpu::hostToDevice, prob_parm, prob_parm+1,prob_parm_d); } void PeleLM::readParameters() { @@ -144,6 +175,10 @@ void PeleLM::readParameters() { // ----------------------------------------- pp.query("run_mode",m_run_mode); pp.query("v", m_verbose); + pp.query("chi_correction_type", m_chi_correction_type); + AMREX_ASSERT(m_chi_correction_type == "DivuEveryIter" || + m_chi_correction_type == "DivuFirstIter" || + m_chi_correction_type == "NoDivu"); // ----------------------------------------- // Boundary conditions @@ -215,6 +250,11 @@ void PeleLM::readParameters() { if (verbose && m_closed_chamber) { Print() << " Simulation performed with the closed chamber algorithm \n"; } +#ifdef USE_MANIFOLD_EOS + if (m_closed_chamber) { + amrex::Abort("Simulation with closed chamber not supported for Manifold EOS"); + } +#endif #ifdef PELE_USE_EFIELD ParmParse ppef("ef"); @@ -222,7 +262,7 @@ void PeleLM::readParameters() { // Get the phiV bc ppef.getarr("phiV_lo_bc",lo_bc_char,0,AMREX_SPACEDIM); ppef.getarr("phiV_hi_bc",hi_bc_char,0,AMREX_SPACEDIM); - for (int idim = 0; idim < AMREX_SPACEDIM; idim++) + for (int idim = 0; idim < AMREX_SPACEDIM; idim++) { if (lo_bc_char[idim] == "Interior"){ m_phiV_bc.setLo(idim,0); @@ -232,7 +272,7 @@ void PeleLM::readParameters() { m_phiV_bc.setLo(idim,2); } else { amrex::Abort("Wrong PhiV bc. Should be : Interior, Dirichlet or Neumann"); - } + } if (hi_bc_char[idim] == "Interior"){ m_phiV_bc.setHi(idim,0); } else if (hi_bc_char[idim] == "Dirichlet") { @@ -293,21 +333,26 @@ void PeleLM::readParameters() { pp.queryarr("gravity", grav, 0, AMREX_SPACEDIM); Vector gp0(AMREX_SPACEDIM,0); pp.queryarr("gradP0", gp0, 0, AMREX_SPACEDIM); - for (int idim = 0; idim < AMREX_SPACEDIM; idim++) + for (int idim = 0; idim < AMREX_SPACEDIM; idim++) { m_background_gp[idim] = gp0[idim]; m_gravity[idim] = grav[idim]; } - + // ----------------------------------------- // diffusion pp.query("use_wbar",m_use_wbar); +#ifdef USE_MANIFOLD_EOS + if (m_use_wbar) { + amrex::Abort("Use of Wbar fluxes is incompatible with Manifold EOS"); + } +#endif pp.query("deltaT_verbose",m_deltaT_verbose); pp.query("deltaT_iterMax",m_deltaTIterMax); pp.query("deltaT_tol",m_deltaT_norm_max); pp.query("deltaT_crashIfFailing",m_crashOnDeltaTFail); - + // ----------------------------------------- // initialization @@ -354,7 +399,7 @@ void PeleLM::readParameters() { m_Godunov_ppm = 0; } else { Abort("Unknown 'advection_scheme'. Recognized options are: Godunov_PLM, Godunov_PPM or Godunov_BDS"); - } + } m_predict_advection_type = "Godunov"; // Only option at this point. This will disapear when predict_velocity support BDS. // ----------------------------------------- @@ -405,7 +450,7 @@ void PeleLM::readParameters() { m_EB_refine_type != "Adaptive" ) { Abort("refine_EB_type can only be 'Static' or 'Adaptive'"); } - // Default EB refinement level is max_level + // Default EB refinement level is max_level m_EB_refine_LevMax = max_level; pp.query("refine_EB_max_level",m_EB_refine_LevMax); pp.query("refine_EB_buffer",m_derefineEBBuffer); @@ -503,7 +548,7 @@ void PeleLM::variablesSetup() { std::string PrettyLine = std::string(78, '=') + "\n"; //---------------------------------------------------------------- - // Variables ordering is defined through compiler macro in PeleLM_Index.H + // Variables ordering is defined through compiler macro in PeleLM_Index.H // Simply print on screen the state layout and append to the stateComponents list Print() << "\n"; Print() << PrettyLine; @@ -710,6 +755,19 @@ void PeleLM::derivedSetup() derive_lst.add("mole_fractions",IndexType::TheCellType(),NUM_SPECIES, var_names_massfrac,pelelm_dermolefrac,the_same_box); +#ifdef USE_MANIFOLD_EOS + // Output quantities from manifold + auto manf_data = &manfunc_par->host_manfunc_data(); + int nmanivar = manf_data->Nvar; + Vector var_names_maniout(nmanivar); + for (int n = 0 ; n < nmanivar; n++) { + std::string nametmp = std::string(&(manf_data->varnames)[n*manf_data->len_str], manf_data->len_str); + var_names_maniout[n] = "MANI_" + amrex::trim(nametmp); + } + derive_lst.add("maniout",IndexType::TheCellType(),nmanivar, + var_names_maniout,pelelm_dermaniout,the_same_box); +#endif + // Species diffusion coefficients for (int n = 0 ; n < NUM_SPECIES; n++) { var_names_massfrac[n] = "D_"+spec_names[n]; diff --git a/Source/PeleLMTransportProp.cpp b/Source/PeleLMTransportProp.cpp index 798476685..fbcca60a3 100644 --- a/Source/PeleLMTransportProp.cpp +++ b/Source/PeleLMTransportProp.cpp @@ -50,6 +50,7 @@ void PeleLM::calcDiffusivity(const TimeStamp &a_time) { // Transport data pointer auto const* ltransparm = trans_parms.device_trans_parm(); + auto const* leosparm = eos_parms.device_eos_parm(); #ifdef AMREX_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) @@ -65,14 +66,14 @@ void PeleLM::calcDiffusivity(const TimeStamp &a_time) { // TODO: unity Lewis - amrex::ParallelFor(gbx, [rhoY, T, rhoD, lambda, mu, ltransparm] + amrex::ParallelFor(gbx, [rhoY, T, rhoD, lambda, mu, ltransparm, leosparm] AMREX_GPU_DEVICE (int i, int j, int k) noexcept { - getTransportCoeff( i, j, k, rhoY, T, rhoD, lambda, mu, ltransparm); + getTransportCoeff( i, j, k, rhoY, T, rhoD, lambda, mu, ltransparm, leosparm); }); #ifdef PELE_USE_EFIELD auto const& Ks = ldata_p->mob_cc.array(mfi,0); - auto eos = pele::physics::PhysicsType::eos(); + auto eos = pele::physics::PhysicsType::eos(leosparm); Real mwt[NUM_SPECIES] = {0.0}; eos.molecular_weight(mwt); amrex::ParallelFor(gbx, [rhoY, rhoD, T, Ks, mwt, zk=zk] @@ -122,7 +123,7 @@ PeleLM::getDiffusivity(int lev, int beta_comp, int ncomp, int doZeroVisc, for (MFIter mfi(beta_cc,TilingIfNotGPU()); mfi.isValid();++mfi) { for (int idim = 0; idim < AMREX_SPACEDIM; idim++) - { + { const Box ebx = mfi.nodaltilebox(idim); const Box& edomain = amrex::surroundingNodes(domain,idim); const auto& diff_c = beta_cc.const_array(mfi,beta_comp); @@ -140,11 +141,11 @@ PeleLM::getDiffusivity(int lev, int beta_comp, int ncomp, int doZeroVisc, } } #endif - + // Enable zeroing diffusivity on faces to produce walls if (doZeroVisc) { const auto geomdata = geom[lev].data(); - for (int idim = 0; idim < AMREX_SPACEDIM; idim++) { + for (int idim = 0; idim < AMREX_SPACEDIM; idim++) { const Box& edomain = amrex::surroundingNodes(domain,idim); #ifdef AMREX_USE_OMP #pragma omp parallel if (Gpu::notInLaunchRegion()) diff --git a/Source/PeleLMUMac.cpp b/Source/PeleLMUMac.cpp index 44692241f..447fa8721 100644 --- a/Source/PeleLMUMac.cpp +++ b/Source/PeleLMUMac.cpp @@ -10,7 +10,7 @@ void PeleLM::predictVelocity(std::unique_ptr &advData) { BL_PROFILE("PeleLM::predictVelocity()"); - // set umac boundaries to zero + // set umac boundaries to zero if ( advData->umac[0][0].nGrow() > 0 ) { for (int lev=0; lev <= finest_level; ++lev) { @@ -40,7 +40,7 @@ void PeleLM::predictVelocity(std::unique_ptr &advData) //---------------------------------------------------------------- // Predict face velocities at t^{n+1/2} with Godunov - auto bcRecVel = fetchBCRecArray(VELX,AMREX_SPACEDIM); + auto bcRecVel = fetchBCRecArray(VELX,AMREX_SPACEDIM); auto bcRecVel_d = convertToDeviceVector(bcRecVel); for (int lev = 0; lev <= finest_level; ++lev) { @@ -106,16 +106,49 @@ void PeleLM::addChiIncrement(int a_sdcIter, auto const& chiInc_ar = chiIncr[lev].const_array(mfi); auto const& chi_ar = advData->chi[lev].array(mfi); auto const& mac_divu_ar = advData->mac_divu[lev].array(mfi); - amrex::ParallelFor(gbx, [chi_ar, chiInc_ar, mac_divu_ar, a_sdcIter] - AMREX_GPU_DEVICE (int i, int j, int k) noexcept - { - if ( a_sdcIter == 1 ) { - chi_ar(i,j,k) = chiInc_ar(i,j,k); - } else { - chi_ar(i,j,k) += chiInc_ar(i,j,k); - } - mac_divu_ar(i,j,k) += chi_ar(i,j,k); - }); + if (m_chi_correction_type == "DivuEveryIter") { + amrex::ParallelFor(gbx, [chi_ar, chiInc_ar, mac_divu_ar, a_sdcIter] + AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + if ( a_sdcIter == 1 ) { + chi_ar(i,j,k) = chiInc_ar(i,j,k); + } else { + chi_ar(i,j,k) += chiInc_ar(i,j,k); + } + mac_divu_ar(i,j,k) += chi_ar(i,j,k); + }); + } else if (m_chi_correction_type == "DivuFirstIter") { + amrex::ParallelFor(gbx, [chi_ar, chiInc_ar, mac_divu_ar, a_sdcIter] + AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + if ( a_sdcIter == 1 ) { + chi_ar(i,j,k) = chiInc_ar(i,j,k) + mac_divu_ar(i,j,k); + } else { + chi_ar(i,j,k) += chiInc_ar(i,j,k); + } + mac_divu_ar(i,j,k) = chi_ar(i,j,k); + }); + } else if (m_chi_correction_type == "NoDivu") { + amrex::ParallelFor(gbx, [chi_ar, chiInc_ar, mac_divu_ar, a_sdcIter] + AMREX_GPU_DEVICE (int i, int j, int k) noexcept + { + if ( a_sdcIter == 1 ) { + chi_ar(i,j,k) = chiInc_ar(i,j,k); + } else { + chi_ar(i,j,k) += chiInc_ar(i,j,k); + } + mac_divu_ar(i,j,k) = chi_ar(i,j,k); + }); + } else { + amrex::Abort("Invalid chi_correction_type"); + } + + } + if (m_verbose > 1) { + amrex::Real max_corr = chiIncr[lev].norm0() * m_dt/m_dpdtFactor; + amrex::Print() << " Level " << lev << " SDC " << a_sdcIter + << ": Calculating Chi corr (" << m_chi_correction_type + << ") max relative P mismatch is " << max_corr << std::endl; } } } @@ -215,7 +248,7 @@ PeleLM::create_constrained_umac_grown(int a_lev, int a_nGrow, // Divergence preserving interp Interpolater* mapper = &face_divfree_interp; - + // Set BCRec for Umac Vector bcrec(1); for (int idim = 0; idim < AMREX_SPACEDIM; idim++) { @@ -225,16 +258,16 @@ PeleLM::create_constrained_umac_grown(int a_lev, int a_nGrow, } else { bcrec[0].setLo(idim,BCType::foextrap); bcrec[0].setHi(idim,BCType::foextrap); - } - } + } + } Array,AMREX_SPACEDIM> bcrecArr = {AMREX_D_DECL(bcrec,bcrec,bcrec)}; - + PhysBCFunct> crse_bndry_func(*crse_geom, bcrec, umacFill{}); Array>,AMREX_SPACEDIM> cbndyFuncArr = {AMREX_D_DECL(crse_bndry_func,crse_bndry_func,crse_bndry_func)}; - + PhysBCFunct> fine_bndry_func(*fine_geom, bcrec, umacFill{}); Array>,AMREX_SPACEDIM> fbndyFuncArr = {AMREX_D_DECL(fine_bndry_func,fine_bndry_func,fine_bndry_func)}; - + // Use piecewise constant interpolation in time, so create dummy variable for time Real dummy = 0.; FillPatchTwoLevels(u_mac_fine, IntVect(a_nGrow), dummy, diff --git a/Source/PeleLM_K.H b/Source/PeleLM_K.H index f5c040612..1c35fa338 100644 --- a/Source/PeleLM_K.H +++ b/Source/PeleLM_K.H @@ -4,6 +4,7 @@ #include #include +template AMREX_GPU_DEVICE AMREX_FORCE_INLINE void @@ -14,11 +15,12 @@ getTransportCoeff(int i, int j, int k, amrex::Array4< amrex::Real> const& lambda, amrex::Array4< amrex::Real> const& mu, pele::physics::transport::TransParm const* trans_parm) noexcept + pele::physics::PhysicsType::transport_type> const* trans_parm, + const pele::physics::eos::EosParm* eosparm) noexcept { using namespace amrex::literals; - auto eos = pele::physics::PhysicsType::eos(); + auto eos = pele::physics::PhysicsType::eos(eosparm); amrex::Real mwtinv[NUM_SPECIES] = {0.0}; eos.inv_molecular_weight(mwtinv); @@ -59,6 +61,55 @@ getTransportCoeff(int i, int j, int k, mu(i,j,k) = mu_cgs * 1.0e-1_rt; } +template <> +AMREX_GPU_DEVICE +AMREX_FORCE_INLINE +void +getTransportCoeff(int i, int j, int k, + amrex::Array4 const& rhoY, + amrex::Array4 const& T, + amrex::Array4< amrex::Real> const& rhoDi, + amrex::Array4< amrex::Real> const& lambda, + amrex::Array4< amrex::Real> const& mu, + pele::physics::transport::TransParm const* trans_parm, + const pele::physics::eos::EosParm* eosparm) noexcept +{ + using namespace amrex::literals; + + // Get rho & Y from rhoY + amrex::Real rho, rhoinv; + amrex::Real y[NUM_SPECIES] = {0.0}; + amrex::Real massdens[NUM_SPECIES]; + for (int n = 0; n < NUM_SPECIES; n++) { + massdens[n] = rhoY(i,j,k,n); + } + auto eos = pele::physics::PhysicsType::eos(eosparm); + eos.RY2RRinvY(massdens, rho, rhoinv, y); + + rho *= 1.0e-3_rt; // MKS -> CGS conversion + amrex::Real rhoDi_cgs[NUM_SPECIES] = {0.0}; + amrex::Real lambda_cgs = 0.0_rt; + amrex::Real mu_cgs = 0.0_rt; + amrex::Real dummy_xi = 0.0_rt; + amrex::Real Tloc = T(i,j,k); + + bool get_xi = false; + bool get_mu = true; + bool get_lam = false; + bool get_Ddiag = true; + auto trans = pele::physics::PhysicsType::transport(); + trans.transport(get_xi, get_mu, get_lam, get_Ddiag, Tloc, + rho, y, rhoDi_cgs, mu_cgs, dummy_xi, lambda_cgs, trans_parm); + + // Do CGS -> MKS conversions + for (int n = 0; n < NUM_SPECIES; n++) { + rhoDi(i,j,k,n) = rhoDi_cgs[n] * 1.0e-1_rt; + } + lambda(i,j,k) = 0.0; // lambda_cgs * 1.0e-5_rt; No need to carry lambda for manifold + mu(i,j,k) = mu_cgs * 1.0e-1_rt; +} + AMREX_GPU_DEVICE AMREX_FORCE_INLINE void @@ -72,15 +123,13 @@ getVelViscosity(int i, int j, int k, using namespace amrex::literals; // Get rho & Y from rhoY - amrex::Real rho = 0.0_rt; - for (int n = 0; n < NUM_SPECIES; n++) { - rho += rhoY(i,j,k,n); - } - amrex::Real rhoinv = 1.0_rt / rho; + amrex::Real rho, rhoinv; amrex::Real y[NUM_SPECIES] = {0.0}; + amrex::Real massdens[NUM_SPECIES]; for (int n = 0; n < NUM_SPECIES; n++) { - y[n] = rhoY(i,j,k,n) * rhoinv; + massdens[n] = rhoY(i,j,k,n); } + pele::physics::PhysicsType::eos_type::RY2RRinvY(massdens, rho, rhoinv, y); rho *= 1.0e-3_rt; // MKS -> CGS conversion amrex::Real temp = T(i,j,k); @@ -108,11 +157,12 @@ getPGivenRTY(int i, int j, int k, amrex::Array4 const& rho, amrex::Array4 const& rhoY, amrex::Array4 const& T, - amrex::Array4< amrex::Real> const& P) noexcept + amrex::Array4< amrex::Real> const& P, + const pele::physics::eos::EosParm * eosparm) noexcept { using namespace amrex::literals; - auto eos = pele::physics::PhysicsType::eos(); + auto eos = pele::physics::PhysicsType::eos(eosparm); amrex::Real rhoinv = 1.0_rt / rho(i,j,k); amrex::Real rho_cgs = rho(i,j,k) * 0.001_rt; @@ -125,6 +175,7 @@ getPGivenRTY(int i, int j, int k, P(i,j,k) = P(i,j,k) * 0.1_rt; // CGS -> MKS conversion } +template AMREX_GPU_DEVICE AMREX_FORCE_INLINE void @@ -138,11 +189,12 @@ compute_divu(int i, int j, int k, amrex::Array4 const& extRhoY, amrex::Array4 const& extRhoH, amrex::Array4< amrex::Real> const& divu, - int do_react) noexcept + int do_react, + const pele::physics::eos::EosParm* eosparm) noexcept { using namespace amrex::literals; - auto eos = pele::physics::PhysicsType::eos(); + auto eos = pele::physics::PhysicsType::eos(eosparm); amrex::Real mwtinv[NUM_SPECIES] = {0.0}; eos.inv_molecular_weight(mwtinv); @@ -173,8 +225,55 @@ compute_divu(int i, int j, int k, for (int n = 0; n < NUM_SPECIES; n++) { amrex::Real specTerm = specDiff(i,j,k,n) + extRhoY(i,j,k,n); if (do_react) specTerm += rhoYdot(i,j,k,n); - divu(i,j,k) += specTerm * ( mwtinv[n] * Wbar * rhoinv - hi[n] * denominv ); + divu(i,j,k) += specTerm * ( mwtinv[n] * Wbar * rhoinv - hi[n] * denominv ); + } +} + +template <> +AMREX_GPU_HOST_DEVICE +AMREX_FORCE_INLINE +void +compute_divu(int i, int j, int k, + amrex::Array4 const& rhoY, + amrex::Array4 const& T, + amrex::Array4 const& specDiff, + amrex::Array4 const& /*tempDiff*/, + amrex::Array4 const& /*specEnthDiff*/, + amrex::Array4 const& rhoYdot, + amrex::Array4 const& /*extRhoY*/, + amrex::Array4 const& /*extRhoH*/, + amrex::Array4< amrex::Real> const& divu, + int do_react, + const pele::physics::eos::EosParm* eosparm) noexcept +{ + using namespace amrex::literals; + + // Get rho & Ys from rhoYs. + amrex::Real rho, rhoinv; + amrex::Real y[NUM_SPECIES] = {0.0_rt}; + amrex::Real massdens[NUM_SPECIES] = {0.0_rt}; + for (int n = 0; n < NUM_SPECIES; n++) { + massdens[n] = rhoY(i,j,k,n); + } + + auto eos = pele::physics::PhysicsType::eos(eosparm); + eos.RY2RRinvY(massdens, rho, rhoinv, y); + amrex::Real derivs[NUM_SPECIES-1] = {0.0}; + rho /= 1.0e3; // Unit conversion MKS -> CGS + eos.RY2dRdY(rho, y, derivs); + + divu(i,j,k) = 0.0; + + for (int n = 0; n < NUM_SPECIES-1; n++) { + derivs[n] *= 1.0e3; // Unit conversion CGS -> MKS + divu(i,j,k) += derivs[n] * specDiff(i,j,k,n); + if (do_react) divu(i,j,k) += derivs[n] * (rhoYdot(i,j,k,n)); + // TODO: deal with extRhoY (below is not correct because derivs are dRho/dY, not dRho/dRhoY) + // divu(i,j,k) += derivs[n] * (extRhoY(i,j,k,n)); } + // First -rhoinv: from divu = -1/rho Drho/Dt + // Second rhoinv: convert from rho*Dxi/Dt (which RHS terms are evaluated for) to Dxi/Dt + divu(i,j,k) *= -rhoinv*rhoinv; } AMREX_GPU_DEVICE @@ -314,11 +413,12 @@ void getMwmixGivenRY(int i, int j, int k, amrex::Array4 const& rho, amrex::Array4 const& rhoY, - amrex::Array4< amrex::Real> const& Mwmix) noexcept + amrex::Array4< amrex::Real> const& Mwmix, + const pele::physics::eos::EosParm* eosparm) noexcept { using namespace amrex::literals; - auto eos = pele::physics::PhysicsType::eos(); + auto eos = pele::physics::PhysicsType::eos(eosparm); amrex::Real rhoinv = 1.0_rt / rho(i,j,k); amrex::Real y[NUM_SPECIES] = {0.0_rt}; for (int n = 0; n < NUM_SPECIES; n++) { @@ -460,17 +560,18 @@ AMREX_FORCE_INLINE void getHGivenT(int i, int j, int k, amrex::Array4 const& T, - amrex::Array4< amrex::Real> const& Hi) noexcept + amrex::Array4< amrex::Real> const& Hi, + const pele::physics::eos::EosParm * eosparm) noexcept { using namespace amrex::literals; - auto eos = pele::physics::PhysicsType::eos(); + auto eos = pele::physics::PhysicsType::eos(eosparm); amrex::Real hi_spec[NUM_SPECIES] = {0.0_rt}; eos.T2Hi(T(i,j,k), hi_spec); for (int n = 0; n < NUM_SPECIES; n++) { Hi(i,j,k,n) = hi_spec[n] * 0.0001_rt; // CGS -> MKS conversion } - + } AMREX_GPU_DEVICE @@ -525,11 +626,12 @@ getRHmixGivenTY(int i, int j, int k, amrex::Array4 const& rho, amrex::Array4 const& rhoY, amrex::Array4 const& T, - amrex::Array4< amrex::Real> const& Hmix) noexcept + amrex::Array4< amrex::Real> const& Hmix, + const pele::physics::eos::EosParm * eosparm) noexcept { using namespace amrex::literals; - auto eos = pele::physics::PhysicsType::eos(); + auto eos = pele::physics::PhysicsType::eos(eosparm); amrex::Real rhoinv = 1.0_rt / rho(i,j,k); amrex::Real y[NUM_SPECIES] = {0.0_rt}; for (int n = 0; n < NUM_SPECIES; n++) { @@ -547,11 +649,12 @@ getTfromHY(int i, int j, int k, amrex::Array4 const& rho, amrex::Array4 const& rhoY, amrex::Array4 const& rhoH, - amrex::Array4< amrex::Real> const& T) noexcept + amrex::Array4< amrex::Real> const& T, + const pele::physics::eos::EosParm * eosparm) noexcept { using namespace amrex::literals; - auto eos = pele::physics::PhysicsType::eos(); + auto eos = pele::physics::PhysicsType::eos(eosparm); amrex::Real rhoinv = 1.0_rt / rho(i,j,k); amrex::Real y[NUM_SPECIES] = {0.0}; for (int n = 0; n < NUM_SPECIES; n++) { @@ -570,11 +673,12 @@ getCpmixGivenRYT(int i, int j, int k, amrex::Array4 const& rho, amrex::Array4 const& rhoY, amrex::Array4 const& T, - amrex::Array4< amrex::Real> const& cpmix) noexcept + amrex::Array4< amrex::Real> const& cpmix, + const pele::physics::eos::EosParm * eosparm) noexcept { using namespace amrex::literals; - auto eos = pele::physics::PhysicsType::eos(); + auto eos = pele::physics::PhysicsType::eos(eosparm); amrex::Real rhoinv = 1.0_rt / rho(i,j,k); amrex::Real y[NUM_SPECIES] = {0.0}; for (int n = 0; n < NUM_SPECIES; n++) { @@ -601,11 +705,12 @@ buildAdvectionForcing(int i, int j, int k, int const& closed_chamber, int do_react, amrex::Array4< amrex::Real> const& forceY, - amrex::Array4< amrex::Real> const& forceT) noexcept + amrex::Array4< amrex::Real> const& forceT, + const pele::physics::eos::EosParm * eosparm) noexcept { using namespace amrex::literals; - auto eos = pele::physics::PhysicsType::eos(); + auto eos = pele::physics::PhysicsType::eos(eosparm); // Get species enthalpy amrex::Real hi_spec[NUM_SPECIES] = {0.0}; eos.T2Hi(T(i,j,k), hi_spec); @@ -618,7 +723,7 @@ buildAdvectionForcing(int i, int j, int k, for (int n = 0; n < NUM_SPECIES; n++) { y[n] = rhoY(i,j,k,n) * rhoinv; // get y forceY(i,j,k,n) = dn(i,j,k,n); // forceY = Dnk - if (do_react) forceY(i,j,k,n) += r(i,j,k,n); // + Rk + if (do_react) forceY(i,j,k,n) += r(i,j,k,n); // + Rk forceT(i,j,k) -= forceY(i,j,k,n) * hi_spec[n] * 0.0001_rt; // forceT -= Sum{ hk. (Rk + Dnk) } with CGS -> MKS conversion of hk forceY(i,j,k,n) += extRhoY(i,j,k,n); } @@ -667,28 +772,27 @@ reactionRateRhoY(int i, int j, int k, amrex::Array4 const& rhoY, amrex::Array4 const& rhoH, amrex::Array4 const& T, - amrex::Array4< amrex::Real> const& rhoYdot) noexcept + amrex::Array4< amrex::Real> const& rhoYdot, + const pele::physics::eos::EosParm * eosparm) noexcept { using namespace amrex::literals; - auto eos = pele::physics::PhysicsType::eos(); + auto eos = pele::physics::PhysicsType::eos(eosparm); // Get rho & Ys from rhoYs. - amrex::Real rho = 0.0_rt; - for (int n = 0; n < NUM_SPECIES; n++) { - rho += rhoY(i,j,k,n); - } - amrex::Real rhoinv = 1.0_rt / rho; - amrex::Real y[NUM_SPECIES] = {0.0_rt}; + amrex::Real rho, rhoinv; + amrex::Real y[NUM_SPECIES] = {0.0}; + amrex::Real massdens[NUM_SPECIES]; for (int n = 0; n < NUM_SPECIES; n++) { - y[n] = rhoY(i,j,k,n) * rhoinv; + massdens[n] = rhoY(i,j,k,n); } + eos.RY2RRinvY(massdens, rho, rhoinv, y); // Get T from Y/H. amrex::Real Tloc = T(i,j,k); amrex::Real H = rhoH(i,j,k) * rhoinv * 1.0e4_rt; // Include MKS -> CGS conversion eos.HY2T(H, y, Tloc); - + // Get wdot. rho = rho * 0.001_rt; // rho MKS -> CGS amrex::Real wdot[NUM_SPECIES] = {0.0_rt}; @@ -724,7 +828,8 @@ linearChemForcing(const amrex::Box& bx, amrex::Array4 const& rhoH_src_in, amrex::Array4 const& FC_in, amrex::Array4 const& avgIR, - amrex::Real &dt_react) + amrex::Real &dt_react, + const pele::physics::eos::EosParm * eosparm) { ParallelFor(bx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept @@ -740,21 +845,20 @@ linearChemForcing(const amrex::Box& bx, /* T update with rho, H and Y */ // Get updated rho - amrex::Real rho_loc = 0.0; - for (int n = 0; n < NUM_SPECIES; n++) { - rho_loc += rY_in(i,j,k,n); - } - // Get updated Ys + amrex::Real rho_loc = 0.0, rho_loc_inv = 0.0; amrex::Real Y_loc[NUM_SPECIES] = {0.0}; + amrex::Real massdens[NUM_SPECIES]; for (int n = 0; n < NUM_SPECIES; n++) { - Y_loc[n] = rY_in(i,j,k,n) / rho_loc; + massdens[n] = rY_in(i,j,k,n); } + pele::physics::PhysicsType::eos_type::RY2RRinvY(massdens, rho_loc, rho_loc_inv, Y_loc); + // Get updated H amrex::Real H_loc = rhoH_in(i,j,k,0) / rho_loc; // Get curr estimate of T amrex::Real T_loc = T_in(i,j,k,0); - auto eos = pele::physics::PhysicsType::eos(); + auto eos = pele::physics::PhysicsType::eos(eosparm); eos.HY2T(H_loc,Y_loc,T_loc); T_in(i,j,k,0) = T_loc; @@ -790,28 +894,27 @@ AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real getGammaInv(int i, int j, int k, - amrex::Array4 const& rhoY, - amrex::Array4 const& T) noexcept + amrex::Array4 const& rhoY, + amrex::Array4 const& T, + const pele::physics::eos::EosParm * eosparm) noexcept { using namespace amrex::literals; - auto eos = pele::physics::PhysicsType::eos(); + auto eos = pele::physics::PhysicsType::eos(eosparm); // Get rho & Y from rhoY - amrex::Real rho = 0.0_rt; - for (int n = 0; n < NUM_SPECIES; n++) { - rho += rhoY(i,j,k,n); - } - amrex::Real rhoinv = 1.0_rt / rho; + amrex::Real rho, rhoinv; amrex::Real y[NUM_SPECIES] = {0.0}; + amrex::Real massdens[NUM_SPECIES]; for (int n = 0; n < NUM_SPECIES; n++) { - y[n] = rhoY(i,j,k,n) * rhoinv; + massdens[n] = rhoY(i,j,k,n); } + pele::physics::PhysicsType::eos_type::RY2RRinvY(massdens, rho, rhoinv, y); amrex::Real cpmix = 0.0_rt; eos.TY2Cp(T(i,j,k), y, cpmix); amrex::Real cvmix = 0.0_rt; eos.TY2Cv(T(i,j,k), y, cvmix); - + amrex::Real gammainv = cvmix / cpmix; return gammainv; diff --git a/Utils/Make.PeleLMeX b/Utils/Make.PeleLMeX index 25e1f7117..a71234b3f 100644 --- a/Utils/Make.PeleLMeX +++ b/Utils/Make.PeleLMeX @@ -60,6 +60,25 @@ endif ifeq ($(Eos_Model),$(filter $(Eos_Model),Soave-Redlich-Kwong)) DEFINES += -DUSE_SRK_EOS endif +ifeq ($(Eos_Model),$(filter $(Eos_Model),Manifold)) + DEFINES += -DUSE_MANIFOLD_EOS +endif + +TORCH_LIBPATH = $(LIBTORCH_HOME)/lib + +ifeq ($(USE_CUDA),TRUE) + TORCH_LIBS = -ltorch -ltorch_cpu -lc10 -lc10_cuda -lcuda +else + TORCH_LIBS = -ltorch -ltorch_cpu -lc10 +endif + +ifeq ($(USE_LIBTORCH), TRUE) + DEFINES += -DUSE_LIBTORCH + INCLUDE_LOCATIONS += $(LIBTORCH_HOME)/include \ + $(LIBTORCH_HOME)/include/torch/csrc/api/include + LIBRARY_LOCATIONS += $(TORCH_LIBPATH) + LDFLAGS += -Wl,-rpath $(TORCH_LIBPATH) $(TORCH_LIBS) +endif # Transport model switches ifeq ($(Transport_Model), Simple) @@ -75,6 +94,9 @@ endif ifeq ($(Transport_Model), Sutherland) DEFINES += -DUSE_SUTHERLAND_TRANSPORT endif +ifeq ($(Transport_Model), Manifold) + DEFINES += -DUSE_MANIFOLD_TRANSPORT +endif ifeq ($(PELE_USE_KLU), TRUE) DEFINES += -DPELE_USE_KLU