PyPile is a lateral pile analysis software program based on p-y curve method and finite element method. Pile deflection, bending moment and shear force can be analyzed with different load cases and multiple pile types.

PyPile has common pile cross sections and custom cross section. Typical soft clay, stiff clay, sand p-y curves (Barry J. Heyer and Lymon C. Reese), API sand, weak rock, c-phi soil, and custom p-y curve are included. Free pile head, fixed pile head, and arbitrary boundary conditions at any pile depth are implemented. Concentrated load, moment, distributed load can be applied at any depth along piles. Nonlinear pile bending stiffness was also integrated in the program.


  • Built-in p-y curves for typical soft clay, stiff clay, sand, API sand, weak rock, c-phi soil
  • Built-in elastic, elastic perfectly plastic, elastic perfectly plastic strain hardening, and brittle rock models
  • Custom p-y curves, defined by JavaScript or piecewise lines
  • Concentrated lateral load, moment, distributed load can be applied at any depth along piles.
  • Free and fixed pile head, and arbitrary boundary conditions at any location at piles
  • Nonlinear pile bending stiffness
  • Nonuniform piles
  • Soil model illustration graphs
  • p-y curves along pile length
  • Multi-layered soil considered
  • P multiplier to reduce p value in p-y curves
  • Common pile cross sections and custom cross sections
  • Multiple piles analysis
  • SI units and English units
  • Pile EI Multiplier to increase or reduce pile bending stiffness
  • Axial load for p-delta analysis
  • Result graph export (svg, emf, pdf, png)
  • Results (deflection, moment, shear force, rotation angle) output as excel xlsx file
  • Soil profile graph ready to be exported and used in report

To Windows 7, 8 and 8.1 users: If PyPile cannot run, please

  • Keep your operation system updated
  • Download and install Microsoft Visual C++ 2019 redistributable package (x64) at
  • Delete msvcp140.dll and vcruntime140.dll and vcruntime140_1.dll from PyPile folder

Change log:

0.8.6 (2021-01-23)

+ changed soil movement load from relative soil movement to absolute soil movement
+ added variable soil movements along depth
– minor GUI adjustment

0.8.5 (2020-07-09)

– fixed API sand error with small friction angle

0.8.4 (2020-04-19)

– fixed decimal point entry issue for countries using decimal comma
– fixed result data export titles in xlsx file

0.8.3 (2020-04-12)

– fixed program crash when more soil layers exist under pile bottom

0.8.2 (2020-03-31)

– fixed program crash when assign soil properties

0.8.1 (2020-03-30)

– fixed p-y curve output unit error

0.8.0 (2020-03-28)

+ nonuniform pipe pile
+ multi-section pile
+ pile section defined with function
+ arbitrary loads graphic presentation
+ p-y JavaScript test dialog
+ model graph view settings

0.7.0 (2020-01-19)

+ switched the numerical method from FDM to FEM
+ weak rock model
+ c-phi soil model
+ soil movement load
+ soil movement force dialog
+ arbitrary loads at arbitrary locations
…. concentrated forces and moments
…. distributed lateral loads
…. soil movement loads
+ arbitrary boundary conditions at arbitrary locations
…. lateral ground springs
…. rotational springs
…. lateral movement fixed
…. rotation fixed
+ nonlinear pile bending stiffness
…. elastic perfectly plastic
…. user defined curve
…. user defined JavaScript function
+ support windows 64 bit
– no windows 32 bit

0.6.3 (2019-02-04)

– corrected illustration typo
– removed emf file support

0.6.2 (2018-05-13)

– fixed p-y curve output depth
– fixed minor menu typo

0.6.1 (2018-01-03)

– minor bug fix

0.6.0 (2017-11-02)

+ API Sand
+ foundation stiffness matrix
+ showing p-y curves along pile depth
+ soil resistance data and curves
+ soil model illustration graphs
+ improved graph quality
+ display soil model options in combo box
– changed E to E/b for soil models added in 0.5.0
– fixed PyFunction declaration
– other minor fixes

0.5.0 (2017-07-03)

+ elastic soil model
+ elastic perfectly plastic soil model
+ elastic perfectly plastic strain hardening soil model
+ brittle rock model
+ Chinese graphical user interface
– bug fixes

0.4.1 (2017-04-18)

