diff --git a/src/Control/Inciter/InputDeck/Grammar.hpp b/src/Control/Inciter/InputDeck/Grammar.hpp index 42406d0feda..f1bd6ef51bd 100644 --- a/src/Control/Inciter/InputDeck/Grammar.hpp +++ b/src/Control/Inciter/InputDeck/Grammar.hpp @@ -338,7 +338,7 @@ namespace grm { for (std::size_t i=0; i(); mask( conf.template get< tag::bcdir >() ); mask( conf.template get< tag::bcsym >() ); @@ -346,6 +346,8 @@ namespace grm { mask( conf.template get< tag::bcoutlet >() ); mask( conf.template get< tag::bcfarfield >() ); mask( conf.template get< tag::bcextrapolate >() ); + auto& ig = stack.template get(); + mask( ig.template get< tag::mesh >() ); } }; @@ -1454,6 +1456,32 @@ namespace deck { tk::grm::check_vector, eq, tag::bc, param > > > {}; + //! Integrid boundary block + template< class eq > + struct intergrid_boundary : + pegtl::if_must< + tk::grm::readkw::pegtl_string>, + tk::grm::start_vector< tag::param, eq, tag::intergrid_boundary, + tag::sideset >, + tk::grm::block< + use< kw::end >, + tk::grm::parameter_vector< use, + use< kw::mesh >, + tk::grm::Store_back, + tk::grm::noop, + tk::grm::check_vector, + eq, + tag::intergrid_boundary, + tag::mesh >, + tk::grm::parameter_vector< use, + use< kw::sideset >, + tk::grm::Store_back_back, + tk::grm::noop, + tk::grm::check_vector, + eq, + tag::intergrid_boundary, + tag::sideset > > > {}; + //! edgelist ... end block struct edgelist : tk::grm::vector< use< kw::amr_edgelist >, @@ -1758,6 +1786,7 @@ namespace deck { farfield_bc< kw::bc_farfield, tag::compflow, tag::bcfarfield >, + intergrid_boundary< tag::compflow >, bc< kw::bc_extrapolate, tag::compflow, tag::bcextrapolate >, timedep_bc< tag::compflow > diff --git a/src/Control/Inciter/InputDeck/InputDeck.hpp b/src/Control/Inciter/InputDeck/InputDeck.hpp index 406f91c9cf0..a80334fe2d3 100644 --- a/src/Control/Inciter/InputDeck/InputDeck.hpp +++ b/src/Control/Inciter/InputDeck/InputDeck.hpp @@ -128,6 +128,7 @@ class InputDeck : public tk::TaggedTuple< InputDeckMembers > { , kw::diagnostics , kw::history_output , kw::mesh + , kw::intergrid_boundary , kw::filename , kw::location , kw::orientation @@ -305,6 +306,7 @@ class InputDeck : public tk::TaggedTuple< InputDeckMembers > { , kw::interface_advection , kw::gauss_hump_compflow , kw::waterair_shocktube + , kw::isentropic_vortex , kw::shock_hebubble , kw::underwater_ex , kw::shockdensity_wave diff --git a/src/Control/Inciter/Options/Problem.hpp b/src/Control/Inciter/Options/Problem.hpp index 17de28cbfff..43b13b0236e 100644 --- a/src/Control/Inciter/Options/Problem.hpp +++ b/src/Control/Inciter/Options/Problem.hpp @@ -39,6 +39,7 @@ enum class ProblemType : uint8_t { USER_DEFINED, SEDOV_BLASTWAVE, INTERFACE_ADVECTION, GAUSS_HUMP_COMPFLOW, + ISENTROPIC_VORTEX, WATERAIR_SHOCKTUBE, SHOCK_HEBUBBLE, UNDERWATER_EX, @@ -71,6 +72,7 @@ class Problem : public tk::Toggle< ProblemType > { , kw::sedov_blastwave , kw::interface_advection , kw::gauss_hump_compflow + , kw::isentropic_vortex , kw::waterair_shocktube , kw::shock_hebubble , kw::underwater_ex @@ -107,6 +109,8 @@ class Problem : public tk::Toggle< ProblemType > { kw::interface_advection::name() }, { ProblemType::GAUSS_HUMP_COMPFLOW, kw::gauss_hump_compflow::name() }, + { ProblemType::ISENTROPIC_VORTEX, + kw::isentropic_vortex::name() }, { ProblemType::WATERAIR_SHOCKTUBE, kw::waterair_shocktube::name() }, { ProblemType::SHOCK_HEBUBBLE, kw::shock_hebubble::name() }, { ProblemType::UNDERWATER_EX, kw::underwater_ex::name() }, @@ -136,6 +140,8 @@ class Problem : public tk::Toggle< ProblemType > { ProblemType::INTERFACE_ADVECTION }, { kw::gauss_hump_compflow::string(), ProblemType::GAUSS_HUMP_COMPFLOW }, + { kw::isentropic_vortex::string(), + ProblemType::ISENTROPIC_VORTEX }, { kw::waterair_shocktube::string(), ProblemType::WATERAIR_SHOCKTUBE }, { kw::shock_hebubble::string(), diff --git a/src/Control/Inciter/Types.hpp b/src/Control/Inciter/Types.hpp index 810c9ae55ac..5e2148d33c6 100644 --- a/src/Control/Inciter/Types.hpp +++ b/src/Control/Inciter/Types.hpp @@ -315,14 +315,20 @@ using bc = tk::TaggedTuple< brigand::list< //! Mesh assignment and configuration using mesh = tk::TaggedTuple< brigand::list< - tag::filename, std::vector< std::string > - , tag::velocity, std::vector< kw::velocity::info::expect::type > - , tag::bcdir, std::vector< std::size_t > - , tag::bcsym, std::vector< std::size_t > - , tag::bcinlet, std::vector< std::size_t > - , tag::bcoutlet, std::vector< std::size_t > - , tag::bcfarfield, std::vector< std::size_t > - , tag::bcextrapolate, std::vector< std::size_t > + tag::filename, std::vector< std::string > + , tag::velocity, std::vector< kw::velocity::info::expect::type > + , tag::bcdir, std::vector< std::size_t > + , tag::bcsym, std::vector< std::size_t > + , tag::bcinlet, std::vector< std::size_t > + , tag::bcoutlet, std::vector< std::size_t > + , tag::bcfarfield, std::vector< std::size_t > + , tag::bcextrapolate, std::vector< std::size_t > +> >; + +//! Integrid boundary configuration +using intergrid_boundary = tk::TaggedTuple< brigand::list< + tag::mesh, std::vector< std::size_t > + , tag::sideset, std::vector< std::vector< std::size_t > > > >; //! Stagnation points parameters storage @@ -417,6 +423,7 @@ using CompFlowPDEParameters = tk::TaggedTuple< brigand::list< , tag::farfield_pressure, kw::pressure::info::expect::type , tag::farfield_density, kw::density::info::expect::type , tag::farfield_velocity, std::vector< kw::velocity::info::expect::type > + , tag::intergrid_boundary, intergrid_boundary , tag::bc, bc , tag::bctimedep, std::vector< time_dependent_bc > , tag::sponge, SpongeParameters diff --git a/src/Control/Keywords.hpp b/src/Control/Keywords.hpp index 07535c49324..af515d5b7cc 100644 --- a/src/Control/Keywords.hpp +++ b/src/Control/Keywords.hpp @@ -2334,6 +2334,23 @@ struct gauss_hump_compflow_info { using gauss_hump_compflow = keyword< gauss_hump_compflow_info, TAOCPP_PEGTL_STRING("gauss_hump_compflow") >; +struct isentropic_vortex_info { + static std::string name() + { return "Advection of an isentropic vortex for Euler equations"; } + static std::string shortDescription() + { return "Select advection of an isentropic vortex test problem"; } + static std::string longDescription() { return + R"(This keyword is used to select an isentropic vortex advection test + problem. The initial and boundary conditions are specified to set up the + test problem suitable to exercise and test the discretization of the + Euler equations. Example: "problem isentropic_vortex".)"; } + struct expect { + static std::string description() { return "string"; } + }; +}; +using isentropic_vortex = keyword< isentropic_vortex_info, + TAOCPP_PEGTL_STRING("isentropic_vortex") >; + struct waterair_shocktube_info { static std::string name() { return "Water-air shock-tube"; } static std::string shortDescription() { return @@ -2487,6 +2504,7 @@ struct problem_info { + equilinterface_advect::string() + "\' | \'" + richtmyer_meshkov::string() + "\' | \'" + sinewave_packet::string() + "\' | \'" + + isentropic_vortex::string() + "\' | \'" + gauss_hump_compflow::string() + '\''; } }; @@ -2848,6 +2866,24 @@ struct cweight_info { }; using cweight = keyword< cweight_info, TAOCPP_PEGTL_STRING("cweight") >; +struct intergrid_boundary_info { + static std::string name() { return "intergrid_boundary"; } + static std::string shortDescription() { return + "Designate an side set an intergrid boundary"; + } + static std::string longDescription() { return + R"(This keyword is used to select an side set of a mesh to be used as an + intergrid boundary through which solutions on multiple meshes + interact.)"; + } + struct expect { + using type = std::string; + static std::string description() { return "strings"; } + }; +}; +using intergrid_boundary = + keyword< intergrid_boundary_info, TAOCPP_PEGTL_STRING("intergrid_boundary") >; + struct sideset_info { static std::string name() { return "sideset"; } static std::string shortDescription() { return diff --git a/src/Control/Tags.hpp b/src/Control/Tags.hpp index c8781daaba4..ad115968772 100644 --- a/src/Control/Tags.hpp +++ b/src/Control/Tags.hpp @@ -253,6 +253,8 @@ struct init_time { static std::string name() { return "init_time"; } }; struct front_width { static std::string name() { return "front_width"; } }; struct radius { static std::string name() { return "radius"; } }; struct sideset { static std::string name() { return "sideset"; } }; +struct intergrid_boundary { static std::string name() + { return "intergrid_boundary"; } }; struct sponge { static std::string name() { return "sponge"; } }; struct bcinlet { static std::string name() { return "bcinlet"; } }; struct bcoutlet { static std::string name() { return "bcoutlet"; } }; diff --git a/src/Inciter/CMakeLists.txt b/src/Inciter/CMakeLists.txt index 6667522d8cf..38cd1d9e606 100644 --- a/src/Inciter/CMakeLists.txt +++ b/src/Inciter/CMakeLists.txt @@ -20,6 +20,7 @@ add_library(Inciter FluxCorrector.cpp DistFCT.cpp DiagReducer.cpp + HoleReducer.cpp NodeDiagnostics.cpp ElemDiagnostics.cpp FieldOutput.cpp diff --git a/src/Inciter/Discretization.cpp b/src/Inciter/Discretization.cpp index 8199899b1eb..fb62144e2e2 100644 --- a/src/Inciter/Discretization.cpp +++ b/src/Inciter/Discretization.cpp @@ -24,11 +24,13 @@ #include "QuinoaBuildConfig.hpp" #include "ConjugateGradients.hpp" #include "ALE.hpp" +#include "HoleReducer.hpp" #include "M2MTransfer.hpp" namespace inciter { +static CkReduction::reducerType HoleMerger; static CkReduction::reducerType PDFMerger; extern ctr::InputDeck g_inputdeck; extern ctr::InputDeck g_inputdeck_defaults; @@ -98,7 +100,7 @@ Discretization::Discretization( m_meshvel( 0, 3 ), m_meshvel_converged( true ), m_bface( bface ), - m_triinpoel( triinpoel ), + m_triinpoel( tk::remap( triinpoel, m_lid ) ), m_elemblockid( elemblockid ) // ***************************************************************************** // Constructor @@ -456,6 +458,100 @@ Discretization::bndel() const return e; } +void +Discretization::setupHoles( CkCallback cont ) +// ***************************************************************************** +// Communicate holes to background mesh +//! \param[in] cont Callback to continue with after holes have been aggregated +// ***************************************************************************** +{ + if (m_disc.size() == 1 || m_transfer.empty()) { cont.send(); return; } + + m_holcont = cont; + + std::unordered_map< std::size_t, std::vector< tk::real > > hol; + + if (m_meshid == 0) { + tk::destroy( m_hol ); + } + else { + const auto& ib = g_inputdeck.get< tag::param, tag::compflow, + tag::intergrid_boundary >(); + if (ib.get< tag::mesh >()[ m_meshid ]) { // own meshid only + std::size_t nhol = 0; + for (const auto& ibs : ib.get< tag::sideset >()) { // each hole + std::unordered_set< std::size_t > is; + for (auto s : ibs) is.insert( s ); // collect sidesets of hole + if (!is.empty()) { + const auto& x = m_coord[0]; + const auto& y = m_coord[1]; + const auto& z = m_coord[2]; + auto& h = hol[ nhol++ ]; + for (const auto& [ setid, faceids ] : m_bface) { + if ( is.count( static_cast(setid) ) ) { + for (auto f : faceids) { + const auto t = m_triinpoel.data() + f*3; + h.push_back( x[t[0]] ); + h.push_back( y[t[0]] ); + h.push_back( z[t[0]] ); + h.push_back( x[t[1]] ); + h.push_back( y[t[1]] ); + h.push_back( z[t[1]] ); + h.push_back( x[t[2]] ); + h.push_back( y[t[2]] ); + h.push_back( z[t[2]] ); + } + } + } + } + } + } + + // all overset meshes send their hole-parts to the bg mesh for assembly + // (allreduce to all partitions of mesh 0) + for (std::size_t m=1; m > inhol; + + PUP::fromMem creator( msg->getData() ); + creator | mid; + creator | inhol; + delete msg; + + for (auto&& [hid,data] : inhol) { + tk::concat( std::move(data), m_hol[mid][hid] ); + } + + // back to sender overset mesh so it can continue (enough to this partition) + m_disc[mid][thisIndex].holComplete(); + // bg mesh also complete + m_holcont.send(); +} + +void +Discretization::holComplete() +// ***************************************************************************** +// Hole communication complete +// ***************************************************************************** +{ + m_holcont.send(); +} + void Discretization::resizePostAMR( const tk::UnsMesh::Chunk& chunk, @@ -524,6 +620,7 @@ Discretization::registerReducers() // ***************************************************************************** { PDFMerger = CkReduction::addReducer( tk::mergeUniPDFs ); + HoleMerger = CkReduction::addReducer( mergeHole ); } tk::UnsMesh::Coords diff --git a/src/Inciter/Discretization.hpp b/src/Inciter/Discretization.hpp index f3ae37e241b..1601d466854 100644 --- a/src/Inciter/Discretization.hpp +++ b/src/Inciter/Discretization.hpp @@ -176,6 +176,9 @@ class Discretization : public CBase_Discretization { const std::unordered_map< std::size_t, std::set< std::size_t > >& nodeblk, std::size_t nuserblk ); + //! Communicate holes to background mesh + void setupHoles( CkCallback cont ); + /** @name Accessors */ ///@{ //! Coordinates accessor as const-ref @@ -307,6 +310,11 @@ class Discretization : public CBase_Discretization { //! Edge communication map accessor as const-ref const tk::EdgeCommMap& EdgeCommMap() const { return m_edgeCommMap; } + + //! Holes data accessor + const std::unordered_map< std::size_t, + std::unordered_map< std::size_t, std::vector< tk::real > > >& hol() const + { return m_hol; } //@} //! Set time step size @@ -409,6 +417,12 @@ class Discretization : public CBase_Discretization { //! Find elements along our mesh chunk boundary std::vector< std::size_t > bndel() const; + //! Receive hole data + void aggregateHoles( CkReductionMsg* msg ); + + //! Hole communication complete + void holComplete(); + //! Decide if field output iteration count interval is hit bool fielditer() const; @@ -436,6 +450,7 @@ class Discretization : public CBase_Discretization { //! \param[in,out] p Charm++'s PUP::er serializer object reference void pup( PUP::er &p ) override { p | m_meshid; + p | m_holcont; p | m_transfer_complete; p | m_transfer; p | m_mytransfer; @@ -491,6 +506,7 @@ class Discretization : public CBase_Discretization { p | m_bface; p | m_triinpoel; p | m_elemblockid; + p | m_hol; } //! \brief Pack/Unpack serialize operator| //! \param[in,out] p Charm++'s PUP::er serializer object reference @@ -504,6 +520,8 @@ class Discretization : public CBase_Discretization { //! Mesh ID std::size_t m_meshid; + //! Callback to continue with after hole communication + CkCallback m_holcont; //! \brief Charm++ callback of the function to call after a mesh-to-mesh //! solution transfer (to-and-fro) is complete CkCallback m_transfer_complete; @@ -645,6 +663,12 @@ class Discretization : public CBase_Discretization { std::vector< std::size_t > m_triinpoel; //! Local tet ids associated with mesh block ids std::unordered_map< std::size_t, std::set< std::size_t > > m_elemblockid; + //! Holes tessellation + //! \details: Value: list of triangle node coordinates + //! (x1,y1,z1,x2,y2,z2,x3,y3,z3), ..., inner key, hole id, outer key + //! meshid + std::unordered_map< std::size_t, + std::unordered_map< std::size_t, std::vector< tk::real > > > m_hol; //! Generate the Bid data-structure based on the node communication-map std::unordered_map< std::size_t, std::size_t > genBid(); diff --git a/src/Inciter/HoleReducer.cpp b/src/Inciter/HoleReducer.cpp new file mode 100644 index 00000000000..e02dc79bb2c --- /dev/null +++ b/src/Inciter/HoleReducer.cpp @@ -0,0 +1,91 @@ +// ***************************************************************************** +/*! + \file src/Inciter/HoleReducer.cpp + \copyright 2012-2015 J. Bakosi, + 2016-2018 Los Alamos National Security, LLC., + 2019-2021 Triad National Security, LLC. + All rights reserved. See the LICENSE file for details. + \brief Custom Charm++ reducer for aggregating hole data across PEs + \details Custom Charm++ reducer for aggregating hole data across PEs. +*/ +// ***************************************************************************** + +#include +#include +#include + +#include "HoleReducer.hpp" +#include "Exception.hpp" +#include "ContainerUtil.hpp" + +namespace inciter { + +std::pair< int, std::unique_ptr > +serialize( std::size_t meshid, + const std::unordered_map< std::size_t, std::vector< tk::real > >& d ) +// ***************************************************************************** +// Serialize hole surface data to raw memory stream +//! \param[in] meshid Mesh ID +//! \param[in] d Hole data structure +//! \return Pair of the length and the raw stream containing serialized data +// ***************************************************************************** +{ + // Prepare for serializing hole data to a raw binary stream, compute size + PUP::sizer sizer; + sizer | meshid; + sizer | const_cast< std::unordered_map< std::size_t, + std::vector< tk::real > >& >( d ); + + // Create raw character stream to store the serialized data + std::unique_ptr flatData = std::make_unique( sizer.size() ); + + // Serialize vector, each message will contain a vector + PUP::toMem packer( flatData.get() ); + packer | meshid; + packer | const_cast< std::unordered_map< std::size_t, + std::vector< tk::real > >& >( d ); + + // Return size of and raw stream + return { sizer.size(), std::move(flatData) }; +} + +CkReductionMsg* +mergeHole( int nmsg, CkReductionMsg **msgs ) +// ***************************************************************************** +// Charm++ custom reducer for merging hole data during reduction across PEs +//! \param[in] nmsg Number of messages in msgs +//! \param[in] msgs Charm++ reduction message containing the serialized +//! hole surface data +//! \return Aggregated hole surface data built for further aggregation if needed +// ***************************************************************************** +{ + std::size_t meshid; + std::unordered_map< std::size_t, std::vector< tk::real > > v; + + // Create PUP deserializer based on message passed in + PUP::fromMem creator( msgs[0]->getData() ); + + // Deserialize vector from raw stream + creator | meshid; + creator | v; + + for (int m=1; m > inholes; + PUP::fromMem curCreator( msgs[m]->getData() ); + curCreator | mid; + curCreator | inholes; + // Aggregate hole data + meshid = mid; + for (auto&& [hid,data] : inholes) tk::concat( std::move(data), v[hid] ); + } + + // Serialize concatenated hole surface data to raw stream + auto stream = serialize( meshid, v ); + + // Forward serialized hole surface data + return CkReductionMsg::buildNew( stream.first, stream.second.get() ); +} + +} // inciter:: diff --git a/src/Inciter/HoleReducer.hpp b/src/Inciter/HoleReducer.hpp new file mode 100644 index 00000000000..2d82860797a --- /dev/null +++ b/src/Inciter/HoleReducer.hpp @@ -0,0 +1,38 @@ +// ***************************************************************************** +/*! + \file src/Inciter/HoleReducer.hpp + \copyright 2012-2015 J. Bakosi, + 2016-2018 Los Alamos National Security, LLC., + 2019-2021 Triad National Security, LLC. + All rights reserved. See the LICENSE file for details. + \brief Custom Charm++ reducer for aggregating hole data across PEs + \details Custom Charm++ reducer for aggregating hole data across PEs. +*/ +// ***************************************************************************** +#ifndef HoleReducer_h +#define HoleReducer_h + +#include +#include +#include +#include + +#include "NoWarning/charm++.hpp" + +#include "Types.hpp" + +namespace inciter { + +//! Serialize hole surface data to raw memory stream +std::pair< int, std::unique_ptr > +serialize( std::size_t meshid, + const std::unordered_map< std::size_t, + std::vector< tk::real > >& d ); + +//! Charm++ custom reducer for merging hole data during reduction across PEs +CkReductionMsg* +mergeHole( int nmsg, CkReductionMsg **msgs ); + +} // inciter:: + +#endif // HoleReducer_h diff --git a/src/Inciter/OversetFE.cpp b/src/Inciter/OversetFE.cpp index fdb8304ae4e..08fa5e217c5 100644 --- a/src/Inciter/OversetFE.cpp +++ b/src/Inciter/OversetFE.cpp @@ -157,10 +157,155 @@ OversetFE::OversetFE( const CProxy_Discretization& disc, Throw("Mesh motion cannot be activated for steady state problem"); d->comfinal(); - } //! [Constructor] +bool +OversetFE::setupIntergridBoundaries() +// ***************************************************************************** +// Setup data structures for intergrid boundaries +// \return True if did anything +// ***************************************************************************** +{ + auto d = Disc(); + auto meshid = d->MeshId(); + + if (meshid == 0) return false; + + const auto& ib = g_inputdeck.get< tag::param, tag::compflow, + tag::intergrid_boundary >(); + if (not ib.get< tag::mesh >()[ meshid ]) return false; + + std::unordered_set< std::size_t > is; + for (const auto& ibs : ib.get< tag::sideset >()) { + for (auto s : ibs) is.insert( s ); + } + if (is.empty()) return false; + + tk::UnsMesh::FaceSet btri; + for (const auto& [ setid, faceids ] : m_bface) { + if ( is.count( static_cast(setid) ) ) { + for (auto f : faceids) { + btri.insert( { m_triinpoel[f*3+0], + m_triinpoel[f*3+1], + m_triinpoel[f*3+2] } ); + } + } + } + + std::size_t iflag = m_uc.nprop()-1; + + const auto& inpoel = d->Inpoel(); + std::unordered_set< std::size_t > bp; + for (std::size_t e=0; eMeshId() != 0) return false; + + const auto& hol = d->hol(); + + std::vector< tk::real > face; + for (const auto& [m,h] : hol) { // each overset mesh + for (const auto& [hid,tricoord] : h) { // each hole + for (std::size_t t=0; t + ba{ x1-x0, y1-y0, z1-z0 }, ca{ x2-x0, y2-y0, z2-z0 }; + auto n = tk::cross( ba, ca ); + n[0] /= -2.0; + n[1] /= -2.0; + n[2] /= -2.0; + face.push_back( cx ); + face.push_back( cy ); + face.push_back( cz ); + face.push_back( n[0] ); + face.push_back( n[1] ); + face.push_back( n[2] ); + } + } + } + + std::size_t iflag = m_uc.nprop()-1; + + const auto& x = d->Coord()[0]; + const auto& y = d->Coord()[1]; + const auto& z = d->Coord()[2]; + const auto npoin = m_uc.nunk(); + + // compute partial integral for finding hole nodes on bg mesh + auto eps = 1.0; + for (std::size_t i=0; i& blkvols ) // Initialize nodal mesh volumes at previous time step stage d->Voln() = d->Vol(); - // Initiate solution transfer (if coupled) - transferSol(); + // Setup holes for overset + d->setupHoles( + CkCallback( CkIndex_OversetFE::transferSol(), thisProxy[thisIndex] ) ); } void @@ -700,6 +846,8 @@ OversetFE::applySolTransfer( //TODO: index the flag in a better way std::size_t iflag = m_uc.nprop()-1; + findHoles(); + // Zero out solution space for nodes with a specific transfer flag set for (std::size_t i=0; iMeshId() != 0) { - // Overset meshes: assign appropriate values to flag - for (const auto& [blid, ndset] : m_nodeblockid) { - if (blid == 103) { - for (auto i : ndset) m_uc(i,iflag) = 1.0; - } - else if (blid == 104) { - for (auto i : ndset) m_uc(i,iflag) = 2.0; - } - } - } + setupIntergridBoundaries(); } } @@ -1294,8 +1432,9 @@ OversetFE::refine( const std::vector< tk::real >& l2res ) thisProxy[ thisIndex ].wait4norm(); } - // Start solution transfer - transferSol(); + // Start solution transfer (by setting up holes) + d->setupHoles( + CkCallback( CkIndex_OversetFE::transferSol(), thisProxy[thisIndex] ) ); } //! [Refine] @@ -1374,6 +1513,9 @@ OversetFE::writeFields( CkCallback c ) auto eso = g_cgpde[d->MeshId()].elemSurfOutput( m_bface, m_triinpoel, m_u ); elemsurfs.insert( end(elemsurfs), begin(eso), end(eso) ); + nodefieldnames.push_back( "of" ); + nodefields.push_back( m_uc.extract_comp(m_uc.nprop()-1) ); + Assert( nodefieldnames.size() == nodefields.size(), "Size mismatch" ); // Send mesh and fields data (solution dump) for output to file diff --git a/src/Inciter/OversetFE.hpp b/src/Inciter/OversetFE.hpp index 4a988be14ca..4bf78dab082 100644 --- a/src/Inciter/OversetFE.hpp +++ b/src/Inciter/OversetFE.hpp @@ -390,6 +390,12 @@ class OversetFE : public CBase_OversetFE { //! Compute chare-boundary edges void bndEdges(); + //! Setup data structures for intergrid boundaries + bool setupIntergridBoundaries(); + + //! Find nodes within holes + bool findHoles(); + //! Start (re-)computing boundare point-, and dual-face normals void norm(); diff --git a/src/Inciter/Transporter.cpp b/src/Inciter/Transporter.cpp index 0f10bae7538..24419f0f517 100644 --- a/src/Inciter/Transporter.cpp +++ b/src/Inciter/Transporter.cpp @@ -509,6 +509,15 @@ Transporter::matchBCs( std::map< int, std::vector< std::size_t > >& bnd ) usedsets.insert( num ); } + // Add sidesets requested as intergrid boundary + const auto& ib = g_inputdeck.get< tag::param, tag::compflow, + tag::intergrid_boundary, tag::sideset >(); + for (const auto& ibs : ib) { + for (auto s : ibs) { + usedsets.insert( static_cast(s) ); + } + } + // Find user-configured side set ids among side sets read from mesh file std::unordered_set< int > sidesets_used; for (auto i : usedsets) { // for all side sets used in control file diff --git a/src/Inciter/discretization.ci b/src/Inciter/discretization.ci index 1befea4bea9..d20e37725ac 100644 --- a/src/Inciter/discretization.ci +++ b/src/Inciter/discretization.ci @@ -45,6 +45,8 @@ module discretization { entry void vol(); entry void comvol( const std::vector< std::size_t >& gid, const std::vector< tk::real >& nodevol ); + entry [reductiontarget] void aggregateHoles( CkReductionMsg* msg ); + entry void holComplete(); entry void stat( tk::real mesh_volume ); entry void transferInit(); entry void transfer_complete(); diff --git a/src/PDE/CompFlow/Problem.hpp b/src/PDE/CompFlow/Problem.hpp index 552182957b6..80077f61502 100644 --- a/src/PDE/CompFlow/Problem.hpp +++ b/src/PDE/CompFlow/Problem.hpp @@ -57,6 +57,7 @@ #include "Problem/RotatedSodShocktube.hpp" #include "Problem/SedovBlastwave.hpp" #include "Problem/GaussHumpCompflow.hpp" +#include "Problem/IsentropicVortex.hpp" #include "Problem/ShockDensityWave.hpp" namespace inciter { @@ -72,6 +73,7 @@ using CompFlowProblems = brigand::list< CompFlowProblemUserDefined , CompFlowProblemRotatedSodShocktube , CompFlowProblemSedovBlastwave , CompFlowProblemGaussHump + , CompFlowProblemIsentropicVortex , CompFlowProblemShockDensityWave >; diff --git a/src/PDE/CompFlow/Problem/CMakeLists.txt b/src/PDE/CompFlow/Problem/CMakeLists.txt index c67935a6777..bf528a91a4f 100644 --- a/src/PDE/CompFlow/Problem/CMakeLists.txt +++ b/src/PDE/CompFlow/Problem/CMakeLists.txt @@ -10,7 +10,8 @@ add_library(CompFlowProblem UserDefined.cpp VorticalFlow.cpp GaussHumpCompflow.cpp - ShockDensityWave.cpp) + ShockDensityWave.cpp + IsentropicVortex.cpp) target_include_directories(CompFlowProblem PUBLIC ${QUINOA_SOURCE_DIR} diff --git a/src/PDE/CompFlow/Problem/IsentropicVortex.cpp b/src/PDE/CompFlow/Problem/IsentropicVortex.cpp new file mode 100644 index 00000000000..c18be125219 --- /dev/null +++ b/src/PDE/CompFlow/Problem/IsentropicVortex.cpp @@ -0,0 +1,126 @@ +// ***************************************************************************** +/*! + \file src/PDE/CompFlow/Problem/IsentropicVortex.cpp + \copyright 2012-2015 J. Bakosi, + 2016-2018 Los Alamos National Security, LLC., + 2019-2021 Triad National Security, LLC. + All rights reserved. See the LICENSE file for details. + \brief Problem configuration for the compressible flow equations + \details This file defines a Problem policy class for the compressible flow + equations, defined in PDE/CompFlow/CompFlow.h. See PDE/CompFlow/Problem.h + for general requirements on Problem policy classes for CompFlow. +*/ +// ***************************************************************************** + +#include "IsentropicVortex.hpp" +#include "Inciter/InputDeck/InputDeck.hpp" +#include "FieldOutput.hpp" +#include "EoS/GetMatProp.hpp" + +namespace inciter { + +extern ctr::InputDeck g_inputdeck; + +} // ::inciter + +using inciter::CompFlowProblemIsentropicVortex; + +tk::InitializeFn::result_type +CompFlowProblemIsentropicVortex::initialize( + [[maybe_unused]] ncomp_t ncomp, + const std::vector< EOS >& mat_blk, + tk::real x, + tk::real y, + tk::real z, + tk::real t ) +// ***************************************************************************** +//! Evaluate analytical solution at (x,y,z,t) for all components +//! \param[in] ncomp Number of scalar components in this PDE system +//! \param[in] x X coordinate where to evaluate the solution +//! \param[in] y Y coordinate where to evaluate the solution +//! \param[in] z Z coordinate where to evaluate the solution +//! \param[in] t Time where to evaluate the solution +//! \return Values of all components evaluated at (x) +//! \note The function signature must follow tk::InitializeFn +// ***************************************************************************** +{ + return analyticSolution(ncomp, mat_blk, x, y, z, t); +} + +tk::InitializeFn::result_type +CompFlowProblemIsentropicVortex::analyticSolution( + [[maybe_unused]] ncomp_t ncomp, + const std::vector< EOS >& mat_blk, + tk::real x, + tk::real y, + tk::real, + tk::real t ) +// ***************************************************************************** +//! Evaluate analytical solution at (x,y,z,t) for all components +//! \param[in] ncomp Number of scalar components in this PDE system +//! \param[in] x X coordinate where to evaluate the solution +//! \param[in] y Y coordinate where to evaluate the solution +//! \param[in] t Time where to evaluate the solution +//! \return Values of all components evaluated at (x) +//! \note The function signature must follow tk::InitializeFn +// ***************************************************************************** +{ + Assert( ncomp == 5, "Number of scalar components must be 5" ); + + using tag::param; + + // velocity + std::array< tk::real, 3 > vel{{1.0, 1.0, 0.0}}; + + // center of the vortex + std::array< tk::real, 3 > x0{{5.0, 5.0, 0.0}}; + for (std::size_t i=0; i<3; ++i) + x0[i] += vel[i]*t; + + // distance from the center + tk::real r2 = (x-x0[0])*(x-x0[0]) + (y-x0[1])*(y-x0[1]); + + tk::real r, p, rE; + tk::real estr(5.0); + tk::real gam = getmatprop< tag::compflow, tag::gamma >(); + + // perturbed density + r = std::pow( (1.0 - ((gam-1.0)*estr*estr)/(8.0*gam*M_PI*M_PI) * exp(1.0-r2)), + (1.0/(gam-1.0)) ); + // perturbed velocity + vel[0] -= 0.5*estr/M_PI * exp((1.0-r2)/0.5) * (y-x0[1]); + vel[1] += 0.5*estr/M_PI * exp((1.0-r2)/0.5) * (x-x0[0]); + // pressure + p = 1.0; + // total specific energy + rE = mat_blk[0].compute< EOS::totalenergy >( r, vel[0], vel[1], vel[2], p ); + + return {{ r, r*vel[0], r*vel[1], r*vel[2], rE }}; +} + +std::vector< std::string > +CompFlowProblemIsentropicVortex::analyticFieldNames( ncomp_t ) const +// ***************************************************************************** +// Return analytic field names to be output to file +//! \return Vector of strings labelling fields output in file +// ***************************************************************************** +{ + std::vector< std::string > n; + n.push_back( "density_analytical" ); + n.push_back( "x-momentum_analytical" ); + n.push_back( "y-momentum_analytical" ); + n.push_back( "z-momentum_analytical" ); + n.push_back( "total_energy_analytical" ); + + return n; +} + +std::vector< std::string > +CompFlowProblemIsentropicVortex::names( ncomp_t ) const +// ***************************************************************************** +// Return names of integral variables to be output to diagnostics file +//! \return Vector of strings labelling integral variables output +// ***************************************************************************** +{ + return { "r", "ru", "rv", "rw", "re" }; +} diff --git a/src/PDE/CompFlow/Problem/IsentropicVortex.hpp b/src/PDE/CompFlow/Problem/IsentropicVortex.hpp new file mode 100644 index 00000000000..2c15e373f83 --- /dev/null +++ b/src/PDE/CompFlow/Problem/IsentropicVortex.hpp @@ -0,0 +1,72 @@ +// ***************************************************************************** +/*! + \file src/PDE/CompFlow/Problem/IsentropicVortex.hpp + \copyright 2012-2015 J. Bakosi, + 2016-2018 Los Alamos National Security, LLC., + 2019-2021 Triad National Security, LLC. + All rights reserved. See the LICENSE file for details. + \brief Problem configuration for the compressible flow equations + \details This file declares a problem policy class for the compressible flow + equations, defined in PDE/CompFlow/CompFlow.h. See PDE/CompFlow/Problem.h + for general requirements on Problem policy classes for CompFlow. +*/ +// ***************************************************************************** +#ifndef CompFlowProblemIsentropicVortex_h +#define CompFlowProblemIsentropicVortex_h + +#include +#include + +#include "Types.hpp" +#include "Fields.hpp" +#include "FunctionPrototypes.hpp" +#include "SystemComponents.hpp" +#include "Inciter/Options/Problem.hpp" +#include "EoS/EOS.hpp" + +namespace inciter { + +//! CompFlow system of PDEs problem: IsentropicVortex +class CompFlowProblemIsentropicVortex { + + private: + using ncomp_t = tk::ctr::ncomp_t; + using eq = tag::compflow; + + public: + //! Initialize numerical solution + static tk::InitializeFn::result_type + initialize( ncomp_t ncomp, const std::vector< EOS >&, + tk::real x, tk::real y, tk::real, tk::real t ); + + //! Evaluate analytical solution at (x,y,z,t) for all components + static tk::InitializeFn::result_type + analyticSolution( ncomp_t ncomp, + const std::vector< EOS >&, tk::real x, tk::real y, + tk::real, tk::real t ); + + //! Compute and return source term for manufactured solution + //! \param[in,out] sv Source term vector + //! \note The function signature must follow tk::SrcFn + static tk::SrcFn::result_type + src( ncomp_t, const std::vector< EOS >&, tk::real, tk::real, + tk::real, tk::real, std::vector< tk::real >& sv ) + { + Assert(sv.size() == 5, "Incorrect source vector size"); + sv[0] = sv[1] = sv[2] = sv[3] = sv[4] = 0.0; + } + + //! Return analytic field names to be output to file + std::vector< std::string > analyticFieldNames( ncomp_t ) const; + + //! Return names of integral variables to be output to diagnostics file + std::vector< std::string > names( ncomp_t ) const; + + //! Return problem type + static ctr::ProblemType type() noexcept + { return ctr::ProblemType::ISENTROPIC_VORTEX; } +}; + +} // inciter:: + +#endif // CompFlowProblemIsentropicVortex_h diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/CMakeLists.txt b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/CMakeLists.txt index 6e8fea2384c..391d34d36b4 100644 --- a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/CMakeLists.txt +++ b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/CMakeLists.txt @@ -51,9 +51,29 @@ m2m_sphere.cfg LABELS "oversetfe;m2m") + add_regression_test(compflow_euler_icoverset_intergrid ${INCITER_EXECUTABLE} + NUMPES 2 + INPUTFILES ic_overset_intergrid.q freestream_BGmesh_15k.exo sphere_OSmesh_12k.exo + ARGS -c ic_overset_intergrid.q -v + BIN_BASELINE background_intergrid_pe2.std.exo.0 + background_intergrid_pe2.std.exo.1 + overset_intergrid_pe2.std.exo.0 + overset_intergrid_pe2.std.exo.1 + BIN_RESULT out.0.e-s.0.2.0 + out.0.e-s.0.2.1 + out.1.e-s.0.2.0 + out.1.e-s.0.2.1 + BIN_DIFF_PROG_ARGS -m + BIN_DIFF_PROG_CONF m2m_cube.cfg + m2m_cube.cfg + m2m_sphere.cfg + m2m_sphere.cfg + LABELS "oversetfe;m2m") + add_regression_test(compflow_euler_movingmesh_overset ${INCITER_EXECUTABLE} NUMPES 4 - INPUTFILES movingmesh_overset.q freestream_BGmesh_15k.exo sphere_OSmesh_12k.exo + INPUTFILES movingmesh_overset.q freestream_BGmesh_15k.exo + sphere_OSmesh_12k.exo ARGS -c movingmesh_overset.q -v BIN_BASELINE statbackground_pe4.std.exo.0 statbackground_pe4.std.exo.1 diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/background_intergrid_pe2.std.exo.0 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/background_intergrid_pe2.std.exo.0 new file mode 100644 index 00000000000..abc710bc6d8 Binary files /dev/null and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/background_intergrid_pe2.std.exo.0 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/background_intergrid_pe2.std.exo.1 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/background_intergrid_pe2.std.exo.1 new file mode 100644 index 00000000000..c12ce1f3060 Binary files /dev/null and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/background_intergrid_pe2.std.exo.1 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/background_intergrid_pe3.std.exo.0 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/background_intergrid_pe3.std.exo.0 new file mode 100644 index 00000000000..ea27c033fc2 Binary files /dev/null and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/background_intergrid_pe3.std.exo.0 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/background_intergrid_pe3.std.exo.1 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/background_intergrid_pe3.std.exo.1 new file mode 100644 index 00000000000..5ca6fb9448f Binary files /dev/null and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/background_intergrid_pe3.std.exo.1 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/background_intergrid_pe3.std.exo.2 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/background_intergrid_pe3.std.exo.2 new file mode 100644 index 00000000000..9b8858bfc7b Binary files /dev/null and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/background_intergrid_pe3.std.exo.2 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/ic_overset_intergrid.q b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/ic_overset_intergrid.q new file mode 100644 index 00000000000..26132cf28d3 --- /dev/null +++ b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/ic_overset_intergrid.q @@ -0,0 +1,84 @@ +# vim: filetype=sh: +# This is a comment +# Keywords are case-sensitive + +title "Coupled Euler equations" + +inciter + + nstep 1 + ttyi 1 + cfl 0.5 + + partitioning + algorithm mj + end + + scheme oversetfe + + compflow + + physics euler + + problem rayleigh_taylor + alpha 1.0 + betax 1.0 + betay 1.0 + betaz 1.0 + p0 2.0 + r0 2.0 + kappa 1.0 + + mesh + # depvars are automatically assigned and can be referenced + # downstream to request output variables + filename "freestream_BGmesh_15k.exo" + #filename "freestream_BGmesh_118k.exo" # to see hole better + filename "sphere_OSmesh_12k.exo" + end + + ic + density 1.0 end + velocity 0.0 0.0 0.0 end + pressure 10.0 end + end + + material + gamma 1.66666666666667 end + end + + bc_dirichlet + mesh 1 end + sideset 1 2 3 4 5 6 end + end + + bc_farfield + mesh 2 end + sideset 101 end + pressure 10.0 + density 1.0 + velocity 0.0 0.0 0.0 end + end + + intergrid_boundary + mesh 2 end + sideset 102 end + end + + end + + diagnostics + interval 1 + format scientific + error l2 + end + + field_output + var + A1 A2 A3 A4 A5 + B1 B2 B3 B4 B5 + end + interval 5 + end + +end diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/movingmesh_overset.q b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/movingmesh_overset.q index 1dd1bf29b16..70621862a2d 100644 --- a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/movingmesh_overset.q +++ b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/movingmesh_overset.q @@ -25,6 +25,8 @@ inciter # depvars are automatically assigned and can be referenced # downstream to request output variables filename "freestream_BGmesh_15k.exo" velocity 0 0 0 end # depvar: 'a' + #filename "freestream_BGmesh_118k.exo" velocity 0 0 0 end # depvar: 'a' + #filename "freestream_BGmesh_947k.exo" velocity 0 0 0 end # depvar: 'a' filename "sphere_OSmesh_12k.exo" velocity 5 0 0 end # depvar: 'b' ... end @@ -66,6 +68,11 @@ inciter velocity 0.0 0.0 0.0 end end + intergrid_boundary + mesh 2 end + sideset 102 end + end + end diagnostics diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset0_pe4.std.exo.0 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset0_pe4.std.exo.0 index a780bd02935..35fcf1ccc1b 100644 Binary files a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset0_pe4.std.exo.0 and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset0_pe4.std.exo.0 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset0_pe4.std.exo.1 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset0_pe4.std.exo.1 index 916ae041a12..e36c5167fac 100644 Binary files a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset0_pe4.std.exo.1 and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset0_pe4.std.exo.1 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset0_pe4.std.exo.2 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset0_pe4.std.exo.2 index bc974e75a2f..a6bba8c73e0 100644 Binary files a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset0_pe4.std.exo.2 and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset0_pe4.std.exo.2 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset0_pe4.std.exo.3 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset0_pe4.std.exo.3 index 5921e489b66..9bf33f04360 100644 Binary files a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset0_pe4.std.exo.3 and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset0_pe4.std.exo.3 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset13_pe4.std.exo.0 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset13_pe4.std.exo.0 index 8ec9c2dd8f4..893c37b9d75 100644 Binary files a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset13_pe4.std.exo.0 and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset13_pe4.std.exo.0 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset13_pe4.std.exo.1 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset13_pe4.std.exo.1 index 94ae7a1b42f..f536d34f395 100644 Binary files a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset13_pe4.std.exo.1 and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset13_pe4.std.exo.1 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset13_pe4.std.exo.2 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset13_pe4.std.exo.2 index 308983b4eee..dbfc7fce38b 100644 Binary files a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset13_pe4.std.exo.2 and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset13_pe4.std.exo.2 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset13_pe4.std.exo.3 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset13_pe4.std.exo.3 index 49d2d5b233c..89202a0de43 100644 Binary files a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset13_pe4.std.exo.3 and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset13_pe4.std.exo.3 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset38_pe4.std.exo.0 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset38_pe4.std.exo.0 index 5f8811e869c..5bfa9a850ce 100644 Binary files a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset38_pe4.std.exo.0 and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset38_pe4.std.exo.0 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset38_pe4.std.exo.1 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset38_pe4.std.exo.1 index 14c0780aa49..d41f8366fa9 100644 Binary files a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset38_pe4.std.exo.1 and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset38_pe4.std.exo.1 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset38_pe4.std.exo.2 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset38_pe4.std.exo.2 index acadb3f1c9b..44f025d612d 100644 Binary files a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset38_pe4.std.exo.2 and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset38_pe4.std.exo.2 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset38_pe4.std.exo.3 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset38_pe4.std.exo.3 index 544a3c41bbc..dc32c3bcd82 100644 Binary files a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset38_pe4.std.exo.3 and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset38_pe4.std.exo.3 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset_hist.p1.std b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset_hist.p1.std index 1171dc1e62f..667b2fa0633 100644 --- a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset_hist.p1.std +++ b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/mvngoverset_hist.p1.std @@ -1,6 +1,6 @@ # 1:it 2:t 3:dt 4:density 5:x-velocity 6:y-velocity 7:z-velocity 8:energy 9:pressure - 10 0.0095703 0.000690805 7.80027 0.610133 -0.00634226 0.00146618 6.98458 35.3533 - 20 0.015239 0.000574633 5.81051 1.24079 -0.011402 0.00427977 6.98812 24.0075 - 30 0.0205506 0.000513698 3.71794 1.87973 6.9001e-05 0.000586224 7.71324 14.5879 - 40 0.0255261 0.000486426 2.48784 2.4772 0.00185684 0.00880766 9.06204 9.70451 - 50 0.030258 0.000464045 1.93208 2.822 0.0191949 0.0151869 10.6231 8.14291 + 10 0.00957031 0.000690798 7.79998 0.61009 -0.00636164 0.00159597 6.98474 35.3532 + 20 0.0152385 0.000574646 5.80789 1.24396 -0.0115756 0.00432276 6.98522 23.9675 + 30 0.02055 0.00051365 3.71474 1.8824 0.000202526 0.000209897 7.68688 14.4873 + 40 0.0255225 0.000484825 2.47065 2.47003 0.00226966 0.00948777 9.00095 9.5614 + 50 0.0302516 0.000463875 1.88131 2.80744 0.0197987 0.0162686 10.5292 7.853 diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/overset_intergrid_pe2.std.exo.0 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/overset_intergrid_pe2.std.exo.0 new file mode 100644 index 00000000000..99f3af5ecaf Binary files /dev/null and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/overset_intergrid_pe2.std.exo.0 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/overset_intergrid_pe2.std.exo.1 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/overset_intergrid_pe2.std.exo.1 new file mode 100644 index 00000000000..f9db7f6ee88 Binary files /dev/null and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/overset_intergrid_pe2.std.exo.1 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/overset_intergrid_pe3.std.exo.2 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/overset_intergrid_pe3.std.exo.2 new file mode 100644 index 00000000000..f57002ef57f Binary files /dev/null and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/overset_intergrid_pe3.std.exo.2 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/statbackground_pe4.std.exo.0 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/statbackground_pe4.std.exo.0 index 0a54b892d4b..0974a02c82d 100644 Binary files a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/statbackground_pe4.std.exo.0 and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/statbackground_pe4.std.exo.0 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/statbackground_pe4.std.exo.1 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/statbackground_pe4.std.exo.1 index 0d2f512c310..36ef6dec140 100644 Binary files a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/statbackground_pe4.std.exo.1 and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/statbackground_pe4.std.exo.1 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/statbackground_pe4.std.exo.2 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/statbackground_pe4.std.exo.2 index acba76bdbb4..a6c024cfade 100644 Binary files a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/statbackground_pe4.std.exo.2 and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/statbackground_pe4.std.exo.2 differ diff --git a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/statbackground_pe4.std.exo.3 b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/statbackground_pe4.std.exo.3 index 9dd18c870b6..18bd5269709 100644 Binary files a/tests/regression/inciter/compflow/Euler/Mesh2Mesh/statbackground_pe4.std.exo.3 and b/tests/regression/inciter/compflow/Euler/Mesh2Mesh/statbackground_pe4.std.exo.3 differ diff --git a/tests/regression/inciter/transport/SlotCyl/asynclogic/CMakeLists.txt b/tests/regression/inciter/transport/SlotCyl/asynclogic/CMakeLists.txt index 60fb5cc660c..9ded28ef3bb 100644 --- a/tests/regression/inciter/transport/SlotCyl/asynclogic/CMakeLists.txt +++ b/tests/regression/inciter/transport/SlotCyl/asynclogic/CMakeLists.txt @@ -23,15 +23,23 @@ function(add_async_test scheme virt npes ppn migr) set(migr_append_name "_migr") set(migr_label "migration") endif() + if(scheme STREQUAL "oversetfe") + set(ARG "-c slot_cyl_${scheme}.q -v -u ${virt} -b ${migr_cmd}") + set(TEXT_RES "diag.0;diag.1") + set(TEXT_BAS "noop.ndiff.cfg;noop.ndiff.cfg") + else() + set(ARG "-c slot_cyl_${scheme}.q -i unitcube_1k.exo -v -u ${virt} -b ${migr_cmd}") + set(TEXT_RES diag) + set(TEXT_BAS "noop.ndiff.cfg") + endif() add_regression_test( asynclogic_${scheme}_u${virt}${migr_append_name} ${INCITER_EXECUTABLE} NUMPES ${npes} PPN ${ppn} INPUTFILES slot_cyl_${scheme}.q unitcube_1k.exo - ARGS -c slot_cyl_${scheme}.q -i unitcube_1k.exo -v -u ${virt} -b - ${migr_cmd} - TEXT_BASELINE noop.ndiff.cfg - TEXT_RESULT diag + ARGS ${ARG} + TEXT_BASELINE ${TEXT_BAS} + TEXT_RESULT ${TEXT_RES} TEXT_DIFF_PROG_ARGS --trunc TEXT_DIFF_PROG_CONF noop.ndiff.cfg LABELS ${scheme} ${migr_label}) diff --git a/tests/regression/inciter/transport/SlotCyl/asynclogic/slot_cyl_oversetfe.q b/tests/regression/inciter/transport/SlotCyl/asynclogic/slot_cyl_oversetfe.q index 0079e68dfca..91fc3a16105 100644 --- a/tests/regression/inciter/transport/SlotCyl/asynclogic/slot_cyl_oversetfe.q +++ b/tests/regression/inciter/transport/SlotCyl/asynclogic/slot_cyl_oversetfe.q @@ -9,13 +9,22 @@ inciter nstep 10 # Max number of time steps dt 0.001 # Time step size ttyi 1 # TTY output interval - ctau 1.0 # FCT mass diffusivity scheme oversetfe - transport - physics advection - problem slot_cyl + compflow + physics euler + problem user_defined + material + gamma 1.66666666666667 end + end + mesh filename "unitcube_1k.exo" end + mesh filename "unitcube_1k.exo" end + ic + density 1.0 end + velocity 0.0 0.0 0.0 end + pressure 1.0 end + end end field_output