Sanisand¶
The sanisand class represents the SANISAND critical-state,
bounding-surface model for drained simulations. Use
sanisand2 when the calibration requires the undrained model
path implemented by numgeo-ACT.
At a glance
- Class:
ACT.models.sanisand - numgeo name:
Sanisand - Material parameters: 16 (15 optimisable;
p_atmis fixed) - Import:
from ACT.models import sanisand - Bound overrides: no public
set_bounds(...)method
Units and angles
Enter p_atm in kPa. The other 15 material parameters, including G0,
are dimensionless coefficients or ratios. The optional convenience input
phic is in radians; it derives M_c and M_e and is not itself a
material or free parameter.
Parameters and built-in bounds¶
The class computes bounds when parameter_bounds(free_parameter) is called.
They are not stored in self.bounds and cannot be changed with
set_bounds(...). Keep p_atm fixed: its lower and upper bounds are identical,
so it is not a valid search dimension for any optimiser.
| Parameter | Built-in bound | Note |
|---|---|---|
p_atm |
[100, 100] |
atmospheric reference pressure; fixed by the built-in bound |
e0 |
[0.9 e0, 1.1 e0] |
interval is based on the value assigned with set(e0=...) |
lambda_c |
[0.01, 0.5] |
critical-state-line parameter |
xi |
[0.1, 0.9] |
critical-state-line exponent |
G0 |
[50, 500] |
elastic shear-modulus factor |
nue |
[0.0, 0.4] |
elastic Poisson ratio |
m |
[0.001, 0.1] |
yield-surface parameter |
M_c |
[0.9 M_c, 1.1 M_c] |
interval is based on the value assigned with set(...) |
M_e |
[0.9 M_e, 1.1 M_e] |
interval is based on the value assigned with set(...) |
n_b |
[0.01, 2.5] |
bounding-surface parameter |
h0 |
[0.01, 10.0] |
hardening parameter |
c_h |
[0.0, 1.1] |
hardening parameter |
n_d |
[0.1, 3.5] |
dilatancy parameter |
A0 |
[0.2, 1.0] |
dilatancy parameter |
z_max |
[1, 30] |
fabric limit |
c_z |
[1000, 10000] |
fabric evolution parameter |
The implementation enforces \(M_e/M_c\leq1\) when both quantities are free. Set
physically credible non-zero starting values before requesting the bounds;
otherwise the data-dependent intervals for e0, M_c or M_e collapse.
Setting parameters¶
from ACT.models import sanisand
model = sanisand()
model.set(
p_atm=100.0,
e0=0.80,
lambda_c=0.02,
xi=0.7,
G0=125.0,
nue=0.2,
m=0.05,
M_c=1.25,
M_e=0.95,
n_b=1.0,
h0=5.0,
c_h=0.5,
n_d=1.0,
A0=0.5,
z_max=4.0,
c_z=2000.0,
)
Full signature:
set(
p_atm=None, e0=None, lambda_c=None, xi=None, G0=None, nue=None,
m=None, M_c=None, M_e=None, n_b=None, h0=None, c_h=None,
n_d=None, A0=None, z_max=None, c_z=None, phic=None,
)
phic is an input convenience, not a seventeenth material parameter or a free
parameter. When supplied in radians, it overwrites M_c and M_e using the
triaxial compression and extension stress ratios. Do not supply phic together
with independent M_c/M_e values unless that overwrite is intentional.
Choosing free parameters¶
List only adjustable names from the 16-parameter table; omit p_atm:
from ACT import globals
globals.setup(
Model=model,
Free_parameter=["lambda_c", "xi", "G0", "M_c", "M_e", "h0", "n_b"],
triaxCD=database.triax_CD,
path="./sanisand-calibration/",
)
Do not call model.set_bounds(...); that method is not implemented by this
class. If adjustable bounds are required, use a SANISAND variant that documents
the method or extend the base class explicitly and test the resulting material
mapping.
Reading and updating values¶
Parameter names are case-sensitive. See Optimisation for search strategies and the models overview for the shared runtime contract.