Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,29 @@ configure_file(CabanaPD_config.hpp.cmakein CabanaPD_config.hpp @ONLY)

file(GLOB HEADERS GLOB *.hpp)
file(GLOB FORCE_HEADERS GLOB force/*.hpp)
file(GLOB FORCE_MODEL_HEADERS GLOB force_models/*.hpp)

install(FILES ${HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(FILES ${FORCE_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/force)
install(FILES ${FORCE_MODEL_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/force_models)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/CabanaPD_config.hpp DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

add_library(CabanaPD INTERFACE)
add_library(CabanaPD::CabanaPD ALIAS CabanaPD)

target_include_directories(CabanaPD INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}
target_include_directories(CabanaPD INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>)

target_link_libraries(CabanaPD INTERFACE Cabana::Core Cabana::Grid nlohmann_json::nlohmann_json)

install(TARGETS CabanaPD DESTINATION ${CMAKE_INSTALL_LIBDIR})
install(TARGETS CabanaPD
EXPORT CabanaPD_Targets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})

install(EXPORT CabanaPD_Targets
FILE CabanaPD_Targets.cmake
NAMESPACE CabanaPD::
DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake/CabanaPD)
17 changes: 12 additions & 5 deletions src/CabanaPD.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,29 @@
#include <CabanaPD_Boundary.hpp>
#include <CabanaPD_Comm.hpp>
#include <CabanaPD_Constants.hpp>
#include <CabanaPD_DisplacementProfile.hpp>
#include <CabanaPD_Fields.hpp>
#include <CabanaPD_Force.hpp>
#include <CabanaPD_ForceModels.hpp>
#include <CabanaPD_ForceModelsMulti.hpp>
#include <CabanaPD_Geometry.hpp>
#include <CabanaPD_Input.hpp>
#include <CabanaPD_Integrate.hpp>
#include <CabanaPD_Neighbor.hpp>
#include <CabanaPD_Output.hpp>
#include <CabanaPD_OutputProfiles.hpp>
#include <CabanaPD_Particles.hpp>
#include <CabanaPD_Prenotch.hpp>
#include <CabanaPD_Solver.hpp>
#include <CabanaPD_Types.hpp>
#include <CabanaPD_config.hpp>

#include <force/CabanaPD_ForceModels_LPS.hpp>
#include <force/CabanaPD_ForceModels_PMB.hpp>
#include <force/CabanaPD_Force_LPS.hpp>
#include <force/CabanaPD_Force_PMB.hpp>
#include <force/CabanaPD_Contact.hpp>
#include <force/CabanaPD_LPS.hpp>
#include <force/CabanaPD_PMB.hpp>
#include <force_models/CabanaPD_Contact.hpp>
#include <force_models/CabanaPD_Hertzian.hpp>
#include <force_models/CabanaPD_HertzianJKR.hpp>
#include <force_models/CabanaPD_LPS.hpp>
#include <force_models/CabanaPD_PMB.hpp>

#endif
23 changes: 15 additions & 8 deletions src/CabanaPD_BodyTerm.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

#include <Cabana_Core.hpp>

#include <CabanaPD_Output.hpp>
#include <CabanaPD_Timer.hpp>

namespace CabanaPD
Expand All @@ -25,13 +26,18 @@ template <class UserFunctor>
struct BodyTerm
{
UserFunctor _user_functor;
std::size_t _particle_count;
bool _force_update;
bool _update_frozen;

Timer _timer;

BodyTerm( UserFunctor user, const bool force )
BodyTerm( UserFunctor user, const std::size_t particle_count,
const bool force, const bool update_frozen = false )
: _user_functor( user )
, _particle_count( particle_count )
, _force_update( force )
, _update_frozen( update_frozen )
{
}

Expand All @@ -40,12 +46,19 @@ struct BodyTerm
template <class ExecSpace, class ParticleType>
void apply( ExecSpace, ParticleType& particles, const double time )
{
checkParticleCount( _particle_count, particles.referenceOffset(),
"BodyTerm" );

_timer.start();
Kokkos::RangePolicy<ExecSpace> policy( 0, particles.n_local );
std::size_t start = particles.frozenOffset();
if ( _update_frozen )
start = 0;
Kokkos::RangePolicy<ExecSpace> policy( start, particles.localOffset() );
auto user = _user_functor;
Kokkos::parallel_for(
"CabanaPD::BodyTerm::apply", policy,
KOKKOS_LAMBDA( const int p ) { user( p, time ); } );
Kokkos::fence();
_timer.stop();
}

Expand All @@ -55,12 +68,6 @@ struct BodyTerm
auto timeInit() { return 0.0; };
};

template <class UserFunctor>
auto createBodyTerm( UserFunctor user_functor, const bool force_update )
{
return BodyTerm<UserFunctor>( user_functor, force_update );
}

} // namespace CabanaPD

#endif
Loading