Conversation
|
|
||
| template <typename PeridynamicsModelType, typename MechanicsModelType = Elastic, | ||
| typename DamageType = Fracture, | ||
| typename AnisotropyType = Isotropic, typename DamageType = Fracture, |
There was a problem hiding this comment.
Why we use here "AnisotropyType = Isotropic"?
There was a problem hiding this comment.
The default anisotropy is "no anisotropy"
| // matter which particle we check. | ||
| f_mag = model( CabanaPD::ForceCoeffTag{}, 0, 0, s0, vol ); | ||
| f_mag = model( CabanaPD::ForceCoeffTag{}, 0, 0, s0, vol, | ||
| 0.0, xi, xi_x, xi_y, xi_z ); |
There was a problem hiding this comment.
Is "0.0" input argument arbitrary?
There was a problem hiding this comment.
Should be removed now
| using base_type::delta; | ||
| using base_type::K; | ||
| double c; | ||
| double _c; |
There was a problem hiding this comment.
Could you please remind me what is this change for?
There was a problem hiding this comment.
Variable and (new) function can't have the same name
src/force_models/CabanaPD_PMB.hpp
Outdated
| BaseForceModelPMB( PMB model, NoFracture fracture, Cubic, | ||
| const double delta, const double _C11, | ||
| const double _C12 ) | ||
| : base_type( model, fracture, delta, 1.0 / 3.0 * ( _C11 + 2.0 * _C12 ) ) |
There was a problem hiding this comment.
What is "1.0 / 3.0 * ( _C11 + 2.0 * _C12 )" for?
There was a problem hiding this comment.
We need K to create the base model. The previous assumption was that every model uses K
|
|
||
| // Break if beyond critical stretch unless in no-fail zone. | ||
| if ( model( CriticalStretchTag{}, i, j, r, xi ) && | ||
| if ( model( CriticalStretchTag{}, i, j, r, xi, xi_z ) && |
There was a problem hiding this comment.
Note adding xi_z only (instead of all the bond components) is specific for transversely isotropic. Other symmetries would require xi_x and/or xi_y.
|
|
||
| // Break if beyond critical stretch unless in no-fail zone. | ||
| if ( model( CriticalStretchTag{}, i, j, r, xi ) && | ||
| if ( model( CriticalStretchTag{}, i, j, r, xi, xi_z ) && |
There was a problem hiding this comment.
Same comment as above.
src/force_models/CabanaPD_PMB.hpp
Outdated
| , C33( _C33 ) | ||
| { | ||
| A1111 = 75.0 / 4.0 * C11 - 75.0 / 2.0 * C13 + 15.0 / 4.0 * C33; | ||
| A1133 = -25.0 / 3.0 * C11 + 115.0 / 2.0 * C13 + 5.0 / 4.0 * C33; |
There was a problem hiding this comment.
This should be:
A1133 = -25.0 / 3.0 * C11 + 115.0 / 2.0 * C13 - 15.0 / 2.0 * C33;
| BaseForceModelPMB( PMB model, Elastic, NoFracture fracture, | ||
| TransverselyIsotropic, const double delta, | ||
| const double _C11, const double _C13, const double _C33 ) | ||
| : base_type( model, fracture, delta, 1.0 / 3.0 * ( _C11 + 2.0 * _C13 ) ) |
There was a problem hiding this comment.
What is "1.0 / 3.0 * ( _C11 + 2.0 * _C13 )" for?
| } | ||
|
|
||
| KOKKOS_FUNCTION | ||
| auto lambda( const double xi, const double xi1, const double xi2, |
There was a problem hiding this comment.
We may need to think about whether to use xi_x, xi_y, xi_z, instead of xi1, xi2, xi3 for consistency with the rest of the code.
| const double xi_y, const double xi_z, | ||
| const int = -1 ) const | ||
| { | ||
| return lambda( xi, xi_x, xi_y, xi_z ) * s * vol; |
| const double xi_y, const double xi_z, | ||
| const int = -1 ) const | ||
| { | ||
| return lambda( xi, xi_x, xi_y, xi_z ) * s * vol; |
There was a problem hiding this comment.
Same comment as above (c vs. \lambda)
| KOKKOS_INLINE_FUNCTION | ||
| auto operator()( EnergyTag, const int, const int, const double, | ||
| const double, const double, const int = -1 ) const | ||
| { |
There was a problem hiding this comment.
We need to implement this, also for transversely isotropic.
| // 0.25 factor is due to 1/2 from outside the integral and 1/2 from | ||
| // the integrand (pairwise potential). | ||
| return 0.25 * c * stretch_term * xi * vol; | ||
| return 0.25 * c() * stretch_term * xi * vol; |
There was a problem hiding this comment.
What is this for? Bind energy has stretch^2
| , s_Y( sigma_y ) | ||
| { | ||
| for ( std::size_t d = 0; d < s_Y.size(); d++ ) | ||
| s_Y[d] /= ( 3.0 * base_type::K ); |
There was a problem hiding this comment.
This is not anisotropic since it depends on K and not K[d]
|
|
||
| // Must extract again if in the plastic regime. | ||
| s_p = _s_p( i, n ); | ||
| return lambda( xi, xi_x, xi_y, xi_z ) * ( s - s_p ) * vol; |
There was a problem hiding this comment.
Same comment c vs. \lambda aboive
| auto operator()( EnergyTag, const int, const int, const double, | ||
| const double, const double, const int = -1 ) const | ||
| { | ||
| // TODO: implement energy. |
src/CabanaPD_ForceModels.hpp
Outdated
| const double xi, const double xi_z ) const | ||
| { | ||
| auto bond_break_coeff = | ||
| s0[0] + ( s0[1] - s0[0] ) * xi_z * xi_z / ( xi * xi ); |
There was a problem hiding this comment.
This is wrong. For isotropic:
bond_break_coeff = ( 1.0 + s0 ) * ( 1.0 + s0 );

Still missing actual dependence on orientation; most of the models still default to isotropic only (all of LPS, etc.)