diff --git a/apps/showcases/ChargedParticles/PostProcessingUtilities.h b/apps/showcases/ChargedParticles/PostProcessingUtilities.h index c633cd3bb591db5e4f7df42c0bacfe1013aea720..c899e0b6328a0a19ee7f8e845fa3bdd612dbc57e 100644 --- a/apps/showcases/ChargedParticles/PostProcessingUtilities.h +++ b/apps/showcases/ChargedParticles/PostProcessingUtilities.h @@ -2,15 +2,20 @@ #define WALBERLA_POSTPROCESSINGUTILITIES_H #pragma once -#include <vector> -#include <cmath> #include "core/DataTypes.h" -#include "lbm_mesapd_coupling/DataTypes.h" + #include "lbm/field/AddToStorage.h" -#include "fstream" + +#include "lbm_mesapd_coupling/DataTypes.h" + +#include <cmath> #include <core/mpi/MPITextFile.h> +#include <vector> -namespace walberla { +#include "fstream" + +namespace walberla +{ // class to compute the volume fractions average at each unique height along with xy spatial plane template< typename BlockStorage_T, typename FlagField_T > @@ -73,7 +78,7 @@ class ComputeSolidVolumeFraction const std::string directoryName = "FractionData"; // Create the directory if it doesn't exist - if (!filesystem::exists(directoryName)) {filesystem::create_directory(directoryName); } + if (!filesystem::exists(directoryName)) { filesystem::create_directory(directoryName); } const std::string filePath = directoryName + "/" + filename; // Open the file for writing @@ -101,15 +106,14 @@ class ComputeSolidVolumeFraction // class to compute and write the particle x,y,z velocities and the unique ids into a file -template<typename ParticleAccessor_T > -void ComputeParticleProperties(const shared_ptr< ParticleAccessor_T >& ac, - uint_t currentTimeStep) +template< typename ParticleAccessor_T > +void ComputeParticleProperties(const shared_ptr< ParticleAccessor_T >& ac, uint_t currentTimeStep) { std::string const filename = "ParticleProperties_" + std::to_string(currentTimeStep) + ".txt"; const std::string directoryName = "ParticleData"; // Create the directory if it doesn't exist - if (!filesystem::exists(directoryName)) {filesystem::create_directory(directoryName); } + if (!filesystem::exists(directoryName)) { filesystem::create_directory(directoryName); } const std::string filePath = directoryName + "/" + filename; // Open the file for writing using std::ostringstream @@ -117,7 +121,6 @@ void ComputeParticleProperties(const shared_ptr< ParticleAccessor_T >& ac, WALBERLA_ROOT_SECTION() { - outputFile << "Uid" << "," << "Velocity_X" @@ -151,67 +154,56 @@ void ComputeParticleProperties(const shared_ptr< ParticleAccessor_T >& ac, walberla::mpi::writeMPITextFile(filePath, outputFile.str()); } - -template<typename ParticleAccessor_T > -void ComputeParticleStresses(const shared_ptr< ParticleAccessor_T >& ac, - std::vector< real_t >& hydroForceGlobal, std::vector< real_t >& collisionForceGlobal, - std::vector< real_t >& binCount, Vector3<real_t> gravitationForce) +template< typename ParticleAccessor_T > +void ComputeParticleStresses(const shared_ptr< ParticleAccessor_T >& ac, std::vector< real_t >& hydroForceGlobal, + std::vector< real_t >& collisionForceGlobal, std::vector< real_t >& binCount, + Vector3< real_t > gravitationForce) { real_t const diameter = real_c(20); - for (uint_t i = 0; i < ac->size(); ++i) { if (isSet(ac->getFlags(i), walberla::mesa_pd::data::particle_flags::GHOST)) continue; if (isSet(ac->getFlags(i), walberla::mesa_pd::data::particle_flags::GLOBAL)) continue; - real_t hydroLubricationForce = (ac->getHydrodynamicForce(i) + gravitationForce).length(); // F'h = Fh - Vp(rhof-rhop)*g - real_t collisionForce = (ac->getForce(i)- ((ac->getHydrodynamicForce(i) + gravitationForce))).length(); // Total_force - (F'h) + real_t hydroLubricationForce = + (ac->getHydrodynamicForce(i) + gravitationForce).length(); // F'h = Fh - Vp(rhof-rhop)*g + real_t collisionForce = + (ac->getForce(i) - ((ac->getHydrodynamicForce(i) + gravitationForce))).length(); // Total_force - (F'h) - uint_t bin_index = uint_c((ac->getPosition(i)[2]) / (diameter/2)); - binCount[bin_index] +=1; + uint_t bin_index = uint_c((ac->getPosition(i)[2]) / (diameter / 2)); + binCount[bin_index] += 1; hydroForceGlobal[bin_index] += hydroLubricationForce; collisionForceGlobal[bin_index] += collisionForce; - } - } -template<typename ParticleAccessor_T > +template< typename ParticleAccessor_T > void ComputeCollisionFrequency(const shared_ptr< ParticleAccessor_T >& ac, uint_t& collisionCount) { real_t const diameter = real_c(20); - for (uint_t i = 0; i < ac->size(); ++i) { - for(uint_t j = 0; j < ac->size(); j++) + for (uint_t j = 0; j < ac->size(); j++) { if (isSet(ac->getFlags(i), walberla::mesa_pd::data::particle_flags::GLOBAL)) continue; if (isSet(ac->getFlags(j), walberla::mesa_pd::data::particle_flags::GLOBAL)) continue; real_t distance = (ac->getPosition(i) - ac->getPosition(j)).length(); - if(distance <= diameter){ - collisionCount ++; - } + if (distance <= diameter) { collisionCount++; } } - } - } - - - -void WriteStressesToFile(std::vector<real_t>& hydroStress, std::vector<real_t>& collisionStress){ - - +void WriteStressesToFile(std::vector< real_t >& hydroStress, std::vector< real_t >& collisionStress) +{ WALBERLA_ROOT_SECTION() { std::string const filename = "ParticleStresses.txt"; const std::string directoryName = "."; // Create the directory if it doesn't exist - if (!filesystem::exists(directoryName)) {filesystem::create_directory(directoryName); } + if (!filesystem::exists(directoryName)) { filesystem::create_directory(directoryName); } const std::string filePath = directoryName + "/" + filename; // Open the file for writing using std::ostringstream @@ -223,7 +215,8 @@ void WriteStressesToFile(std::vector<real_t>& hydroStress, std::vector<real_t>& << "," << "Hydro_lub_force" << '\n'; - for (size_t i = 0; i < hydroStress.size(); i++) { + for (size_t i = 0; i < hydroStress.size(); i++) + { outputFile << i << "," << collisionStress[i] << "," << hydroStress[i] << '\n'; } outputFile.close(); @@ -254,11 +247,6 @@ void WriteEnsembledVelocityToFile(const uint_t timestep, ParticleInfo info) } } +} // namespace walberla - -} - - - - -#endif //WALBERLA_POSTPROCESSINGUTILITIES_H +#endif // WALBERLA_POSTPROCESSINGUTILITIES_H