– fixed program crashing when result graphs showing

0.4.0 (2017-03-28)

+ axial loads
+ result graph export (svg, emf, pdf, png)
+ English units
+ result graph print
+ copy and paste data between loads table and spread sheet
+ delete load by delete key
+ more HP piles
+ copy pile type

0.3.1 (2017-02-18)

+ effective unit weight symbol
– fixed incorrect HP pile width

0.3.0 (2017-02-01)

+ multiple piles
+ HP piles
+ text output
+ updated excel file export
+ updated A and B curves
+ copy layer top parameter to layer bottom
+ loads generation and deletion
– moved N from stiff clay w/o water soil to loading
– groundwater level, use effective unit weight
– bug fix

0.2.2 (2016-03-24)

– bug fix

0.2.1 (2016-03-07)

+ multi-layered soil
+ P multiplier
+ lateral load and moment combination
+ rotation angle output
– used fixed J = 0.5
– bug fix

0.2.0 (2015-11-10)

+ multilayered soil
+ P multiplier
+ lateral load and moment conbination
+ pile rotation output

0.1.2 (2015-09-29)

141 Replies to “PyPile”

  1. Dear Yong,
    Thank you for your efforts to upgrade and develop the software.
    Is there a way to add one layer in the soil window (add empty row for a new layer) in the middle of my entire old layers after I finishing the layering defining, without recorrecting all inputs for the start and end depth for my old layers?

    I appreciate your efforts.

      1. until when you offer the program for free? because I see on my license, it expires on February 2021, I plan to start Master work which finish within 4 months after the expiry date.

  2. Where we enter groundwater location in ver. 0.8.5. It is not present in soil options as in ver. 0.1.1 demo.? Also how to set dry and submerged conditions in ‘ API sand ‘ as we can only enter submerged weight ( gamma dash ) ? Ex . assume I have a sand with dry weight 17 KN/m3 and saturated weight 20 implying submerged weight to be 20-9.81= 10.2 KN/m3 . So what should i enter in submerged weight in dry and submerged conditions?
    Sorry if my questions are naive and thanks

    1. Hi, effective unit weight is required in version 0.8.5. Your calculation is correct. IN your example, you can use 17 kN/m3 for unsubmerged sand, and 10.2 kN/m3 for submerged sand. PyPile will check if the sand is submerged based on the effective unit weight for API sand.

  3. First, thank you very much for letting us the geo community use your software.
    Trying to perform a kinematic interaction calculation with soil movement as the only load, I’ve noticed that, when a soil movement load is logged in the Additional Loads Dialog, the program calculates the soil pressure that corresponds to the soil movement, inputs that load as external load, and disables the p-y spring (Result Graphs Dialog/Soil Resistance with Depth). Am I right?
    This is kind of an “imposed pressure” method to compute lateral soil movement load on piles, and requires other constraints to get equilibrium (embedment in non-moving soil or imposed fixities somewhere along the pile). However, when using this method for seismic kinematic interaction, I have a free field soil movement all along the pile. If I apply such soil movement, all soil springs disappear and the calculation does not converge (unless other fixities are imposed). Besides, imposed pressure is constant, but once applied to the pile it deforms and that pressure could decrease unless it were far in the limit pressure asymptote of the p-y curve (seismic movement is small, so the constant pressure is too conservative). Perhaps, an “imposed displacements” method would be more universal and is easily implemented in a code like yours: if “ys” is the soil movement and “yp” is the pile movement, soil net reaction from p-y curves would correspond to y = yp – ys. Just an idea 😉

    1. Hi Eduardo, thanks for using PyPile. You are right. If soil movement is applied, the corresponding soil resistance will be removed, which is usually used for pile to stabilize slope. If you would like to apply constant soil movement loads without removing the soil resistance, you may want to apply soil movement loads as distributed loads (DP). The “imposed displacements” as you described may need iterations to obtain convergence. If you don’t mind, can you please send me some documents with more details?

  4. Hello Yong,

    Thank you for the amazing software. Can you tell me where can I get load control type (deflection/load) as shown in your preview . whatever i have installed PYPILE version 0.8.5 is not showing that option. Waiting for your earliest response

    1. Hi Parimala, The deflection control type was removed in one of the early versions. Generally you can use load control to get what you want. Can you please let me know what your case is?

  5. Hi, Yong!

    First of all, congratulations for the excellent work and thank you for providing this software for free!

    I’m comparing the p-y curves estimated by the API method with the curves generated by the FEM. To obtain the ‘p’ and ‘y’ values by the FEM.. how can I do this ??

    1. Hi Felipe, you should be able to get some papers if you google “3d finite element get p-y curves”.

      1. Thanks for the reply.

        The p values extracted in “export result graph -> soil resistance with depth” are not values ​​obtained by FEM?

    1. I may not understand your question correctly. Normally we specify soil spring stiffness in structural analysis software.

      1. I understand you.just to clarify one more thing. Pls see table below.
        depth(ft)……….P (kip/ft)……..Y(ft)…………..Stiffness(P/Y)
        2 ……………………..6…………………….0.2 …………..30
        6 ………………………8 ……………………0.15…………….53
        so if i break a pile into several segment and put these stiffness values in the joints as stiffness and apply lateral load, then will this give me moment result like this software? and is this a valid process?

        1. Hi Basum,
          1. PyPile uses distributed spring. The lateral springs are distributed along the pile length, not only at the locations of the nodes. That’s why the unit of P is force/length.
          2. The unit of your individual spring stiffness should be force/length, which means you need to multiply the stiffness in the table by the segment length to get the individual spring stiffness.
          3. If your segment lengths are small, the results should be similar with PyPile.

  6. Dear Yong,

    I just installed your Pypile but im having problems using units with decimals, the only available sign is comma but after I use it is like the software dont understand there are decimals. Can you help me?

    1. Hi Bernardo, the following comments may help:
      “I couldn’t input the dot sign at all. I did try to change the language to english early today without luck, nevertheless I looked again in those options because of your answer and realized that you can change the decimal symbol sign in “Change date, time, or number formats” in the language preferences of control panel, wich was “,” by default and I changed to “.”. Now it’s working, thank you very much for your help in such short time “

  7. Dear Mr. Yong,
    Again, congratulations and thanks for the application, it is really brilliant and useful.
    It seems that there’re some issues when obtaining the equivalent stiffness matrix for the pile when rotations are involved.
    Maybe I could be wrong, but, shouldn’t be the rotation the sum of curvature along the pile length?
    You already have the bending moment law, performing the integration (sum), divided by the Stifness (EI) it should provide the rotation.
    Santiago Guerra

    1. Hi Santiago, not sure if I understand your question correctly. Pile rotation stiffness K33 is obtained by fixing the pile head lateral movement and applying moment on the pile head.

        1. Mr Yong, I will reply myself. I have just downloded the 0.8.4 and I have run the same calculation model that I’ve submitted you before and now the graphs for the equivalent stiffness matrix have full sense.
          Congratulations again for such amazing and useful tool.
          Santiago Guerr

          1. Thanks Mr Yong, my apologies, I haven’t noticed that the input was required.
            Regarding lateral pile soil capacity, used in Caltrans SDC for determining the shear key capacity. How could I determine it?
            Obtaining the lateral fixity is clear, just iterating with the overcapacity shear and bending moment applied at top of pile, with the axial force due to dead load.

          2. In general, to get the soil spring stiffness for structural analysis, you can run Analysis -> p-y Curves to get the p-y curves along the pile depth. The lateral soil spring stiffness is proportional to the secant moduli of the p-y curves. The same results can be obtained from soil movement force. However, please don’t forget that the soil spring stiffness k(kN/m3)=secant modulus (kN/m2)/pile width(m).

  8. Hi
    Thanks a lot for this excellent software.
    Is there any free software for analyzing the pile under axial loading?


    1. Axial loading response is not available yet. We are on the way implementing axial response so that pile group can be analyzed in PyPile.

      1. Thanks for the reply. I hope to see it soon.
        But, do you know any other free software for axial loading (bearing capacity)?

  9. Dear Mr Yong,
    First of all Happy Easter and hope you are safe of covid 19.
    I have found something that for me, has not much sense in the updated version. I had one pile calculated in the same soil with the previous version, before march update. In the older one, the calculation converged, but with the new one, no.
    However, looking the graphs, it seems clear that equilibrium can be found out with a shorter pile length. I’m not sure why happens this.
    I leave a link to both files, calculated with the older and new software version.

    1. Thanks Santi. I have run the two files you provided. V0.8.2 crashes when runing with Py_curves_Staircase2.pil and there is no problem to run Py_curves_Staircase2_new.pil.
      I fixed the crash problem in v0.8.3. Please let me know if you still have problems to run it.
      Stay safe.

      1. Thanks so much Mr Yong, running perfectly!
        I have also notice that in soil definition the p-y curve models have been included again.
        Great job, the app is amazing! Thank you again

  10. Hi Sir,
    Thank you so much for this Code (PyPile), really it is a brilliant code. I just would like to inform that there is a mistake in the results of P-Y curve, the results of P must be divide by 1000 in SI unit.
    Best regards,

  11. Dear Yong,

    First, my most sincere congratulations for the updates performed in the P-y Curve software.

    I would like to ask for your kind clarification regarding to p-y graph. My intention is using the p-y curves as springs in a 3d calculation model of a footbridge.

    The units in the “x” axle are (mm), and in “y”, kN/m. The latter is the one required in the 3d structural model. But my question is: Is performing internally the software the conversion kN/m, multiplying the kN/m3 x pile width x depth interval? As if I change the depth interval, more curves are shown, but values at the specific depth are always the same.

    1. Hi Santi, Thanks for using PyPile. Please think it the other way around. The P-y curve at a certain depth should not change with the depth interval. This depth interval is used only to show the P-y curves.
      The P (y axis with unit kN/m) has a unit of force / unit pile length. The associated scant modulus will have a unit of force / unit pile length / displacement (kN/m2).
      Stiffness of a spring distributed on a surface has a unit of force / unit pile length / pile width / displacement (kN/m3).
      Stiffness of a spring distributed along a line has a unit of force / unit pile length / displacement (kN/m2).
      Stiffness of an individual spring has a unit of force / displacement (kN/m).
      Please let me know if you have any questions.

    1. The load control type has already been removed long time ago. Can you let me know your case to use the the load control type?

      1. Hi Yong,

        Thanks for the reply. I’m hoping to compare my experimental results with the p-y pile results, and my experiments were done with displacement controlled mode. Is it possible to find the previous version then?


        1. Hi Lindsey, I would recommend that you use a list of loads and find the load for a specific deflection from the curve at Export -> Export Result Graph -> Lateral Force with Pile Head Deflection. The curve data can be find at the Data tab.

  12. Hello Yong, my compliments for creating such a wonderful piece of software. I am trying to define a custom P-y curve using Javascript.
    Q1 What does the function actually return? Soil reaction p or p/pc ratio?
    Q2 Inside the function, how can I retrieve specified top and bottom values for such variable as c, phi, e50, k, u0, u1; also, is it possible to retrieve the weight density?
    I would very much appreciated an example, to help me with the Javascript code.
    Thank you in advance

  13. Hi Yong,

    If I wanted to export the p-y curves used at every lateral spring of the model, how should I go about that? I read in a master thesis that someone did that, but I can’t figure how.
    And thanks for the great work!

  14. Hi yong, today when I opened Pypile, have a window info popup that the license has expired since feb. 1, 2019, and Pypile does not open. I have last version 0.6.2.

  15. Hello Yong, first of all, I would like to thank you for providing this software for free.
    I have been trying it out and realized that I cannot enter decimal places (specifically the dot sign “.”) in the input boxes. I read from the comments that someone had a similar problem that was solved. In my case I’m using Windows 10 and I’ve installed Visual C ++ Redistributable for Visual Studio 2015. Any help would be appreciated.

    1. Can you input the dot sign somewhere or not at all? If you default input language is not English, your can change your input language to English and try. Please let me know if it works.

      1. I couldn’t input the dot sign at all. I did try to change the language to english early today without luck, nevertheless I looked again in those options because of your answer and realized that you can change the decimal symbol sign in “Change date, time, or number formats” in the language preferences of control panel, wich was “,” by default and I changed to “.”. Now it’s working, thank you very much for your help in such short time 🙂

  16. Hello, Yong. I’d like to know what articles or textbooks I should read to understand better how this software does the calculation. I am using it for a college project.

    1. Hi Luan, please read Analysis of Single Piles under Lateral Loading by Heyer and Reese. You can find the link on the top of this page.

Leave a Reply

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.