-
Notifications
You must be signed in to change notification settings - Fork 18
Add anisotropic material mechanics #264
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
base: main
Are you sure you want to change the base?
Changes from all commits
e0c7256
9cf55c7
f4b4ec6
40f3d3c
e937323
42260fb
412f2f7
8e8cb2b
f92f749
16db62f
fc0db66
cd6d481
2605b06
e483ab3
fe31311
e2753ab
a91146b
3a78460
2faa78e
59790e2
fe45761
b7c4034
837b87c
9f531bb
4189a94
3c1467c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -434,10 +434,12 @@ class Force<MemorySpace, ModelType, LPS, Fracture> | |
| // Get the reference positions and displacements. | ||
| double xi, r, s; | ||
| double rx, ry, rz; | ||
| getDistance( x, u, i, j, xi, r, s, rx, ry, rz ); | ||
| double xi_x, xi_y, xi_z; | ||
| getDistance( x, u, i, j, xi, r, s, rx, ry, rz, xi_x, xi_y, | ||
| xi_z ); | ||
|
|
||
| // 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 ) && | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 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. |
||
| !nofail( i ) && !nofail( i ) ) | ||
| { | ||
| mu( i, n ) = 0; | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -113,11 +113,13 @@ class Force<MemorySpace, ModelType, PMB, NoFracture> | |
|
|
||
| double xi, r, s; | ||
| double rx, ry, rz; | ||
| getDistance( x, u, i, j, xi, r, s, rx, ry, rz ); | ||
| double xi_x, xi_y, xi_z; | ||
| getDistance( x, u, i, j, xi, r, s, rx, ry, rz, xi_x, xi_y, xi_z ); | ||
|
|
||
| s = model( ThermalStretchTag{}, i, j, s ); | ||
|
|
||
| const double coeff = model( ForceCoeffTag{}, i, j, s, vol( j ) ); | ||
| const double coeff = model( ForceCoeffTag{}, i, j, s, vol( j ), xi, | ||
| xi_x, xi_y, xi_z ); | ||
| fx_i = coeff * rx / r; | ||
| fy_i = coeff * ry / r; | ||
| fz_i = coeff * rz / r; | ||
|
|
@@ -187,8 +189,8 @@ class Force<MemorySpace, ModelType, PMB, NoFracture> | |
|
|
||
| s = model( ThermalStretchTag{}, i, j, s ); | ||
|
|
||
| const double coeff = | ||
| 0.5 * model( ForceCoeffTag{}, i, j, s, vol( j ) ); | ||
| const double coeff = 0.5 * model( ForceCoeffTag{}, i, j, s, | ||
| vol( j ), xi, xi_x, xi_y, xi_z ); | ||
| const double fx_i = coeff * rx / r; | ||
| const double fy_i = coeff * ry / r; | ||
| const double fz_i = coeff * rz / r; | ||
|
|
@@ -273,12 +275,14 @@ class Force<MemorySpace, ModelType, PMB, Fracture> | |
| // Get the reference positions and displacements. | ||
| double xi, r, s; | ||
| double rx, ry, rz; | ||
| getDistance( x, u, i, j, xi, r, s, rx, ry, rz ); | ||
| double xi_x, xi_y, xi_z; | ||
| getDistance( x, u, i, j, xi, r, s, rx, ry, rz, xi_x, xi_y, | ||
| xi_z ); | ||
|
|
||
| s = model( ThermalStretchTag{}, i, j, s ); | ||
|
|
||
| // 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 ) && | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same comment as above. |
||
| !nofail( i ) && !nofail( j ) ) | ||
| { | ||
| mu( i, n ) = 0; | ||
|
|
@@ -287,7 +291,8 @@ class Force<MemorySpace, ModelType, PMB, Fracture> | |
| else if ( mu( i, n ) > 0 ) | ||
| { | ||
| const double coeff = | ||
| model( ForceCoeffTag{}, i, j, s, vol( j ), n ); | ||
| model( ForceCoeffTag{}, i, j, s, vol( j ), xi, xi_x, | ||
| xi_y, xi_z, n ); | ||
|
|
||
| double muij = mu( i, n ); | ||
| fx_i = muij * coeff * rx / r; | ||
|
|
@@ -394,7 +399,8 @@ class Force<MemorySpace, ModelType, PMB, Fracture> | |
| s = model( ThermalStretchTag{}, i, j, s ); | ||
|
|
||
| const double coeff = | ||
| 0.5 * model( ForceCoeffTag{}, i, j, s, vol( j ), n ); | ||
| 0.5 * model( ForceCoeffTag{}, i, j, s, vol( j ), xi, xi_x, | ||
| xi_y, xi_z, n ); | ||
| const double muij = mu( i, n ); | ||
| const double fx_i = muij * coeff * rx / r; | ||
| const double fy_i = muij * coeff * ry / r; | ||
|
|
@@ -471,8 +477,8 @@ class Force<MemorySpace, ModelType, LinearPMB, NoFracture> | |
|
|
||
| linear_s = model( ThermalStretchTag{}, i, j, linear_s ); | ||
|
|
||
| const double coeff = | ||
| model( ForceCoeffTag{}, i, j, linear_s, vol( j ) ); | ||
| const double coeff = model( ForceCoeffTag{}, i, j, linear_s, | ||
| vol( j ), xi, xi_x, xi_y, xi_z ); | ||
| fx_i = coeff * xi_x / xi; | ||
| fy_i = coeff * xi_y / xi; | ||
| fz_i = coeff * xi_z / xi; | ||
|
|
@@ -539,8 +545,8 @@ class Force<MemorySpace, ModelType, LinearPMB, NoFracture> | |
|
|
||
| linear_s = model( ThermalStretchTag{}, i, j, linear_s ); | ||
|
|
||
| const double coeff = | ||
| 0.5 * model( ForceCoeffTag{}, i, j, linear_s, vol( j ) ); | ||
| const double coeff = 0.5 * model( ForceCoeffTag{}, i, j, linear_s, | ||
| vol( j ), xi, xi_x, xi_y, xi_z ); | ||
| const double fx_i = coeff * xi_x / xi; | ||
| const double fy_i = coeff * xi_y / xi; | ||
| const double fz_i = coeff * xi_z / xi; | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why we use here "AnisotropyType = Isotropic"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The default anisotropy is "no anisotropy"