Plastic-Hardening model: Internal parameter calculation fails (small-strain active)

Hi all,

I’m currently using FLAC2D v9 to implement the Plastic-Hardening constitutive model with small-strain stiffness activated. However, I consistently receive the following error : *** Plastic-Hardening model: Internal parameter calculation fails.. In zone …
Here are the key parameter values I use:
[global _slot = ‘Soil’]
[global _name = ‘L8_4’]
[global _condition = ‘Undrained’]
[global _Gred = 1.0]
[global _coh = 163000]
[global _phi = 0.1]
[global _m = 0.8]
[global _pref = 148.4E03]
[global _E50 = 66000000]
[global _Eoed = 66000000]
[global _Eur = 199000000]
[global _poisson = 0.2]
[global _strain70 = 0.000192]
[global _OCR = 1.0]
[global _K0ref = 0.9]
[global _void = 0.5]
[_Fn_Assign_PHSmall]

fish define _Fn_Assign_PHSmall
global _slot, _name, _condition
global _coh, _phi, _S_min, _m, _pref, _E50, _Eoed, _Eur, _poisson, _strain70, _OCR, _void, _K0ref
local _pz, _Vs, _G, _K, _rho, _s1, _s3, _s, _pp, _es1, _es3, _esmean, _strength, _pgp, _ngp, _sat, _Z1, _Z
loop foreach _pz zone.list
if zone.group(_pz,_slot) == _name
; Material properties
_rho = zone.density(_pz) ; Density
_Vs = zone.extra(_pz,2)
_G = _rho*_Vs^2.0
_K = 2.0*_G*(1+_poisson)/(3.0*(1.0-2.0*_poisson))

        ; Compute stress measures
        _s1   = zone.stress.min(_pz)
        _s3   = zone.stress.max(_pz)
        _es1 = zone.stress.min(_pz) + zone.pp(_pz)
        _es3 = zone.stress.max(_pz) + zone.pp(_pz)
        _esmean = zone.stress.int(_pz) + zone.pp(_pz)
        
        ; Stress-Dependent Modulus parameter, Z
       
        _Z1 = ((_coh*(1/math.tan(_phi*math.degrad)))-_s3)/((_coh (1/math.tan(_phi*math.degrad)))+_pref)
        _fcut = 0.1 ;The default cut-off factor
        _Z = math.max(_Z1,_fcut)

        zone.model(_pz) = 'plastic-hardening'
        zone.prop(_pz,'Shear')    = _G
        zone.prop(_pz,'Bulk')     = _K
        zone.prop(_pz,'cohesion') = _coh
        zone.prop(_pz,'friction') = _phi
        zone.prop(_pz,'dilation') = 0.0
        zone.prop(_pz,'exponent') = _m
        zone.prop(_pz,'stress-1-effective') = _es1
        zone.prop(_pz,'stress-2-effective') = _esmean
        zone.prop(_pz,'stress-3-effective') = _es3
        zone.prop(_pz,'pressure-reference') = _pref
        zone.prop(_pz,'stiffness-50-reference') = _E50
        zone.prop(_pz,'stiffness-oedometer-reference') = _Eoed
        zone.prop(_pz,'stiffness-ur-reference') = _Eur
        zone.prop(_pz,'poisson') = _poisson
        zone.prop(_pz,'over-consolidation-ratio') = _OCR
        zone.prop(_pz,'coefficient-normally-consolidation') = _K0ref
        zone.prop(_pz,'void-initial') = _void
        
        ;Small Strain Parameters
        zone.prop(_pz,'flag-smallstrain') = 'on'
        zone.prop(_pz,'stiffness-0-reference') = (_G*2*(1+_poisson))/(_Z^_m)
        zone.prop(_pz,'strain-70') = _strain70

    endif
endloop

end

What I’ve tried:

  • Verified zone group membership is correct
  • Used model large-strain off
  • Tried using pref = 100 kpa → still fails
  • Tried different parameter combinations (like _coh = 100kpa , _phi=30 etc.)→ still fails
  • Removed small-strain parameters → still fails
  • Tried math.cos/sin based Z formula → still fails

At this point I suspect some issue with the discrepancy of parameters or zone stress state, but it’s unclear why FLAC throws the “internal parameter calculation” error.
Any insight would be appreciated! I can provide the full script if needed. Thanks in advance.

– Emirhan

Bulk and Shear are read-only properties, you should not specify those two values.

With the input parameters, FLAC performed an internal oedometer simulation (a housekeeping check) that failed to converge to the specified K0 value. This suggests that the parameters are internally inconsistent. A quick review suggests that adjustments such as increasing the stiffness-oedometer-reference or decreasing K0 may help resolve the issue.