Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fluid shell interaction model. #184

Open
wants to merge 36 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 27 commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
f8fade7
update for checking out.
DrChiZhang Nov 25, 2022
5950b9b
Merge branch 'merge_eigen_with_master' into fluid-shell-interaction
DrChiZhang Nov 28, 2022
ec0e3a9
add shell fluid interaction.
DrChiZhang Nov 29, 2022
80a1659
Merge branch 'merge_eigen_with_master' into fluid-shell-interaction
DrChiZhang Nov 29, 2022
3443ced
Sloshing test run, will check the accuracy.
DrChiZhang Nov 30, 2022
d5e664c
add dam break impacting thin structure.
DrChiZhang Nov 30, 2022
681eb49
Merge branch 'master' into fluid-shell-interaction
DrChiZhang Nov 30, 2022
125be31
Fluid-sehll with Riemann solver.
DrChiZhang Dec 1, 2022
65bc702
Merge branch 'master' into fluid-shell-interaction.
DrChiZhang Dec 4, 2022
8e36627
Revert "Merge branch 'master' into fluid-shell-interaction."
DrChiZhang Dec 5, 2022
f2a5922
fluid-shell model with transport and surface indicatior.
DrChiZhang Dec 6, 2022
b6ceedd
bug fix for fluid force on shell.
DrChiZhang Dec 7, 2022
471c930
hydrostatic FSI with shell model, add damping from shell class.
DrChiZhang Dec 7, 2022
b707560
flow induced vibration of filament attached to square cylinder.
DrChiZhang Dec 7, 2022
39d41a4
not work tests.
DrChiZhang Dec 7, 2022
89a9bc6
small modification.
DrChiZhang Dec 8, 2022
fb290cb
merge master.
DrChiZhang Dec 8, 2022
c6d04f8
merge master.
DrChiZhang Dec 8, 2022
624fbd1
Merge branch 'master' into fluid-shell-interaction
DrChiZhang Dec 8, 2022
9a08163
Revert "Revert "Merge branch 'master' into fluid-shell-interaction.""
DrChiZhang Dec 8, 2022
ff9f30f
modification after merge with master.
DrChiZhang Dec 8, 2022
6c2d127
small modification.
DrChiZhang Dec 12, 2022
2011946
remove examples before merging wiht master.
DrChiZhang Dec 14, 2022
235b67f
Merge branch 'master' into fsi-merge-with-master
DrChiZhang Dec 14, 2022
d793dff
small changes.
DrChiZhang Dec 14, 2022
5c7cfed
all tests pass with new test of sloshing flow with baffle.
DrChiZhang Dec 15, 2022
c678a18
Small change before PR.
DrChiZhang Dec 15, 2022
69d626e
add veriable size reverse.
DrChiZhang Dec 16, 2022
8799ebb
add new test.
DrChiZhang Mar 11, 2023
f385aa1
solid wall with poiseuille
YuVirtonomy Mar 31, 2023
311d7e6
shelll with poiseuille
YuVirtonomy Mar 31, 2023
ec0b095
was using wrong radius_mid_surface
YuVirtonomy May 11, 2023
30e2d15
format
YuVirtonomy May 11, 2023
0532bbd
U_f should be 0.5* Re / diameter * mu_f
YuVirtonomy May 12, 2023
6544d38
inflow condition at the end of Acoustic time step
YuVirtonomy May 12, 2023
9fefef0
Merge pull request #228 from Xiangyu-Hu/feature/poiseuille
Xiangyu-Hu May 13, 2023
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
3 changes: 2 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,11 @@ target_link_libraries(sphinxsys_core INTERFACE ${Simbody_LIBS})
target_compile_definitions(sphinxsys_core INTERFACE _SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING) # Because of Simbody headers
### Eigen
find_package(Eigen3 CONFIG REQUIRED)
target_link_libraries(sphinxsys_core INTERFACE Eigen3::Eigen)
target_link_libraries (sphinxsys_core INTERFACE Eigen3::Eigen)
### TBB
find_package(TBB CONFIG REQUIRED)
target_link_libraries(sphinxsys_core INTERFACE TBB::tbb TBB::tbbmalloc $<$<PLATFORM_ID:Windows>:TBB::tbbmalloc_proxy>)
add_compile_definitions(TBB_SUPPRESS_DEPRECATED_MESSAGES=1)
### Threads
find_package(Threads REQUIRED)
target_link_libraries(sphinxsys_core INTERFACE Threads::Threads)
Expand Down
24 changes: 12 additions & 12 deletions PythonScriptStore/RegressionTest/regression_test_base_tool.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,30 +16,30 @@ def __init__(self, casename, bodyname, parametername):
self.sphinxsys_case_name = casename
self.sphinxsys_body_name = bodyname
self.sphinxsys_parameter_name = parametername
self.enter_sphinxsys_exec_folder = f"cd {self.sphinxsys_exec_path};"
self.enter_sphinxsys_case_folder = f"cd {self.sphinxsys_case_path};"
self.enter_sphinxsys_exec_folder = f"{self.sphinxsys_exec_path}"
self.enter_sphinxsys_case_folder = f"{self.sphinxsys_case_path}"
self.input_file_path = os.path.join(self.sphinxsys_exec_path, "input")
self.condition_file_path = os.path.join(self.input_file_path, f"{bodyname}_{parametername}_runtimes.dat")

