From 9f5c6ca6dadc26d17435663c46dde3f30ddd65c8 Mon Sep 17 00:00:00 2001 From: Xiangyu Hu Date: Sat, 10 Aug 2024 22:33:56 +0000 Subject: [PATCH] seems OK --- src/for_2D_build/meshes/base_mesh_2d.cpp | 4 +- src/for_3D_build/meshes/base_mesh_3d.cpp | 4 +- src/shared/common/sphinxsys_containers.h | 2 +- ...phinxsys_entity.h => sphinxsys_variable.h} | 73 ++++--------------- src/shared/meshes/base_mesh.cpp | 8 +- src/shared/meshes/base_mesh.h | 34 ++++----- src/shared/meshes/mesh_with_data_packages.h | 2 +- .../particle_dynamics/base_local_dynamics.h | 20 ++--- .../update_cell_linked_list.h | 6 +- .../update_cell_linked_list.hpp | 16 +--- .../external_force/external_force.h | 8 +- .../general_dynamics/force_prior.h | 5 +- .../general_dynamics/force_prior.hpp | 6 +- src/shared/particles/base_particles.h | 4 +- src/shared/sphinxsys_system/sph_system.h | 2 +- src/shared/sphinxsys_system/sph_system.hpp | 2 +- src/shared/tools/tinyxml2.cpp | 6 +- ...y_sycl.hpp => sphinxsys_variable_sycl.hpp} | 29 ++------ src/src_sycl/shared/include/sphinxsys_sycl.h | 2 +- .../update_cell_linked_list_sycl.hpp | 4 +- .../shared/particle_dynamics/execution_sycl.h | 6 ++ .../diffusion_RobinBC.h | 2 +- .../windows_frame_diffusion_D4.h | 2 +- .../windows_frame_diffusion_D7.h | 2 +- 24 files changed, 89 insertions(+), 160 deletions(-) rename src/shared/common/{sphinxsys_entity.h => sphinxsys_variable.h} (74%) rename src/src_sycl/shared/common/{sphinxsys_entity_sycl.hpp => sphinxsys_variable_sycl.hpp} (79%) diff --git a/src/for_2D_build/meshes/base_mesh_2d.cpp b/src/for_2D_build/meshes/base_mesh_2d.cpp index 7117069e4e..cda10cbac3 100644 --- a/src/for_2D_build/meshes/base_mesh_2d.cpp +++ b/src/for_2D_build/meshes/base_mesh_2d.cpp @@ -3,14 +3,14 @@ namespace SPH { //=============================================================================================// -Arrayi Mesh::transfer1DtoMeshIndex(const Arrayi &mesh_size, size_t i) +Arrayi Mesh::transfer1DtoMeshIndex(const Arrayi &mesh_size, size_t i) const { size_t row_size = mesh_size[1]; size_t column = i / row_size; return Arrayi(column, i - column * row_size); } //=============================================================================================// -size_t Mesh::transferMeshIndexToMortonOrder(const Arrayi &mesh_index) +size_t Mesh::transferMeshIndexToMortonOrder(const Arrayi &mesh_index) const { return MortonCode(mesh_index[0]) | (MortonCode(mesh_index[1]) << 1); } diff --git a/src/for_3D_build/meshes/base_mesh_3d.cpp b/src/for_3D_build/meshes/base_mesh_3d.cpp index 4000114e27..521fbceba2 100644 --- a/src/for_3D_build/meshes/base_mesh_3d.cpp +++ b/src/for_3D_build/meshes/base_mesh_3d.cpp @@ -3,7 +3,7 @@ namespace SPH { //=================================================================================================// -Arrayi Mesh::transfer1DtoMeshIndex(const Arrayi &mesh_size, size_t i) +Arrayi Mesh::transfer1DtoMeshIndex(const Arrayi &mesh_size, size_t i) const { size_t row_times_column_size = mesh_size[1] * mesh_size[2]; size_t page = i / row_times_column_size; @@ -13,7 +13,7 @@ Arrayi Mesh::transfer1DtoMeshIndex(const Arrayi &mesh_size, size_t i) return Arrayi(page, column, left_over - column * row_size); } //=================================================================================================// -size_t Mesh::transferMeshIndexToMortonOrder(const Arrayi &mesh_index) +size_t Mesh::transferMeshIndexToMortonOrder(const Arrayi &mesh_index) const { return MortonCode(mesh_index[0]) | (MortonCode(mesh_index[1]) << 1) | (MortonCode(mesh_index[2]) << 2); } diff --git a/src/shared/common/sphinxsys_containers.h b/src/shared/common/sphinxsys_containers.h index 845fcb1bdc..a2d81b53a3 100644 --- a/src/shared/common/sphinxsys_containers.h +++ b/src/shared/common/sphinxsys_containers.h @@ -31,7 +31,7 @@ #include "base_data_package.h" #include "base_data_type.h" -#include "sphinxsys_entity.h" +#include "sphinxsys_variable.h" namespace SPH { diff --git a/src/shared/common/sphinxsys_entity.h b/src/shared/common/sphinxsys_variable.h similarity index 74% rename from src/shared/common/sphinxsys_entity.h rename to src/shared/common/sphinxsys_variable.h index 18c6f7cc55..24aa57ac87 100644 --- a/src/shared/common/sphinxsys_entity.h +++ b/src/shared/common/sphinxsys_variable.h @@ -21,14 +21,14 @@ * * * ------------------------------------------------------------------------- */ /** - * @file sphinxsys_entity.h + * @file sphinxsys_variable.h * @brief Here gives classes for the constants and variables used in simulation. * @details These variables are those discretized in spaces and time. * @author Xiangyu Hu */ -#ifndef SPHINXSYS_ENTITY_H -#define SPHINXSYS_ENTITY_H +#ifndef SPHINXSYS_VARIABLE_H +#define SPHINXSYS_VARIABLE_H #include "base_data_package.h" #include "execution_policy.h" @@ -36,12 +36,12 @@ namespace SPH { -class BaseEntity +class BaseVariable { public: - explicit BaseEntity(const std::string &name) + explicit BaseVariable(const std::string &name) : name_(name){}; - virtual ~BaseEntity(){}; + virtual ~BaseVariable(){}; std::string Name() const { return name_; }; protected: @@ -49,11 +49,11 @@ class BaseEntity }; template -class SingularVariable : public BaseEntity +class SingularVariable : public BaseVariable { public: SingularVariable(const std::string &name, const DataType &value) - : BaseEntity(name), value_(new DataType(value)), delegated_(value_){}; + : BaseVariable(name), value_(new DataType(value)), delegated_(value_){}; virtual ~SingularVariable() { delete value_; }; DataType *ValueAddress() { return delegated_; }; @@ -66,7 +66,7 @@ class SingularVariable : public BaseEntity }; template -class DeviceSharedSingularVariable : public BaseEntity +class DeviceSharedSingularVariable : public BaseVariable { public: @@ -78,54 +78,11 @@ class DeviceSharedSingularVariable : public BaseEntity }; template -class ConstantEntity : public BaseEntity -{ - public: - ConstantEntity(const std::string &name, const DataType &value) - : BaseEntity(name), value_(new DataType(value)), device_value_(nullptr){}; - virtual ~ConstantEntity() { delete value_; }; - - bool existDeviceData() { return device_value_ != nullptr; }; - void setDeviceData(DataType *data) { device_value_ = data; }; - DataType *DeviceDataAddress() - { - if (!existDeviceData()) - { - std::cout << "\n Error: the constant entity '" << name_ << "' not allocated on device yet!" << std::endl; - std::cout << __FILE__ << ':' << __LINE__ << std::endl; - exit(1); - } - return device_value_; - }; - - DataType *DataAddress() { return value_; }; - template - DataType *DataAddress(const ExecutionPolicy &policy) { return DataAddress(); }; - DataType *DataAddress(const execution::ParallelDevicePolicy &par_device) { return DeviceDataAddress(); } - - private: - DataType *value_; - DataType *device_value_; -}; - -template -class DeviceOnlyConstantEntity : public BaseEntity - -{ - public: - DeviceOnlyConstantEntity(ConstantEntity *host_constant); - virtual ~DeviceOnlyConstantEntity(); - - protected: - DataType *device_only_value_; -}; - -template -class DiscreteVariable : public BaseEntity +class DiscreteVariable : public BaseVariable { public: DiscreteVariable(const std::string &name, size_t data_size) - : BaseEntity(name), data_size_(data_size), + : BaseVariable(name), data_size_(data_size), data_field_(nullptr), device_data_field_(nullptr) { data_field_ = new DataType[data_size]; @@ -147,7 +104,7 @@ class DiscreteVariable : public BaseEntity }; template -class DeviceOnlyDiscreteVariable : public BaseEntity +class DeviceOnlyDiscreteVariable : public BaseVariable { public: DeviceOnlyDiscreteVariable(DiscreteVariable *host_variable); @@ -158,12 +115,12 @@ class DeviceOnlyDiscreteVariable : public BaseEntity }; template -class MeshVariable : public BaseEntity +class MeshVariable : public BaseVariable { public: using PackageData = PackageDataMatrix; MeshVariable(const std::string &name, size_t data_size) - : BaseEntity(name), data_field_(nullptr){}; + : BaseVariable(name), data_field_(nullptr){}; virtual ~MeshVariable() { delete[] data_field_; }; // void setDataField(PackageData* mesh_data){ data_field_ = mesh_data; }; @@ -201,4 +158,4 @@ VariableType *addVariableToAssemble(DataContainerAddressAssemble().matrix() * grid_spacing_; } //=================================================================================================// -Vecd Mesh::CellPositionFromIndex(const Arrayi &cell_index) +Vecd Mesh::CellPositionFromIndex(const Arrayi &cell_index) const { return CellLowerCornerPosition(cell_index) + 0.5 * Vecd::Ones() * grid_spacing_; } //=================================================================================================// -Vecd Mesh::GridPositionFromIndex(const Arrayi &grid_index) +Vecd Mesh::GridPositionFromIndex(const Arrayi &grid_index) const { return mesh_lower_bound_ + grid_index.cast().matrix() * grid_spacing_; } //=================================================================================================// -size_t Mesh::MortonCode(const size_t &i) +size_t Mesh::MortonCode(const size_t &i) const { size_t x = i; x &= 0x3ff; diff --git a/src/shared/meshes/base_mesh.h b/src/shared/meshes/base_mesh.h index 0480ca27c0..45e9c92636 100644 --- a/src/shared/meshes/base_mesh.h +++ b/src/shared/meshes/base_mesh.h @@ -60,14 +60,14 @@ class Mesh Mesh(Vecd mesh_lower_bound, Real grid_spacing, Arrayi all_grid_points); ~Mesh(){}; - Vecd MeshLowerBound() { return mesh_lower_bound_; }; - Real GridSpacing() { return grid_spacing_; }; - Arrayi AllGridPoints() { return all_grid_points_; }; - Arrayi AllCells() { return all_cells_; }; - size_t NumberOfGridPoints() { return transferMeshIndexTo1D(all_grid_points_, all_grid_points_); }; - size_t NumberOfCells() { return transferMeshIndexTo1D(all_cells_, all_cells_); }; - - Arrayi CellIndexFromPosition(const Vecd &position) + Vecd MeshLowerBound() const { return mesh_lower_bound_; }; + Real GridSpacing() const { return grid_spacing_; }; + Arrayi AllGridPoints() const { return all_grid_points_; }; + Arrayi AllCells() const { return all_cells_; }; + size_t NumberOfGridPoints() const { return transferMeshIndexTo1D(all_grid_points_, all_grid_points_); }; + size_t NumberOfCells() const { return transferMeshIndexTo1D(all_cells_, all_cells_); }; + + Arrayi CellIndexFromPosition(const Vecd &position) const { return floor((position - mesh_lower_bound_).array() / grid_spacing_) .cast() @@ -75,26 +75,26 @@ class Mesh .min(all_grid_points_ - 2 * Arrayi::Ones()); }; - size_t LinearCellIndexFromPosition(const Vecd &position) + size_t LinearCellIndexFromPosition(const Vecd &position) const { return transferMeshIndexTo1D(all_cells_, CellIndexFromPosition(position)); }; - Vecd CellPositionFromIndex(const Arrayi &cell_index); - Vecd GridPositionFromIndex(const Arrayi &grid_index); - Vecd CellLowerCornerPosition(const Arrayi &cell_index); + Vecd CellPositionFromIndex(const Arrayi &cell_index) const; + Vecd GridPositionFromIndex(const Arrayi &grid_index) const; + Vecd CellLowerCornerPosition(const Arrayi &cell_index) const; //---------------------------------------------------------------------- // Transferring between 1D mesh indexes. // Here, mesh size can be either AllGridPoints or AllCells. //---------------------------------------------------------------------- - Arrayi transfer1DtoMeshIndex(const Arrayi &mesh_size, size_t i); + Arrayi transfer1DtoMeshIndex(const Arrayi &mesh_size, size_t i) const; - size_t transferMeshIndexTo1D(const Array2i &mesh_size, const Array2i &mesh_index) + size_t transferMeshIndexTo1D(const Array2i &mesh_size, const Array2i &mesh_index) const { return mesh_index[0] * mesh_size[1] + mesh_index[1]; }; - size_t transferMeshIndexTo1D(const Array3i &mesh_size, const Array3i &mesh_index) + size_t transferMeshIndexTo1D(const Array3i &mesh_size, const Array3i &mesh_index) const { return mesh_index[0] * mesh_size[1] * mesh_size[2] + mesh_index[1] * mesh_size[2] + @@ -105,7 +105,7 @@ class Mesh * https://stackoverflow.com/questions/18529057/ * produce-interleaving-bit-patterns-morton-keys-for-32-bit-64-bit-and-128bit */ - size_t transferMeshIndexToMortonOrder(const Arrayi &mesh_index); + size_t transferMeshIndexToMortonOrder(const Arrayi &mesh_index) const; protected: Vecd mesh_lower_bound_; /**< mesh lower bound as reference coordinate */ @@ -114,7 +114,7 @@ class Mesh Arrayi all_grid_points_; /**< number of grid points by dimension */ Arrayi all_cells_; /**< number of cells by dimension */ - size_t MortonCode(const size_t &i); + size_t MortonCode(const size_t &i) const; }; /** diff --git a/src/shared/meshes/mesh_with_data_packages.h b/src/shared/meshes/mesh_with_data_packages.h index 59718d6ccb..f1095cb08c 100644 --- a/src/shared/meshes/mesh_with_data_packages.h +++ b/src/shared/meshes/mesh_with_data_packages.h @@ -31,7 +31,7 @@ #include "base_mesh.h" #include "my_memory_pool.h" -#include "sphinxsys_entity.h" +#include "sphinxsys_variable.h" #include #include diff --git a/src/shared/particle_dynamics/base_local_dynamics.h b/src/shared/particle_dynamics/base_local_dynamics.h index a52473f8ec..640a8afe4c 100644 --- a/src/shared/particle_dynamics/base_local_dynamics.h +++ b/src/shared/particle_dynamics/base_local_dynamics.h @@ -66,7 +66,7 @@ class Dynamic; /**< A dynamic interaction */ template class BaseLocalDynamics { - UniquePtrsKeeper constant_entity_ptrs_; + UniquePtrsKeeper constant_entity_ptrs_; public: explicit BaseLocalDynamics(DynamicsIdentifier &identifier) @@ -86,26 +86,26 @@ class BaseLocalDynamics BaseParticles *particles_; template - ConstantEntity *createConstantEntity(const std::string &name, const DataType &value) + const DataType *createConstantEntity(const std::string &name, const DataType &value) { - return constant_entity_ptrs_.createPtr>(name, value); + return constant_entity_ptrs_.createPtr>(name, value)->ValueAddress(); }; template - ConstantEntity *createConstantEntity( + const DataType *createConstantEntity( const ExecutionPolicy &policy, const std::string &name, const DataType &value) { - return constant_entity_ptrs_.createPtr>(name, value); + return constant_entity_ptrs_.createPtr>(name, value)->ValueAddress(); }; template - ConstantEntity *createConstantEntity( + const DataType *createConstantEntity( const execution::ParallelDevicePolicy &par_device, const std::string &name, const DataType &value) { - ConstantEntity *constant_entity = - constant_entity_ptrs_.createPtr>(name, value); - constant_entity_ptrs_.createPtr>(constant_entity); - return constant_entity; + SingularVariable *constant_entity = + constant_entity_ptrs_.createPtr>(name, value); + constant_entity_ptrs_.createPtr>(constant_entity); + return constant_entity->ValueAddress(); }; }; using LocalDynamics = BaseLocalDynamics; diff --git a/src/shared/particle_dynamics/configuration_dynamics/update_cell_linked_list.h b/src/shared/particle_dynamics/configuration_dynamics/update_cell_linked_list.h index a06fe10644..62b91c8f78 100644 --- a/src/shared/particle_dynamics/configuration_dynamics/update_cell_linked_list.h +++ b/src/shared/particle_dynamics/configuration_dynamics/update_cell_linked_list.h @@ -54,7 +54,6 @@ class UpdateCellLinkedList : public LocalDynamics UpdateCellLinkedList(const ExecutionPolicy &execution_policy, RealBody &real_body); virtual ~UpdateCellLinkedList(){}; - UnsignedInt *setParticleOffsetListUpperBound(); template void clearParticleOffsetList(const ExecutionPolicy &execution_policy); void clearParticleOffsetList(const ParallelDevicePolicy &par_device); @@ -72,12 +71,9 @@ class UpdateCellLinkedList : public LocalDynamics void updateCellLists(const ParallelDevicePolicy &par_device); protected: - ConstantEntity *ce_mesh_; + const Mesh *mesh_; UnsignedInt number_of_cells_, particles_bound_; - SingularVariable *sv_total_real_particles_; - DiscreteVariable *dv_particle_offset_list_; - Mesh *mesh_; Vecd *pos_; UnsignedInt *particle_id_list_; UnsignedInt *particle_offset_list_; diff --git a/src/shared/particle_dynamics/configuration_dynamics/update_cell_linked_list.hpp b/src/shared/particle_dynamics/configuration_dynamics/update_cell_linked_list.hpp index 49006320df..7b96d7a526 100644 --- a/src/shared/particle_dynamics/configuration_dynamics/update_cell_linked_list.hpp +++ b/src/shared/particle_dynamics/configuration_dynamics/update_cell_linked_list.hpp @@ -13,28 +13,16 @@ template UpdateCellLinkedList:: UpdateCellLinkedList(const ExecutionPolicy &execution_policy, RealBody &real_body) : LocalDynamics(real_body), - ce_mesh_(createConstantEntity(execution_policy, "Mesh", DynamicCast(this, real_body.getCellLinkedList()))), - sv_total_real_particles_(particles_->getSingularVariableByName("TotalRealParticles")), - number_of_cells_(ce_mesh_->DataAddress()->NumberOfCells()), particles_bound_(particles_->ParticlesBound()), - dv_particle_offset_list_(nullptr), mesh_(ce_mesh_->DataAddress(execution_policy)), + mesh_(createConstantEntity(execution_policy, "Mesh", DynamicCast(this, real_body.getCellLinkedList()))), + number_of_cells_(mesh_->NumberOfCells()), particles_bound_(particles_->ParticlesBound()), pos_(particles_->getVariableDataByName(execution_policy, "Position")), particle_id_list_(particles_->registerDiscreteVariable(execution_policy, "ParticleIDList", particles_bound_)), particle_offset_list_(particles_->registerDiscreteVariable(execution_policy, "ParticleOffsetList", number_of_cells_ + 1)), current_size_list_(particles_->registerDiscreteVariable(execution_policy, "CurrentCellSize", number_of_cells_)) { - dv_particle_offset_list_ = particles_->getVariableByName("ParticleOffsetList"); particles_->addVariableToWrite("ParticleIDList"); } //=================================================================================================// -template -UnsignedInt *UpdateCellLinkedList::setParticleOffsetListUpperBound() -{ - UnsignedInt total_real_particles = particles_->TotalRealParticles(); - UnsignedInt *particle_offset_list = dv_particle_offset_list_->DataField(); - particle_offset_list[number_of_cells_] = total_real_particles; - return particle_offset_list; -} -//=================================================================================================// template UpdateCellLinkedList::UpdateCellLinkedList(RealBody &real_body) : UpdateCellLinkedList(ExecutionPolicy{}, real_body), diff --git a/src/shared/particle_dynamics/external_force/external_force.h b/src/shared/particle_dynamics/external_force/external_force.h index ead09b964d..57fb87d518 100644 --- a/src/shared/particle_dynamics/external_force/external_force.h +++ b/src/shared/particle_dynamics/external_force/external_force.h @@ -45,12 +45,12 @@ class Gravity Gravity(Vecd gravity_vector, Vecd reference_position = Vecd::Zero()); ~Gravity(){}; - Vecd InducedAcceleration(const Vecd &position = Vecd::Zero(), Real physical_time = 0.0) + Vecd InducedAcceleration(const Vecd &position = Vecd::Zero(), Real physical_time = 0.0) const { return reference_acceleration_; }; - Real getPotential(const Vecd &position) + Real getPotential(const Vecd &position) const { return reference_acceleration_.dot(zero_potential_reference_ - position); }; @@ -64,7 +64,7 @@ class StartupAcceleration : public Gravity StartupAcceleration(Vecd target_velocity, Real target_time); ~StartupAcceleration(){}; - Vecd InducedAcceleration(const Vecd &position, Real physical_time) + Vecd InducedAcceleration(const Vecd &position, Real physical_time) const { Real time_factor = physical_time / target_time_; Vecd acceleration = 0.5 * Pi * sin(Pi * time_factor) * Gravity::InducedAcceleration(); @@ -80,7 +80,7 @@ class IncreaseToFullGravity : public Gravity IncreaseToFullGravity(Vecd gravity_vector, Real time_to_full_gravity); ~IncreaseToFullGravity() {} - Vecd InducedAcceleration(const Vecd &position, Real physical_time) + Vecd InducedAcceleration(const Vecd &position, Real physical_time) const { Real time_factor = physical_time / time_to_full_gravity_; Vecd full_acceleration = Gravity::InducedAcceleration(); diff --git a/src/shared/particle_dynamics/general_dynamics/force_prior.h b/src/shared/particle_dynamics/general_dynamics/force_prior.h index 3186ec58d6..3257c8c616 100644 --- a/src/shared/particle_dynamics/general_dynamics/force_prior.h +++ b/src/shared/particle_dynamics/general_dynamics/force_prior.h @@ -70,11 +70,10 @@ class GravityForce : public ForcePrior // Here gives pointer referred in local dynamics //---------------------------------------------------------------------- SingularVariable *v_physical_time_; - ConstantEntity *ce_gravity_; //---------------------------------------------------------------------- // Here gives pointer referred in computing kernel //---------------------------------------------------------------------- - GravityType *gravity_; + const GravityType *gravity_; Vecd *pos_; Real *mass_; Real *physical_time_; @@ -95,7 +94,7 @@ class GravityForce : public ForcePrior protected: friend class GravityForce; - GravityType *gravity_; + const GravityType *gravity_; Vecd *pos_; Real *mass_; Real *physical_time_; diff --git a/src/shared/particle_dynamics/general_dynamics/force_prior.hpp b/src/shared/particle_dynamics/general_dynamics/force_prior.hpp index a44d18e1e4..9cbfbcefc5 100644 --- a/src/shared/particle_dynamics/general_dynamics/force_prior.hpp +++ b/src/shared/particle_dynamics/general_dynamics/force_prior.hpp @@ -56,8 +56,7 @@ void BaseForcePrior::ComputingKernel::update(size_t index_i, template GravityForce::GravityForce(SPHBody &sph_body, const GravityType &gravity) : ForcePrior(sph_body, "GravityForce"), - ce_gravity_(this->createConstantEntity("Gravity", gravity)), - gravity_(ce_gravity_->DataAddress()), + gravity_(this->createConstantEntity("Gravity", gravity)), pos_(particles_->getVariableDataByName("Position")), mass_(particles_->registerStateVariable("Mass")), physical_time_(sph_system_.getSystemVariableDataByName("PhysicalTime")) {} @@ -76,8 +75,7 @@ GravityForce:: GravityForce(const ExecutionPolicy &execution_policy, SPHBody &sph_body, const GravityType &gravity) : ForcePrior(execution_policy, sph_body, "GravityForce"), - ce_gravity_(this->createConstantEntity(execution_policy, "Gravity", gravity)), - gravity_(ce_gravity_->DataAddress(execution_policy)), + gravity_(this->createConstantEntity(execution_policy, "Gravity", gravity)), pos_(particles_->getVariableDataByName(execution_policy, "Position")), mass_(particles_->getVariableDataByName(execution_policy, "Mass")), v_physical_time_(sph_system_.getSystemVariableByName(execution_policy, "PhysicalTime")) {} diff --git a/src/shared/particles/base_particles.h b/src/shared/particles/base_particles.h index be26a57be0..243eb0efc7 100644 --- a/src/shared/particles/base_particles.h +++ b/src/shared/particles/base_particles.h @@ -36,7 +36,7 @@ #include "base_data_package.h" #include "execution_policy.h" #include "sphinxsys_containers.h" -#include "sphinxsys_entity.h" +#include "sphinxsys_variable.h" #include "xml_parser.h" #include @@ -84,7 +84,7 @@ class BaseParticles private: DataContainerUniquePtrAssemble all_discrete_variable_ptrs_; DataContainerUniquePtrAssemble all_global_variable_ptrs_; - UniquePtrsKeeper unique_variable_ptrs_; + UniquePtrsKeeper unique_variable_ptrs_; public: explicit BaseParticles(SPHBody &sph_body, BaseMaterial *base_material); diff --git a/src/shared/sphinxsys_system/sph_system.h b/src/shared/sphinxsys_system/sph_system.h index 46a0489bf2..bb00643e52 100644 --- a/src/shared/sphinxsys_system/sph_system.h +++ b/src/shared/sphinxsys_system/sph_system.h @@ -61,7 +61,7 @@ class SPHSystem { UniquePtrKeeper io_ptr_keeper_; DataContainerUniquePtrAssemble all_system_variable_ptrs_; - UniquePtrsKeeper unique_system_variable_ptrs_; + UniquePtrsKeeper unique_system_variable_ptrs_; public: BoundingBox system_domain_bounds_; /**< Lower and Upper domain bounds. */ diff --git a/src/shared/sphinxsys_system/sph_system.hpp b/src/shared/sphinxsys_system/sph_system.hpp index a18055138e..e27ff09ea1 100644 --- a/src/shared/sphinxsys_system/sph_system.hpp +++ b/src/shared/sphinxsys_system/sph_system.hpp @@ -3,7 +3,7 @@ #include "sph_system.h" -#include "sphinxsys_entity.h" +#include "sphinxsys_variable.h" namespace SPH { diff --git a/src/shared/tools/tinyxml2.cpp b/src/shared/tools/tinyxml2.cpp index ebfdfd6f2d..b51ea82981 100644 --- a/src/shared/tools/tinyxml2.cpp +++ b/src/shared/tools/tinyxml2.cpp @@ -142,7 +142,7 @@ static const unsigned char TIXML_UTF_LEAD_2 = 0xbfU; namespace tinyxml2 { -struct BaseEntity +struct BaseVariable { const char *pattern; int length; @@ -150,7 +150,7 @@ struct BaseEntity }; static const int NUM_ENTITIES = 5; -static const BaseEntity entities[NUM_ENTITIES] = { +static const BaseVariable entities[NUM_ENTITIES] = { {"quot", 4, DOUBLE_QUOTE}, {"amp", 3, '&'}, {"apos", 4, SINGLE_QUOTE}, @@ -370,7 +370,7 @@ const char *StrPair::GetStr() bool entityFound = false; for (int i = 0; i < NUM_ENTITIES; ++i) { - const BaseEntity &entity = entities[i]; + const BaseVariable &entity = entities[i]; if (strncmp(p + 1, entity.pattern, entity.length) == 0 && *(p + entity.length + 1) == ';') { // Found an entity - convert. diff --git a/src/src_sycl/shared/common/sphinxsys_entity_sycl.hpp b/src/src_sycl/shared/common/sphinxsys_variable_sycl.hpp similarity index 79% rename from src/src_sycl/shared/common/sphinxsys_entity_sycl.hpp rename to src/src_sycl/shared/common/sphinxsys_variable_sycl.hpp index 92b007dd6a..709180c8bf 100644 --- a/src/src_sycl/shared/common/sphinxsys_entity_sycl.hpp +++ b/src/src_sycl/shared/common/sphinxsys_variable_sycl.hpp @@ -21,15 +21,15 @@ * * * ------------------------------------------------------------------------- */ /** - * @file sphinxsys_entity_sycl.hpp + * @file sphinxsys_variable_sycl.hpp * @brief TBD. * @author Alberto Guarnieri and Xiangyu Hu */ -#ifndef SPHINXSYS_ENTITY_SYCL_HPP -#define SPHINXSYS_ENTITY_SYCL_HPP +#ifndef SPHINXSYS_VARIABLE_SYCL_HPP +#define SPHINXSYS_VARIABLE_SYCL_HPP #include "execution_sycl.h" -#include "sphinxsys_entity.h" +#include "sphinxsys_variable.h" namespace SPH { @@ -37,7 +37,7 @@ namespace SPH template DeviceSharedSingularVariable:: DeviceSharedSingularVariable(SingularVariable *host_variable) - : BaseEntity(host_variable->Name()), + : BaseVariable(host_variable->Name()), device_shared_value_(allocateDeviceShared(1)) { *device_shared_value_ = *host_variable->ValueAddress(); @@ -51,21 +51,6 @@ DeviceSharedSingularVariable::~DeviceSharedSingularVariable() } //=================================================================================================// template -DeviceOnlyConstantEntity:: - DeviceOnlyConstantEntity(ConstantEntity *host_constant) - : BaseEntity(host_constant->Name()), device_only_value_(allocateDeviceOnly(1)) -{ - copyToDevice(host_constant->DataAddress(), device_only_value_, 1); - host_constant->setDeviceData(device_only_value_); -} -//=================================================================================================// -template -DeviceOnlyConstantEntity::~DeviceOnlyConstantEntity() -{ - freeDeviceData(device_only_value_); -} -//=================================================================================================// -template void DiscreteVariable::synchronizeWithDevice() { if (existDeviceDataField()) @@ -77,7 +62,7 @@ void DiscreteVariable::synchronizeWithDevice() template DeviceOnlyDiscreteVariable:: DeviceOnlyDiscreteVariable(DiscreteVariable *host_variable) - : BaseEntity(host_variable->Name()), device_only_data_field_(nullptr) + : BaseVariable(host_variable->Name()), device_only_data_field_(nullptr) { size_t data_size = host_variable->getDataSize(); device_only_data_field_ = allocateDeviceOnly(data_size); @@ -93,4 +78,4 @@ DeviceOnlyDiscreteVariable::~DeviceOnlyDiscreteVariable() //=================================================================================================// } // namespace SPH -#endif // SPHINXSYS_ENTITY_SYCL_HPP \ No newline at end of file +#endif // SPHINXSYS_VARIABLE_SYCL_HPP \ No newline at end of file diff --git a/src/src_sycl/shared/include/sphinxsys_sycl.h b/src/src_sycl/shared/include/sphinxsys_sycl.h index 7ae5b20009..425136dabd 100644 --- a/src/src_sycl/shared/include/sphinxsys_sycl.h +++ b/src/src_sycl/shared/include/sphinxsys_sycl.h @@ -30,7 +30,7 @@ #include "particle_iterators_sycl.h" #include "sphinxsys.h" -#include "sphinxsys_entity_sycl.hpp" +#include "sphinxsys_variable_sycl.hpp" #include "update_cell_linked_list_sycl.hpp" #endif // SPHINXSYS_SYCL_H diff --git a/src/src_sycl/shared/particle_dynamics/configuration_dynamics/update_cell_linked_list_sycl.hpp b/src/src_sycl/shared/particle_dynamics/configuration_dynamics/update_cell_linked_list_sycl.hpp index b9b4d95d36..cfbed25236 100644 --- a/src/src_sycl/shared/particle_dynamics/configuration_dynamics/update_cell_linked_list_sycl.hpp +++ b/src/src_sycl/shared/particle_dynamics/configuration_dynamics/update_cell_linked_list_sycl.hpp @@ -10,8 +10,8 @@ template void UpdateCellLinkedList:: clearParticleOffsetList(const ParallelDevicePolicy &par_device) { - UnsignedInt *host_data_field = setParticleOffsetListUpperBound(); - copyToDevice(host_data_field + number_of_cells_, particle_offset_list_ + number_of_cells_, 1); + UnsignedInt total_real_particles = particles_->TotalRealParticles(); + copyDataToDevice(total_real_particles, particle_offset_list_ + number_of_cells_, 1); execution_instance.getQueue() .submit( diff --git a/src/src_sycl/shared/particle_dynamics/execution_sycl.h b/src/src_sycl/shared/particle_dynamics/execution_sycl.h index a5658af413..6a618d930c 100644 --- a/src/src_sycl/shared/particle_dynamics/execution_sycl.h +++ b/src/src_sycl/shared/particle_dynamics/execution_sycl.h @@ -115,6 +115,12 @@ inline void copyToDevice(const T *host, T *device, std::size_t size) execution::execution_instance.getQueue().memcpy(device, host, size * sizeof(T)); } +template +inline void copyDataToDevice(const T &value, T *device, std::size_t size) +{ + execution::execution_instance.getQueue().fill(device, value, size); +} + template inline void copyFromDevice(T *host, const T *device, std::size_t size) { diff --git a/tests/2d_examples/test_2d_diffusion_RobinBC/diffusion_RobinBC.h b/tests/2d_examples/test_2d_diffusion_RobinBC/diffusion_RobinBC.h index 7d7e08d5ab..662d2817a8 100644 --- a/tests/2d_examples/test_2d_diffusion_RobinBC/diffusion_RobinBC.h +++ b/tests/2d_examples/test_2d_diffusion_RobinBC/diffusion_RobinBC.h @@ -147,7 +147,7 @@ class RobinBoundaryDefinition : public LocalDynamics pos_(particles_->getVariableDataByName("Position")), phi_(particles_->registerStateVariable("Phi")), phi_convection_(particles_->template getVariableDataByName("PhiConvection")), - phi_infinity_(*(this->particles_->template getSingularVariableByName("PhiInfinity"))){}; + phi_infinity_(*(this->particles_->template getSingularVariableByName("PhiInfinity")->ValueAddress())){}; void update(size_t index_i, Real dt) { diff --git a/tests/2d_examples/test_2d_windows_frame_diffusion_D4/windows_frame_diffusion_D4.h b/tests/2d_examples/test_2d_windows_frame_diffusion_D4/windows_frame_diffusion_D4.h index 08df9d2795..337ca0ee91 100644 --- a/tests/2d_examples/test_2d_windows_frame_diffusion_D4/windows_frame_diffusion_D4.h +++ b/tests/2d_examples/test_2d_windows_frame_diffusion_D4/windows_frame_diffusion_D4.h @@ -354,7 +354,7 @@ class RobinBoundaryDefinition : public LocalDynamics pos_(particles_->getVariableDataByName("Position")), phi_(particles_->registerStateVariable("Phi")), phi_convection_(particles_->template getVariableDataByName("PhiConvection")), - phi_infinity_(*(this->particles_->template getSingularVariableByName("PhiInfinity"))){}; + phi_infinity_(*(this->particles_->template getSingularVariableByName("PhiInfinity")->ValueAddress())){}; void update(size_t index_i, Real dt) { diff --git a/tests/2d_examples/test_2d_windows_frame_diffusion_D7/windows_frame_diffusion_D7.h b/tests/2d_examples/test_2d_windows_frame_diffusion_D7/windows_frame_diffusion_D7.h index ef1a0787f0..80178436e2 100644 --- a/tests/2d_examples/test_2d_windows_frame_diffusion_D7/windows_frame_diffusion_D7.h +++ b/tests/2d_examples/test_2d_windows_frame_diffusion_D7/windows_frame_diffusion_D7.h @@ -446,7 +446,7 @@ class RobinBoundaryDefinition : public LocalDynamics pos_(particles_->getVariableDataByName("Position")), phi_(particles_->registerStateVariable("Phi")), phi_convection_(particles_->template getVariableDataByName("PhiConvection")), - phi_infinity_(*(this->particles_->template getSingularVariableByName("PhiInfinity"))){}; + phi_infinity_(*(this->particles_->template getSingularVariableByName("PhiInfinity")->ValueAddress())){}; void update(size_t index_i, Real dt) {