@@ -30,6 +30,8 @@ See [Total Lagrangian SPH](@ref tlsph) for more details on the method.
3030 fluid-structure interaction (see [Boundary Models](@ref boundary_models)).
3131- `penalty_force`: Penalty force to ensure regular particle position under large deformations
3232 (see [`PenaltyForceGanzenmueller`](@ref)).
33+ - `viscosity`: Artificial viscosity model to stabilize both the TLSPH and the FSI.
34+ Currently, only [`ArtificialViscosityMonaghan`](@ref) is supported.
3335- `acceleration`: Acceleration vector for the system. (default: zero vector)
3436- `source_terms`: Additional source terms for this system. Has to be either `nothing`
3537 (by default), or a function of `(coords, velocity, density, pressure)`
@@ -55,7 +57,7 @@ See [Total Lagrangian SPH](@ref tlsph) for more details on the method.
5557 where `beam` and `fixed_particles` are of type `InitialCondition`.
5658"""
5759struct TotalLagrangianSPHSystem{BM, NDIMS, ELTYPE <: Real , IC, ARRAY1D, ARRAY2D, ARRAY3D,
58- YM, PR, LL, LM, K, PF, ST} <: SolidSystem{NDIMS}
60+ YM, PR, LL, LM, K, PF, V, ST} <: SolidSystem{NDIMS}
5961 initial_condition :: IC
6062 initial_coordinates :: ARRAY2D # Array{ELTYPE, 2}: [dimension, particle]
6163 current_coordinates :: ARRAY2D # Array{ELTYPE, 2}: [dimension, particle]
@@ -74,6 +76,7 @@ struct TotalLagrangianSPHSystem{BM, NDIMS, ELTYPE <: Real, IC, ARRAY1D, ARRAY2D,
7476 acceleration :: SVector{NDIMS, ELTYPE}
7577 boundary_model :: BM
7678 penalty_force :: PF
79+ viscosity :: V
7780 source_terms :: ST
7881 buffer :: Nothing
7982end
@@ -84,7 +87,8 @@ function TotalLagrangianSPHSystem(initial_condition,
8487 n_fixed_particles= 0 , boundary_model= nothing ,
8588 acceleration= ntuple (_ -> 0.0 ,
8689 ndims (smoothing_kernel)),
87- penalty_force= nothing , source_terms= nothing )
90+ penalty_force= nothing , viscosity= nothing ,
91+ source_terms= nothing )
8892 NDIMS = ndims (initial_condition)
8993 ELTYPE = eltype (initial_condition)
9094 n_particles = nparticles (initial_condition)
@@ -119,7 +123,7 @@ function TotalLagrangianSPHSystem(initial_condition,
119123 n_moving_particles, young_modulus, poisson_ratio,
120124 lame_lambda, lame_mu, smoothing_kernel,
121125 smoothing_length, acceleration_, boundary_model,
122- penalty_force, source_terms, nothing )
126+ penalty_force, viscosity, source_terms, nothing )
123127end
124128
125129function Base. show (io:: IO , system:: TotalLagrangianSPHSystem )
@@ -130,6 +134,7 @@ function Base.show(io::IO, system::TotalLagrangianSPHSystem)
130134 print (io, " , " , system. acceleration)
131135 print (io, " , " , system. boundary_model)
132136 print (io, " , " , system. penalty_force)
137+ print (io, " , " , system. viscosity)
133138 print (io, " ) with " , nparticles (system), " particles" )
134139end
135140
@@ -159,7 +164,8 @@ function Base.show(io::IO, ::MIME"text/plain", system::TotalLagrangianSPHSystem)
159164 summary_line (io, " smoothing kernel" , system. smoothing_kernel |> typeof |> nameof)
160165 summary_line (io, " acceleration" , system. acceleration)
161166 summary_line (io, " boundary model" , system. boundary_model)
162- summary_line (io, " penalty force" , system. penalty_force |> typeof |> nameof)
167+ summary_line (io, " penalty force" , system. penalty_force)
168+ summary_line (io, " viscosity" , system. viscosity)
163169 summary_footer (io)
164170 end
165171end
230236 extract_smatrix (system. pk1_corrected, system, particle)
231237end
232238
239+ function young_modulus (system:: TotalLagrangianSPHSystem , particle)
240+ return young_modulus (system, system. young_modulus, particle)
241+ end
242+
243+ function young_modulus (:: TotalLagrangianSPHSystem , young_modulus, particle)
244+ return young_modulus
245+ end
246+
247+ function young_modulus (:: TotalLagrangianSPHSystem ,
248+ young_modulus:: AbstractVector , particle)
249+ return young_modulus[particle]
250+ end
251+
252+ function poisson_ratio (system:: TotalLagrangianSPHSystem , particle)
253+ return poisson_ratio (system, system. poisson_ratio, particle)
254+ end
255+
256+ function poisson_ratio (:: TotalLagrangianSPHSystem , poisson_ratio, particle)
257+ return poisson_ratio
258+ end
259+
260+ function poisson_ratio (:: TotalLagrangianSPHSystem ,
261+ poisson_ratio:: AbstractVector , particle)
262+ return poisson_ratio[particle]
263+ end
264+
233265function initialize! (system:: TotalLagrangianSPHSystem , semi)
234266 (; correction_matrix) = system
235267
345377 return lame_lambda * tr (E) * I + 2 * lame_mu * E
346378end
347379
348- @inline function calc_penalty_force! (dv, particle, neighbor, initial_pos_diff,
349- initial_distance, system, m_a, m_b, rho_a, rho_b,
350- :: Nothing )
351- return dv
352- end
353-
354380function write_u0! (u0, system:: TotalLagrangianSPHSystem )
355381 (; initial_condition) = system
356382
0 commit comments