def compile_case(self) -> None:
print('Start compiling test case....')
command = "make -j8"
os.system(self.enter_sphinxsys_case_folder)
os.chdir(self.enter_sphinxsys_case_folder)
os.system(command)
print('Compiling test case is finished...')

def run_particle_relaxation(self) -> None:
print('Start particle relaxation for the simulation...')
command = f".{os.sep}{self.sphinxsys_case_name} --r=true"
os.system(self.enter_sphinxsys_exec_folder)
os.chdir(self.enter_sphinxsys_exec_folder)
os.system(command)
print('Simulating case is finished...')

def run_case(self) -> None:
print('Start case simulation...')
print(self.enter_sphinxsys_exec_folder)
command = f".{os.sep}{self.sphinxsys_case_name} --r=false --i=true --rt=true"
os.system(self.enter_sphinxsys_exec_folder)
os.chdir(self.enter_sphinxsys_exec_folder)
os.system(command)
print('Simulating case is finished...')

Expand All @@ -60,44 +60,44 @@ def __init__(self, casename, bodyname, parametername):
self.sphinxsys_case_name = casename
self.sphinxsys_body_name = bodyname
self.sphinxsys_parameter_name = parametername
self.enter_sphinxsys_exec_folder = f"cd {self.sphinxsys_exec_path};"
self.enter_sphinxsys_case_folder = f"cd {self.sphinxsys_case_path};"
self.enter_sphinxsys_exec_folder = f"{self.sphinxsys_exec_path}"
self.enter_sphinxsys_case_folder = f"{self.sphinxsys_case_path}"
self.input_file_path = os.path.join(self.sphinxsys_exec_path, "input")
self.condition_file_path = os.path.join(self.input_file_path, f"{bodyname}_{parametername}_runtimes.dat")

def compile_case(self) -> None:
print('Start compiling test case....')
command = "make -j8"
os.system(self.enter_sphinxsys_case_folder)
os.chdir(self.enter_sphinxsys_case_folder)
os.system(command)
print('Compiling test case is finished...')

def test_case(self) -> None:
print('Start test case...')
command = "make test"
os.system(self.enter_sphinxsys_case_folder)
os.chdir(self.enter_sphinxsys_case_folder)
os.system(command)
print('Testing case is finished...')

def copy_reload(self) -> None:
print('Start copy the reload file...')
command = "cp -r reload bin"
os.system(self.enter_sphinxsys_case_folder)
os.chdir(self.enter_sphinxsys_case_folder)
os.system(command)
print('Copying the reload file is finished...')

