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 }

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

Very good!!! Thank you!!!

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.

I copied and ran your code. It worked.

Can you save and send me your file?

yes, where i can send you the file?

yye@yongtechnology.com

Sended

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.

Thank for your help,

Now it’s everything ok and it works!

How to find Soil Spring

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.