diff --git a/amr-wind/equation_systems/icns/source_terms/CMakeLists.txt b/amr-wind/equation_systems/icns/source_terms/CMakeLists.txt index 41b7032f4d..959893163c 100644 --- a/amr-wind/equation_systems/icns/source_terms/CMakeLists.txt +++ b/amr-wind/equation_systems/icns/source_terms/CMakeLists.txt @@ -13,5 +13,6 @@ target_sources(${amr_wind_lib_name} PRIVATE ABLMesoForcingMom.cpp BurggrafFlowForcing.cpp RayleighDamping.cpp - NonLinearSGSTerm.cpp + NonLinearSGSTerm.cpp + DragForcing.cpp ) diff --git a/amr-wind/equation_systems/icns/source_terms/DragForcing.H b/amr-wind/equation_systems/icns/source_terms/DragForcing.H new file mode 100644 index 0000000000..283ccd7bdc --- /dev/null +++ b/amr-wind/equation_systems/icns/source_terms/DragForcing.H @@ -0,0 +1,55 @@ +#ifndef DRAGFORCING_H +#define DRAGFORCING_H + +#include "amr-wind/equation_systems/icns/MomentumSource.H" +#include "amr-wind/core/SimTime.H" +#include "amr-wind/CFDSim.H" + +namespace amr_wind::pde::icns { + +/** Adds the forcing term to include the presence of immersed boundary + * + * \ingroup icns_src + * + * + */ +class DragForcing : public MomentumSource::Register +{ +public: + static std::string identifier() { return "DragForcing"; } + + explicit DragForcing(const CFDSim& sim); + + ~DragForcing() override; + + void operator()( + const int lev, + const amrex::MFIter& mfi, + const amrex::Box& bx, + const FieldState fstate, + const amrex::Array4& src_term) const override; + +private: + const SimTime& m_time; + const CFDSim& m_sim; + const amrex::AmrCore& m_mesh; + const Field& m_velocity; + amrex::Gpu::DeviceVector m_device_vel_ht; + amrex::Gpu::DeviceVector m_device_vel_vals; + amrex::Real m_drag_coefficient{10.0}; + amrex::Real m_sponge_strength{1.0}; + amrex::Real m_sponge_density{1.0}; + amrex::Real m_sponge_distance_west{-1000}; + amrex::Real m_sponge_distance_east{1000}; + amrex::Real m_sponge_distance_south{-1000}; + amrex::Real m_sponge_distance_north{1000}; + int m_sponge_west{0}; + int m_sponge_east{1}; + int m_sponge_south{0}; + int m_sponge_north{1}; + bool m_is_laminar{false}; +}; + +} // namespace amr_wind::pde::icns + +#endif diff --git a/amr-wind/equation_systems/icns/source_terms/DragForcing.cpp b/amr-wind/equation_systems/icns/source_terms/DragForcing.cpp new file mode 100644 index 0000000000..36655d04ec --- /dev/null +++ b/amr-wind/equation_systems/icns/source_terms/DragForcing.cpp @@ -0,0 +1,181 @@ +#include "amr-wind/equation_systems/icns/source_terms/DragForcing.H" +#include "amr-wind/utilities/IOManager.H" + +#include "AMReX_Gpu.H" +#include "AMReX_Random.H" +#include "amr-wind/wind_energy/ABL.H" + +namespace amr_wind::pde::icns { + +DragForcing::DragForcing(const CFDSim& sim) + : m_time(sim.time()) + , m_sim(sim) + , m_mesh(sim.mesh()) + , m_velocity(sim.repo().get_field("velocity")) +{ + amrex::ParmParse pp("DragForcing"); + pp.query("drag_coefficient", m_drag_coefficient); + pp.query("sponge_strength", m_sponge_strength); + pp.query("sponge_density", m_sponge_density); + pp.query("sponge_distance_west", m_sponge_distance_west); + pp.query("sponge_distance_east", m_sponge_distance_east); + pp.query("sponge_distance_south", m_sponge_distance_south); + pp.query("sponge_distance_north", m_sponge_distance_north); + pp.query("sponge_west", m_sponge_west); + pp.query("sponge_east", m_sponge_east); + pp.query("sponge_south", m_sponge_south); + pp.query("sponge_north", m_sponge_north); + pp.query("is_laminar", m_is_laminar); + const auto& phy_mgr = m_sim.physics_manager(); + if (phy_mgr.contains("ABL")) { + const auto& abl = m_sim.physics_manager().get(); + const auto& fa_velocity = abl.abl_statistics().vel_profile_coarse(); + m_device_vel_ht.resize(fa_velocity.line_centroids().size()); + m_device_vel_vals.resize(fa_velocity.line_average().size()); + amrex::Gpu::copy( + amrex::Gpu::hostToDevice, fa_velocity.line_centroids().begin(), + fa_velocity.line_centroids().end(), m_device_vel_ht.begin()); + amrex::Gpu::copy( + amrex::Gpu::hostToDevice, fa_velocity.line_average().begin(), + fa_velocity.line_average().end(), m_device_vel_vals.begin()); + } else { + m_sponge_strength = 0.0; + } +} + +DragForcing::~DragForcing() = default; + +void DragForcing::operator()( + const int lev, + const amrex::MFIter& mfi, + const amrex::Box& bx, + const FieldState fstate, + const amrex::Array4& src_term) const +{ + const auto& vel = + m_velocity.state(field_impl::dof_state(fstate))(lev).const_array(mfi); + const bool is_terrain = + this->m_sim.repo().int_field_exists("terrain_blank"); + if (!is_terrain) { + amrex::Abort("Need terrain blanking variable to use this source term"); + } + auto* const m_terrain_blank = + &this->m_sim.repo().get_int_field("terrain_blank"); + const auto& blank = (*m_terrain_blank)(lev).const_array(mfi); + auto* const m_terrain_drag = + &this->m_sim.repo().get_int_field("terrain_drag"); + const auto& drag = (*m_terrain_drag)(lev).const_array(mfi); + auto* const m_terrainz0 = &this->m_sim.repo().get_field("terrainz0"); + const auto& terrainz0 = (*m_terrainz0)(lev).const_array(mfi); + const auto& geom = m_mesh.Geom(lev); + const auto& dx = geom.CellSizeArray(); + const auto& prob_lo = geom.ProbLoArray(); + const auto& prob_hi = geom.ProbHiArray(); + const amrex::Real drag_coefficient = m_drag_coefficient; + const amrex::Real sponge_strength = m_sponge_strength; + const amrex::Real sponge_density = m_sponge_density; + const amrex::Real start_east = prob_hi[0] - m_sponge_distance_east; + const amrex::Real start_west = prob_lo[0] - m_sponge_distance_west; + const amrex::Real start_north = prob_hi[1] - m_sponge_distance_north; + const amrex::Real start_south = prob_lo[1] - m_sponge_distance_south; + const int sponge_east = m_sponge_east; + const int sponge_west = m_sponge_west; + const int sponge_south = m_sponge_south; + const int sponge_north = m_sponge_north; + // Copy Data + const auto* device_vel_ht = m_device_vel_ht.data(); + const auto* device_vel_vals = m_device_vel_vals.data(); + const unsigned vsize = m_device_vel_ht.size(); + const auto& dt = m_time.delta_t(); + const bool is_laminar = m_is_laminar; + const amrex::Real scale_factor = (dx[2] < 1.0) ? 1.0 : 1.0 / dx[2]; + const amrex::Real Cd = + (is_laminar && dx[2] < 1) ? drag_coefficient : drag_coefficient / dx[2]; + const amrex::Real z0_min = 1e-4; + const auto tiny = std::numeric_limits::epsilon(); + const amrex::Real kappa = 0.41; + const amrex::Real cd_max = 1000.0; + amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { + 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::Real xstart_damping = 0; + amrex::Real ystart_damping = 0; + amrex::Real xend_damping = 0; + amrex::Real yend_damping = 0; + amrex::Real xi_end = (x - start_east) / (prob_hi[0] - start_east); + amrex::Real xi_start = (start_west - x) / (start_west - prob_lo[0]); + xi_start = sponge_west * std::max(xi_start, 0.0); + xi_end = sponge_east * std::max(xi_end, 0.0); + xstart_damping = sponge_west * sponge_strength * xi_start * xi_start; + xend_damping = sponge_east * sponge_strength * xi_end * xi_end; + amrex::Real yi_end = (y - start_north) / (prob_hi[1] - start_north); + amrex::Real yi_start = (start_south - y) / (start_south - prob_lo[1]); + yi_start = sponge_south * std::max(yi_start, 0.0); + yi_end = sponge_north * std::max(yi_end, 0.0); + ystart_damping = sponge_strength * yi_start * yi_start; + yend_damping = sponge_strength * yi_end * yi_end; + amrex::Real spongeVelX = 0.0; + amrex::Real spongeVelY = 0.0; + amrex::Real spongeVelZ = 0.0; + amrex::Real residual = 1000; + amrex::Real height_error = 0.0; + for (unsigned ii = 0; ii < vsize; ++ii) { + height_error = std::abs(z - device_vel_ht[ii]); + if (height_error < residual) { + residual = height_error; + const unsigned ix = 3 * ii; + const unsigned iy = 3 * ii + 1; + const unsigned iz = 3 * ii + 2; + spongeVelX = device_vel_vals[ix]; + spongeVelY = device_vel_vals[iy]; + spongeVelZ = device_vel_vals[iz]; + } + } + amrex::Real Dxz = 0.0; + amrex::Real Dyz = 0.0; + amrex::Real bc_forcing_x = 0; + amrex::Real bc_forcing_y = 0; + const amrex::Real ux1 = vel(i, j, k, 0); + const amrex::Real uy1 = vel(i, j, k, 1); + const amrex::Real uz1 = vel(i, j, k, 2); + const amrex::Real m = std::sqrt(ux1 * ux1 + uy1 * uy1 + uz1 * uz1); + if (drag(i, j, k) == 1 && (!is_laminar)) { + const amrex::Real ux2 = vel(i, j, k + 1, 0); + const amrex::Real uy2 = vel(i, j, k + 1, 1); + const amrex::Real m2 = std::sqrt(ux2 * ux2 + uy2 * uy2); + const amrex::Real z0 = std::max(terrainz0(i, j, k), z0_min); + const amrex::Real ustar = m2 * kappa / std::log(1.5 * dx[2] / z0); + const amrex::Real uTarget = + ustar / kappa * std::log(0.5 * dx[2] / z0); + const amrex::Real uxTarget = + uTarget * ux2 / (tiny + std::sqrt(ux2 * ux2 + uy2 * uy2)); + const amrex::Real uyTarget = + uTarget * uy2 / (tiny + std::sqrt(ux2 * ux2 + uy2 * uy2)); + bc_forcing_x = -(uxTarget - ux1) / dt; + bc_forcing_y = -(uyTarget - uy1) / dt; + Dxz = -ustar * ustar * ux1 / + (tiny + std::sqrt(ux1 * ux1 + uy1 * uy1)) / dx[2]; + Dyz = -ustar * ustar * uy1 / + (tiny + std::sqrt(ux1 * ux1 + uy1 * uy1)) / dx[2]; + } + const amrex::Real CdM = + std::min(Cd / (m + tiny), cd_max / scale_factor); + src_term(i, j, k, 0) -= + (CdM * m * ux1 * blank(i, j, k) + Dxz * drag(i, j, k) + + bc_forcing_x * drag(i, j, k) + + (xstart_damping + xend_damping + ystart_damping + yend_damping) * + (ux1 - sponge_density * spongeVelX)); + src_term(i, j, k, 1) -= + (CdM * m * uy1 * blank(i, j, k) + Dyz * drag(i, j, k) + + bc_forcing_y * drag(i, j, k) + + (xstart_damping + xend_damping + ystart_damping + yend_damping) * + (uy1 - sponge_density * spongeVelY)); + src_term(i, j, k, 2) -= + (CdM * m * uz1 * blank(i, j, k) + + (xstart_damping + xend_damping + ystart_damping + yend_damping) * + (uz1 - sponge_density * spongeVelZ)); + }); +} + +} // namespace amr_wind::pde::icns diff --git a/amr-wind/equation_systems/temperature/source_terms/CMakeLists.txt b/amr-wind/equation_systems/temperature/source_terms/CMakeLists.txt index c98226d973..9fa2e2057f 100644 --- a/amr-wind/equation_systems/temperature/source_terms/CMakeLists.txt +++ b/amr-wind/equation_systems/temperature/source_terms/CMakeLists.txt @@ -1,4 +1,5 @@ target_sources(${amr_wind_lib_name} PRIVATE ABLMesoForcingTemp.cpp BodyForce.cpp HurricaneTempForcing.cpp +DragTempForcing.cpp ) diff --git a/amr-wind/equation_systems/temperature/source_terms/DragTempForcing.H b/amr-wind/equation_systems/temperature/source_terms/DragTempForcing.H new file mode 100644 index 0000000000..8c504d0ffb --- /dev/null +++ b/amr-wind/equation_systems/temperature/source_terms/DragTempForcing.H @@ -0,0 +1,36 @@ +#ifndef DRAGTEMPFORCING_H +#define DRAGTEMPFORCING_H + +#include "amr-wind/equation_systems/temperature/TemperatureSource.H" +#include "amr-wind/core/SimTime.H" +#include "amr-wind/CFDSim.H" + +namespace amr_wind::pde::temperature { + +class DragTempForcing : public TemperatureSource::Register +{ +public: + static std::string identifier() { return "DragTempForcing"; } + + explicit DragTempForcing(const CFDSim& sim); + + ~DragTempForcing() override; + + void operator()( + const int lev, + const amrex::MFIter& mfi, + const amrex::Box& bx, + const FieldState /*fstate*/, + const amrex::Array4& src_term) const override; + +private: + const CFDSim& m_sim; + const amrex::AmrCore& m_mesh; + const Field& m_velocity; + const Field& m_temperature; + amrex::Real m_drag_coefficient{1.0}; + amrex::Real m_reference_temperature{300.0}; +}; + +} // namespace amr_wind::pde::temperature +#endif diff --git a/amr-wind/equation_systems/temperature/source_terms/DragTempForcing.cpp b/amr-wind/equation_systems/temperature/source_terms/DragTempForcing.cpp new file mode 100644 index 0000000000..098e806cc0 --- /dev/null +++ b/amr-wind/equation_systems/temperature/source_terms/DragTempForcing.cpp @@ -0,0 +1,63 @@ + +#include "amr-wind/equation_systems/temperature/source_terms/DragTempForcing.H" +#include "amr-wind/utilities/IOManager.H" + +#include "AMReX_ParmParse.H" +#include "AMReX_Gpu.H" +#include "AMReX_Random.H" + +namespace amr_wind::pde::temperature { + +DragTempForcing::DragTempForcing(const CFDSim& sim) + : m_sim(sim) + , m_mesh(sim.mesh()) + , m_velocity(sim.repo().get_field("velocity")) + , m_temperature(sim.repo().get_field("temperature")) +{ + amrex::ParmParse pp("DragTempForcing"); + pp.query("drag_coefficient", m_drag_coefficient); + pp.query("reference_temperature", m_reference_temperature); +} + +DragTempForcing::~DragTempForcing() = default; + +void DragTempForcing::operator()( + const int lev, + const amrex::MFIter& mfi, + const amrex::Box& bx, + const FieldState fstate, + const amrex::Array4& src_term) const +{ + const auto& vel = + m_velocity.state(field_impl::dof_state(fstate))(lev).const_array(mfi); + const auto& temperature = + m_temperature.state(field_impl::dof_state(fstate))(lev).const_array( + mfi); + const bool is_terrain = + this->m_sim.repo().int_field_exists("terrain_blank"); + if (!is_terrain) { + amrex::Abort("Need terrain blanking variable to use this source term"); + } + auto* const m_terrain_blank = + &this->m_sim.repo().get_int_field("terrain_blank"); + const auto& blank = (*m_terrain_blank)(lev).const_array(mfi); + const auto& geom = m_mesh.Geom(lev); + const auto& dx = geom.CellSizeArray(); + const amrex::Real drag_coefficient = m_drag_coefficient / dx[2]; + const amrex::Real reference_temperature = m_reference_temperature; + const auto tiny = std::numeric_limits::epsilon(); + const amrex::Real cd_max = 10.0; + amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { + const amrex::Real ux1 = vel(i, j, k, 0); + const amrex::Real uy1 = vel(i, j, k, 1); + const amrex::Real uz1 = vel(i, j, k, 2); + const amrex::Real m = std::sqrt(ux1 * ux1 + uy1 * uy1 + uz1 * uz1); + const amrex::Real Cd = + std::min(drag_coefficient / (m + tiny), cd_max / dx[2]); + src_term(i, j, k, 0) -= + (Cd * (temperature(i, j, k, 0) - reference_temperature) * + blank(i, j, k, 0)); + }); +} + +} // namespace amr_wind::pde::temperature diff --git a/amr-wind/physics/CMakeLists.txt b/amr-wind/physics/CMakeLists.txt index 58f5a3180d..841a4eefdd 100644 --- a/amr-wind/physics/CMakeLists.txt +++ b/amr-wind/physics/CMakeLists.txt @@ -16,6 +16,7 @@ target_sources(${amr_wind_lib_name} ScalarAdvection.cpp VortexDipole.cpp BurggrafFlow.cpp + TerrainDrag.cpp ActuatorSourceTagging.cpp Intermittency.cpp ) diff --git a/amr-wind/physics/TerrainDrag.H b/amr-wind/physics/TerrainDrag.H new file mode 100644 index 0000000000..e95a736126 --- /dev/null +++ b/amr-wind/physics/TerrainDrag.H @@ -0,0 +1,65 @@ +#ifndef TerrainDrag_H +#define TerrainDrag_H + +#include "amr-wind/core/Physics.H" +#include "amr-wind/core/Field.H" +#include "amr-wind/CFDSim.H" + +namespace amr_wind::terraindrag { + +namespace {} // namespace + +/** Terraindrag Flow physics + * \ingroup physics + */ + +class TerrainDrag : public Physics::Register +{ +public: + static std::string identifier() { return "TerrainDrag"; } + + explicit TerrainDrag(CFDSim& sim); + + ~TerrainDrag() override = default; + + void + initialize_fields(int /*level*/, const amrex::Geometry& /*geom*/) override + {} + + void pre_init_actions() override; + + void post_init_actions() override; + + void post_regrid_actions() override {} + + void pre_advance_work() override {} + + void post_advance_work() override {} + + int return_blank_value(int i, int j, int k); + +private: + CFDSim& m_sim; + const FieldRepo& m_repo; + const amrex::AmrCore& m_mesh; + Field& m_velocity; + //! Blanking Field for Terrain or Buildings + IntField& m_terrain_blank; + //! Terrain Drag Force Term + IntField& m_terrain_drag; + //! Reading the Terrain Coordinates from file + amrex::Vector m_xterrain; + amrex::Vector m_yterrain; + amrex::Vector m_zterrain; + //! Roughness Field + Field& m_terrainz0; + Field& m_terrain_height; + //! Reading the Roughness Coordinates from file - Not Fully there yet + //! Need updates to ABLWallFunction in future + amrex::Vector m_xrough; + amrex::Vector m_yrough; + amrex::Vector m_z0rough; +}; +} // namespace amr_wind::terraindrag + +#endif diff --git a/amr-wind/physics/TerrainDrag.cpp b/amr-wind/physics/TerrainDrag.cpp new file mode 100644 index 0000000000..26ebf71035 --- /dev/null +++ b/amr-wind/physics/TerrainDrag.cpp @@ -0,0 +1,186 @@ +#include "amr-wind/physics/TerrainDrag.H" +#include "amr-wind/CFDSim.H" +#include "AMReX_iMultiFab.H" +#include "AMReX_MultiFabUtil.H" +#include "AMReX_ParmParse.H" +#include "AMReX_ParReduce.H" +#include "amr-wind/utilities/trig_ops.H" +#include "amr-wind/utilities/IOManager.H" + +namespace amr_wind::terraindrag { + +namespace {} // namespace + +TerrainDrag::TerrainDrag(CFDSim& sim) + : m_sim(sim) + , m_repo(sim.repo()) + , m_mesh(sim.mesh()) + , m_velocity(sim.repo().get_field("velocity")) + , m_terrain_blank(sim.repo().declare_int_field("terrain_blank", 1, 1, 1)) + , m_terrain_drag(sim.repo().declare_int_field("terrain_drag", 1, 1, 1)) + , m_terrainz0(sim.repo().declare_field("terrainz0", 1, 1, 1)) + , m_terrain_height(sim.repo().declare_field("terrain_height", 1, 1, 1)) +{ + std::string terrainfile("terrain.amrwind"); + std::ifstream file(terrainfile, std::ios::in); + if (!file.good()) { + amrex::Abort("Cannot find terrain.amrwind file"); + } + amrex::Real value1, value2, value3; + while (file >> value1 >> value2 >> value3) { + m_xterrain.push_back(value1); + m_yterrain.push_back(value2); + m_zterrain.push_back(value3); + } + file.close(); + // No checks for the file as it is optional currently + std::string roughnessfile("terrain.roughness"); + std::ifstream file1(roughnessfile, std::ios::in); + while (file1 >> value1 >> value2 >> value3) { + m_xrough.push_back(value1); + m_yrough.push_back(value2); + m_z0rough.push_back(value3); + } + file1.close(); + m_sim.io_manager().register_output_int_var("terrain_drag"); + m_sim.io_manager().register_output_int_var("terrain_blank"); + m_sim.io_manager().register_io_var("terrainz0"); + m_sim.io_manager().register_io_var("terrain_height"); +} + +void TerrainDrag::post_init_actions() +{ + BL_PROFILE("amr-wind::" + this->identifier() + "::post_init_actions"); + const auto& geom_vec = m_sim.repo().mesh().Geom(); + const int nlevels = m_sim.repo().num_active_levels(); + for (int level = 0; level < nlevels; ++level) { + const auto& geom = geom_vec[level]; + const auto& dx = geom.CellSizeArray(); + const auto& prob_lo = geom.ProbLoArray(); + auto& velocity = m_velocity(level); + auto& blanking = m_terrain_blank(level); + auto& terrainz0 = m_terrainz0(level); + auto& terrain_height = m_terrain_height(level); + auto& drag = m_terrain_drag(level); + // copy terrain data to gpu + amrex::Gpu::DeviceVector device_xterrain( + m_xterrain.size()); + amrex::Gpu::DeviceVector device_yterrain( + m_xterrain.size()); + amrex::Gpu::DeviceVector device_zterrain( + m_xterrain.size()); + amrex::Gpu::copy( + amrex::Gpu::hostToDevice, m_xterrain.begin(), m_xterrain.end(), + device_xterrain.begin()); + amrex::Gpu::copy( + amrex::Gpu::hostToDevice, m_yterrain.begin(), m_yterrain.end(), + device_yterrain.begin()); + amrex::Gpu::copy( + amrex::Gpu::hostToDevice, m_zterrain.begin(), m_zterrain.end(), + device_zterrain.begin()); + const auto* xterrain_ptr = device_xterrain.data(); + const auto* yterrain_ptr = device_yterrain.data(); + const auto* zterrain_ptr = device_zterrain.data(); + // Copy Roughness to gpu + amrex::Gpu::DeviceVector device_xrough(m_xrough.size()); + amrex::Gpu::DeviceVector device_yrough(m_xrough.size()); + amrex::Gpu::DeviceVector device_z0rough(m_xrough.size()); + amrex::Gpu::copy( + amrex::Gpu::hostToDevice, m_xrough.begin(), m_xrough.end(), + device_xrough.begin()); + amrex::Gpu::copy( + amrex::Gpu::hostToDevice, m_yrough.begin(), m_yrough.end(), + device_yrough.begin()); + amrex::Gpu::copy( + amrex::Gpu::hostToDevice, m_z0rough.begin(), m_z0rough.end(), + device_z0rough.begin()); + const auto* xrough_ptr = device_xrough.data(); + const auto* yrough_ptr = device_yrough.data(); + const auto* z0rough_ptr = device_z0rough.data(); + for (amrex::MFIter mfi(velocity); mfi.isValid(); ++mfi) { + const auto& vbx = mfi.validbox(); + auto levelBlanking = blanking.array(mfi); + auto levelDrag = drag.array(mfi); + auto levelz0 = terrainz0.array(mfi); + auto levelheight = terrain_height.array(mfi); + const unsigned terrainSize = m_xterrain.size(); + const unsigned roughnessSize = m_xrough.size(); + amrex::ParallelFor( + vbx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { + // compute the source 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]; + // Terrain Height + amrex::Real residual = 10000; + amrex::Real terrainHt = 0.0; + for (unsigned ii = 0; ii < terrainSize; ++ii) { + const amrex::Real radius = std::sqrt( + std::pow(x - xterrain_ptr[ii], 2) + + std::pow(y - yterrain_ptr[ii], 2)); + if (radius < residual) { + residual = radius; + terrainHt = zterrain_ptr[ii]; + } + } + levelBlanking(i, j, k, 0) = + static_cast(z <= terrainHt); + levelheight(i, j, k, 0) = + std::max(std::abs(z - terrainHt), 0.5 * dx[2]); + residual = 10000; + amrex::Real roughz0 = 0.1; + for (unsigned ii = 0; ii < roughnessSize; ++ii) { + const amrex::Real radius = std::sqrt( + std::pow(x - xrough_ptr[ii], 2) + + std::pow(y - yrough_ptr[ii], 2)); + if (radius < residual) { + residual = radius; + roughz0 = z0rough_ptr[ii]; + } + if (radius < dx[0]) { + break; + } + } + levelz0(i, j, k, 0) = roughz0; + }); + amrex::ParallelFor( + vbx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { + // Terrain Height + amrex::Real residual = 10000; + amrex::Real terrainHt = 0.0; + 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]; + for (unsigned ii = 0; ii < terrainSize; ++ii) { + const amrex::Real radius = std::sqrt( + std::pow(x - xterrain_ptr[ii], 2) + + std::pow(y - yterrain_ptr[ii], 2)); + if (radius < residual) { + residual = radius; + terrainHt = zterrain_ptr[ii]; + } + } + levelDrag(i, j, k, 0) = 0; + if (z > terrainHt && k > 0 && + levelBlanking(i, j, k - 1, 0) == 1) { + levelDrag(i, j, k, 0) = 1; + } + }); + } + } +} + +void TerrainDrag::pre_init_actions() +{ + BL_PROFILE("amr-wind::" + this->identifier() + "::pre_init_actions"); +} + +int TerrainDrag::return_blank_value(int i, int j, int k) +{ + int lev = 0; + amrex::MFIter mfi(m_terrain_blank(lev)); + const auto& terrain_blank = m_terrain_blank(lev).const_array(mfi); + return int(terrain_blank(i, j, k)); +} + +} // namespace amr_wind::terraindrag diff --git a/amr-wind/turbulence/LES/Kosovic.cpp b/amr-wind/turbulence/LES/Kosovic.cpp index 13f975c87c..dfae6d5f0a 100644 --- a/amr-wind/turbulence/LES/Kosovic.cpp +++ b/amr-wind/turbulence/LES/Kosovic.cpp @@ -41,7 +41,6 @@ Kosovic::Kosovic(CFDSim& sim) } pp.query("LESOff", m_LESTurnOff); } - template void Kosovic::update_turbulent_viscosity( const FieldState fstate, const DiffusionType /*unused*/) @@ -55,7 +54,11 @@ void Kosovic::update_turbulent_viscosity( const auto& den = m_rho.state(fstate); const auto& geom_vec = repo.mesh().Geom(); const amrex::Real Cs_sqr = this->m_Cs * this->m_Cs; - + const bool has_terrain = + this->m_sim.repo().int_field_exists("terrain_blank"); + const auto* m_terrain_blank = + has_terrain ? &this->m_sim.repo().get_int_field("terrain_blank") + : nullptr; // Populate strainrate into the turbulent viscosity arrays to avoid creating // a temporary buffer fvm::strainrate(mu_turb, vel); @@ -83,6 +86,9 @@ void Kosovic::update_turbulent_viscosity( const auto& mu_arr = mu_turb(lev).array(mfi); const auto& rho_arr = den(lev).const_array(mfi); const auto& divNijLevel = (this->m_divNij)(lev).array(mfi); + const auto& blank_arr = + has_terrain ? (*m_terrain_blank)(lev).const_array(mfi) + : amrex::Array4(); amrex::ParallelFor( bx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { const amrex::Real rho = rho_arr(i, j, k); @@ -100,16 +106,22 @@ void Kosovic::update_turbulent_viscosity( smag_factor + std::pow(fmu, locSurfaceRANSExp) * ransL) + (1 - locSurfaceFactor) * smag_factor; - mu_arr(i, j, k) *= rho * viscosityScale * turnOff; + const amrex::Real blankTerrain = + (has_terrain) ? 1 - blank_arr(i, j, k, 0) : 1.0; + mu_arr(i, j, k) *= + rho * viscosityScale * turnOff * blankTerrain; amrex::Real stressScale = locSurfaceFactor * (std::pow(1 - fmu, locSurfaceRANSExp) * smag_factor * 0.25 * locC1 + std::pow(fmu, locSurfaceRANSExp) * ransL) + (1 - locSurfaceFactor) * smag_factor * 0.25 * locC1; - divNijLevel(i, j, k, 0) *= rho * stressScale * turnOff; - divNijLevel(i, j, k, 1) *= rho * stressScale * turnOff; - divNijLevel(i, j, k, 2) *= rho * stressScale * turnOff; + divNijLevel(i, j, k, 0) *= + rho * stressScale * turnOff * blankTerrain; + divNijLevel(i, j, k, 1) *= + rho * stressScale * turnOff * blankTerrain; + divNijLevel(i, j, k, 2) *= + rho * stressScale * turnOff * blankTerrain; }); } } diff --git a/amr-wind/wind_energy/ABLWallFunction.cpp b/amr-wind/wind_energy/ABLWallFunction.cpp index b999f57c16..d4e101eea0 100644 --- a/amr-wind/wind_energy/ABLWallFunction.cpp +++ b/amr-wind/wind_energy/ABLWallFunction.cpp @@ -22,7 +22,6 @@ ABLWallFunction::ABLWallFunction(const CFDSim& sim) } amrex::ParmParse pp("ABL"); - pp.query("kappa", m_mo.kappa); pp.query("mo_gamma_m", m_mo.gamma_m); pp.query("mo_gamma_h", m_mo.gamma_h); @@ -171,7 +170,6 @@ void ABLVelWallFunc::wall_model( const auto& density = repo.get_field("density", rho_state); const auto& viscosity = repo.get_field("velocity_mueff"); const int nlevels = repo.num_active_levels(); - amrex::Orientation zlo(amrex::Direction::z, amrex::Orientation::low); amrex::Orientation zhi(amrex::Direction::z, amrex::Orientation::high); if (velocity.bc_type()[zhi] == BC::wall_model) { @@ -180,7 +178,9 @@ void ABLVelWallFunc::wall_model( if (velocity.bc_type()[zlo] != BC::wall_model) { return; } - + const bool has_terrain = repo.int_field_exists("terrain_blank"); + const auto* m_terrain_blank = + has_terrain ? &repo.get_int_field("terrain_blank") : nullptr; for (int lev = 0; lev < nlevels; ++lev) { const auto& geom = repo.mesh().Geom(lev); const auto& domain = geom.Domain(); @@ -203,7 +203,9 @@ void ABLVelWallFunc::wall_model( const auto& vold_arr = vold_lev.const_array(mfi); const auto& den = rho_lev.const_array(mfi); const auto& eta = eta_lev.const_array(mfi); - + const auto& blank_arr = + has_terrain ? (*m_terrain_blank)(lev).const_array(mfi) + : amrex::Array4(); if (bx.smallEnd(idim) == domain.smallEnd(idim) && velocity.bc_type()[zlo] == BC::wall_model) { amrex::ParallelFor( @@ -216,12 +218,17 @@ void ABLVelWallFunc::wall_model( // Dirichlet BC varr(i, j, k - 1, 2) = 0.0; - + const amrex::Real blankTerrain = + (has_terrain) ? 1 - blank_arr(i, j, k, 0) : 1.0; // Shear stress BC - varr(i, j, k - 1, 0) = - tau.calc_vel_x(uu, wspd) * den(i, j, k) / mu; - varr(i, j, k - 1, 1) = - tau.calc_vel_y(vv, wspd) * den(i, j, k) / mu; + // Blank Terrain added to keep the boundary condition + // backward compatible while adding terrain sensitive BC + varr(i, j, k - 1, 0) = blankTerrain * + tau.calc_vel_x(uu, wspd) * + den(i, j, k) / mu; + varr(i, j, k - 1, 1) = blankTerrain * + tau.calc_vel_y(vv, wspd) * + den(i, j, k) / mu; }); } } @@ -292,7 +299,9 @@ void ABLTempWallFunc::wall_model( const auto& density = repo.get_field("density", rho_state); const auto& alpha = repo.get_field("temperature_mueff"); const int nlevels = repo.num_active_levels(); - + const bool has_terrain = repo.int_field_exists("terrain_blank"); + const auto* m_terrain_blank = + has_terrain ? &repo.get_int_field("terrain_blank") : nullptr; for (int lev = 0; lev < nlevels; ++lev) { const auto& geom = repo.mesh().Geom(lev); const auto& domain = geom.Domain(); @@ -317,6 +326,9 @@ void ABLTempWallFunc::wall_model( const auto& tarr = theta.array(mfi); const auto& den = rho_lev.const_array(mfi); const auto& eta = eta_lev.const_array(mfi); + const auto& blank_arr = + has_terrain ? (*m_terrain_blank)(lev).const_array(mfi) + : amrex::Array4(); if (bx.smallEnd(idim) == domain.smallEnd(idim) && temperature.bc_type()[zlo] == BC::wall_model) { @@ -328,7 +340,9 @@ void ABLTempWallFunc::wall_model( const amrex::Real vv = vold_arr(i, j, k, 1); const amrex::Real wspd = std::sqrt(uu * uu + vv * vv); const amrex::Real theta2 = told_arr(i, j, k); - tarr(i, j, k - 1) = den(i, j, k) * + const amrex::Real blankTerrain = + (has_terrain) ? 1 - blank_arr(i, j, k, 0) : 1.0; + tarr(i, j, k - 1) = blankTerrain * den(i, j, k) * tau.calc_theta(wspd, theta2) / alphaT; }); diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 695530c9bb..64f787e225 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -260,6 +260,7 @@ add_test_re(burggraf_flow) add_test_re(abl_godunov_rayleigh_damping) add_test_re(rankine) add_test_re(rankine-sym) +add_test_re(terrain_box) add_test_re(box_refinement) add_test_re(cylinder_refinement) add_test_re(freestream_godunov_inout) @@ -280,6 +281,8 @@ if(AMR_WIND_ENABLE_NETCDF) add_test_re(abl_meso_tendency) add_test_re(abl_kosovic_neutral) add_test_re(abl_sampling_netcdf) + add_test_re(abl_kosovic_neutral_ib) + add_test_re(nrel_precursor) endif() if(AMR_WIND_ENABLE_MASA) @@ -323,10 +326,12 @@ add_test_red(abl_bndry_input_amr_native abl_bndry_output_native) add_test_red(abl_bndry_input_amr_native_mlbc abl_bndry_output_amr_native) add_test_red(abl_godunov_forcetimetable abl_godunov_timetable) + if(AMR_WIND_ENABLE_NETCDF) add_test_red(abl_bndry_input abl_bndry_output) add_test_red(abl_bndry_input_amr abl_bndry_output) add_test_red(abl_bndry_input_amr_inflow abl_bndry_output_amr_inflow) + add_test_red(nrel_terrain nrel_precursor) endif() #============================================================================= diff --git a/test/test_files/abl_kosovic_neutral_ib/abl_kosovic_neutral_ib.inp b/test/test_files/abl_kosovic_neutral_ib/abl_kosovic_neutral_ib.inp new file mode 100644 index 0000000000..e2790111a2 --- /dev/null +++ b/test/test_files/abl_kosovic_neutral_ib/abl_kosovic_neutral_ib.inp @@ -0,0 +1,109 @@ +# Geometry +geometry.prob_lo = 0.0 0.0 0.0 +geometry.prob_hi = 4096 4096 1024 +geometry.is_periodic = 1 1 0 +# Grid +amr.n_cell = 128 128 32 +amr.max_level = 0 +# Simulation control parameters +time.stop_time = 10 +time.max_step = 10 +time.initial_dt = 0.1 +time.cfl = 0.9 +time.init_shrink = 0.1 +time.regrid_interval = -1 +time.plot_interval = 7200 +time.checkpoint_interval = 28800 +#io +#io.restart_file = "chk33529" +# incflo +incflo.physics = ABL TerrainDrag +incflo.density = 1.225 +incflo.gravity = 0. 0. -9.81 # Gravitational force (3D) +incflo.velocity = 10.0 0.0 0.0 +incflo.verbose = 0 +incflo.initial_iterations = 8 +incflo.do_initial_proj = true +incflo.constant_density = true +incflo.use_godunov = true +incflo.godunov_type = "weno_z" +incflo.diffusion_type = 2 +# transport equation parameters +transport.model = ConstTransport +transport.viscosity = 0.0 +transport.laminar_prandtl = 0.7 +transport.turbulent_prandtl = 0.333 +# turbulence equation parameters +turbulence.model = Kosovic +Kosovic.surfaceRANS = false +Kosovic.surfaceRANSExp = 2 +Kosovic.writeTerms = false +Kosovic.refMOL = -1e30 +# Atmospheric boundary layer +ABL.Uperiods = 12.0 +ABL.Vperiods = 12.0 +ABL.cutoff_height = 50.0 +ABL.deltaU = 1.0 +ABL.deltaV = 1.0 +ABL.kappa = .41 +ABL.normal_direction = 2 +ABL.perturb_ref_height = 50.0 +ABL.perturb_velocity = true +ABL.perturb_temperature = false +ABL.reference_temperature = 300. +ABL.stats_output_format = netcdf +ABL.surface_roughness_z0 = 0.1 +ABL.temperature_heights = 0 800 900 1800 2700 +ABL.temperature_values = 300 300 308 311 314 +ABL.wall_shear_stress_type = local +ABL.surface_temp_flux = 0.0 +# Source +ICNS.source_terms = BoussinesqBuoyancy CoriolisForcing GeostrophicForcing RayleighDamping NonLinearSGSTerm DragForcing +Temperature.source_terms = DragTempForcing +RayleighDamping.force_coord_directions= 0 0 1 +DragForcing.sponge_strength=0 +BoussinesqBuoyancy.reference_temperature = 300.0 +BoussinesqBuoyancy.thermal_expansion_coeff = 0.003333 +#CoriolisForcing.east_vector = 1.0 0.0 0.0 +#CoriolisForcing.latitude = 45.0 +#CoriolisForcing.north_vector = 0.0 1.0 0.0 +#CoriolisForcing.rotational_time_period = 86400.0 +CoriolisForcing.east_vector = 1.0 0.0 0.0 +CoriolisForcing.north_vector = 0.0 1.0 0.0 +CoriolisForcing.latitude = 90.0 +CoriolisForcing.rotational_time_period = 125663.706143592 +GeostrophicForcing.geostrophic_wind = 10 0.0 0.0 +RayleighDamping.reference_velocity = 10 0.0 0.0 +RayleighDamping.length_sloped_damping = 150 +RayleighDamping.length_complete_damping = 50 +RayleighDamping.time_scale = 9.0 +# BC +zhi.type = "slip_wall" +zhi.temperature_type = "fixed_gradient" +zhi.temperature = 0.003 +zlo.type = "wall_model" +# MLMG +mac_proj.num_pre_smooth = 8 +mac_proj.num_post_smooth = 8 +mac_proj.mg_rtol = 1.0e-4 +mac_proj.mg_atol = 1.0e-8 +mac_proj.maxiter = 360 +diffusion.mg_rtol = 1e-6 +diffusion.mg_atol = 1e-8 +temperature_diffusion.mg_rtol = 1e-6 +temperature_diffusion.mg_rtol = 1e-8 +nodal_proj.num_pre_smooth = 8 +nodal_proj.num_post_smooth = 8 +nodal_proj.mg_rtol = 1.0e-4 +nodal_proj.mg_atol = 1.0e-8 +nodal_proj.maxiter = 360 +# Postprocessing +incflo.post_processing = averaging +averaging.type = TimeAveraging +averaging.labels = means stress +averaging.averaging_window = 14400 +averaging.averaging_start_time = 86400 +averaging.means.fields = velocity +averaging.means.averaging_type = ReAveraging +averaging.stress.fields = velocity +averaging.stress.averaging_type = ReynoldsStress diff --git a/test/test_files/abl_kosovic_neutral_ib/terrain.amrwind b/test/test_files/abl_kosovic_neutral_ib/terrain.amrwind new file mode 100644 index 0000000000..8ffee5533b --- /dev/null +++ b/test/test_files/abl_kosovic_neutral_ib/terrain.amrwind @@ -0,0 +1,4225 @@ +1024 1024 0 +1040 1024 0 +1056 1024 0 +1072 1024 0 +1088 1024 0 +1104 1024 0 +1120 1024 0 +1136 1024 0 +1152 1024 0 +1168 1024 0 +1184 1024 0 +1200 1024 0 +1216 1024 0 +1232 1024 0 +1248 1024 0 +1264 1024 0 +1280 1024 0 +1296 1024 0 +1312 1024 0 +1328 1024 0 +1344 1024 0 +1360 1024 0 +1376 1024 0 +1392 1024 0 +1408 1024 0 +1424 1024 0 +1440 1024 0 +1456 1024 0 +1472 1024 0 +1488 1024 0 +1504 1024 0 +1520 1024 0 +1536 1024 0 +1552 1024 0 +1568 1024 0 +1584 1024 0 +1600 1024 0 +1616 1024 0 +1632 1024 0 +1648 1024 0 +1664 1024 0 +1680 1024 0 +1696 1024 0 +1712 1024 0 +1728 1024 0 +1744 1024 0 +1760 1024 0 +1776 1024 0 +1792 1024 0 +1808 1024 0 +1824 1024 0 +1840 1024 0 +1856 1024 0 +1872 1024 0 +1888 1024 0 +1904 1024 0 +1920 1024 0 +1936 1024 0 +1952 1024 0 +1968 1024 0 +1984 1024 0 +2000 1024 0 +2016 1024 0 +2032 1024 0 +2048 1024 0 +1024 1040 0 +1040 1040 0 +1056 1040 0 +1072 1040 0 +1088 1040 0 +1104 1040 0 +1120 1040 0 +1136 1040 0 +1152 1040 0 +1168 1040 0 +1184 1040 0 +1200 1040 0 +1216 1040 0 +1232 1040 0 +1248 1040 0 +1264 1040 0 +1280 1040 0 +1296 1040 0 +1312 1040 0 +1328 1040 0 +1344 1040 0 +1360 1040 0 +1376 1040 0 +1392 1040 0 +1408 1040 0 +1424 1040 0 +1440 1040 0 +1456 1040 0 +1472 1040 0 +1488 1040 0 +1504 1040 0 +1520 1040 0 +1536 1040 0 +1552 1040 0 +1568 1040 0 +1584 1040 0 +1600 1040 0 +1616 1040 0 +1632 1040 0 +1648 1040 0 +1664 1040 0 +1680 1040 0 +1696 1040 0 +1712 1040 0 +1728 1040 0 +1744 1040 0 +1760 1040 0 +1776 1040 0 +1792 1040 0 +1808 1040 0 +1824 1040 0 +1840 1040 0 +1856 1040 0 +1872 1040 0 +1888 1040 0 +1904 1040 0 +1920 1040 0 +1936 1040 0 +1952 1040 0 +1968 1040 0 +1984 1040 0 +2000 1040 0 +2016 1040 0 +2032 1040 0 +2048 1040 0 +1024 1056 0 +1040 1056 0 +1056 1056 0 +1072 1056 0 +1088 1056 0 +1104 1056 0 +1120 1056 0 +1136 1056 0 +1152 1056 0 +1168 1056 0 +1184 1056 0 +1200 1056 0 +1216 1056 0 +1232 1056 0 +1248 1056 0 +1264 1056 0 +1280 1056 0 +1296 1056 0 +1312 1056 0 +1328 1056 0 +1344 1056 0 +1360 1056 0 +1376 1056 0 +1392 1056 0 +1408 1056 0 +1424 1056 0 +1440 1056 0 +1456 1056 0 +1472 1056 0 +1488 1056 0 +1504 1056 0 +1520 1056 0 +1536 1056 0 +1552 1056 0 +1568 1056 0 +1584 1056 0 +1600 1056 0 +1616 1056 0 +1632 1056 0 +1648 1056 0 +1664 1056 0 +1680 1056 0 +1696 1056 0 +1712 1056 0 +1728 1056 0 +1744 1056 0 +1760 1056 0 +1776 1056 0 +1792 1056 0 +1808 1056 0 +1824 1056 0 +1840 1056 0 +1856 1056 0 +1872 1056 0 +1888 1056 0 +1904 1056 0 +1920 1056 0 +1936 1056 0 +1952 1056 0 +1968 1056 0 +1984 1056 0 +2000 1056 0 +2016 1056 0 +2032 1056 0 +2048 1056 0 +1024 1072 0 +1040 1072 0 +1056 1072 0 +1072 1072 0 +1088 1072 0 +1104 1072 0 +1120 1072 0 +1136 1072 0 +1152 1072 0 +1168 1072 0 +1184 1072 0 +1200 1072 0 +1216 1072 0 +1232 1072 0 +1248 1072 0 +1264 1072 0 +1280 1072 0 +1296 1072 0 +1312 1072 0 +1328 1072 0 +1344 1072 0 +1360 1072 0 +1376 1072 0 +1392 1072 0 +1408 1072 0 +1424 1072 0 +1440 1072 0 +1456 1072 0 +1472 1072 0 +1488 1072 0 +1504 1072 0 +1520 1072 0 +1536 1072 0 +1552 1072 0 +1568 1072 0 +1584 1072 0 +1600 1072 0 +1616 1072 0 +1632 1072 0 +1648 1072 0 +1664 1072 0 +1680 1072 0 +1696 1072 0 +1712 1072 0 +1728 1072 0 +1744 1072 0 +1760 1072 0 +1776 1072 0 +1792 1072 0 +1808 1072 0 +1824 1072 0 +1840 1072 0 +1856 1072 0 +1872 1072 0 +1888 1072 0 +1904 1072 0 +1920 1072 0 +1936 1072 0 +1952 1072 0 +1968 1072 0 +1984 1072 0 +2000 1072 0 +2016 1072 0 +2032 1072 0 +2048 1072 0 +1024 1088 0 +1040 1088 0 +1056 1088 0 +1072 1088 0 +1088 1088 0 +1104 1088 0 +1120 1088 0 +1136 1088 0 +1152 1088 0 +1168 1088 0 +1184 1088 0 +1200 1088 0 +1216 1088 0 +1232 1088 0 +1248 1088 0 +1264 1088 0 +1280 1088 0 +1296 1088 0 +1312 1088 0 +1328 1088 0 +1344 1088 0 +1360 1088 0 +1376 1088 0 +1392 1088 0 +1408 1088 0 +1424 1088 0 +1440 1088 0 +1456 1088 0 +1472 1088 0 +1488 1088 0 +1504 1088 0 +1520 1088 0 +1536 1088 0 +1552 1088 0 +1568 1088 0 +1584 1088 0 +1600 1088 0 +1616 1088 0 +1632 1088 0 +1648 1088 0 +1664 1088 0 +1680 1088 0 +1696 1088 0 +1712 1088 0 +1728 1088 0 +1744 1088 0 +1760 1088 0 +1776 1088 0 +1792 1088 0 +1808 1088 0 +1824 1088 0 +1840 1088 0 +1856 1088 0 +1872 1088 0 +1888 1088 0 +1904 1088 0 +1920 1088 0 +1936 1088 0 +1952 1088 0 +1968 1088 0 +1984 1088 0 +2000 1088 0 +2016 1088 0 +2032 1088 0 +2048 1088 0 +1024 1104 0 +1040 1104 0 +1056 1104 0 +1072 1104 0 +1088 1104 0 +1104 1104 0 +1120 1104 0 +1136 1104 0 +1152 1104 0 +1168 1104 0 +1184 1104 0 +1200 1104 0 +1216 1104 0 +1232 1104 0 +1248 1104 0 +1264 1104 0 +1280 1104 0 +1296 1104 0 +1312 1104 0 +1328 1104 0 +1344 1104 0 +1360 1104 0 +1376 1104 0 +1392 1104 0 +1408 1104 0 +1424 1104 0 +1440 1104 0 +1456 1104 0 +1472 1104 0 +1488 1104 0 +1504 1104 0 +1520 1104 0 +1536 1104 0 +1552 1104 0 +1568 1104 0 +1584 1104 0 +1600 1104 0 +1616 1104 0 +1632 1104 0 +1648 1104 0 +1664 1104 0 +1680 1104 0 +1696 1104 0 +1712 1104 0 +1728 1104 0 +1744 1104 0 +1760 1104 0 +1776 1104 0 +1792 1104 0 +1808 1104 0 +1824 1104 0 +1840 1104 0 +1856 1104 0 +1872 1104 0 +1888 1104 0 +1904 1104 0 +1920 1104 0 +1936 1104 0 +1952 1104 0 +1968 1104 0 +1984 1104 0 +2000 1104 0 +2016 1104 0 +2032 1104 0 +2048 1104 0 +1024 1120 0 +1040 1120 0 +1056 1120 0 +1072 1120 0 +1088 1120 0 +1104 1120 0 +1120 1120 0 +1136 1120 0 +1152 1120 0 +1168 1120 0 +1184 1120 0 +1200 1120 0 +1216 1120 0 +1232 1120 0 +1248 1120 0 +1264 1120 0 +1280 1120 0 +1296 1120 0 +1312 1120 0 +1328 1120 0 +1344 1120 0 +1360 1120 0 +1376 1120 0 +1392 1120 0 +1408 1120 0 +1424 1120 0 +1440 1120 0 +1456 1120 0 +1472 1120 0 +1488 1120 0 +1504 1120 0 +1520 1120 0 +1536 1120 0 +1552 1120 0 +1568 1120 0 +1584 1120 0 +1600 1120 0 +1616 1120 0 +1632 1120 0 +1648 1120 0 +1664 1120 0 +1680 1120 0 +1696 1120 0 +1712 1120 0 +1728 1120 0 +1744 1120 0 +1760 1120 0 +1776 1120 0 +1792 1120 0 +1808 1120 0 +1824 1120 0 +1840 1120 0 +1856 1120 0 +1872 1120 0 +1888 1120 0 +1904 1120 0 +1920 1120 0 +1936 1120 0 +1952 1120 0 +1968 1120 0 +1984 1120 0 +2000 1120 0 +2016 1120 0 +2032 1120 0 +2048 1120 0 +1024 1136 0 +1040 1136 0 +1056 1136 0 +1072 1136 0 +1088 1136 0 +1104 1136 0 +1120 1136 0 +1136 1136 0 +1152 1136 0 +1168 1136 0 +1184 1136 0 +1200 1136 0 +1216 1136 0 +1232 1136 0 +1248 1136 0 +1264 1136 0 +1280 1136 0 +1296 1136 0 +1312 1136 0 +1328 1136 0 +1344 1136 0 +1360 1136 0 +1376 1136 0 +1392 1136 0 +1408 1136 0 +1424 1136 0 +1440 1136 0 +1456 1136 0 +1472 1136 0 +1488 1136 0 +1504 1136 0 +1520 1136 0 +1536 1136 0 +1552 1136 0 +1568 1136 0 +1584 1136 0 +1600 1136 0 +1616 1136 0 +1632 1136 0 +1648 1136 0 +1664 1136 0 +1680 1136 0 +1696 1136 0 +1712 1136 0 +1728 1136 0 +1744 1136 0 +1760 1136 0 +1776 1136 0 +1792 1136 0 +1808 1136 0 +1824 1136 0 +1840 1136 0 +1856 1136 0 +1872 1136 0 +1888 1136 0 +1904 1136 0 +1920 1136 0 +1936 1136 0 +1952 1136 0 +1968 1136 0 +1984 1136 0 +2000 1136 0 +2016 1136 0 +2032 1136 0 +2048 1136 0 +1024 1152 0 +1040 1152 0 +1056 1152 0 +1072 1152 0 +1088 1152 0 +1104 1152 0 +1120 1152 0 +1136 1152 0 +1152 1152 0 +1168 1152 0 +1184 1152 0 +1200 1152 0 +1216 1152 0 +1232 1152 0 +1248 1152 0 +1264 1152 0 +1280 1152 0 +1296 1152 0 +1312 1152 0 +1328 1152 0 +1344 1152 0 +1360 1152 0 +1376 1152 0 +1392 1152 0 +1408 1152 0 +1424 1152 0 +1440 1152 0 +1456 1152 0 +1472 1152 0 +1488 1152 0 +1504 1152 0 +1520 1152 0 +1536 1152 0 +1552 1152 0 +1568 1152 0 +1584 1152 0 +1600 1152 0 +1616 1152 0 +1632 1152 0 +1648 1152 0 +1664 1152 0 +1680 1152 0 +1696 1152 0 +1712 1152 0 +1728 1152 0 +1744 1152 0 +1760 1152 0 +1776 1152 0 +1792 1152 0 +1808 1152 0 +1824 1152 0 +1840 1152 0 +1856 1152 0 +1872 1152 0 +1888 1152 0 +1904 1152 0 +1920 1152 0 +1936 1152 0 +1952 1152 0 +1968 1152 0 +1984 1152 0 +2000 1152 0 +2016 1152 0 +2032 1152 0 +2048 1152 0 +1024 1168 0 +1040 1168 0 +1056 1168 0 +1072 1168 0 +1088 1168 0 +1104 1168 0 +1120 1168 0 +1136 1168 0 +1152 1168 0 +1168 1168 0 +1184 1168 0 +1200 1168 0 +1216 1168 0 +1232 1168 0 +1248 1168 0 +1264 1168 0 +1280 1168 0 +1296 1168 0 +1312 1168 0 +1328 1168 0 +1344 1168 0 +1360 1168 0 +1376 1168 0 +1392 1168 0 +1408 1168 0 +1424 1168 0 +1440 1168 0 +1456 1168 0 +1472 1168 0 +1488 1168 0 +1504 1168 0 +1520 1168 0 +1536 1168 0 +1552 1168 0 +1568 1168 0 +1584 1168 0 +1600 1168 0 +1616 1168 0 +1632 1168 0 +1648 1168 0 +1664 1168 0 +1680 1168 0 +1696 1168 0 +1712 1168 0 +1728 1168 0 +1744 1168 0 +1760 1168 0 +1776 1168 0 +1792 1168 0 +1808 1168 0 +1824 1168 0 +1840 1168 0 +1856 1168 0 +1872 1168 0 +1888 1168 0 +1904 1168 0 +1920 1168 0 +1936 1168 0 +1952 1168 0 +1968 1168 0 +1984 1168 0 +2000 1168 0 +2016 1168 0 +2032 1168 0 +2048 1168 0 +1024 1184 0 +1040 1184 0 +1056 1184 0 +1072 1184 0 +1088 1184 0 +1104 1184 0 +1120 1184 0 +1136 1184 0 +1152 1184 0 +1168 1184 0 +1184 1184 0 +1200 1184 0 +1216 1184 0 +1232 1184 0 +1248 1184 0 +1264 1184 0 +1280 1184 0 +1296 1184 0 +1312 1184 0 +1328 1184 0 +1344 1184 0 +1360 1184 0 +1376 1184 0 +1392 1184 0 +1408 1184 0 +1424 1184 0 +1440 1184 0 +1456 1184 0 +1472 1184 0 +1488 1184 0 +1504 1184 0 +1520 1184 0 +1536 1184 0 +1552 1184 0 +1568 1184 0 +1584 1184 0 +1600 1184 0 +1616 1184 0 +1632 1184 0 +1648 1184 0 +1664 1184 0 +1680 1184 0 +1696 1184 0 +1712 1184 0 +1728 1184 0 +1744 1184 0 +1760 1184 0 +1776 1184 0 +1792 1184 0 +1808 1184 0 +1824 1184 0 +1840 1184 0 +1856 1184 0 +1872 1184 0 +1888 1184 0 +1904 1184 0 +1920 1184 0 +1936 1184 0 +1952 1184 0 +1968 1184 0 +1984 1184 0 +2000 1184 0 +2016 1184 0 +2032 1184 0 +2048 1184 0 +1024 1200 0 +1040 1200 0 +1056 1200 0 +1072 1200 0 +1088 1200 0 +1104 1200 0 +1120 1200 0 +1136 1200 0 +1152 1200 0 +1168 1200 0 +1184 1200 0 +1200 1200 0 +1216 1200 0 +1232 1200 0 +1248 1200 0 +1264 1200 0 +1280 1200 0 +1296 1200 0 +1312 1200 0 +1328 1200 0 +1344 1200 0 +1360 1200 0 +1376 1200 0 +1392 1200 0 +1408 1200 0 +1424 1200 0 +1440 1200 0 +1456 1200 0 +1472 1200 0 +1488 1200 0 +1504 1200 0 +1520 1200 0 +1536 1200 0 +1552 1200 0 +1568 1200 0 +1584 1200 0 +1600 1200 0 +1616 1200 0 +1632 1200 0 +1648 1200 0 +1664 1200 0 +1680 1200 0 +1696 1200 0 +1712 1200 0 +1728 1200 0 +1744 1200 0 +1760 1200 0 +1776 1200 0 +1792 1200 0 +1808 1200 0 +1824 1200 0 +1840 1200 0 +1856 1200 0 +1872 1200 0 +1888 1200 0 +1904 1200 0 +1920 1200 0 +1936 1200 0 +1952 1200 0 +1968 1200 0 +1984 1200 0 +2000 1200 0 +2016 1200 0 +2032 1200 0 +2048 1200 0 +1024 1216 0 +1040 1216 0 +1056 1216 0 +1072 1216 0 +1088 1216 0 +1104 1216 0 +1120 1216 0 +1136 1216 0 +1152 1216 0 +1168 1216 0 +1184 1216 0 +1200 1216 0 +1216 1216 0 +1232 1216 0 +1248 1216 0 +1264 1216 0 +1280 1216 0 +1296 1216 0 +1312 1216 0 +1328 1216 0 +1344 1216 0 +1360 1216 0 +1376 1216 0 +1392 1216 0 +1408 1216 0 +1424 1216 0 +1440 1216 0 +1456 1216 0 +1472 1216 0 +1488 1216 0 +1504 1216 0 +1520 1216 0 +1536 1216 0 +1552 1216 0 +1568 1216 0 +1584 1216 0 +1600 1216 0 +1616 1216 0 +1632 1216 0 +1648 1216 0 +1664 1216 0 +1680 1216 0 +1696 1216 0 +1712 1216 0 +1728 1216 0 +1744 1216 0 +1760 1216 0 +1776 1216 0 +1792 1216 0 +1808 1216 0 +1824 1216 0 +1840 1216 0 +1856 1216 0 +1872 1216 0 +1888 1216 0 +1904 1216 0 +1920 1216 0 +1936 1216 0 +1952 1216 0 +1968 1216 0 +1984 1216 0 +2000 1216 0 +2016 1216 0 +2032 1216 0 +2048 1216 0 +1024 1232 0 +1040 1232 0 +1056 1232 0 +1072 1232 0 +1088 1232 0 +1104 1232 0 +1120 1232 0 +1136 1232 0 +1152 1232 0 +1168 1232 0 +1184 1232 0 +1200 1232 0 +1216 1232 0 +1232 1232 0 +1248 1232 0 +1264 1232 0 +1280 1232 0 +1296 1232 0 +1312 1232 0 +1328 1232 0 +1344 1232 0 +1360 1232 0 +1376 1232 0 +1392 1232 0 +1408 1232 0 +1424 1232 0 +1440 1232 0 +1456 1232 0 +1472 1232 0 +1488 1232 0 +1504 1232 0 +1520 1232 0 +1536 1232 0 +1552 1232 0 +1568 1232 0 +1584 1232 0 +1600 1232 0 +1616 1232 0 +1632 1232 0 +1648 1232 0 +1664 1232 0 +1680 1232 0 +1696 1232 0 +1712 1232 0 +1728 1232 0 +1744 1232 0 +1760 1232 0 +1776 1232 0 +1792 1232 0 +1808 1232 0 +1824 1232 0 +1840 1232 0 +1856 1232 0 +1872 1232 0 +1888 1232 0 +1904 1232 0 +1920 1232 0 +1936 1232 0 +1952 1232 0 +1968 1232 0 +1984 1232 0 +2000 1232 0 +2016 1232 0 +2032 1232 0 +2048 1232 0 +1024 1248 0 +1040 1248 0 +1056 1248 0 +1072 1248 0 +1088 1248 0 +1104 1248 0 +1120 1248 0 +1136 1248 0 +1152 1248 0 +1168 1248 0 +1184 1248 0 +1200 1248 0 +1216 1248 0 +1232 1248 0 +1248 1248 0 +1264 1248 0 +1280 1248 0 +1296 1248 0 +1312 1248 0 +1328 1248 0 +1344 1248 0 +1360 1248 0 +1376 1248 0 +1392 1248 0 +1408 1248 0 +1424 1248 0 +1440 1248 0 +1456 1248 0 +1472 1248 0 +1488 1248 0 +1504 1248 0 +1520 1248 0 +1536 1248 0 +1552 1248 0 +1568 1248 0 +1584 1248 0 +1600 1248 0 +1616 1248 0 +1632 1248 0 +1648 1248 0 +1664 1248 0 +1680 1248 0 +1696 1248 0 +1712 1248 0 +1728 1248 0 +1744 1248 0 +1760 1248 0 +1776 1248 0 +1792 1248 0 +1808 1248 0 +1824 1248 0 +1840 1248 0 +1856 1248 0 +1872 1248 0 +1888 1248 0 +1904 1248 0 +1920 1248 0 +1936 1248 0 +1952 1248 0 +1968 1248 0 +1984 1248 0 +2000 1248 0 +2016 1248 0 +2032 1248 0 +2048 1248 0 +1024 1264 0 +1040 1264 0 +1056 1264 0 +1072 1264 0 +1088 1264 0 +1104 1264 0 +1120 1264 0 +1136 1264 0 +1152 1264 0 +1168 1264 0 +1184 1264 0 +1200 1264 0 +1216 1264 0 +1232 1264 0 +1248 1264 0 +1264 1264 0 +1280 1264 0 +1296 1264 0 +1312 1264 0 +1328 1264 0 +1344 1264 0 +1360 1264 0 +1376 1264 0 +1392 1264 0 +1408 1264 0 +1424 1264 0 +1440 1264 0 +1456 1264 0 +1472 1264 0 +1488 1264 0 +1504 1264 0 +1520 1264 0 +1536 1264 0 +1552 1264 0 +1568 1264 0 +1584 1264 0 +1600 1264 0 +1616 1264 0 +1632 1264 0 +1648 1264 0 +1664 1264 0 +1680 1264 0 +1696 1264 0 +1712 1264 0 +1728 1264 0 +1744 1264 0 +1760 1264 0 +1776 1264 0 +1792 1264 0 +1808 1264 0 +1824 1264 0 +1840 1264 0 +1856 1264 0 +1872 1264 0 +1888 1264 0 +1904 1264 0 +1920 1264 0 +1936 1264 0 +1952 1264 0 +1968 1264 0 +1984 1264 0 +2000 1264 0 +2016 1264 0 +2032 1264 0 +2048 1264 0 +1024 1280 0 +1040 1280 0 +1056 1280 0 +1072 1280 0 +1088 1280 0 +1104 1280 0 +1120 1280 0 +1136 1280 0 +1152 1280 0 +1168 1280 0 +1184 1280 0 +1200 1280 0 +1216 1280 0 +1232 1280 0 +1248 1280 0 +1264 1280 0 +1280 1280 0 +1296 1280 0 +1312 1280 0 +1328 1280 0 +1344 1280 0 +1360 1280 0 +1376 1280 0 +1392 1280 0 +1408 1280 0 +1424 1280 0 +1440 1280 0 +1456 1280 0 +1472 1280 0 +1488 1280 0 +1504 1280 0 +1520 1280 0 +1536 1280 0 +1552 1280 0 +1568 1280 0 +1584 1280 0 +1600 1280 0 +1616 1280 0 +1632 1280 0 +1648 1280 0 +1664 1280 0 +1680 1280 0 +1696 1280 0 +1712 1280 0 +1728 1280 0 +1744 1280 0 +1760 1280 0 +1776 1280 0 +1792 1280 0 +1808 1280 0 +1824 1280 0 +1840 1280 0 +1856 1280 0 +1872 1280 0 +1888 1280 0 +1904 1280 0 +1920 1280 0 +1936 1280 0 +1952 1280 0 +1968 1280 0 +1984 1280 0 +2000 1280 0 +2016 1280 0 +2032 1280 0 +2048 1280 0 +1024 1296 0 +1040 1296 0 +1056 1296 0 +1072 1296 0 +1088 1296 0 +1104 1296 0 +1120 1296 0 +1136 1296 0 +1152 1296 0 +1168 1296 0 +1184 1296 0 +1200 1296 0 +1216 1296 0 +1232 1296 0 +1248 1296 0 +1264 1296 0 +1280 1296 0 +1296 1296 0 +1312 1296 0 +1328 1296 0 +1344 1296 0 +1360 1296 0 +1376 1296 0 +1392 1296 0 +1408 1296 0 +1424 1296 0 +1440 1296 0 +1456 1296 0 +1472 1296 0 +1488 1296 0 +1504 1296 0 +1520 1296 0 +1536 1296 0 +1552 1296 0 +1568 1296 0 +1584 1296 0 +1600 1296 0 +1616 1296 0 +1632 1296 0 +1648 1296 0 +1664 1296 0 +1680 1296 0 +1696 1296 0 +1712 1296 0 +1728 1296 0 +1744 1296 0 +1760 1296 0 +1776 1296 0 +1792 1296 0 +1808 1296 0 +1824 1296 0 +1840 1296 0 +1856 1296 0 +1872 1296 0 +1888 1296 0 +1904 1296 0 +1920 1296 0 +1936 1296 0 +1952 1296 0 +1968 1296 0 +1984 1296 0 +2000 1296 0 +2016 1296 0 +2032 1296 0 +2048 1296 0 +1024 1312 0 +1040 1312 0 +1056 1312 0 +1072 1312 0 +1088 1312 0 +1104 1312 0 +1120 1312 0 +1136 1312 0 +1152 1312 0 +1168 1312 0 +1184 1312 0 +1200 1312 0 +1216 1312 0 +1232 1312 0 +1248 1312 0 +1264 1312 0 +1280 1312 0 +1296 1312 0 +1312 1312 0 +1328 1312 0 +1344 1312 0 +1360 1312 0 +1376 1312 0 +1392 1312 0 +1408 1312 0 +1424 1312 0 +1440 1312 0 +1456 1312 0 +1472 1312 0 +1488 1312 0 +1504 1312 0 +1520 1312 0 +1536 1312 0 +1552 1312 0 +1568 1312 0 +1584 1312 0 +1600 1312 0 +1616 1312 0 +1632 1312 0 +1648 1312 0 +1664 1312 0 +1680 1312 0 +1696 1312 0 +1712 1312 0 +1728 1312 0 +1744 1312 0 +1760 1312 0 +1776 1312 0 +1792 1312 0 +1808 1312 0 +1824 1312 0 +1840 1312 0 +1856 1312 0 +1872 1312 0 +1888 1312 0 +1904 1312 0 +1920 1312 0 +1936 1312 0 +1952 1312 0 +1968 1312 0 +1984 1312 0 +2000 1312 0 +2016 1312 0 +2032 1312 0 +2048 1312 0 +1024 1328 0 +1040 1328 0 +1056 1328 0 +1072 1328 0 +1088 1328 0 +1104 1328 0 +1120 1328 0 +1136 1328 0 +1152 1328 0 +1168 1328 0 +1184 1328 0 +1200 1328 0 +1216 1328 0 +1232 1328 0 +1248 1328 0 +1264 1328 0 +1280 1328 0 +1296 1328 0 +1312 1328 0 +1328 1328 0 +1344 1328 0 +1360 1328 0 +1376 1328 0 +1392 1328 0 +1408 1328 0 +1424 1328 0 +1440 1328 0 +1456 1328 0 +1472 1328 0 +1488 1328 0 +1504 1328 0 +1520 1328 0 +1536 1328 0 +1552 1328 0 +1568 1328 0 +1584 1328 0 +1600 1328 0 +1616 1328 0 +1632 1328 0 +1648 1328 0 +1664 1328 0 +1680 1328 0 +1696 1328 0 +1712 1328 0 +1728 1328 0 +1744 1328 0 +1760 1328 0 +1776 1328 0 +1792 1328 0 +1808 1328 0 +1824 1328 0 +1840 1328 0 +1856 1328 0 +1872 1328 0 +1888 1328 0 +1904 1328 0 +1920 1328 0 +1936 1328 0 +1952 1328 0 +1968 1328 0 +1984 1328 0 +2000 1328 0 +2016 1328 0 +2032 1328 0 +2048 1328 0 +1024 1344 0 +1040 1344 0 +1056 1344 0 +1072 1344 0 +1088 1344 0 +1104 1344 0 +1120 1344 0 +1136 1344 0 +1152 1344 0 +1168 1344 0 +1184 1344 0 +1200 1344 0 +1216 1344 0 +1232 1344 0 +1248 1344 0 +1264 1344 0 +1280 1344 0 +1296 1344 0 +1312 1344 0 +1328 1344 0 +1344 1344 0 +1360 1344 0 +1376 1344 0 +1392 1344 0 +1408 1344 0 +1424 1344 0 +1440 1344 0 +1456 1344 0 +1472 1344 0 +1488 1344 0 +1504 1344 0 +1520 1344 0 +1536 1344 0 +1552 1344 0 +1568 1344 0 +1584 1344 0 +1600 1344 0 +1616 1344 0 +1632 1344 0 +1648 1344 0 +1664 1344 0 +1680 1344 0 +1696 1344 0 +1712 1344 0 +1728 1344 0 +1744 1344 0 +1760 1344 0 +1776 1344 0 +1792 1344 0 +1808 1344 0 +1824 1344 0 +1840 1344 0 +1856 1344 0 +1872 1344 0 +1888 1344 0 +1904 1344 0 +1920 1344 0 +1936 1344 0 +1952 1344 0 +1968 1344 0 +1984 1344 0 +2000 1344 0 +2016 1344 0 +2032 1344 0 +2048 1344 0 +1024 1360 0 +1040 1360 0 +1056 1360 0 +1072 1360 0 +1088 1360 0 +1104 1360 0 +1120 1360 0 +1136 1360 0 +1152 1360 0 +1168 1360 0 +1184 1360 0 +1200 1360 0 +1216 1360 0 +1232 1360 0 +1248 1360 0 +1264 1360 0 +1280 1360 0 +1296 1360 0 +1312 1360 0 +1328 1360 0 +1344 1360 0 +1360 1360 0 +1376 1360 0 +1392 1360 0 +1408 1360 0 +1424 1360 0 +1440 1360 0 +1456 1360 0 +1472 1360 0 +1488 1360 0 +1504 1360 0 +1520 1360 0 +1536 1360 0 +1552 1360 0 +1568 1360 0 +1584 1360 0 +1600 1360 0 +1616 1360 0 +1632 1360 0 +1648 1360 0 +1664 1360 0 +1680 1360 0 +1696 1360 0 +1712 1360 0 +1728 1360 0 +1744 1360 0 +1760 1360 0 +1776 1360 0 +1792 1360 0 +1808 1360 0 +1824 1360 0 +1840 1360 0 +1856 1360 0 +1872 1360 0 +1888 1360 0 +1904 1360 0 +1920 1360 0 +1936 1360 0 +1952 1360 0 +1968 1360 0 +1984 1360 0 +2000 1360 0 +2016 1360 0 +2032 1360 0 +2048 1360 0 +1024 1376 0 +1040 1376 0 +1056 1376 0 +1072 1376 0 +1088 1376 0 +1104 1376 0 +1120 1376 0 +1136 1376 0 +1152 1376 0 +1168 1376 0 +1184 1376 0 +1200 1376 0 +1216 1376 0 +1232 1376 0 +1248 1376 0 +1264 1376 0 +1280 1376 0 +1296 1376 0 +1312 1376 0 +1328 1376 0 +1344 1376 0 +1360 1376 0 +1376 1376 0 +1392 1376 0 +1408 1376 0 +1424 1376 0 +1440 1376 0 +1456 1376 0 +1472 1376 0 +1488 1376 0 +1504 1376 0 +1520 1376 0 +1536 1376 0 +1552 1376 0 +1568 1376 0 +1584 1376 0 +1600 1376 0 +1616 1376 0 +1632 1376 0 +1648 1376 0 +1664 1376 0 +1680 1376 0 +1696 1376 0 +1712 1376 0 +1728 1376 0 +1744 1376 0 +1760 1376 0 +1776 1376 0 +1792 1376 0 +1808 1376 0 +1824 1376 0 +1840 1376 0 +1856 1376 0 +1872 1376 0 +1888 1376 0 +1904 1376 0 +1920 1376 0 +1936 1376 0 +1952 1376 0 +1968 1376 0 +1984 1376 0 +2000 1376 0 +2016 1376 0 +2032 1376 0 +2048 1376 0 +1024 1392 0 +1040 1392 0 +1056 1392 0 +1072 1392 0 +1088 1392 0 +1104 1392 0 +1120 1392 0 +1136 1392 0 +1152 1392 0 +1168 1392 0 +1184 1392 0 +1200 1392 0 +1216 1392 0 +1232 1392 0 +1248 1392 0 +1264 1392 0 +1280 1392 0 +1296 1392 0 +1312 1392 0 +1328 1392 0 +1344 1392 0 +1360 1392 0 +1376 1392 0 +1392 1392 0 +1408 1392 0 +1424 1392 0 +1440 1392 0 +1456 1392 0 +1472 1392 0 +1488 1392 0 +1504 1392 0 +1520 1392 0 +1536 1392 0 +1552 1392 0 +1568 1392 0 +1584 1392 0 +1600 1392 0 +1616 1392 0 +1632 1392 0 +1648 1392 0 +1664 1392 0 +1680 1392 0 +1696 1392 0 +1712 1392 0 +1728 1392 0 +1744 1392 0 +1760 1392 0 +1776 1392 0 +1792 1392 0 +1808 1392 0 +1824 1392 0 +1840 1392 0 +1856 1392 0 +1872 1392 0 +1888 1392 0 +1904 1392 0 +1920 1392 0 +1936 1392 0 +1952 1392 0 +1968 1392 0 +1984 1392 0 +2000 1392 0 +2016 1392 0 +2032 1392 0 +2048 1392 0 +1024 1408 0 +1040 1408 0 +1056 1408 0 +1072 1408 0 +1088 1408 0 +1104 1408 0 +1120 1408 0 +1136 1408 0 +1152 1408 0 +1168 1408 0 +1184 1408 0 +1200 1408 0 +1216 1408 0 +1232 1408 0 +1248 1408 0 +1264 1408 0 +1280 1408 0 +1296 1408 0 +1312 1408 0 +1328 1408 0 +1344 1408 0 +1360 1408 0 +1376 1408 0 +1392 1408 0 +1408 1408 0 +1424 1408 0 +1440 1408 0 +1456 1408 0 +1472 1408 0 +1488 1408 0 +1504 1408 0 +1520 1408 0 +1536 1408 0 +1552 1408 0 +1568 1408 0 +1584 1408 0 +1600 1408 0 +1616 1408 0 +1632 1408 0 +1648 1408 0 +1664 1408 0 +1680 1408 0 +1696 1408 0 +1712 1408 0 +1728 1408 0 +1744 1408 0 +1760 1408 0 +1776 1408 0 +1792 1408 0 +1808 1408 0 +1824 1408 0 +1840 1408 0 +1856 1408 0 +1872 1408 0 +1888 1408 0 +1904 1408 0 +1920 1408 0 +1936 1408 0 +1952 1408 0 +1968 1408 0 +1984 1408 0 +2000 1408 0 +2016 1408 0 +2032 1408 0 +2048 1408 0 +1024 1424 0 +1040 1424 0 +1056 1424 0 +1072 1424 0 +1088 1424 0 +1104 1424 0 +1120 1424 0 +1136 1424 0 +1152 1424 0 +1168 1424 0 +1184 1424 0 +1200 1424 0 +1216 1424 0 +1232 1424 0 +1248 1424 0 +1264 1424 0 +1280 1424 0 +1296 1424 0 +1312 1424 0 +1328 1424 0 +1344 1424 0 +1360 1424 0 +1376 1424 0 +1392 1424 0 +1408 1424 0 +1424 1424 0 +1440 1424 0 +1456 1424 0 +1472 1424 0 +1488 1424 0 +1504 1424 0 +1520 1424 0 +1536 1424 0 +1552 1424 0 +1568 1424 0 +1584 1424 0 +1600 1424 0 +1616 1424 0 +1632 1424 0 +1648 1424 0 +1664 1424 0 +1680 1424 0 +1696 1424 0 +1712 1424 0 +1728 1424 0 +1744 1424 0 +1760 1424 0 +1776 1424 0 +1792 1424 0 +1808 1424 0 +1824 1424 0 +1840 1424 0 +1856 1424 0 +1872 1424 0 +1888 1424 0 +1904 1424 0 +1920 1424 0 +1936 1424 0 +1952 1424 0 +1968 1424 0 +1984 1424 0 +2000 1424 0 +2016 1424 0 +2032 1424 0 +2048 1424 0 +1024 1440 0 +1040 1440 0 +1056 1440 0 +1072 1440 0 +1088 1440 0 +1104 1440 0 +1120 1440 0 +1136 1440 0 +1152 1440 0 +1168 1440 0 +1184 1440 0 +1200 1440 0 +1216 1440 0 +1232 1440 0 +1248 1440 0 +1264 1440 0 +1280 1440 0 +1296 1440 0 +1312 1440 0 +1328 1440 0 +1344 1440 0 +1360 1440 0 +1376 1440 0 +1392 1440 0 +1408 1440 0 +1424 1440 0 +1440 1440 0 +1456 1440 0 +1472 1440 0 +1488 1440 0 +1504 1440 0 +1520 1440 0 +1536 1440 0 +1552 1440 0 +1568 1440 0 +1584 1440 0 +1600 1440 0 +1616 1440 0 +1632 1440 0 +1648 1440 0 +1664 1440 0 +1680 1440 0 +1696 1440 0 +1712 1440 0 +1728 1440 0 +1744 1440 0 +1760 1440 0 +1776 1440 0 +1792 1440 0 +1808 1440 0 +1824 1440 0 +1840 1440 0 +1856 1440 0 +1872 1440 0 +1888 1440 0 +1904 1440 0 +1920 1440 0 +1936 1440 0 +1952 1440 0 +1968 1440 0 +1984 1440 0 +2000 1440 0 +2016 1440 0 +2032 1440 0 +2048 1440 0 +1024 1456 0 +1040 1456 0 +1056 1456 0 +1072 1456 0 +1088 1456 0 +1104 1456 0 +1120 1456 0 +1136 1456 0 +1152 1456 0 +1168 1456 0 +1184 1456 0 +1200 1456 0 +1216 1456 0 +1232 1456 0 +1248 1456 0 +1264 1456 0 +1280 1456 0 +1296 1456 0 +1312 1456 0 +1328 1456 0 +1344 1456 0 +1360 1456 0 +1376 1456 0 +1392 1456 0 +1408 1456 0 +1424 1456 0 +1440 1456 0 +1456 1456 0 +1472 1456 0 +1488 1456 0 +1504 1456 0 +1520 1456 0 +1536 1456 0 +1552 1456 0 +1568 1456 0 +1584 1456 0 +1600 1456 0 +1616 1456 0 +1632 1456 0 +1648 1456 0 +1664 1456 0 +1680 1456 0 +1696 1456 0 +1712 1456 0 +1728 1456 0 +1744 1456 0 +1760 1456 0 +1776 1456 0 +1792 1456 0 +1808 1456 0 +1824 1456 0 +1840 1456 0 +1856 1456 0 +1872 1456 0 +1888 1456 0 +1904 1456 0 +1920 1456 0 +1936 1456 0 +1952 1456 0 +1968 1456 0 +1984 1456 0 +2000 1456 0 +2016 1456 0 +2032 1456 0 +2048 1456 0 +1024 1472 0 +1040 1472 0 +1056 1472 0 +1072 1472 0 +1088 1472 0 +1104 1472 0 +1120 1472 0 +1136 1472 0 +1152 1472 0 +1168 1472 0 +1184 1472 0 +1200 1472 0 +1216 1472 0 +1232 1472 0 +1248 1472 0 +1264 1472 0 +1280 1472 0 +1296 1472 0 +1312 1472 0 +1328 1472 0 +1344 1472 0 +1360 1472 0 +1376 1472 0 +1392 1472 0 +1408 1472 0 +1424 1472 0 +1440 1472 0 +1456 1472 0 +1472 1472 0 +1488 1472 0 +1504 1472 0 +1520 1472 0 +1536 1472 0 +1552 1472 0 +1568 1472 0 +1584 1472 0 +1600 1472 0 +1616 1472 0 +1632 1472 0 +1648 1472 0 +1664 1472 0 +1680 1472 0 +1696 1472 0 +1712 1472 0 +1728 1472 0 +1744 1472 0 +1760 1472 0 +1776 1472 0 +1792 1472 0 +1808 1472 0 +1824 1472 0 +1840 1472 0 +1856 1472 0 +1872 1472 0 +1888 1472 0 +1904 1472 0 +1920 1472 0 +1936 1472 0 +1952 1472 0 +1968 1472 0 +1984 1472 0 +2000 1472 0 +2016 1472 0 +2032 1472 0 +2048 1472 0 +1024 1488 0 +1040 1488 0 +1056 1488 0 +1072 1488 0 +1088 1488 0 +1104 1488 0 +1120 1488 0 +1136 1488 0 +1152 1488 0 +1168 1488 0 +1184 1488 0 +1200 1488 0 +1216 1488 0 +1232 1488 0 +1248 1488 0 +1264 1488 0 +1280 1488 0 +1296 1488 0 +1312 1488 0 +1328 1488 0 +1344 1488 0 +1360 1488 0 +1376 1488 0 +1392 1488 0 +1408 1488 0 +1424 1488 0 +1440 1488 0 +1456 1488 0 +1472 1488 0 +1488 1488 0 +1504 1488 0 +1520 1488 0 +1536 1488 0 +1552 1488 0 +1568 1488 0 +1584 1488 0 +1600 1488 0 +1616 1488 0 +1632 1488 0 +1648 1488 0 +1664 1488 0 +1680 1488 0 +1696 1488 0 +1712 1488 0 +1728 1488 0 +1744 1488 0 +1760 1488 0 +1776 1488 0 +1792 1488 0 +1808 1488 0 +1824 1488 0 +1840 1488 0 +1856 1488 0 +1872 1488 0 +1888 1488 0 +1904 1488 0 +1920 1488 0 +1936 1488 0 +1952 1488 0 +1968 1488 0 +1984 1488 0 +2000 1488 0 +2016 1488 0 +2032 1488 0 +2048 1488 0 +1024 1504 0 +1040 1504 0 +1056 1504 0 +1072 1504 0 +1088 1504 0 +1104 1504 0 +1120 1504 0 +1136 1504 0 +1152 1504 0 +1168 1504 0 +1184 1504 0 +1200 1504 0 +1216 1504 0 +1232 1504 0 +1248 1504 0 +1264 1504 0 +1280 1504 0 +1296 1504 0 +1312 1504 0 +1328 1504 0 +1344 1504 0 +1360 1504 0 +1376 1504 0 +1392 1504 0 +1408 1504 0 +1424 1504 0 +1440 1504 0 +1456 1504 0 +1472 1504 0 +1488 1504 0 +1504 1504 0 +1520 1504 0 +1536 1504 0 +1552 1504 0 +1568 1504 0 +1584 1504 0 +1600 1504 0 +1616 1504 0 +1632 1504 0 +1648 1504 0 +1664 1504 0 +1680 1504 0 +1696 1504 0 +1712 1504 0 +1728 1504 0 +1744 1504 0 +1760 1504 0 +1776 1504 0 +1792 1504 0 +1808 1504 0 +1824 1504 0 +1840 1504 0 +1856 1504 0 +1872 1504 0 +1888 1504 0 +1904 1504 0 +1920 1504 0 +1936 1504 0 +1952 1504 0 +1968 1504 0 +1984 1504 0 +2000 1504 0 +2016 1504 0 +2032 1504 0 +2048 1504 0 +1024 1520 0 +1040 1520 0 +1056 1520 0 +1072 1520 0 +1088 1520 0 +1104 1520 0 +1120 1520 0 +1136 1520 0 +1152 1520 0 +1168 1520 0 +1184 1520 0 +1200 1520 0 +1216 1520 0 +1232 1520 0 +1248 1520 0 +1264 1520 0 +1280 1520 0 +1296 1520 0 +1312 1520 0 +1328 1520 0 +1344 1520 0 +1360 1520 0 +1376 1520 0 +1392 1520 0 +1408 1520 0 +1424 1520 0 +1440 1520 0 +1456 1520 0 +1472 1520 0 +1488 1520 0 +1504 1520 0 +1520 1520 0 +1536 1520 0 +1552 1520 0 +1568 1520 0 +1584 1520 0 +1600 1520 0 +1616 1520 0 +1632 1520 0 +1648 1520 0 +1664 1520 0 +1680 1520 0 +1696 1520 0 +1712 1520 0 +1728 1520 0 +1744 1520 0 +1760 1520 0 +1776 1520 0 +1792 1520 0 +1808 1520 0 +1824 1520 0 +1840 1520 0 +1856 1520 0 +1872 1520 0 +1888 1520 0 +1904 1520 0 +1920 1520 0 +1936 1520 0 +1952 1520 0 +1968 1520 0 +1984 1520 0 +2000 1520 0 +2016 1520 0 +2032 1520 0 +2048 1520 0 +1024 1536 0 +1040 1536 0 +1056 1536 0 +1072 1536 0 +1088 1536 0 +1104 1536 0 +1120 1536 0 +1136 1536 0 +1152 1536 0 +1168 1536 0 +1184 1536 0 +1200 1536 0 +1216 1536 0 +1232 1536 0 +1248 1536 0 +1264 1536 0 +1280 1536 0 +1296 1536 0 +1312 1536 0 +1328 1536 0 +1344 1536 0 +1360 1536 0 +1376 1536 0 +1392 1536 0 +1408 1536 0 +1424 1536 0 +1440 1536 0 +1456 1536 0 +1472 1536 0 +1488 1536 0 +1504 1536 0 +1520 1536 0 +1536 1536 0 +1552 1536 0 +1568 1536 0 +1584 1536 0 +1600 1536 0 +1616 1536 0 +1632 1536 0 +1648 1536 0 +1664 1536 0 +1680 1536 0 +1696 1536 0 +1712 1536 0 +1728 1536 0 +1744 1536 0 +1760 1536 0 +1776 1536 0 +1792 1536 0 +1808 1536 0 +1824 1536 0 +1840 1536 0 +1856 1536 0 +1872 1536 0 +1888 1536 0 +1904 1536 0 +1920 1536 0 +1936 1536 0 +1952 1536 0 +1968 1536 0 +1984 1536 0 +2000 1536 0 +2016 1536 0 +2032 1536 0 +2048 1536 0 +1024 1552 0 +1040 1552 0 +1056 1552 0 +1072 1552 0 +1088 1552 0 +1104 1552 0 +1120 1552 0 +1136 1552 0 +1152 1552 0 +1168 1552 0 +1184 1552 0 +1200 1552 0 +1216 1552 0 +1232 1552 0 +1248 1552 0 +1264 1552 0 +1280 1552 0 +1296 1552 0 +1312 1552 0 +1328 1552 0 +1344 1552 0 +1360 1552 0 +1376 1552 0 +1392 1552 0 +1408 1552 0 +1424 1552 0 +1440 1552 0 +1456 1552 0 +1472 1552 0 +1488 1552 0 +1504 1552 0 +1520 1552 0 +1536 1552 0 +1552 1552 0 +1568 1552 0 +1584 1552 0 +1600 1552 0 +1616 1552 0 +1632 1552 0 +1648 1552 0 +1664 1552 0 +1680 1552 0 +1696 1552 0 +1712 1552 0 +1728 1552 0 +1744 1552 0 +1760 1552 0 +1776 1552 0 +1792 1552 0 +1808 1552 0 +1824 1552 0 +1840 1552 0 +1856 1552 0 +1872 1552 0 +1888 1552 0 +1904 1552 0 +1920 1552 0 +1936 1552 0 +1952 1552 0 +1968 1552 0 +1984 1552 0 +2000 1552 0 +2016 1552 0 +2032 1552 0 +2048 1552 0 +1024 1568 0 +1040 1568 0 +1056 1568 0 +1072 1568 0 +1088 1568 0 +1104 1568 0 +1120 1568 0 +1136 1568 0 +1152 1568 0 +1168 1568 0 +1184 1568 0 +1200 1568 0 +1216 1568 0 +1232 1568 0 +1248 1568 0 +1264 1568 0 +1280 1568 0 +1296 1568 0 +1312 1568 0 +1328 1568 0 +1344 1568 0 +1360 1568 0 +1376 1568 0 +1392 1568 0 +1408 1568 0 +1424 1568 0 +1440 1568 0 +1456 1568 0 +1472 1568 0 +1488 1568 0 +1504 1568 0 +1520 1568 0 +1536 1568 0 +1552 1568 0 +1568 1568 0 +1584 1568 0 +1600 1568 0 +1616 1568 0 +1632 1568 0 +1648 1568 0 +1664 1568 0 +1680 1568 0 +1696 1568 0 +1712 1568 0 +1728 1568 0 +1744 1568 0 +1760 1568 0 +1776 1568 0 +1792 1568 0 +1808 1568 0 +1824 1568 0 +1840 1568 0 +1856 1568 0 +1872 1568 0 +1888 1568 0 +1904 1568 0 +1920 1568 0 +1936 1568 0 +1952 1568 0 +1968 1568 0 +1984 1568 0 +2000 1568 0 +2016 1568 0 +2032 1568 0 +2048 1568 0 +1024 1584 0 +1040 1584 0 +1056 1584 0 +1072 1584 0 +1088 1584 0 +1104 1584 0 +1120 1584 0 +1136 1584 0 +1152 1584 0 +1168 1584 0 +1184 1584 0 +1200 1584 0 +1216 1584 0 +1232 1584 0 +1248 1584 0 +1264 1584 0 +1280 1584 0 +1296 1584 0 +1312 1584 0 +1328 1584 0 +1344 1584 0 +1360 1584 0 +1376 1584 0 +1392 1584 0 +1408 1584 0 +1424 1584 0 +1440 1584 0 +1456 1584 0 +1472 1584 0 +1488 1584 0 +1504 1584 0 +1520 1584 0 +1536 1584 0 +1552 1584 0 +1568 1584 0 +1584 1584 0 +1600 1584 0 +1616 1584 0 +1632 1584 0 +1648 1584 0 +1664 1584 0 +1680 1584 0 +1696 1584 0 +1712 1584 0 +1728 1584 0 +1744 1584 0 +1760 1584 0 +1776 1584 0 +1792 1584 0 +1808 1584 0 +1824 1584 0 +1840 1584 0 +1856 1584 0 +1872 1584 0 +1888 1584 0 +1904 1584 0 +1920 1584 0 +1936 1584 0 +1952 1584 0 +1968 1584 0 +1984 1584 0 +2000 1584 0 +2016 1584 0 +2032 1584 0 +2048 1584 0 +1024 1600 0 +1040 1600 0 +1056 1600 0 +1072 1600 0 +1088 1600 0 +1104 1600 0 +1120 1600 0 +1136 1600 0 +1152 1600 0 +1168 1600 0 +1184 1600 0 +1200 1600 0 +1216 1600 0 +1232 1600 0 +1248 1600 0 +1264 1600 0 +1280 1600 0 +1296 1600 0 +1312 1600 0 +1328 1600 0 +1344 1600 0 +1360 1600 0 +1376 1600 0 +1392 1600 0 +1408 1600 0 +1424 1600 0 +1440 1600 0 +1456 1600 0 +1472 1600 0 +1488 1600 0 +1504 1600 0 +1520 1600 0 +1536 1600 0 +1552 1600 0 +1568 1600 0 +1584 1600 0 +1600 1600 0 +1616 1600 0 +1632 1600 0 +1648 1600 0 +1664 1600 0 +1680 1600 0 +1696 1600 0 +1712 1600 0 +1728 1600 0 +1744 1600 0 +1760 1600 0 +1776 1600 0 +1792 1600 0 +1808 1600 0 +1824 1600 0 +1840 1600 0 +1856 1600 0 +1872 1600 0 +1888 1600 0 +1904 1600 0 +1920 1600 0 +1936 1600 0 +1952 1600 0 +1968 1600 0 +1984 1600 0 +2000 1600 0 +2016 1600 0 +2032 1600 0 +2048 1600 0 +1024 1616 0 +1040 1616 0 +1056 1616 0 +1072 1616 0 +1088 1616 0 +1104 1616 0 +1120 1616 0 +1136 1616 0 +1152 1616 0 +1168 1616 0 +1184 1616 0 +1200 1616 0 +1216 1616 0 +1232 1616 0 +1248 1616 0 +1264 1616 0 +1280 1616 0 +1296 1616 0 +1312 1616 0 +1328 1616 0 +1344 1616 0 +1360 1616 0 +1376 1616 0 +1392 1616 0 +1408 1616 0 +1424 1616 0 +1440 1616 0 +1456 1616 0 +1472 1616 0 +1488 1616 0 +1504 1616 0 +1520 1616 0 +1536 1616 0 +1552 1616 0 +1568 1616 0 +1584 1616 0 +1600 1616 0 +1616 1616 0 +1632 1616 0 +1648 1616 0 +1664 1616 0 +1680 1616 0 +1696 1616 0 +1712 1616 0 +1728 1616 0 +1744 1616 0 +1760 1616 0 +1776 1616 0 +1792 1616 0 +1808 1616 0 +1824 1616 0 +1840 1616 0 +1856 1616 0 +1872 1616 0 +1888 1616 0 +1904 1616 0 +1920 1616 0 +1936 1616 0 +1952 1616 0 +1968 1616 0 +1984 1616 0 +2000 1616 0 +2016 1616 0 +2032 1616 0 +2048 1616 0 +1024 1632 0 +1040 1632 0 +1056 1632 0 +1072 1632 0 +1088 1632 0 +1104 1632 0 +1120 1632 0 +1136 1632 0 +1152 1632 0 +1168 1632 0 +1184 1632 0 +1200 1632 0 +1216 1632 0 +1232 1632 0 +1248 1632 0 +1264 1632 0 +1280 1632 0 +1296 1632 0 +1312 1632 0 +1328 1632 0 +1344 1632 0 +1360 1632 0 +1376 1632 0 +1392 1632 0 +1408 1632 0 +1424 1632 0 +1440 1632 0 +1456 1632 0 +1472 1632 0 +1488 1632 0 +1504 1632 0 +1520 1632 0 +1536 1632 0 +1552 1632 0 +1568 1632 0 +1584 1632 0 +1600 1632 0 +1616 1632 0 +1632 1632 0 +1648 1632 0 +1664 1632 0 +1680 1632 0 +1696 1632 0 +1712 1632 0 +1728 1632 0 +1744 1632 0 +1760 1632 0 +1776 1632 0 +1792 1632 0 +1808 1632 0 +1824 1632 0 +1840 1632 0 +1856 1632 0 +1872 1632 0 +1888 1632 0 +1904 1632 0 +1920 1632 0 +1936 1632 0 +1952 1632 0 +1968 1632 0 +1984 1632 0 +2000 1632 0 +2016 1632 0 +2032 1632 0 +2048 1632 0 +1024 1648 0 +1040 1648 0 +1056 1648 0 +1072 1648 0 +1088 1648 0 +1104 1648 0 +1120 1648 0 +1136 1648 0 +1152 1648 0 +1168 1648 0 +1184 1648 0 +1200 1648 0 +1216 1648 0 +1232 1648 0 +1248 1648 0 +1264 1648 0 +1280 1648 0 +1296 1648 0 +1312 1648 0 +1328 1648 0 +1344 1648 0 +1360 1648 0 +1376 1648 0 +1392 1648 0 +1408 1648 0 +1424 1648 0 +1440 1648 0 +1456 1648 0 +1472 1648 0 +1488 1648 0 +1504 1648 0 +1520 1648 0 +1536 1648 0 +1552 1648 0 +1568 1648 0 +1584 1648 0 +1600 1648 0 +1616 1648 0 +1632 1648 0 +1648 1648 0 +1664 1648 0 +1680 1648 0 +1696 1648 0 +1712 1648 0 +1728 1648 0 +1744 1648 0 +1760 1648 0 +1776 1648 0 +1792 1648 0 +1808 1648 0 +1824 1648 0 +1840 1648 0 +1856 1648 0 +1872 1648 0 +1888 1648 0 +1904 1648 0 +1920 1648 0 +1936 1648 0 +1952 1648 0 +1968 1648 0 +1984 1648 0 +2000 1648 0 +2016 1648 0 +2032 1648 0 +2048 1648 0 +1024 1664 0 +1040 1664 0 +1056 1664 0 +1072 1664 0 +1088 1664 0 +1104 1664 0 +1120 1664 0 +1136 1664 0 +1152 1664 0 +1168 1664 0 +1184 1664 0 +1200 1664 0 +1216 1664 0 +1232 1664 0 +1248 1664 0 +1264 1664 0 +1280 1664 0 +1296 1664 0 +1312 1664 0 +1328 1664 0 +1344 1664 0 +1360 1664 0 +1376 1664 0 +1392 1664 0 +1408 1664 0 +1424 1664 0 +1440 1664 0 +1456 1664 0 +1472 1664 0 +1488 1664 0 +1504 1664 0 +1520 1664 0 +1536 1664 0 +1552 1664 0 +1568 1664 0 +1584 1664 0 +1600 1664 0 +1616 1664 0 +1632 1664 0 +1648 1664 0 +1664 1664 0 +1680 1664 0 +1696 1664 0 +1712 1664 0 +1728 1664 0 +1744 1664 0 +1760 1664 0 +1776 1664 0 +1792 1664 0 +1808 1664 0 +1824 1664 0 +1840 1664 0 +1856 1664 0 +1872 1664 0 +1888 1664 0 +1904 1664 0 +1920 1664 0 +1936 1664 0 +1952 1664 0 +1968 1664 0 +1984 1664 0 +2000 1664 0 +2016 1664 0 +2032 1664 0 +2048 1664 0 +1024 1680 0 +1040 1680 0 +1056 1680 0 +1072 1680 0 +1088 1680 0 +1104 1680 0 +1120 1680 0 +1136 1680 0 +1152 1680 0 +1168 1680 0 +1184 1680 0 +1200 1680 0 +1216 1680 0 +1232 1680 0 +1248 1680 0 +1264 1680 0 +1280 1680 0 +1296 1680 0 +1312 1680 0 +1328 1680 0 +1344 1680 0 +1360 1680 0 +1376 1680 0 +1392 1680 0 +1408 1680 0 +1424 1680 0 +1440 1680 0 +1456 1680 0 +1472 1680 0 +1488 1680 0 +1504 1680 0 +1520 1680 0 +1536 1680 0 +1552 1680 0 +1568 1680 0 +1584 1680 0 +1600 1680 0 +1616 1680 0 +1632 1680 0 +1648 1680 0 +1664 1680 0 +1680 1680 0 +1696 1680 0 +1712 1680 0 +1728 1680 0 +1744 1680 0 +1760 1680 0 +1776 1680 0 +1792 1680 0 +1808 1680 0 +1824 1680 0 +1840 1680 0 +1856 1680 0 +1872 1680 0 +1888 1680 0 +1904 1680 0 +1920 1680 0 +1936 1680 0 +1952 1680 0 +1968 1680 0 +1984 1680 0 +2000 1680 0 +2016 1680 0 +2032 1680 0 +2048 1680 0 +1024 1696 0 +1040 1696 0 +1056 1696 0 +1072 1696 0 +1088 1696 0 +1104 1696 0 +1120 1696 0 +1136 1696 0 +1152 1696 0 +1168 1696 0 +1184 1696 0 +1200 1696 0 +1216 1696 0 +1232 1696 0 +1248 1696 0 +1264 1696 0 +1280 1696 0 +1296 1696 0 +1312 1696 0 +1328 1696 0 +1344 1696 0 +1360 1696 0 +1376 1696 0 +1392 1696 0 +1408 1696 0 +1424 1696 0 +1440 1696 0 +1456 1696 0 +1472 1696 0 +1488 1696 0 +1504 1696 0 +1520 1696 0 +1536 1696 0 +1552 1696 0 +1568 1696 0 +1584 1696 0 +1600 1696 0 +1616 1696 0 +1632 1696 0 +1648 1696 0 +1664 1696 0 +1680 1696 0 +1696 1696 0 +1712 1696 0 +1728 1696 0 +1744 1696 0 +1760 1696 0 +1776 1696 0 +1792 1696 0 +1808 1696 0 +1824 1696 0 +1840 1696 0 +1856 1696 0 +1872 1696 0 +1888 1696 0 +1904 1696 0 +1920 1696 0 +1936 1696 0 +1952 1696 0 +1968 1696 0 +1984 1696 0 +2000 1696 0 +2016 1696 0 +2032 1696 0 +2048 1696 0 +1024 1712 0 +1040 1712 0 +1056 1712 0 +1072 1712 0 +1088 1712 0 +1104 1712 0 +1120 1712 0 +1136 1712 0 +1152 1712 0 +1168 1712 0 +1184 1712 0 +1200 1712 0 +1216 1712 0 +1232 1712 0 +1248 1712 0 +1264 1712 0 +1280 1712 0 +1296 1712 0 +1312 1712 0 +1328 1712 0 +1344 1712 0 +1360 1712 0 +1376 1712 0 +1392 1712 0 +1408 1712 0 +1424 1712 0 +1440 1712 0 +1456 1712 0 +1472 1712 0 +1488 1712 0 +1504 1712 0 +1520 1712 0 +1536 1712 0 +1552 1712 0 +1568 1712 0 +1584 1712 0 +1600 1712 0 +1616 1712 0 +1632 1712 0 +1648 1712 0 +1664 1712 0 +1680 1712 0 +1696 1712 0 +1712 1712 0 +1728 1712 0 +1744 1712 0 +1760 1712 0 +1776 1712 0 +1792 1712 0 +1808 1712 0 +1824 1712 0 +1840 1712 0 +1856 1712 0 +1872 1712 0 +1888 1712 0 +1904 1712 0 +1920 1712 0 +1936 1712 0 +1952 1712 0 +1968 1712 0 +1984 1712 0 +2000 1712 0 +2016 1712 0 +2032 1712 0 +2048 1712 0 +1024 1728 0 +1040 1728 0 +1056 1728 0 +1072 1728 0 +1088 1728 0 +1104 1728 0 +1120 1728 0 +1136 1728 0 +1152 1728 0 +1168 1728 0 +1184 1728 0 +1200 1728 0 +1216 1728 0 +1232 1728 0 +1248 1728 0 +1264 1728 0 +1280 1728 0 +1296 1728 0 +1312 1728 0 +1328 1728 0 +1344 1728 0 +1360 1728 0 +1376 1728 0 +1392 1728 0 +1408 1728 0 +1424 1728 0 +1440 1728 0 +1456 1728 0 +1472 1728 0 +1488 1728 0 +1504 1728 0 +1520 1728 0 +1536 1728 0 +1552 1728 0 +1568 1728 0 +1584 1728 0 +1600 1728 0 +1616 1728 0 +1632 1728 0 +1648 1728 0 +1664 1728 0 +1680 1728 0 +1696 1728 0 +1712 1728 0 +1728 1728 0 +1744 1728 0 +1760 1728 0 +1776 1728 0 +1792 1728 0 +1808 1728 0 +1824 1728 0 +1840 1728 0 +1856 1728 0 +1872 1728 0 +1888 1728 0 +1904 1728 0 +1920 1728 0 +1936 1728 0 +1952 1728 0 +1968 1728 0 +1984 1728 0 +2000 1728 0 +2016 1728 0 +2032 1728 0 +2048 1728 0 +1024 1744 0 +1040 1744 0 +1056 1744 0 +1072 1744 0 +1088 1744 0 +1104 1744 0 +1120 1744 0 +1136 1744 0 +1152 1744 0 +1168 1744 0 +1184 1744 0 +1200 1744 0 +1216 1744 0 +1232 1744 0 +1248 1744 0 +1264 1744 0 +1280 1744 0 +1296 1744 0 +1312 1744 0 +1328 1744 0 +1344 1744 0 +1360 1744 0 +1376 1744 0 +1392 1744 0 +1408 1744 0 +1424 1744 0 +1440 1744 0 +1456 1744 0 +1472 1744 0 +1488 1744 0 +1504 1744 0 +1520 1744 0 +1536 1744 0 +1552 1744 0 +1568 1744 0 +1584 1744 0 +1600 1744 0 +1616 1744 0 +1632 1744 0 +1648 1744 0 +1664 1744 0 +1680 1744 0 +1696 1744 0 +1712 1744 0 +1728 1744 0 +1744 1744 0 +1760 1744 0 +1776 1744 0 +1792 1744 0 +1808 1744 0 +1824 1744 0 +1840 1744 0 +1856 1744 0 +1872 1744 0 +1888 1744 0 +1904 1744 0 +1920 1744 0 +1936 1744 0 +1952 1744 0 +1968 1744 0 +1984 1744 0 +2000 1744 0 +2016 1744 0 +2032 1744 0 +2048 1744 0 +1024 1760 0 +1040 1760 0 +1056 1760 0 +1072 1760 0 +1088 1760 0 +1104 1760 0 +1120 1760 0 +1136 1760 0 +1152 1760 0 +1168 1760 0 +1184 1760 0 +1200 1760 0 +1216 1760 0 +1232 1760 0 +1248 1760 0 +1264 1760 0 +1280 1760 0 +1296 1760 0 +1312 1760 0 +1328 1760 0 +1344 1760 0 +1360 1760 0 +1376 1760 0 +1392 1760 0 +1408 1760 0 +1424 1760 0 +1440 1760 0 +1456 1760 0 +1472 1760 0 +1488 1760 0 +1504 1760 0 +1520 1760 0 +1536 1760 0 +1552 1760 0 +1568 1760 0 +1584 1760 0 +1600 1760 0 +1616 1760 0 +1632 1760 0 +1648 1760 0 +1664 1760 0 +1680 1760 0 +1696 1760 0 +1712 1760 0 +1728 1760 0 +1744 1760 0 +1760 1760 0 +1776 1760 0 +1792 1760 0 +1808 1760 0 +1824 1760 0 +1840 1760 0 +1856 1760 0 +1872 1760 0 +1888 1760 0 +1904 1760 0 +1920 1760 0 +1936 1760 0 +1952 1760 0 +1968 1760 0 +1984 1760 0 +2000 1760 0 +2016 1760 0 +2032 1760 0 +2048 1760 0 +1024 1776 0 +1040 1776 0 +1056 1776 0 +1072 1776 0 +1088 1776 0 +1104 1776 0 +1120 1776 0 +1136 1776 0 +1152 1776 0 +1168 1776 0 +1184 1776 0 +1200 1776 0 +1216 1776 0 +1232 1776 0 +1248 1776 0 +1264 1776 0 +1280 1776 0 +1296 1776 0 +1312 1776 0 +1328 1776 0 +1344 1776 0 +1360 1776 0 +1376 1776 0 +1392 1776 0 +1408 1776 0 +1424 1776 0 +1440 1776 0 +1456 1776 0 +1472 1776 0 +1488 1776 0 +1504 1776 0 +1520 1776 0 +1536 1776 0 +1552 1776 0 +1568 1776 0 +1584 1776 0 +1600 1776 0 +1616 1776 0 +1632 1776 0 +1648 1776 0 +1664 1776 0 +1680 1776 0 +1696 1776 0 +1712 1776 0 +1728 1776 0 +1744 1776 0 +1760 1776 0 +1776 1776 0 +1792 1776 0 +1808 1776 0 +1824 1776 0 +1840 1776 0 +1856 1776 0 +1872 1776 0 +1888 1776 0 +1904 1776 0 +1920 1776 0 +1936 1776 0 +1952 1776 0 +1968 1776 0 +1984 1776 0 +2000 1776 0 +2016 1776 0 +2032 1776 0 +2048 1776 0 +1024 1792 0 +1040 1792 0 +1056 1792 0 +1072 1792 0 +1088 1792 0 +1104 1792 0 +1120 1792 0 +1136 1792 0 +1152 1792 0 +1168 1792 0 +1184 1792 0 +1200 1792 0 +1216 1792 0 +1232 1792 0 +1248 1792 0 +1264 1792 0 +1280 1792 0 +1296 1792 0 +1312 1792 0 +1328 1792 0 +1344 1792 0 +1360 1792 0 +1376 1792 0 +1392 1792 0 +1408 1792 0 +1424 1792 0 +1440 1792 0 +1456 1792 0 +1472 1792 0 +1488 1792 0 +1504 1792 0 +1520 1792 0 +1536 1792 0 +1552 1792 0 +1568 1792 0 +1584 1792 0 +1600 1792 0 +1616 1792 0 +1632 1792 0 +1648 1792 0 +1664 1792 0 +1680 1792 0 +1696 1792 0 +1712 1792 0 +1728 1792 0 +1744 1792 0 +1760 1792 0 +1776 1792 0 +1792 1792 0 +1808 1792 0 +1824 1792 0 +1840 1792 0 +1856 1792 0 +1872 1792 0 +1888 1792 0 +1904 1792 0 +1920 1792 0 +1936 1792 0 +1952 1792 0 +1968 1792 0 +1984 1792 0 +2000 1792 0 +2016 1792 0 +2032 1792 0 +2048 1792 0 +1024 1808 0 +1040 1808 0 +1056 1808 0 +1072 1808 0 +1088 1808 0 +1104 1808 0 +1120 1808 0 +1136 1808 0 +1152 1808 0 +1168 1808 0 +1184 1808 0 +1200 1808 0 +1216 1808 0 +1232 1808 0 +1248 1808 0 +1264 1808 0 +1280 1808 0 +1296 1808 0 +1312 1808 0 +1328 1808 0 +1344 1808 0 +1360 1808 0 +1376 1808 0 +1392 1808 0 +1408 1808 0 +1424 1808 0 +1440 1808 0 +1456 1808 0 +1472 1808 0 +1488 1808 0 +1504 1808 0 +1520 1808 0 +1536 1808 0 +1552 1808 0 +1568 1808 0 +1584 1808 0 +1600 1808 0 +1616 1808 0 +1632 1808 0 +1648 1808 0 +1664 1808 0 +1680 1808 0 +1696 1808 0 +1712 1808 0 +1728 1808 0 +1744 1808 0 +1760 1808 0 +1776 1808 0 +1792 1808 0 +1808 1808 0 +1824 1808 0 +1840 1808 0 +1856 1808 0 +1872 1808 0 +1888 1808 0 +1904 1808 0 +1920 1808 0 +1936 1808 0 +1952 1808 0 +1968 1808 0 +1984 1808 0 +2000 1808 0 +2016 1808 0 +2032 1808 0 +2048 1808 0 +1024 1824 0 +1040 1824 0 +1056 1824 0 +1072 1824 0 +1088 1824 0 +1104 1824 0 +1120 1824 0 +1136 1824 0 +1152 1824 0 +1168 1824 0 +1184 1824 0 +1200 1824 0 +1216 1824 0 +1232 1824 0 +1248 1824 0 +1264 1824 0 +1280 1824 0 +1296 1824 0 +1312 1824 0 +1328 1824 0 +1344 1824 0 +1360 1824 0 +1376 1824 0 +1392 1824 0 +1408 1824 0 +1424 1824 0 +1440 1824 0 +1456 1824 0 +1472 1824 0 +1488 1824 0 +1504 1824 0 +1520 1824 0 +1536 1824 0 +1552 1824 0 +1568 1824 0 +1584 1824 0 +1600 1824 0 +1616 1824 0 +1632 1824 0 +1648 1824 0 +1664 1824 0 +1680 1824 0 +1696 1824 0 +1712 1824 0 +1728 1824 0 +1744 1824 0 +1760 1824 0 +1776 1824 0 +1792 1824 0 +1808 1824 0 +1824 1824 0 +1840 1824 0 +1856 1824 0 +1872 1824 0 +1888 1824 0 +1904 1824 0 +1920 1824 0 +1936 1824 0 +1952 1824 0 +1968 1824 0 +1984 1824 0 +2000 1824 0 +2016 1824 0 +2032 1824 0 +2048 1824 0 +1024 1840 0 +1040 1840 0 +1056 1840 0 +1072 1840 0 +1088 1840 0 +1104 1840 0 +1120 1840 0 +1136 1840 0 +1152 1840 0 +1168 1840 0 +1184 1840 0 +1200 1840 0 +1216 1840 0 +1232 1840 0 +1248 1840 0 +1264 1840 0 +1280 1840 0 +1296 1840 0 +1312 1840 0 +1328 1840 0 +1344 1840 0 +1360 1840 0 +1376 1840 0 +1392 1840 0 +1408 1840 0 +1424 1840 0 +1440 1840 0 +1456 1840 0 +1472 1840 0 +1488 1840 0 +1504 1840 0 +1520 1840 0 +1536 1840 0 +1552 1840 0 +1568 1840 0 +1584 1840 0 +1600 1840 0 +1616 1840 0 +1632 1840 0 +1648 1840 0 +1664 1840 0 +1680 1840 0 +1696 1840 0 +1712 1840 0 +1728 1840 0 +1744 1840 0 +1760 1840 0 +1776 1840 0 +1792 1840 0 +1808 1840 0 +1824 1840 0 +1840 1840 0 +1856 1840 0 +1872 1840 0 +1888 1840 0 +1904 1840 0 +1920 1840 0 +1936 1840 0 +1952 1840 0 +1968 1840 0 +1984 1840 0 +2000 1840 0 +2016 1840 0 +2032 1840 0 +2048 1840 0 +1024 1856 0 +1040 1856 0 +1056 1856 0 +1072 1856 0 +1088 1856 0 +1104 1856 0 +1120 1856 0 +1136 1856 0 +1152 1856 0 +1168 1856 0 +1184 1856 0 +1200 1856 0 +1216 1856 0 +1232 1856 0 +1248 1856 0 +1264 1856 0 +1280 1856 0 +1296 1856 0 +1312 1856 0 +1328 1856 0 +1344 1856 0 +1360 1856 0 +1376 1856 0 +1392 1856 0 +1408 1856 0 +1424 1856 0 +1440 1856 0 +1456 1856 0 +1472 1856 0 +1488 1856 0 +1504 1856 0 +1520 1856 0 +1536 1856 0 +1552 1856 0 +1568 1856 0 +1584 1856 0 +1600 1856 0 +1616 1856 0 +1632 1856 0 +1648 1856 0 +1664 1856 0 +1680 1856 0 +1696 1856 0 +1712 1856 0 +1728 1856 0 +1744 1856 0 +1760 1856 0 +1776 1856 0 +1792 1856 0 +1808 1856 0 +1824 1856 0 +1840 1856 0 +1856 1856 0 +1872 1856 0 +1888 1856 0 +1904 1856 0 +1920 1856 0 +1936 1856 0 +1952 1856 0 +1968 1856 0 +1984 1856 0 +2000 1856 0 +2016 1856 0 +2032 1856 0 +2048 1856 0 +1024 1872 0 +1040 1872 0 +1056 1872 0 +1072 1872 0 +1088 1872 0 +1104 1872 0 +1120 1872 0 +1136 1872 0 +1152 1872 0 +1168 1872 0 +1184 1872 0 +1200 1872 0 +1216 1872 0 +1232 1872 0 +1248 1872 0 +1264 1872 0 +1280 1872 0 +1296 1872 0 +1312 1872 0 +1328 1872 0 +1344 1872 0 +1360 1872 0 +1376 1872 0 +1392 1872 0 +1408 1872 0 +1424 1872 0 +1440 1872 0 +1456 1872 0 +1472 1872 0 +1488 1872 0 +1504 1872 0 +1520 1872 0 +1536 1872 0 +1552 1872 0 +1568 1872 0 +1584 1872 0 +1600 1872 0 +1616 1872 0 +1632 1872 0 +1648 1872 0 +1664 1872 0 +1680 1872 0 +1696 1872 0 +1712 1872 0 +1728 1872 0 +1744 1872 0 +1760 1872 0 +1776 1872 0 +1792 1872 0 +1808 1872 0 +1824 1872 0 +1840 1872 0 +1856 1872 0 +1872 1872 0 +1888 1872 0 +1904 1872 0 +1920 1872 0 +1936 1872 0 +1952 1872 0 +1968 1872 0 +1984 1872 0 +2000 1872 0 +2016 1872 0 +2032 1872 0 +2048 1872 0 +1024 1888 0 +1040 1888 0 +1056 1888 0 +1072 1888 0 +1088 1888 0 +1104 1888 0 +1120 1888 0 +1136 1888 0 +1152 1888 0 +1168 1888 0 +1184 1888 0 +1200 1888 0 +1216 1888 0 +1232 1888 0 +1248 1888 0 +1264 1888 0 +1280 1888 0 +1296 1888 0 +1312 1888 0 +1328 1888 0 +1344 1888 0 +1360 1888 0 +1376 1888 0 +1392 1888 0 +1408 1888 0 +1424 1888 0 +1440 1888 0 +1456 1888 0 +1472 1888 0 +1488 1888 0 +1504 1888 0 +1520 1888 0 +1536 1888 0 +1552 1888 0 +1568 1888 0 +1584 1888 0 +1600 1888 0 +1616 1888 0 +1632 1888 0 +1648 1888 0 +1664 1888 0 +1680 1888 0 +1696 1888 0 +1712 1888 0 +1728 1888 0 +1744 1888 0 +1760 1888 0 +1776 1888 0 +1792 1888 0 +1808 1888 0 +1824 1888 0 +1840 1888 0 +1856 1888 0 +1872 1888 0 +1888 1888 0 +1904 1888 0 +1920 1888 0 +1936 1888 0 +1952 1888 0 +1968 1888 0 +1984 1888 0 +2000 1888 0 +2016 1888 0 +2032 1888 0 +2048 1888 0 +1024 1904 0 +1040 1904 0 +1056 1904 0 +1072 1904 0 +1088 1904 0 +1104 1904 0 +1120 1904 0 +1136 1904 0 +1152 1904 0 +1168 1904 0 +1184 1904 0 +1200 1904 0 +1216 1904 0 +1232 1904 0 +1248 1904 0 +1264 1904 0 +1280 1904 0 +1296 1904 0 +1312 1904 0 +1328 1904 0 +1344 1904 0 +1360 1904 0 +1376 1904 0 +1392 1904 0 +1408 1904 0 +1424 1904 0 +1440 1904 0 +1456 1904 0 +1472 1904 0 +1488 1904 0 +1504 1904 0 +1520 1904 0 +1536 1904 0 +1552 1904 0 +1568 1904 0 +1584 1904 0 +1600 1904 0 +1616 1904 0 +1632 1904 0 +1648 1904 0 +1664 1904 0 +1680 1904 0 +1696 1904 0 +1712 1904 0 +1728 1904 0 +1744 1904 0 +1760 1904 0 +1776 1904 0 +1792 1904 0 +1808 1904 0 +1824 1904 0 +1840 1904 0 +1856 1904 0 +1872 1904 0 +1888 1904 0 +1904 1904 0 +1920 1904 0 +1936 1904 0 +1952 1904 0 +1968 1904 0 +1984 1904 0 +2000 1904 0 +2016 1904 0 +2032 1904 0 +2048 1904 0 +1024 1920 0 +1040 1920 0 +1056 1920 0 +1072 1920 0 +1088 1920 0 +1104 1920 0 +1120 1920 0 +1136 1920 0 +1152 1920 0 +1168 1920 0 +1184 1920 0 +1200 1920 0 +1216 1920 0 +1232 1920 0 +1248 1920 0 +1264 1920 0 +1280 1920 0 +1296 1920 0 +1312 1920 0 +1328 1920 0 +1344 1920 0 +1360 1920 0 +1376 1920 0 +1392 1920 0 +1408 1920 0 +1424 1920 0 +1440 1920 0 +1456 1920 0 +1472 1920 0 +1488 1920 0 +1504 1920 0 +1520 1920 0 +1536 1920 0 +1552 1920 0 +1568 1920 0 +1584 1920 0 +1600 1920 0 +1616 1920 0 +1632 1920 0 +1648 1920 0 +1664 1920 0 +1680 1920 0 +1696 1920 0 +1712 1920 0 +1728 1920 0 +1744 1920 0 +1760 1920 0 +1776 1920 0 +1792 1920 0 +1808 1920 0 +1824 1920 0 +1840 1920 0 +1856 1920 0 +1872 1920 0 +1888 1920 0 +1904 1920 0 +1920 1920 0 +1936 1920 0 +1952 1920 0 +1968 1920 0 +1984 1920 0 +2000 1920 0 +2016 1920 0 +2032 1920 0 +2048 1920 0 +1024 1936 0 +1040 1936 0 +1056 1936 0 +1072 1936 0 +1088 1936 0 +1104 1936 0 +1120 1936 0 +1136 1936 0 +1152 1936 0 +1168 1936 0 +1184 1936 0 +1200 1936 0 +1216 1936 0 +1232 1936 0 +1248 1936 0 +1264 1936 0 +1280 1936 0 +1296 1936 0 +1312 1936 0 +1328 1936 0 +1344 1936 0 +1360 1936 0 +1376 1936 0 +1392 1936 0 +1408 1936 0 +1424 1936 0 +1440 1936 0 +1456 1936 0 +1472 1936 0 +1488 1936 0 +1504 1936 0 +1520 1936 0 +1536 1936 0 +1552 1936 0 +1568 1936 0 +1584 1936 0 +1600 1936 0 +1616 1936 0 +1632 1936 0 +1648 1936 0 +1664 1936 0 +1680 1936 0 +1696 1936 0 +1712 1936 0 +1728 1936 0 +1744 1936 0 +1760 1936 0 +1776 1936 0 +1792 1936 0 +1808 1936 0 +1824 1936 0 +1840 1936 0 +1856 1936 0 +1872 1936 0 +1888 1936 0 +1904 1936 0 +1920 1936 0 +1936 1936 0 +1952 1936 0 +1968 1936 0 +1984 1936 0 +2000 1936 0 +2016 1936 0 +2032 1936 0 +2048 1936 0 +1024 1952 0 +1040 1952 0 +1056 1952 0 +1072 1952 0 +1088 1952 0 +1104 1952 0 +1120 1952 0 +1136 1952 0 +1152 1952 0 +1168 1952 0 +1184 1952 0 +1200 1952 0 +1216 1952 0 +1232 1952 0 +1248 1952 0 +1264 1952 0 +1280 1952 0 +1296 1952 0 +1312 1952 0 +1328 1952 0 +1344 1952 0 +1360 1952 0 +1376 1952 0 +1392 1952 0 +1408 1952 0 +1424 1952 0 +1440 1952 0 +1456 1952 0 +1472 1952 0 +1488 1952 0 +1504 1952 0 +1520 1952 0 +1536 1952 0 +1552 1952 0 +1568 1952 0 +1584 1952 0 +1600 1952 0 +1616 1952 0 +1632 1952 0 +1648 1952 0 +1664 1952 0 +1680 1952 0 +1696 1952 0 +1712 1952 0 +1728 1952 0 +1744 1952 0 +1760 1952 0 +1776 1952 0 +1792 1952 0 +1808 1952 0 +1824 1952 0 +1840 1952 0 +1856 1952 0 +1872 1952 0 +1888 1952 0 +1904 1952 0 +1920 1952 0 +1936 1952 0 +1952 1952 0 +1968 1952 0 +1984 1952 0 +2000 1952 0 +2016 1952 0 +2032 1952 0 +2048 1952 0 +1024 1968 0 +1040 1968 0 +1056 1968 0 +1072 1968 0 +1088 1968 0 +1104 1968 0 +1120 1968 0 +1136 1968 0 +1152 1968 0 +1168 1968 0 +1184 1968 0 +1200 1968 0 +1216 1968 0 +1232 1968 0 +1248 1968 0 +1264 1968 0 +1280 1968 0 +1296 1968 0 +1312 1968 0 +1328 1968 0 +1344 1968 0 +1360 1968 0 +1376 1968 0 +1392 1968 0 +1408 1968 0 +1424 1968 0 +1440 1968 0 +1456 1968 0 +1472 1968 0 +1488 1968 0 +1504 1968 0 +1520 1968 0 +1536 1968 0 +1552 1968 0 +1568 1968 0 +1584 1968 0 +1600 1968 0 +1616 1968 0 +1632 1968 0 +1648 1968 0 +1664 1968 0 +1680 1968 0 +1696 1968 0 +1712 1968 0 +1728 1968 0 +1744 1968 0 +1760 1968 0 +1776 1968 0 +1792 1968 0 +1808 1968 0 +1824 1968 0 +1840 1968 0 +1856 1968 0 +1872 1968 0 +1888 1968 0 +1904 1968 0 +1920 1968 0 +1936 1968 0 +1952 1968 0 +1968 1968 0 +1984 1968 0 +2000 1968 0 +2016 1968 0 +2032 1968 0 +2048 1968 0 +1024 1984 0 +1040 1984 0 +1056 1984 0 +1072 1984 0 +1088 1984 0 +1104 1984 0 +1120 1984 0 +1136 1984 0 +1152 1984 0 +1168 1984 0 +1184 1984 0 +1200 1984 0 +1216 1984 0 +1232 1984 0 +1248 1984 0 +1264 1984 0 +1280 1984 0 +1296 1984 0 +1312 1984 0 +1328 1984 0 +1344 1984 0 +1360 1984 0 +1376 1984 0 +1392 1984 0 +1408 1984 0 +1424 1984 0 +1440 1984 0 +1456 1984 0 +1472 1984 0 +1488 1984 0 +1504 1984 0 +1520 1984 0 +1536 1984 0 +1552 1984 0 +1568 1984 0 +1584 1984 0 +1600 1984 0 +1616 1984 0 +1632 1984 0 +1648 1984 0 +1664 1984 0 +1680 1984 0 +1696 1984 0 +1712 1984 0 +1728 1984 0 +1744 1984 0 +1760 1984 0 +1776 1984 0 +1792 1984 0 +1808 1984 0 +1824 1984 0 +1840 1984 0 +1856 1984 0 +1872 1984 0 +1888 1984 0 +1904 1984 0 +1920 1984 0 +1936 1984 0 +1952 1984 0 +1968 1984 0 +1984 1984 0 +2000 1984 0 +2016 1984 0 +2032 1984 0 +2048 1984 0 +1024 2000 0 +1040 2000 0 +1056 2000 0 +1072 2000 0 +1088 2000 0 +1104 2000 0 +1120 2000 0 +1136 2000 0 +1152 2000 0 +1168 2000 0 +1184 2000 0 +1200 2000 0 +1216 2000 0 +1232 2000 0 +1248 2000 0 +1264 2000 0 +1280 2000 0 +1296 2000 0 +1312 2000 0 +1328 2000 0 +1344 2000 0 +1360 2000 0 +1376 2000 0 +1392 2000 0 +1408 2000 0 +1424 2000 0 +1440 2000 0 +1456 2000 0 +1472 2000 0 +1488 2000 0 +1504 2000 0 +1520 2000 0 +1536 2000 0 +1552 2000 0 +1568 2000 0 +1584 2000 0 +1600 2000 0 +1616 2000 0 +1632 2000 0 +1648 2000 0 +1664 2000 0 +1680 2000 0 +1696 2000 0 +1712 2000 0 +1728 2000 0 +1744 2000 0 +1760 2000 0 +1776 2000 0 +1792 2000 0 +1808 2000 0 +1824 2000 0 +1840 2000 0 +1856 2000 0 +1872 2000 0 +1888 2000 0 +1904 2000 0 +1920 2000 0 +1936 2000 0 +1952 2000 0 +1968 2000 0 +1984 2000 0 +2000 2000 0 +2016 2000 0 +2032 2000 0 +2048 2000 0 +1024 2016 0 +1040 2016 0 +1056 2016 0 +1072 2016 0 +1088 2016 0 +1104 2016 0 +1120 2016 0 +1136 2016 0 +1152 2016 0 +1168 2016 0 +1184 2016 0 +1200 2016 0 +1216 2016 0 +1232 2016 0 +1248 2016 0 +1264 2016 0 +1280 2016 0 +1296 2016 0 +1312 2016 0 +1328 2016 0 +1344 2016 0 +1360 2016 0 +1376 2016 0 +1392 2016 0 +1408 2016 0 +1424 2016 0 +1440 2016 0 +1456 2016 0 +1472 2016 0 +1488 2016 0 +1504 2016 0 +1520 2016 0 +1536 2016 0 +1552 2016 0 +1568 2016 0 +1584 2016 0 +1600 2016 0 +1616 2016 0 +1632 2016 0 +1648 2016 0 +1664 2016 0 +1680 2016 0 +1696 2016 0 +1712 2016 0 +1728 2016 0 +1744 2016 0 +1760 2016 0 +1776 2016 0 +1792 2016 0 +1808 2016 0 +1824 2016 0 +1840 2016 0 +1856 2016 0 +1872 2016 0 +1888 2016 0 +1904 2016 0 +1920 2016 0 +1936 2016 0 +1952 2016 0 +1968 2016 0 +1984 2016 0 +2000 2016 0 +2016 2016 0 +2032 2016 0 +2048 2016 0 +1024 2032 0 +1040 2032 0 +1056 2032 0 +1072 2032 0 +1088 2032 0 +1104 2032 0 +1120 2032 0 +1136 2032 0 +1152 2032 0 +1168 2032 0 +1184 2032 0 +1200 2032 0 +1216 2032 0 +1232 2032 0 +1248 2032 0 +1264 2032 0 +1280 2032 0 +1296 2032 0 +1312 2032 0 +1328 2032 0 +1344 2032 0 +1360 2032 0 +1376 2032 0 +1392 2032 0 +1408 2032 0 +1424 2032 0 +1440 2032 0 +1456 2032 0 +1472 2032 0 +1488 2032 0 +1504 2032 0 +1520 2032 0 +1536 2032 0 +1552 2032 0 +1568 2032 0 +1584 2032 0 +1600 2032 0 +1616 2032 0 +1632 2032 0 +1648 2032 0 +1664 2032 0 +1680 2032 0 +1696 2032 0 +1712 2032 0 +1728 2032 0 +1744 2032 0 +1760 2032 0 +1776 2032 0 +1792 2032 0 +1808 2032 0 +1824 2032 0 +1840 2032 0 +1856 2032 0 +1872 2032 0 +1888 2032 0 +1904 2032 0 +1920 2032 0 +1936 2032 0 +1952 2032 0 +1968 2032 0 +1984 2032 0 +2000 2032 0 +2016 2032 0 +2032 2032 0 +2048 2032 0 +1024 2048 0 +1040 2048 0 +1056 2048 0 +1072 2048 0 +1088 2048 0 +1104 2048 0 +1120 2048 0 +1136 2048 0 +1152 2048 0 +1168 2048 0 +1184 2048 0 +1200 2048 0 +1216 2048 0 +1232 2048 0 +1248 2048 0 +1264 2048 0 +1280 2048 0 +1296 2048 0 +1312 2048 0 +1328 2048 0 +1344 2048 0 +1360 2048 0 +1376 2048 0 +1392 2048 0 +1408 2048 0 +1424 2048 0 +1440 2048 0 +1456 2048 0 +1472 2048 0 +1488 2048 0 +1504 2048 0 +1520 2048 0 +1536 2048 0 +1552 2048 0 +1568 2048 0 +1584 2048 0 +1600 2048 0 +1616 2048 0 +1632 2048 0 +1648 2048 0 +1664 2048 0 +1680 2048 0 +1696 2048 0 +1712 2048 0 +1728 2048 0 +1744 2048 0 +1760 2048 0 +1776 2048 0 +1792 2048 0 +1808 2048 0 +1824 2048 0 +1840 2048 0 +1856 2048 0 +1872 2048 0 +1888 2048 0 +1904 2048 0 +1920 2048 0 +1936 2048 0 +1952 2048 0 +1968 2048 0 +1984 2048 0 +2000 2048 0 +2016 2048 0 +2032 2048 0 +2048 2048 0 diff --git a/test/test_files/nrel_precursor/nrel_precursor.inp b/test/test_files/nrel_precursor/nrel_precursor.inp new file mode 100644 index 0000000000..4a05abb19b --- /dev/null +++ b/test/test_files/nrel_precursor/nrel_precursor.inp @@ -0,0 +1,94 @@ +# Generating the precursor file +# Geometry +geometry.prob_lo = -10005 -20005 0 +geometry.prob_hi = 10005 20005 4000 +geometry.is_periodic = 1 1 0 +# Grid +amr.n_cell = 160 312 128 +amr.max_level = 0 +time.stop_time = -1 +time.max_step = 5000 +time.initial_dt = 1.0 +time.fixed_dt = -1 +time.cfl = 0.9 +time.plot_interval = 1000 +time.checkpoint_interval = 1000 +io.int_outputs = terrain_blank terrain_drag +# incflo +incflo.physics = ABL +incflo.density = 1.225 +incflo.gravity = 0. 0. -9.81 # Gravitational force (3D) +incflo.velocity = 10 0 0 +incflo.verbose = 0 +incflo.initial_iterations = 8 +incflo.do_initial_proj = true +incflo.constant_density = true +incflo.use_godunov = true +incflo.godunov_type = "weno_z" +incflo.diffusion_type = 2 +# transport equation parameters +transport.model = ConstTransport +transport.viscosity = 1e-5 +transport.laminar_prandtl = 0.7 +transport.turbulent_prandtl = 0.333 +# turbulence equation parameters +turbulence.model = Kosovic +Kosovic.refMOL = -1e30 +# Atmospheric boundary layer +ABL.Uperiods = 100 +ABL.Vperiods = 100 +ABL.cutoff_height = 50.0 +ABL.deltaU = 1.0 +ABL.deltaV = 1.0 +ABL.perturb_ref_height = 50.0 +ABL.perturb_velocity = true +ABL.perturb_temperature = false +ABL.kappa = .41 +ABL.normal_direction = 2 +ABL.reference_temperature = 300 +ABL.stats_output_format = netcdf +ABL.surface_roughness_z0 = 0.1 +ABL.temperature_heights = 0 1000 2000 2100 4000 +ABL.temperature_values = 300 300 300 305 310.7 +ABL.wall_shear_stress_type = local +ABL.surface_temp_flux = 0 +ABL.bndry_file = "bndry_files" +ABL.bndry_write_frequency = 100 +ABL.bndry_io_mode = 0 +ABL.bndry_planes = xlo ylo +ABL.bndry_output_start_time = 108.507 +ABL.bndry_var_names = velocity temperature +ABL.bndry_output_format = native +# Source +ICNS.source_terms = BoussinesqBuoyancy CoriolisForcing GeostrophicForcing RayleighDamping NonLinearSGSTerm +GeostrophicForcing.geostrophic_wind = 10 0 0 +RayleighDamping.force_coord_directions= 0 0 1 +BoussinesqBuoyancy.reference_temperature = 300 +BoussinesqBuoyancy.thermal_expansion_coeff = 0.00333333 +CoriolisForcing.east_vector = 1.0 0.0 0.0 +CoriolisForcing.north_vector = 0.0 1.0 0.0 +CoriolisForcing.latitude = 39.9061 +CoriolisForcing.rotational_time_period = 86164.1 +RayleighDamping.reference_velocity = 10 0 0 +RayleighDamping.length_sloped_damping = 500 +RayleighDamping.length_complete_damping = 1500 +RayleighDamping.time_scale = 20.0 +# BC +zhi.type = "slip_wall" +zhi.temperature_type = "fixed_gradient" +zhi.temperature = 0.003 +zlo.type = "wall_model" +mac_proj.num_pre_smooth = 8 +mac_proj.num_post_smooth = 8 +mac_proj.mg_rtol = 1.0e-4 +mac_proj.mg_atol = 1.0e-8 +mac_proj.maxiter = 360 +nodal_proj.num_pre_smooth = 8 +nodal_proj.num_post_smooth = 8 +nodal_proj.mg_rtol = 1.0e-4 +nodal_proj.mg_atol = 1.0e-8 +diffusion.mg_rtol = 1.0e-6 +diffusion.mg_atol = 1.0e-8 +temperature_diffusion.mg_rtol = 1.0e-6 +temperature_diffusion.mg_atol = 1.0e-8 +nodal_proj.maxiter = 360 diff --git a/test/test_files/nrel_terrain/nrel_terrain.inp b/test/test_files/nrel_terrain/nrel_terrain.inp new file mode 100644 index 0000000000..8040b35774 --- /dev/null +++ b/test/test_files/nrel_terrain/nrel_terrain.inp @@ -0,0 +1,94 @@ +# Generating the terrain file +# Geometry +geometry.prob_lo = -10005 -20005 0 +geometry.prob_hi = 10005 20005 4000 +geometry.is_periodic = 0 0 0 +# Grid +amr.n_cell = 160 312 128 +amr.max_level = 0 +time.stop_time = -1 +time.max_step = 5000 +time.initial_dt = 1.0 +time.fixed_dt = -1 +time.cfl = 0.9 +time.plot_interval = 1000 +time.checkpoint_interval = 1000 +io.int_outputs = terrain_blank terrain_drag +# incflo +incflo.physics = ABL TerrainDrag +incflo.density = 1.225 +incflo.gravity = 0. 0. -9.81 # Gravitational force (3D) +incflo.velocity = 10 0 0 +incflo.verbose = 0 +incflo.initial_iterations = 8 +incflo.do_initial_proj = true +incflo.constant_density = true +incflo.use_godunov = true +incflo.godunov_type = "weno_z" +incflo.diffusion_type = 2 +# transport equation parameters +transport.model = ConstTransport +transport.viscosity = 1e-5 +transport.laminar_prandtl = 0.7 +transport.turbulent_prandtl = 0.333 +# turbulence equation parameters +turbulence.model = Kosovic +Kosovic.refMOL = -1e30 +# Atmospheric boundary layer +ABL.kappa = .41 +ABL.normal_direction = 2 +ABL.reference_temperature = 300 +ABL.stats_output_format = netcdf +ABL.surface_roughness_z0 = 0.1 +ABL.temperature_heights = 0 1000 2000 2100 4000 +ABL.temperature_values = 300 300 300 305 310.7 +ABL.wall_shear_stress_type = local +ABL.surface_temp_flux = 0 +ABL.bndry_file = "../nrel_precursor/bndry_files" +ABL.bndry_io_mode = 1 +ABL.bndry_var_names = velocity temperature +ABL.bndry_output_format = native +# Source +ICNS.source_terms = BoussinesqBuoyancy CoriolisForcing GeostrophicForcing RayleighDamping NonLinearSGSTerm DragForcing +GeostrophicForcing.geostrophic_wind = 10 0 0 +Temperature.source_terms = DragTempForcing +RayleighDamping.force_coord_directions= 0 0 1 +BoussinesqBuoyancy.reference_temperature = 300 +BoussinesqBuoyancy.thermal_expansion_coeff = 0.00333333 +CoriolisForcing.east_vector = 1.0 0.0 0.0 +CoriolisForcing.north_vector = 0.0 1.0 0.0 +CoriolisForcing.latitude = 39.9061 +CoriolisForcing.rotational_time_period = 86164.1 +RayleighDamping.reference_velocity = 10 0 0 +RayleighDamping.length_sloped_damping = 500 +RayleighDamping.length_complete_damping = 1500 +RayleighDamping.time_scale = 20.0 +# BC +xlo.type = "mass_inflow" +xlo.density = 1.225 +xlo.temperature = 300 +xhi.type = "pressure_outflow" +ylo.type = "mass_inflow" +ylo.density = 1.225 +ylo.temperature = 300 +yhi.type = "pressure_outflow" +zhi.type = "slip_wall" +zhi.temperature_type = "fixed_gradient" +zhi.temperature = 0.003 +zlo.type = "wall_model" +mac_proj.num_pre_smooth = 8 +mac_proj.num_post_smooth = 8 +mac_proj.mg_rtol = 1.0e-4 +mac_proj.mg_atol = 1.0e-8 +mac_proj.maxiter = 360 +nodal_proj.num_pre_smooth = 8 +nodal_proj.num_post_smooth = 8 +nodal_proj.mg_rtol = 1.0e-4 +nodal_proj.mg_atol = 1.0e-8 +diffusion.mg_rtol = 1.0e-6 +diffusion.mg_atol = 1.0e-8 +temperature_diffusion.mg_rtol = 1.0e-6 +temperature_diffusion.mg_atol = 1.0e-8 +nodal_proj.maxiter = 360 +#io +io.restart_file = "../nrel_precursor/chk02000" diff --git a/test/test_files/terrain_box/terrain_box.inp b/test/test_files/terrain_box/terrain_box.inp new file mode 100644 index 0000000000..0deb4f650a --- /dev/null +++ b/test/test_files/terrain_box/terrain_box.inp @@ -0,0 +1,63 @@ +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# SIMULATION STOP # +#.......................................# +time.stop_time = -100.0 # Max (simulated) time to evolve +time.max_step = 1000 # Max number of time steps + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# TIME STEP COMPUTATION # +#.......................................# +time.fixed_dt = -1 # Use this constant dt if > 0 +time.cfl = 0.9 # CFL factor + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# INPUT AND OUTPUT # +#.......................................# +time.plot_interval = 1000000 # Steps between plot files +time.checkpoint_interval = -1 # Steps between checkpoint files + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# PHYSICS # +#.......................................# +ConstValue.density.value = 1.0 +ConstValue.velocity.value = 1.0 0.0 0.0 + +incflo.use_godunov = 1 +incflo.diffusion_type = 2 +incflo.do_initial_proj = 0 +incflo.initial_iterations = 0 +transport.viscosity = 1.0e-15 +transport.laminar_prandtl = 0.7 +transport.turbulent_prandtl = 0.3333 +turbulence.model = Laminar +io.int_outputs = terrainBlank TerrainDrag +incflo.physics = FreeStream TerrainDrag +ICNS.source_terms = DragForcing +DragForcing.verificationMode = 1 +amr.n_cell = 56 56 104 # Grid cells at coarsest AMRlevel +amr.max_level = 0 # Max AMR level in hierarchy +geometry.prob_lo = 0 0 0 +geometry.prob_hi = 1024 1024 1024 +geometry.is_periodic = 0 0 0 # Periodicity x y z (0/1) + +# Boundary conditions +xlo.type = "mass_inflow" +xlo.density = 1.0 +xlo.velocity = 1.0 0.0 0.0 +xhi.type = "pressure_outflow" +ylo.type = "slip_wall" +yhi.type = "slip_wall" +zlo.type = "slip_wall" +zhi.type = "slip_wall" + +incflo.verbose = 0 # incflo_level +nodal_proj.verbose = 0 + + +incflo.post_processing = sampling +sampling.labels = volume1 +sampling.fields = velocity terrainBlank +sampling.volume1.type = VolumeSampler +sampling.volume1.hi = 600 600 200 +sampling.volume1.lo = 400 400 0 +sampling.volume1.num_points = 10 10 20 diff --git a/unit_tests/wind_energy/CMakeLists.txt b/unit_tests/wind_energy/CMakeLists.txt index 27b67c2541..be874a0e37 100644 --- a/unit_tests/wind_energy/CMakeLists.txt +++ b/unit_tests/wind_energy/CMakeLists.txt @@ -8,6 +8,7 @@ target_sources(${amr_wind_unit_test_exe_name} PRIVATE test_abl_stats.cpp test_abl_bc.cpp test_abl_src_timetable.cpp + test_abl_terrain.cpp ) if (AMR_WIND_ENABLE_NETCDF) diff --git a/unit_tests/wind_energy/test_abl_terrain.cpp b/unit_tests/wind_energy/test_abl_terrain.cpp new file mode 100644 index 0000000000..e09c1d2413 --- /dev/null +++ b/unit_tests/wind_energy/test_abl_terrain.cpp @@ -0,0 +1,77 @@ +#include "aw_test_utils/MeshTest.H" +#include "aw_test_utils/iter_tools.H" +#include "aw_test_utils/test_utils.H" +#include "amr-wind/physics/TerrainDrag.H" + +namespace { +void write_terrain(const std::string& fname) +{ + std::ofstream os(fname); + // Write terrain height + os << "0.0\t0.0\t0.0\n"; + os << "0.0\t1024.0\t0.0\n"; + os << "448.0\t0.0\t0.0\n"; + os << "448.0\t1024.0\t0.0\n"; + os << "449.0\t0.0\t100.0\n"; + os << "449.0\t1024.0\t100.0\n"; + os << "576.0\t0.0\t100.0\n"; + os << "576.0\t1024.0\t100.0\n"; + os << "577.0\t0.0\t0.0\n"; + os << "577.0\t1024.0\t0.0\n"; + os << "1024.0\t0.0\t0.0\n"; + os << "1024.0\t1024.0\t0.0\n"; +} + +} // namespace + +namespace amr_wind_tests { + +// Testing the terrain drag reading to ensure that terrain is properly setup +class TerrainTest : public MeshTest +{ +protected: + void populate_parameters() override + { + MeshTest::populate_parameters(); + // Make computational domain like ABL mesh + { + amrex::ParmParse pp("amr"); + amrex::Vector ncell{{32, 32, 16}}; + pp.addarr("n_cell", ncell); + pp.add("blocking_factor", 2); + } + + { + amrex::ParmParse pp("geometry"); + amrex::Vector probhi{{1024, 1024, 512}}; + pp.addarr("prob_hi", probhi); + } + } + std::string terrain_fname = "terrain.amrwind"; +}; + +TEST_F(TerrainTest, terrain) +{ + constexpr amrex::Real tol = 0; + // Write target wind file + write_terrain(terrain_fname); + populate_parameters(); + initialize_mesh(); + auto& pde_mgr = sim().pde_manager(); + pde_mgr.register_icns(); + sim().init_physics(); + amrex::ParmParse pp("incflo"); + amrex::Vector physics{"terrainDrag"}; + pp.addarr("physics", physics); + amr_wind::terraindrag::TerrainDrag terrain_drag(sim()); + terrain_drag.post_init_actions(); + int value = 100; + // Outside Point + value = terrain_drag.return_blank_value(5, 5, 1); + EXPECT_EQ(value, tol); + // Inside Point + value = terrain_drag.return_blank_value(15, 10, 1); + EXPECT_EQ(value, 1 + tol); +} + +} // namespace amr_wind_tests