def run_particle_relaxation(self) -> None:
print('Start particle relaxation for the simulation...')
command = f".{os.sep}{self.sphinxsys_case_name} --r=true"
os.system(self.enter_sphinxsys_exec_folder)
os.chdir(self.enter_sphinxsys_exec_folder)
os.system(command)
print('Simulating case is finished...')

def run_case(self) -> None:
print('Start case simulation...')
print(self.enter_sphinxsys_exec_folder)
command = f".{os.sep}{self.sphinxsys_case_name} --r=false --i=true --rt=true"
os.system(self.enter_sphinxsys_exec_folder)
os.chdir(self.enter_sphinxsys_exec_folder)
os.system(command)
print('Simulating case is finished...')

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -182,11 +182,36 @@ namespace SPH
void interaction(size_t index_i, Real dt = 0.0);

private:
Real eta_; /**< damping coefficient */
StdLargeVec<Real> &Vol_, &mass_;
StdLargeVec<VariableType> &variable_;
StdVec<StdLargeVec<Real> *> wall_Vol_;
StdVec<StdLargeVec<VariableType> *> wall_variable_;

protected:
Real eta_; /**< damping coefficient */
};

/**
* @class DampingPairwiseFromShell
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Which test cases uses this class?

* @brief Damping to wall by which the wall velocity is not updated
* and the mass of wall particle is not considered.
*/
template <typename VariableType>
class DampingPairwiseFromShell : public LocalDynamics,
public DataDelegateContact<BaseParticles, ShellParticles>
{
public:
DampingPairwiseFromShell(BaseContactRelation &contact_relation, const std::string &variable_name, Real eta);
virtual ~DampingPairwiseFromShell(){};
void interaction(size_t index_i, Real dt = 0.0);

private:
StdLargeVec<Real> &Vol_, &mass_;
StdLargeVec<VariableType> &variable_;
StdVec<StdLargeVec<VariableType> *> shell_variable_;

protected:
Real eta_; /**< damping coefficient */
};

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -427,6 +427,55 @@ namespace SPH
}
}
//=================================================================================================//
template <typename VariableType>
DampingPairwiseFromShell<VariableType>::
DampingPairwiseFromShell(BaseContactRelation &contact_relation, const std::string &variable_name, Real eta)
: LocalDynamics(contact_relation.sph_body_),
DataDelegateContact<BaseParticles, ShellParticles>(contact_relation),
eta_(eta), Vol_(particles_->Vol_), mass_(particles_->mass_),
variable_(*particles_->getVariableByName<VariableType>(variable_name))
{
for (size_t k = 0; k != contact_particles_.size(); ++k)
{
shell_variable_.push_back(contact_particles_[k]->template getVariableByName<VariableType>(variable_name));
DrChiZhang marked this conversation as resolved.
Show resolved Hide resolved
}
}
//=================================================================================================//
template <typename VariableType>
void DampingPairwiseFromShell<VariableType>::interaction(size_t index_i, Real dt)
{
Real Vol_i = Vol_[index_i];
Real mass_i = mass_[index_i];
VariableType &variable_i = variable_[index_i];

std::array<Real, MaximumNeighborhoodSize> parameter_b;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These arrays can cause memory errors for multiresolution, where the neighborhood size is larger than the MaximumNeighborhoodSize variable. I think we mentioned this once but I don't remember what our conclusion was with prof. Hu. It's not very efficient either, perhaps @FabienPean-Virtonomy has a better solution?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes it happened I had some problems there in the past, it was more related to some system resolution compared to particle spacing. There will be issues for multiresolution definitely.

Two simpler options I see:

  • The simpler fix would be using a std::vector with reserved memory initial memory (by calculating max neighborhood size)
  • Using a couple array + vector and adjusting the loops to fill the vector once the array is filled.

Otherwise other solutions could involve a different container outside STL (but require adding dependency), thread local vector (need to be confident about concurrency)


/** Contact interaction. */
for (size_t k = 0; k < contact_configuration_.size(); ++k)
{
StdLargeVec<VariableType> &variable_k = *(shell_variable_[k]);
Neighborhood &contact_neighborhood = (*contact_configuration_[k])[index_i];
// forward sweep
for (size_t n = 0; n != contact_neighborhood.current_size_; ++n)
{
size_t index_j = contact_neighborhood.j_[n];

parameter_b[n] = contact_particles_[k]->DegeneratedSpacing(index_j) * eta_ * contact_neighborhood.dW_ijV_j_[n] * Vol_i * dt / contact_neighborhood.r_ij_[n];
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what is "DegeneratedSpacing"? Could we have a more understandable name?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shell formulation is called Degenerated Approach, therefore, DegeneratedSpacing used here denoting the spacing being degenerated.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What does degenerated mean in this context? Can you explain it please?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What I thought is " shell particle is degenerated (having low standard or behavior) ) from volume particle in the thickness spacing. Then, with shell particle is interacting with volume particle, the degenerated spacing is considered.
If you have other suggestion, please let me know.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you mean that you consider the shell particle as a squashed solid particle in the thickness dimension? If yes, I would just call it ThicknessAdjustedSpacing for example, much clearer I think.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Name it "Thinkness" is one of my old choices, while this name is meaningless for volume particles as they do not have thickness. Maybe "ReducedThickness", "ReducedCrossSection", "DegeneratedThickness" or "DegeneratedCrossSection" is more readable.

Copy link
Collaborator

@BenceVirtonomy BenceVirtonomy Dec 18, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"ReducedThickness", "ReducedCrossSection" sound good to me

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok my problem was more with spacing than degenerate, I went to look in the code and it is basically the reduced or degenerated dimension (return 1 for volume, thickness for shells, and area for beams).
I would either go by crossSectionDimension or reducedDimension (or their getXXX variant)

Also why is the naming convention changing ? It was using camelCase before, now part of the new code is in PascalCase. Please change uniformize back to camelCase

It is implemented by virtual function, which I am not so comfortable with, but I don't have a straightforward drop-in replacement to offer at the moment.


// only update particle i
variable_[index_i] += parameter_b[n] * (variable_i - variable_k[index_j]) / (mass_i - 2.0 * parameter_b[n]);
}
// backward sweep
for (size_t n = contact_neighborhood.current_size_; n != 0; --n)
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do feel that we need not repeat so much codes here.

{
size_t index_j = contact_neighborhood.j_[n - 1];

// only update particle i
variable_[index_i] += parameter_b[n - 1] * (variable_i - variable_k[index_j]) / (mass_i - 2.0 * parameter_b[n - 1]);
}
}
}
//=================================================================================================//
template <class DampingAlgorithmType>
template <typename... ConstructorArgs>
DampingWithRandomChoice<DampingAlgorithmType>::
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,5 @@
#include "fluid_boundary.h"
#include "all_eulerian_compressible_fluid_dynamics.h"
#include "all_eulerian_weakly_compressible_fluid_dynamics.h"
#include "fluid_shell_interaction.h"
#include "fluid_shell_interaction.hpp"
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ namespace SPH
Vecd nablaW_ijV_j = contact_neighborhood.dW_ijV_j_[n] * contact_neighborhood.e_ij_[n];

