Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Data Sampler for Plane/Line Output #1897

Merged
merged 7 commits into from
Oct 21, 2024
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions Exec/ABL/inputs_DataSampler
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# ------------------ INPUTS TO MAIN PROGRAM -------------------
max_step = 4000

amrex.fpe_trap_invalid = 1

fabarray.mfiter_tile_size = 1024 1024 1024

# PROBLEM SIZE & GEOMETRY
geometry.prob_extent = 1024 1024 1024
amr.n_cell = 64 64 64

geometry.is_periodic = 1 1 0

zlo.type = "NoSlipWall"
zhi.type = "SlipWall"

# TIME STEP CONTROL
erf.fixed_dt = 0.1 # fixed time step depending on grid resolution

# DIAGNOSTICS & VERBOSITY
erf.sum_interval = 1 # timesteps between computing mass
erf.v = 1 # verbosity in ERF.cpp
amr.v = 1 # verbosity in Amr.cpp

erf.data_log = my_data_file

erf.sampler_interval = 1
erf.do_line_sampling = true
erf.sample_line_lo = 5 32 5 10 32 5
erf.sample_line_hi = 5 32 25 1000 32 5
erf.sample_line_dir = 2 0

erf.do_plane_sampling = true
erf.sample_plane_lo = 48.0 48.0 32.0
erf.sample_plane_hi = 320.0 320.0 32.0
erf.sample_plane_dir = 2

# REFINEMENT / REGRIDDING
amr.max_level = 0 # maximum level number allowed

# CHECKPOINT FILES
erf.check_file = chk # root name of checkpoint file
erf.check_int = 100 # number of timesteps between checkpoints

# PLOTFILES
erf.plot_file_1 = plt # prefix of plotfile name
erf.plot_int_1 = 10 # number of timesteps between plotfiles
erf.plot_vars_1 = density rhoadv_0 x_velocity y_velocity z_velocity pressure temp theta

# SOLVER CHOICE
erf.alpha_T = 0.0
erf.alpha_C = 1.0
erf.use_gravity = false

erf.molec_diff_type = "None"
erf.les_type = "Smagorinsky"
erf.Cs = 0.1

erf.init_type = "uniform"

# PROBLEM PARAMETERS
prob.rho_0 = 1.0
prob.A_0 = 1.0

prob.U_0 = 10.0
prob.V_0 = 0.0
prob.W_0 = 0.0
prob.T_0 = 300.0

# Higher values of perturbations lead to instability
# Instability seems to be coming from BC
prob.U_0_Pert_Mag = 0.08
prob.V_0_Pert_Mag = 0.08 #
prob.W_0_Pert_Mag = 0.0
6 changes: 6 additions & 0 deletions Source/ERF.H
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
#include <ERF_MRI.H>
#include <ERF_PhysBCFunct.H>
#include <ERF_FillPatcher.H>
#include <ERF_SampleData.H>

#ifdef ERF_USE_PARTICLES
#include "ERF_ParticleData.H"
Expand Down Expand Up @@ -1263,6 +1264,11 @@ private:
amrex::ParallelDescriptor::Barrier("ERF::setRecordSampleLineInfo");
}

// Data sampler for line and plane output
int sampler_interval = -1;
amrex::Real sampler_per = -1.0;
std::unique_ptr<SampleData> data_sampler = nullptr;

amrex::Vector<std::unique_ptr<std::fstream> > datalog;
amrex::Vector<std::string> datalogname;

Expand Down
15 changes: 15 additions & 0 deletions Source/ERF.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -538,6 +538,12 @@ ERF::post_timestep (int nstep, Real time, Real dt_lev0)
}
}

// Write plane/line sampler data
if (is_it_time_for_action(nstep, time, dt_lev0, sampler_interval, sampler_per) && (data_sampler) ) {
data_sampler->get_sample_data(geom, vars_new);
data_sampler->write_sample_data(t_new, istep, ref_ratio, geom);
}

// Moving terrain
if ( solverChoice.use_terrain && (solverChoice.terrain_type == TerrainType::Moving) )
{
Expand Down Expand Up @@ -1167,6 +1173,11 @@ ERF::InitData_post ()

}

// Create object to do line and plane sampling if needed
bool do_line = false; bool do_plane = false;
pp.query("do_line_sampling",do_line); pp.query("do_plane_sampling",do_plane);
if (do_line || do_plane) { data_sampler = std::make_unique<SampleData>(do_line, do_plane); }

#ifdef ERF_USE_EB
bool write_eb_surface = false;
pp.query("write_eb_surface", write_eb_surface);
Expand Down Expand Up @@ -1495,6 +1506,10 @@ ERF::ReadParameters ()
pp.query("column_loc_y", column_loc_y);
pp.query("column_file_name", column_file_name);

// Sampler output frequency
pp.query("sampler_per", sampler_per);
pp.query("sampler_interval", sampler_interval);

// Specify information about outputting planes of data
pp.query("output_bndry_planes", output_bndry_planes);
pp.query("bndry_output_planes_interval", bndry_output_planes_interval);
Expand Down
Loading
Loading