Custom p-y curve example in PyPile

Users can customize their p-y curves using JavaScript in PyPile, which provides great flexibility to create p-y curves for any type of soils. The following code is an example to show how to use JavaScript to create p-y curve for stiff clay without free water presence (Reese).

The parameters of this function are specified by users or obtained from current and upper soil layers. The function returns lateral force P based on the deflection y and its user-defined p-y model.

function PyFunction(y, depth, top, bottom, r, r_ave, c, c_ave, phi, e50, k, u0, u1, b, cyclic){
    var P

    var J = 0.5
    var Pu = Math.min((3 + r_ave / c * depth + J / b * depth) * c * b, 9 * c * b)
    var y50 = 2.5 * e50 * b

    if (y < 16 * y50) {
        P = 0.5 * Math.pow(y / y50, 0.25) * Pu
    }
    else {
        P = Pu
    }

    return P
}

12 thoughts on “Custom p-y curve example in PyPile

  1. Hello, i’m using your program for my thesis, first of all thank for pypile.
    I would like to know how can I modify the p-y curves, the complete procedure if is possible.
    Fabio.

    • Hi Fabio, You can customize your p-y curves by selecting
      1) custom soil by curve in Soil Model dialog and input the top and bottom data points, and the value between the points will be interpolated linearly and the value at over the max defined movement is value at the max defined movement;
      2) custom soil by function and write your own JavaScript function to generate any types of curves. See the post above. Please note the function will generate a curve defined by users instead of modifying an existing curve.
      In JavaScript function
      function PyFunction(y, depth, top, bottom, r, r_ave, c, c_ave, phi, e50, k, u0, u1, b, cyclic)
      you can use the arguments the way you want. The basic meaning of the arguments are:
      y: movement
      depth: current calculation depth
      top: layer top depth
      bottom: layer bottom depth
      r: soil unit weight
      r_ave: average unit weight above the calculation depth
      c: cohesion
      c_ave: average cohesion above the calculation depth
      phi: friction angle
      e_50: traditional epsilon_50
      k: initial stiffness
      u0, u1: user defined parameters
      b: pile width
      cyclic: if cyclic loading

  2. Hi, I try to insert the API curves for sand, this is the code I’ve inserted:
    function PyFunction(y, depth, top, bottom, r, r_ave, c, c_ave, phi, e50, k, u0, u1, b, cyclic){
    var P

    var p_shallow = ( 2.7 * depth + 3.2 * b ) * r * depth
    var p_depth = 60 * r * depth
    var p_ultimate = Math.min(p_shallow , p_depth)

    var load= k * depth * y / (0.9 * p_ultimate)

    P = 0.9 * p_ultimate * (Math.exp(load) – Math.exp(-1 * load)) * Math.pow(( Math.exp(load) + Math.exp(-1 * load),-1))
    return P
    }

    I’ve found a problem during the execution of the function, even though, the message has been “Calculation succeeded” the results seemed like no computation has been made.

          • Hi Fabio,
            Please see the code below:
            function PyFunction(y, depth, top, bottom, r, c, phi, e50, k, u0, u1, b, cyclic){
            var P
            var p_shallow = ( 2.7 * depth + 3.2 * b ) * r * depth
            var p_depth = 60 * r * depth
            var p_ultimate = Math.min(p_shallow , p_depth)
            if (p_ultimate < 1e-5)
            p_ultimate = 1e-5
            var load= k * depth * y / (0.9 * p_ultimate)
            P = 0.9 * p_ultimate * (Math.exp(load) – Math.exp(- load)) / ( Math.exp(load) + Math.exp(- load))
            return P
            }

            Three problems caused the unsuccessful running:
            1, the function definition actually changed a bit in 0.5.0. Please see the definition above. The default PyFunction definition will be updated in the next release.
            2, the lower bound of p_ultimate should be limited to a small value, because p_ultimate is a divisor and cannot be 0.
            3, one of the minus sign in your P = 0.9 * p_ultimate…. actually is a hyphen.

    • In one of the following versions, I will provide a function to export the P-y curves at specified levels, which means nonlinear spring will be available or constant secant spring can be obtained for a certain lateral movement.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>