// acceleration for transport velocity
acceleration_trans -= 2.0 * nablaW_ijV_j;
acceleration_trans -= 2.0 * nablaW_ijV_j * this->contact_particles_[k]->DegeneratedSpacing(index_j);
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this will decrease efficiency of the original code a lot, as it needs another value from particle j.

}
}

Expand All @@ -59,7 +59,7 @@ namespace SPH
Vecd nablaW_ijV_j = contact_neighborhood.dW_ijV_j_[n] * contact_neighborhood.e_ij_[n];

// acceleration for transport velocity
acceleration_trans -= 2.0 * nablaW_ijV_j;
acceleration_trans -= 2.0 * nablaW_ijV_j * this->contact_particles_[k]->DegeneratedSpacing(index_j);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,8 @@ namespace SPH
Neighborhood &contact_neighborhood = (*this->contact_configuration_[k])[index_i];
for (size_t n = 0; n != contact_neighborhood.current_size_; ++n)
{
sigma += contact_neighborhood.W_ij_[n] * contact_inv_rho0_k * contact_mass_k[contact_neighborhood.j_[n]];
Real mass = this->contact_particles_[k]->ParticleMass(contact_neighborhood.j_[n]);
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same issue on decreasing efficiency. We should have a discussion on this.

sigma += contact_neighborhood.W_ij_[n] * contact_inv_rho0_k * mass;
}
}
return sigma;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ namespace SPH
//=================================================================================================//
BaseDensitySummationInner::BaseDensitySummationInner(BaseInnerRelation &inner_relation)
: LocalDynamics(inner_relation.sph_body_), FluidDataInner(inner_relation),
spacing_ref_(sph_body_.sph_adaptation_->ReferenceSpacing()),
rho_(particles_->rho_), rho_sum_(particles_->rho_sum_), mass_(particles_->mass_),
rho0_(sph_body_.base_material_->ReferenceDensity()) {}
//=================================================================================================//
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ namespace SPH

