Specifying initial/starting guess of nodal positions for iterative solver

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts
  • ankushaggarwal
    Member
    • May 2014
    • 45

    Specifying initial/starting guess of nodal positions for iterative solver

    Hello,

    Is it possible to specify a guess of nodal (deformed) positions in FEBio input file? I have imaging data that gives an estimate of the deformation, and I would like to use it as the starting guess to accelerate the FEBio solver.

    Thanks,
    Ankush.
  • ankushaggarwal
    Member
    • May 2014
    • 45

    #2
    Prof. Ateshian,

    Thank you for your input. In my experience, depending on the situation, specifying initial guess can improve the convergence. For example, while calculating finite difference approximation of Jacobian with respect to material paramers, the changes in displacements with respect to small variations in material parameters are small (assuming there is no instability/buckling involved). And having already solved one set of parameters, those could be used to accelerate the convergence of the rest of the simulations. Another similar situation is, if we have a large database of previously solved simulations, we can use those to inform a new simulation with initial guesses and speed it up. I believe going from nodal positions/displacements to strains should satisfy the stain compatibility conditions, unless there are internal variables.

    I think if there is a way to implement this feature in FEBio input files, it can be useful in certain situations (though not all situations, as you said). I am happy to give it a shot (I already have a fork of the FEBio github repo). The main issue I see is importing the displacement/position data in the input files. Once it is available to the solver, using it should be straightforward?

    Best regards,
    Ankush.

    Comment

    • maas
      Lead Code Developer
      • Nov 2007
      • 3481

      #3
      Hi Ankush,

      We currently don't have a mechanism for providing an initial guess for the displacement solution, however, I am happy to look into that. Can you please provide a bit more information on how you want to use this? Most FEBio models are solved using multiple time steps. Do you want to provide an initial guess for each time step, or just for the very first one? In the latter case, the easiest way might be to implement an "initial displacement" option, but the former might require some more development.

      Thanks,

      Steve
      Department of Bioengineering, University of Utah
      Scientific Computing and Imaging institute, University of Utah

      Comment

      • ankushaggarwal
        Member
        • May 2014
        • 45

        #4
        Hi Steve,

        I think it could be something like the load curves (but possibly defined as nodal data) where we input nodal displacements at some chosen time points and then, at any time point, the solver can use an interpolation of that data as a starting guess. For example, for a 1 second-long analysis, if we have guesses of displacements at time t=0.5 and t=1, we define two nodedata sets

        <NodeData name="p1" node_set="set1">
        <node lid="1">1.0, 1.0, 1.0</node>
        <node lid="2">2.0, 2.0, 2.0</node>

        </NodeData>
        <NodeData name="p2" node_set="set1">
        <node lid="1">2.0, 2.0, 2.0</node>
        <node lid="2">3.0, 3.0, 3.0</node>

        </NodeData>

        Next, one could specify something like a load curve, so that the "p1" is the displacement at t=0.5, and "p2" is the displacement at t=1, so that at any time 0.5<t<1, the guess is linear interpolant of the two data, which is used by the solver as an initial guess. Alternatively, one could define two load curves


        <load_controller id="1" type="loadcurve">
        <interpolate>LINEAR</interpolate>
        <extend>CONSTANT</extend>
        <points>

        <point> 0, 0 </point>
        <point> 0.5, 1 </point>

        </points>
        </loadcurve>


        <load_controller id="2" type="loadcurve">
        <interpolate>LINEAR</interpolate>
        <extend>CONSTANT</extend>
        <points>

        <point> 0, 0 </point>
        <point> 0.5, 0 </point>

        <point> 1, 1 </point>
        </points>
        </loadcurve>


        And then assign the initial guess for the solver to be p1*loadcurve id 1 + (p2-p1)*loadcurve id 2.

        Hope that makes sense.​

        Many thanks!
        Ankush.

        Comment

        • maas
          Lead Code Developer
          • Nov 2007
          • 3481

          #5
          Hi Ankush,

          Thanks for elaborating. I think this is feasible but will require some development. Not sure whether it will make it in the 2.1 release we are currently preparing, but I'll keep you posted.

          Best,

          Steve
          Department of Bioengineering, University of Utah
          Scientific Computing and Imaging institute, University of Utah

          Comment

          • ankushaggarwal
            Member
            • May 2014
            • 45

            #6
            Great, thanks, Steve! I will also be happy to help/contribute if I am provided some direction.

            Best regards,
            Ankush.

            Comment

            Working...
            X