Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Pseudo Arclength Continuation

  1. Oct 16, 2014 #1
    I'm struggling to implement a pseudo arclength continuation method for my system. Here is what I have so far.

    I am trying solve the system of equations [tex]F(x, \lambda) = 0[/tex] but if I parameterise only by using lambda, I can't get around turning points, so I paramterise by "arclength" s and attempt to solve the system of equations:

    [tex]F(x(s), \lambda (s)) = 0\\
    N(x, \lambda, s) = 0[/tex]

    Where N is the linearised normalisation equation (' denotes differentiation with respect to s):

    [tex]N(x, \lambda, s) \equiv x' \delta x + \lambda ' \delta \lambda - \delta s = 0[/tex]

    Where ds is a specified step length. I solve these using a Newton-type method:


    F_{\textbf{x}} & F_{\lambda} \\

    N_{\textbf{x}} & N_{\lambda}



    \delta x \\

    \delta \lambda


    = -\begin{pmatrix}

    F_0 \\



    Where the subscripts denote differentiation. So far so normal, this is the scheme as it is usually presented. I'm having difficulty figuring out exactly what to do though, particularly with the bottom half of the right hand side vector. What should go in there? The unlinearised normalisation? [tex]||x'||^2 + \lambda '^2 - 1[/tex] But if I use that, then where does the step length come into it? I think I'm getting confused by the linearisation - usually with this type of thing I'd only have [tex]\delta[/tex] for variables I'm trying to solve for, but here we also have it for s. It's a constant, and is confusing me no end.

    Any help would be greatly appreciated, even just pointers to books/papers. Feeling pretty stupid atm!
  2. jcsd
  3. Oct 21, 2014 #2
    Thanks for the post! Sorry you aren't generating responses at the moment. Do you have any further information, come to any new conclusions or is it possible to reword the post?
  4. Oct 29, 2014 #3
    Ok I figured it out. The main problem I had is that I didn't realise that I needed an explicit predictor step. In natural continuation the "predictor" you would normally use is just the value from the previous iteration, but with the new lambda. For Pseudo-arclength continuation (PCA) you need an explicit predictor. Instead of

    [tex]N(x, \lambda, s) \equiv x' \delta x + \lambda ' \delta \lambda - \delta s = 0[/tex]

    I should have written:

    [tex]N(x, \lambda, s) \equiv x' (x_i - x_0) + \lambda ' ( \lambda _i - \lambda _0) - \delta s = 0[/tex]

    Because those things are not the same as the ##\delta x## and ##\delta \lambda## on the LHS. The way it works is this.

    1. Make a prediction using euler-style predictor
    2. Use that prediction to get the ##x_i##, ##\lambda _i## for the right hand side
    3. Iterate using a newton type method (you iterate on ##i## only).
    You can use the tangent as the predictor:$$x_{i+1} = x_i + \delta s T$$ where ##T## is the tangent. To get the tangent I just do it numerically:$$T = \frac{(z_i - z_{i-1})}{\delta s} = \frac{(z_i - z_{i-1})}{||z_i - z_{i-1}||}$$ Of course the obvious question is how to start the whole thing? I just use natural parameter continuation for the first step.

    This isn't everything I figured out, but it's about as much as I want to type. An in-depth algorithm can be found at http://iopscience.iop.org/1742-6596/385/1/012008/pdf/1742-6596_385_1_012008.pdf

    I'm currently trying to figure out how to update ##\delta s## in a sensible way for when it fails...
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook