Skip to content

Commit

Permalink
Merge pull request picassodev#95 from kwitaechong/deprecated_cajita
Browse files Browse the repository at this point in the history
Replace Cajita->Cabana::Grid
  • Loading branch information
streeve authored Oct 24, 2023
2 parents 338a700 + 6a5b144 commit f621d19
Show file tree
Hide file tree
Showing 35 changed files with 542 additions and 458 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ include(GNUInstallDirs)
# find dependencies (MPI and Kokkos found through Cabana)
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH})
find_package(CLANG_FORMAT 10)
find_package(Cabana REQUIRED 0.5 COMPONENTS Cabana::Cajita Cabana::cabanacore)
find_package(Cabana REQUIRED 0.5 COMPONENTS Cabana::Grid Cabana::Core)
find_package(ArborX REQUIRED)
find_package(Boost 1.66.0 REQUIRED)

Expand Down
4 changes: 2 additions & 2 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ set(SOURCES
add_library(picasso ${SOURCES})

target_link_libraries(picasso
Cabana::cabanacore
Cabana::Cajita
Cabana::Core
Cabana::Grid
ArborX::ArborX
Boost::boost )

Expand Down
95 changes: 49 additions & 46 deletions src/Picasso_APIC.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,10 @@
#ifndef PICASSO_APIC_HPP
#define PICASSO_APIC_HPP

#include <Cajita.hpp>

#include <Picasso_BatchedLinearAlgebra.hpp>
#include <Picasso_Types.hpp>

#include <Cabana_Grid.hpp>
#include <Kokkos_Core.hpp>

#include <type_traits>
Expand Down Expand Up @@ -55,20 +54,21 @@ typename SplineDataType::scalar_type KOKKOS_INLINE_FUNCTION inertialScaling(
// (1*N matrix) and particle affine matrix B_p ( 3*N matrix ).
template <class ParticleMass, class ParticleField, class SplineDataType,
class GridMass, class GridField>
KOKKOS_INLINE_FUNCTION void
p2g( const ParticleMass& m_p, const ParticleField& c_p, const GridMass& m_i,
const GridField& mu_i, const SplineDataType& sd,
typename std::enable_if<
( ( Cajita::isNode<typename SplineDataType::entity_type>::value ||
Cajita::isCell<typename SplineDataType::entity_type>::value ) &&
( SplineDataType::order == 2 || SplineDataType::order == 3 ) ),
void*>::type = 0 )
KOKKOS_INLINE_FUNCTION void p2g(
const ParticleMass& m_p, const ParticleField& c_p, const GridMass& m_i,
const GridField& mu_i, const SplineDataType& sd,
typename std::enable_if<
( ( Cabana::Grid::isNode<typename SplineDataType::entity_type>::value ||
Cabana::Grid::isCell<
typename SplineDataType::entity_type>::value ) &&
( SplineDataType::order == 2 || SplineDataType::order == 3 ) ),
void*>::type = 0 )
{
static_assert( Cajita::P2G::is_scatter_view<GridField>::value,
static_assert( Cabana::Grid::P2G::is_scatter_view<GridField>::value,
"P2G requires a Kokkos::ScatterView" );
auto field_access = mu_i.access();

static_assert( Cajita::P2G::is_scatter_view<GridMass>::value,
static_assert( Cabana::Grid::P2G::is_scatter_view<GridMass>::value,
"P2G requires a Kokkos::ScatterView" );
auto mass_access = m_i.access();

Expand Down Expand Up @@ -147,20 +147,21 @@ p2g( const ParticleMass& m_p, const ParticleField& c_p, const GridMass& m_i,
// u_p (1*3 matrix) and particle affine matrix B_p ( 3*3 matrix ).
template <class ParticleMass, class ParticleVelocity, class SplineDataType,
class GridMass, class GridMomentum>
KOKKOS_INLINE_FUNCTION void
p2g( const ParticleMass& m_p, const ParticleVelocity& c_p, const GridMass& m_i,
const GridMomentum& mu_i, const SplineDataType& sd,
typename std::enable_if<
( ( Cajita::isEdge<typename SplineDataType::entity_type>::value ||
Cajita::isFace<typename SplineDataType::entity_type>::value ) &&
( SplineDataType::order == 2 || SplineDataType::order == 3 ) ),
void*>::type = 0 )
KOKKOS_INLINE_FUNCTION void p2g(
const ParticleMass& m_p, const ParticleVelocity& c_p, const GridMass& m_i,
const GridMomentum& mu_i, const SplineDataType& sd,
typename std::enable_if<
( ( Cabana::Grid::isEdge<typename SplineDataType::entity_type>::value ||
Cabana::Grid::isFace<
typename SplineDataType::entity_type>::value ) &&
( SplineDataType::order == 2 || SplineDataType::order == 3 ) ),
void*>::type = 0 )
{
static_assert( Cajita::P2G::is_scatter_view<GridMomentum>::value,
static_assert( Cabana::Grid::P2G::is_scatter_view<GridMomentum>::value,
"P2G requires a Kokkos::ScatterView" );
auto momentum_access = mu_i.access();

static_assert( Cajita::P2G::is_scatter_view<GridMass>::value,
static_assert( Cabana::Grid::P2G::is_scatter_view<GridMass>::value,
"P2G requires a Kokkos::ScatterView" );
auto mass_access = m_i.access();

Expand Down Expand Up @@ -238,20 +239,21 @@ p2g( const ParticleMass& m_p, const ParticleVelocity& c_p, const GridMass& m_i,
// 3*N matrix ).
template <class ParticleMass, class ParticleField, class SplineDataType,
class GridMass, class GridField>
KOKKOS_INLINE_FUNCTION void
p2g( const ParticleMass& m_p, const ParticleField& c_p, const GridMass& m_i,
const GridField& mu_i, const SplineDataType& sd,
typename std::enable_if<
( ( Cajita::isNode<typename SplineDataType::entity_type>::value ||
Cajita::isCell<typename SplineDataType::entity_type>::value ) &&
( SplineDataType::order == 1 ) ),
void*>::type = 0 )
KOKKOS_INLINE_FUNCTION void p2g(
const ParticleMass& m_p, const ParticleField& c_p, const GridMass& m_i,
const GridField& mu_i, const SplineDataType& sd,
typename std::enable_if<
( ( Cabana::Grid::isNode<typename SplineDataType::entity_type>::value ||
Cabana::Grid::isCell<
typename SplineDataType::entity_type>::value ) &&
( SplineDataType::order == 1 ) ),
void*>::type = 0 )
{
static_assert( Cajita::P2G::is_scatter_view<GridField>::value,
static_assert( Cabana::Grid::P2G::is_scatter_view<GridField>::value,
"P2G requires a Kokkos::ScatterView" );
auto field_access = mu_i.access();

static_assert( Cajita::P2G::is_scatter_view<GridMass>::value,
static_assert( Cabana::Grid::P2G::is_scatter_view<GridMass>::value,
"P2G requires a Kokkos::ScatterView" );
auto mass_access = m_i.access();

Expand Down Expand Up @@ -324,20 +326,21 @@ p2g( const ParticleMass& m_p, const ParticleField& c_p, const GridMass& m_i,
// ).
template <class ParticleMass, class ParticleVelocity, class SplineDataType,
class GridMass, class GridMomentum>
KOKKOS_INLINE_FUNCTION void
p2g( const ParticleMass& m_p, const ParticleVelocity& c_p, const GridMass& m_i,
const GridMomentum& mu_i, const SplineDataType& sd,
typename std::enable_if<
( ( Cajita::isEdge<typename SplineDataType::entity_type>::value ||
Cajita::isFace<typename SplineDataType::entity_type>::value ) &&
( SplineDataType::order == 1 ) ),
void*>::type = 0 )
KOKKOS_INLINE_FUNCTION void p2g(
const ParticleMass& m_p, const ParticleVelocity& c_p, const GridMass& m_i,
const GridMomentum& mu_i, const SplineDataType& sd,
typename std::enable_if<
( ( Cabana::Grid::isEdge<typename SplineDataType::entity_type>::value ||
Cabana::Grid::isFace<
typename SplineDataType::entity_type>::value ) &&
( SplineDataType::order == 1 ) ),
void*>::type = 0 )
{
static_assert( Cajita::P2G::is_scatter_view<GridMomentum>::value,
static_assert( Cabana::Grid::P2G::is_scatter_view<GridMomentum>::value,
"P2G requires a Kokkos::ScatterView" );
auto momentum_access = mu_i.access();

static_assert( Cajita::P2G::is_scatter_view<GridMass>::value,
static_assert( Cabana::Grid::P2G::is_scatter_view<GridMass>::value,
"P2G requires a Kokkos::ScatterView" );
auto mass_access = m_i.access();

Expand Down Expand Up @@ -405,8 +408,8 @@ template <class GridField, class SplineDataType, class ParticleField>
KOKKOS_INLINE_FUNCTION void
g2p( const GridField& u_i, ParticleField& c_p, const SplineDataType& sd,
typename std::enable_if<
( Cajita::isNode<typename SplineDataType::entity_type>::value ||
Cajita::isCell<typename SplineDataType::entity_type>::value ),
( Cabana::Grid::isNode<typename SplineDataType::entity_type>::value ||
Cabana::Grid::isCell<typename SplineDataType::entity_type>::value ),
void*>::type = 0 )
{
using value_type = typename GridField::value_type;
Expand Down Expand Up @@ -475,8 +478,8 @@ template <class GridMomentum, class SplineDataType, class ParticleVelocity>
KOKKOS_INLINE_FUNCTION void
g2p( const GridMomentum& u_i, ParticleVelocity& c_p, const SplineDataType& sd,
typename std::enable_if<
( Cajita::isEdge<typename SplineDataType::entity_type>::value ||
Cajita::isFace<typename SplineDataType::entity_type>::value ),
( Cabana::Grid::isEdge<typename SplineDataType::entity_type>::value ||
Cabana::Grid::isFace<typename SplineDataType::entity_type>::value ),
void*>::type = 0 )
{
static_assert( SplineDataType::has_weight_values,
Expand Down
55 changes: 30 additions & 25 deletions src/Picasso_AdaptiveMesh.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
#ifndef PICASSO_ADAPTIVEMESH_HPP
#define PICASSO_ADAPTIVEMESH_HPP

#include <Cajita.hpp>

#include <Cabana_Core.hpp>
#include <Cabana_Grid.hpp>
#include <Kokkos_Core.hpp>

#include <boost/property_tree/ptree.hpp>
Expand All @@ -33,14 +33,15 @@ template <class MemorySpace>
class AdaptiveMesh
{
public:
using cajita_mesh = Cajita::UniformMesh<double>;
using cabana_mesh = Cabana::Grid::UniformMesh<double>;

using memory_space = MemorySpace;

using local_grid = Cajita::LocalGrid<cajita_mesh>;
using local_grid = Cabana::Grid::LocalGrid<cabana_mesh>;

using node_array = Cajita::Array<double, Cajita::Node,
Cajita::UniformMesh<double>, MemorySpace>;
using node_array =
Cabana::Grid::Array<double, Cabana::Grid::Node,
Cabana::Grid::UniformMesh<double>, MemorySpace>;

static constexpr std::size_t num_space_dim = 3;

Expand Down Expand Up @@ -152,16 +153,17 @@ class AdaptiveMesh
}

// Create the global mesh.
auto global_mesh = Cajita::createUniformGlobalMesh(
auto global_mesh = Cabana::Grid::createUniformGlobalMesh(
global_low_corner, global_high_corner, global_num_cell );

// Create the partitioner.
const auto& part_params = mesh_params.get_child( "partitioner" );
std::shared_ptr<Cajita::BlockPartitioner<3>> partitioner;
std::shared_ptr<Cabana::Grid::BlockPartitioner<3>> partitioner;
if ( part_params.get<std::string>( "type" ).compare( "uniform_dim" ) ==
0 )
{
partitioner = std::make_shared<Cajita::DimBlockPartitioner<3>>();
partitioner =
std::make_shared<Cabana::Grid::DimBlockPartitioner<3>>();
}
else if ( part_params.get<std::string>( "type" ).compare( "manual" ) ==
0 )
Expand All @@ -177,21 +179,23 @@ class AdaptiveMesh
ranks_per_dim[d] = element.second.get_value<int>();
++d;
}
partitioner = std::make_shared<Cajita::ManualBlockPartitioner<3>>(
ranks_per_dim );
partitioner =
std::make_shared<Cabana::Grid::ManualBlockPartitioner<3>>(
ranks_per_dim );
}

// Build the global grid.
auto global_grid = Cajita::createGlobalGrid( comm, global_mesh,
periodic, *partitioner );
auto global_grid = Cabana::Grid::createGlobalGrid(
comm, global_mesh, periodic, *partitioner );

// Get the halo cell width. If the user does not assign one then it is
// assumed the minimum halo cell width will be used.
auto halo_cell_width = std::max(
_minimum_halo_width, mesh_params.get<int>( "halo_cell_width", 0 ) );

// Build the local grid.
_local_grid = Cajita::createLocalGrid( global_grid, halo_cell_width );
_local_grid =
Cabana::Grid::createLocalGrid( global_grid, halo_cell_width );

// Create the nodes.
buildNodes( cell_size, exec_space );
Expand All @@ -216,27 +220,28 @@ class AdaptiveMesh
{
// Create both owned and ghosted nodes so we don't have to gather
// initially.
auto node_layout =
Cajita::createArrayLayout( _local_grid, 3, Cajita::Node() );
_nodes = Cajita::createArray<double, MemorySpace>( "mesh_nodes",
node_layout );
auto node_layout = Cabana::Grid::createArrayLayout(
_local_grid, 3, Cabana::Grid::Node() );
_nodes = Cabana::Grid::createArray<double, MemorySpace>( "mesh_nodes",
node_layout );
auto node_view = _nodes->view();
auto local_mesh =
Cajita::createLocalMesh<ExecutionSpace>( *_local_grid );
auto local_space = _local_grid->indexSpace(
Cajita::Ghost(), Cajita::Node(), Cajita::Local() );
Cabana::Grid::createLocalMesh<ExecutionSpace>( *_local_grid );
auto local_space = _local_grid->indexSpace( Cabana::Grid::Ghost(),
Cabana::Grid::Node(),
Cabana::Grid::Local() );
Kokkos::parallel_for(
"Picasso::AdaptiveMesh::CreateNodes",
Cajita::createExecutionPolicy( local_space, exec_space ),
Cabana::Grid::createExecutionPolicy( local_space, exec_space ),
KOKKOS_LAMBDA( const int i, const int j, const int k ) {
node_view( i, j, k, 0 ) =
local_mesh.lowCorner( Cajita::Ghost(), 0 ) +
local_mesh.lowCorner( Cabana::Grid::Ghost(), 0 ) +
i * cell_size[0];
node_view( i, j, k, 1 ) =
local_mesh.lowCorner( Cajita::Ghost(), 1 ) +
local_mesh.lowCorner( Cabana::Grid::Ghost(), 1 ) +
j * cell_size[1];
node_view( i, j, k, 2 ) =
local_mesh.lowCorner( Cajita::Ghost(), 2 ) +
local_mesh.lowCorner( Cabana::Grid::Ghost(), 2 ) +
k * cell_size[2];
} );
}
Expand Down
31 changes: 19 additions & 12 deletions src/Picasso_BilinearMeshMapping.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
#include <Picasso_FieldManager.hpp>
#include <Picasso_Types.hpp>

#include <Cajita.hpp>
#include <Cabana_Grid.hpp>

#include <Kokkos_Core.hpp>

Expand Down Expand Up @@ -460,10 +460,11 @@ struct BilinearMeshGenerator<UniformBilinearMeshGenerator<NumSpaceDim>>

// Create local nodes.
auto local_grid = coords.layout()->localGrid();
auto local_space = local_grid->indexSpace(
Cajita::Ghost(), Cajita::Node(), Cajita::Local() );
auto local_space =
local_grid->indexSpace( Cabana::Grid::Ghost(), Cabana::Grid::Node(),
Cabana::Grid::Local() );
auto local_mesh =
Cajita::createLocalMesh<Kokkos::HostSpace>( *local_grid );
Cabana::Grid::createLocalMesh<Kokkos::HostSpace>( *local_grid );
for ( int i = local_space.min( Dim::I ); i < local_space.max( Dim::I );
++i )
for ( int j = local_space.min( Dim::J );
Expand All @@ -473,17 +474,20 @@ struct BilinearMeshGenerator<UniformBilinearMeshGenerator<NumSpaceDim>>
{
coords_h( i, j, k, Dim::I ) =
generator.global_bounding_box[Dim::I] +
( local_mesh.lowCorner( Cajita::Ghost(), Dim::I ) +
( local_mesh.lowCorner( Cabana::Grid::Ghost(),
Dim::I ) +
i ) *
generator.cell_size;
coords_h( i, j, k, Dim::J ) =
generator.global_bounding_box[Dim::J] +
( local_mesh.lowCorner( Cajita::Ghost(), Dim::J ) +
( local_mesh.lowCorner( Cabana::Grid::Ghost(),
Dim::J ) +
j ) *
generator.cell_size;
coords_h( i, j, k, Dim::K ) =
generator.global_bounding_box[Dim::K] +
( local_mesh.lowCorner( Cajita::Ghost(), Dim::K ) +
( local_mesh.lowCorner( Cabana::Grid::Ghost(),
Dim::K ) +
k ) *
generator.cell_size;
}
Expand All @@ -505,22 +509,25 @@ struct BilinearMeshGenerator<UniformBilinearMeshGenerator<NumSpaceDim>>

// Create owned nodes.
auto local_grid = coords.layout()->localGrid();
auto local_space = local_grid->indexSpace(
Cajita::Ghost(), Cajita::Node(), Cajita::Local() );
auto local_space =
local_grid->indexSpace( Cabana::Grid::Ghost(), Cabana::Grid::Node(),
Cabana::Grid::Local() );
auto local_mesh =
Cajita::createLocalMesh<Kokkos::HostSpace>( *local_grid );
Cabana::Grid::createLocalMesh<Kokkos::HostSpace>( *local_grid );
for ( int i = local_space.min( Dim::I ); i < local_space.max( Dim::I );
++i )
for ( int j = local_space.min( Dim::J );
j < local_space.max( Dim::J ); ++j )
{
coords_h( i, j, Dim::I ) =
generator.global_bounding_box[Dim::I] +
( local_mesh.lowCorner( Cajita::Ghost(), Dim::I ) + i ) *
( local_mesh.lowCorner( Cabana::Grid::Ghost(), Dim::I ) +
i ) *
generator.cell_size;
coords_h( i, j, Dim::J ) =
generator.global_bounding_box[Dim::J] +
( local_mesh.lowCorner( Cajita::Ghost(), Dim::J ) + j ) *
( local_mesh.lowCorner( Cabana::Grid::Ghost(), Dim::J ) +
j ) *
generator.cell_size;
}

Expand Down
Loading

0 comments on commit f621d19

Please sign in to comment.