protected:
Real rho0_;
Real spacing_ref_;
StdLargeVec<Real> &rho_, &rho_sum_, &mass_;
};

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#include "fluid_shell_interaction.h"

//=================================================================================================//
namespace SPH
{
//=================================================================================================//
namespace fluid_dynamics
{
//=================================================================================================//
}
//=================================================================================================//
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
/* -------------------------------------------------------------------------*
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should not be long to fluid dynamics.

* SPHinXsys *
* -------------------------------------------------------------------------*
* SPHinXsys (pronunciation: s'finksis) is an acronym from Smoothed Particle*
* Hydrodynamics for industrial compleX systems. It provides C++ APIs for *
* physical accurate simulation and aims to model coupled industrial dynamic*
* systems including fluid, solid, multi-body dynamics and beyond with SPH *
* (smoothed particle hydrodynamics), a meshless computational method using *
* particle discretization. *
* *
* SPHinXsys is partially funded by German Research Foundation *
* (Deutsche Forschungsgemeinschaft) DFG HU1527/6-1, HU1527/10-1, *
* HU1527/12-1 and HU1527/12-4 *
* *
* Portions copyright (c) 2017-2022 Technical University of Munich and *
* the authors' affiliations. *
* *
* Licensed under the Apache License, Version 2.0 (the "License"); you may *
* not use this file except in compliance with the License. You may obtain a*
* copy of the License at http://www.apache.org/licenses/LICENSE-2.0. *
* *
* ------------------------------------------------------------------------*/
/**
* @file fluid_shell_interaction.h
* @brief Here, we define the algorithm classes for the interaction between fluid and
* thin structure, plate and shell.
* @author Chi ZHang and Xiangyu Hu
*/


#ifndef FLUID_SHELL_INTERACTION_H
#define FLUID_SHELL_INTERACTION_H

#include "fluid_dynamics_complex.h"
#include "fluid_dynamics_complex.hpp"

namespace SPH
{
namespace fluid_dynamics
{
typedef DataDelegateContact<FluidParticles, ShellParticles> FluidShellContactData;
typedef DataDelegateContact<FluidParticles, ShellParticles, DataDelegateEmptyBase> FluidShellData;

/**
* @class InteractionWithShell
* @brief Abstract base class for general fluid-shell interaction model.
* @note Here,
*/
template<class BaseIntegrationType>
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am thinkin the current formulation is too complicated. We need a discuss on this.

class InteractionWithShell : public BaseIntegrationType, public FluidShellData
{
public:
template <class BaseBodyRelationType, typename... Args>
InteractionWithShell(BaseContactRelation &contact_relation, BaseBodyRelationType &base_body_relation, Args &&...args);

template <typename... Args>
InteractionWithShell(ComplexRelation &fluid_shell_relation, Args &&...args)
: InteractionWithShell(fluid_shell_relation.getContactRelation(), fluid_shell_relation.getInnerRelation(), std::forward<Args>(args)...)
{}

virtual ~InteractionWithShell(){};

protected:
Real spacing_ref_;
StdVec<StdLargeVec<Real> *> shell_thickness_;
StdVec<StdLargeVec<Vecd> *> shell_n_, shell_vel_ave_, shell_acc_ave_;
};

/**
* @class BaseFluidShellIntegration1stHalf
* @brief template class for fluid-shell pressure relaxation scheme
*/
template <class Integration1stHalfType>
class BaseFluidShellIntegration1stHalf : public InteractionWithShell<Integration1stHalfType>
{
public:
template <typename... Args>
explicit BaseFluidShellIntegration1stHalf(Args &&...args)
: InteractionWithShell<Integration1stHalfType>(std::forward<Args>(args)...){};
virtual ~BaseFluidShellIntegration1stHalf(){};
void interaction(size_t index_i, Real dt = 0.0);

protected:
virtual Vecd computeNonConservativeAcceleration(size_t index_i) override;
};

using FluidShellIntegration1stHalf = BaseFluidShellIntegration1stHalf<Integration1stHalf>;
using FluidShellIntegration1stHalfRiemann = BaseFluidShellIntegration1stHalf<Integration1stHalfRiemann>;

using FluidShellandWallIntegration1stHalf = BaseIntegration1stHalfWithWall<FluidShellIntegration1stHalf>;
using FluidShellandWallIntegration1stHalfRiemann = BaseIntegration1stHalfWithWall<FluidShellIntegration1stHalfRiemann>;
using ExtendFluidShellandWallIntegration1stHalfRiemann = BaseExtendIntegration1stHalfWithWall<FluidShellIntegration1stHalfRiemann>;

/**
* @class BaseFluidShellIntegration2ndHalf
* @brief template class pressure relaxation scheme with wall boundary
*/
template <class Integration2ndHalfType>
class BaseFluidShellIntegration2ndHalf : public InteractionWithShell<Integration2ndHalfType>
{
public:
template <typename... Args>
explicit BaseFluidShellIntegration2ndHalf(Args &&...args)
: InteractionWithShell<Integration2ndHalfType>(std::forward<Args>(args)...)
{};
virtual ~BaseFluidShellIntegration2ndHalf(){};
void interaction(size_t index_i, Real dt = 0.0);
};
using FluidShellIntegration2ndHalf = BaseFluidShellIntegration2ndHalf<Integration2ndHalf>;
using FluidShellIntegration2ndHalfRiemann = BaseFluidShellIntegration2ndHalf<Integration2ndHalfRiemann>;

using FluidShellandWallIntegration2ndHalf = BaseIntegration2ndHalfWithWall<FluidShellIntegration2ndHalf>;
using FluidShellandWallIntegration2ndHalfRiemann = BaseIntegration2ndHalfWithWall<FluidShellIntegration2ndHalfRiemann>;

/**
* @class ViscousWithWall
* @brief template class viscous acceleration with wall boundary
*/
template <class ViscousAccelerationInnerType>
class BaseViscousAccelerationWithShell : public InteractionWithShell<ViscousAccelerationInnerType>
{
public:
template <typename... Args>
BaseViscousAccelerationWithShell(Args &&...args)
: InteractionWithShell<ViscousAccelerationInnerType>(std::forward<Args>(args)...)
{};
virtual ~BaseViscousAccelerationWithShell(){};
void interaction(size_t index_i, Real dt = 0.0);
};

using ViscousAccelerationWithShell = BaseViscousAccelerationWithShell<ViscousAccelerationInner>;
using ViscousAccelerationWithShellandWall = BaseViscousAccelerationWithWall<ViscousAccelerationWithShell>;

}
}
#endif //FLUID_SHELL_INTERACTION_H
Loading