'Ogden unconstrained'+'fibre-exp-pow' problem

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts
  • NataCalc
    Member
    • Jan 2019
    • 87

    'Ogden unconstrained'+'fibre-exp-pow' problem

    I have two rigid bodies bridged by ligament which shares nodes with these rigid bodies. I have assigned 'Ogden unconstrained'+'fibre-exp-pow' to ligament and Febio failed:'FATAL Error'. Then, I assigned 'Ogden unconstrained'+'fiber-exp-pow-uncoupled' and Febio converged to solution. What would be the problem?

    I have enclosed two .feb files for two cases: (1) 'Ogden unconstrained'+'fibre-exp-pow' and (2) 'Ogden unconstrained'+'fibre-exp-pow'. You will see other problem in results related to contacting surfaces which I posted in appropriate section of the forum. tempModel_fiber_exp_pow_uncoupled.febtempModel_fiber_exp_pow.feb
  • maas
    Lead Code Developer
    • Nov 2007
    • 3400

    #2
    Hi,

    Neither of these files are working, probably because the ligament is not attached to the bones (as explained in my response to your other question), so let us know if this issue persists after you fixed the connection problem. I do want to point out that if you are using uncoupled materials in a solid mixture, you should use "uncoupled solid mixture".

    Cheers,

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

    Comment

    • NataCalc
      Member
      • Jan 2019
      • 87

      #3
      tempModel.febHi Steve,

      I fixed the problem related to ligament attachment (created rigid interfaces as for now I do not know how to merge surface and volume meshes). After fixing it, the above issue still persists: Ogden unconstrained+fibre-exp-pow is not working!

      Comment

      • maas
        Lead Code Developer
        • Nov 2007
        • 3400

        #4
        Hi,

        The "k" parameters you are using are not defined for these materials. For "Ogden unconstrained" change "k" to "cp", and remove "k" from "fiber-exp-pow". (For details, check the user manual, section 4.1.3.8 and 4.1.3.19). With these changes, this model runs for me in FEBio 2.9.

        Cheers,

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

        Comment

        • NataCalc
          Member
          • Jan 2019
          • 87

          #5
          Thanks Steve,

          Its working now.

          Where can I find more .feb examples on inverse FEA material properties fitting, failure models ....

          Cheers,
          Nataliya

          Comment

          • maas
            Lead Code Developer
            • Nov 2007
            • 3400

            #6
            Hi Nataliya,

            There are a few problems in our test suite (which is distributed as part of the FEBio installation package). The optimization problems start with "op". Take a look and don't hesitate if you have any further questions.

            Cheers,

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

            Comment

            • NataCalc
              Member
              • Jan 2019
              • 87

              #7
              Hi Steve,

              I have tried to run op01, op02 and op03 and got this message:
              Reading file op03.feb ...FAILED!
              FATAL ERROR: febio_spec tag was not found. This is not a valid input file.
              Would it be because of 2.0 version written in .feb files which is not compatible with 2.5 I am using currently?

              For now, I am concentrating in finding an example which can help me to determine boundary conditions for two rigid bodies prescribed by matrices which contain displacement and rotation. What example would be appropriate to use?

              Cheers,
              Nat

              Comment

              • maas
                Lead Code Developer
                • Nov 2007
                • 3400

                #8
                Hi Nat,

                To run the optimization problems, you need to specify two input files on the command line, the model input file, and the optimization input file. Each of the optimization input files in the test suite has a corresponding model input file, which are the "oi" files. (although I think op03 also uses oi01). So, to run an optimization problem, you run FEBio as follows:

                Code:
                feiob -i oi.feb -s op.feb
                There is no way to describe the rigid body via a matrix. Instead, you need to prescribe the translation and rotation separately via prescribed rigid body constraints. There are several examples in the suite that use rigid bodies. The "ri" problems are a good place to start.

                Cheers,

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

                Comment

                • NataCalc
                  Member
                  • Jan 2019
                  • 87

                  #9
                  Hi Steve,

                  I think I figured out my needs. I want to prescribe the translation and rotation to rigid bodies in the loop (I got boundary conditions (displacement and rotation from 4DCT scans for rigid bodies). Would it be a multi-step analysis? I have checked all 'ri' examples and have not come across with multi-step analysis. Maybe you can point at right examples to look at? In febio manual in Chapter 5 I have not found examples relevant to rigid bodies.

                  Would it be appropriate from syntax point of view do this:
                  %Get a template with default settings
                  [febio_spec]=febioStructTemplate;

                  %febio_spec version
                  febio_spec.ATTR.version='2.5';

                  %Module section
                  febio_spec.Module.ATTR.type='solid';

                  %Control section
                  stepStruct.Control.analysis.ATTR.type='static';
                  stepStruct.Control.title='Scaphoid-Ligament-Lunate fitting analysis';
                  stepStruct.Control.time_steps=numTimeSteps;
                  stepStruct.Control.step_size=1/numTimeSteps;
                  stepStruct.Control.time_stepper.dtmin=dtmin;
                  stepStruct.Control.time_stepper.dtmax=dtmax;
                  stepStruct.Control.time_stepper.max_retries=max_re tries;
                  stepStruct.Control.time_stepper.opt_iter=opt_iter;
                  stepStruct.Control.max_refs=max_refs;
                  stepStruct.Control.max_ups=max_ups;

                  %Add template based default settings to proposed control section
                  [stepStruct.Control]=structComplete(stepStruct.Control,febio_spec.Cont rol,1); %Complement provided with default if missing

                  %Remove control field (part of template) since step specific control sections are used
                  febio_spec=rmfield(febio_spec,'Control');

                  %Material section
                  febio_spec.Material.ATTR.type='solid';

                  ....

                  %Step specific control section
                  febio_spec.Step{1}.Control=stepStruct.Control;
                  febio_spec.Step{1}.ATTR.id=1;


                  febio_spec.Step{1}.Boundary.rigid_body{2}.ATTR.mat =3;
                  febio_spec.Step{1}.Boundary.rigid_body{2}.fixed{1} .ATTR.bc='Rx';
                  febio_spec.Step{1}.Boundary.rigid_body{2}.fixed{2} .ATTR.bc='Ry';
                  febio_spec.Step{1}.Boundary.rigid_body{2}.fixed{3} .ATTR.bc='Rz';

                  febio_spec.Step{1}.Boundary.rigid_body{2}.prescrib ed{1}.ATTR.bc='x';
                  febio_spec.Step{1}.Boundary.rigid_body{2}.prescrib ed{1}.ATTR.lc=1;
                  febio_spec.Step{1}.Boundary.rigid_body{2}.prescrib ed{1}.VAL=3;

                  febio_spec.Step{1}.Boundary.rigid_body{2}.prescrib ed{2}.ATTR.bc='y';
                  febio_spec.Step{1}.Boundary.rigid_body{2}.prescrib ed{2}.ATTR.lc=1;
                  febio_spec.Step{1}.Boundary.rigid_body{2}.prescrib ed{2}.VAL=-3;

                  febio_spec.Step{1}.Boundary.rigid_body{2}.prescrib ed{3}.ATTR.bc='z';
                  febio_spec.Step{1}.Boundary.rigid_body{2}.prescrib ed{3}.ATTR.lc=1;
                  febio_spec.Step{1}.Boundary.rigid_body{2}.prescrib ed{3}.VAL=3;
                  Obviously, I am doing something wrong as I am receiving this message:
                  Error using fieldnames
                  Invalid input argument of type 'double'. Input must be a structure or a Java or COM object.

                  Error in febioStruct2xml>febioStruct2xmlStep (line 107)
                  fieldNameSet = fieldnames(parseStruct);

                  Thanks for a help.
                  Cheers,
                  Nataliya
                  Last edited by NataCalc; 05-29-2019, 10:40 PM.

                  Comment

                  • NataCalc
                    Member
                    • Jan 2019
                    • 87

                    #10
                    Hello,

                    If I do have displacement vector in x, y and z directions [x y z] and I do have rotation vector in Rx, Ry and Rz directions [Rx Ry Rz], do I have to create:
                    step 1 - displacement in x, fix y, z, Rx, Ry, Rz; load curve 1.
                    step 2- displacement in y, fix x,z,Rx,Ry,Rz; load curve 2.
                    step 3- displacement in z, fix x,y,Rx,Ry,Rz;load curve 3.
                    step 4- rotation in Rx, fix x,y,z,Ry,Rz; load curve 4...
                    and etc ....
                    in total 6 steps to complete one transformation matrix for one object.

                    Do I have to create for each step load curve?

                    If I need to create the load curve for each step where to find the description of load curve for rigid body?
                    For instance, when I simply use
                    %LoadData section
                    febio_spec.LoadData.loadcurve{1}.ATTR.id=1;
                    febio_spec.LoadData.loadcurve{1}.ATTR.type='linear ';
                    febio_spec.LoadData.loadcurve{1}.point.VAL=[0 0; 1 1];
                    its not working even for the first step where there is only displacement in x direction. But when I use
                    % LoadData section
                    febio_spec.LoadData.loadcurve{1}.ATTR.id=1;
                    febio_spec.LoadData.loadcurve{1}.ATTR.type='linear ';
                    febio_spec.LoadData.loadcurve{1}.point.VAL=[0 0; 1 1; 2 1];
                    then it works. But again for the second step I have to create a different load curve otherwise I receive negative Jacobian.


                    Cheers,
                    Nat

                    Comment

                    • maas
                      Lead Code Developer
                      • Nov 2007
                      • 3400

                      #11
                      Hi Nat,

                      Yes, in general you would create different loadcurves for boundary conditions of different steps. The reason is that each step has a different time range and thus load curves used in a particular step must be defined over the same time range. Thus, for the six steps defined above, you would a different load curve and each load curve would match the time range of the corresponding step.

                      Cheers,

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

                      Comment

                      • NataCalc
                        Member
                        • Jan 2019
                        • 87

                        #12
                        Hi Steve,

                        Do you mean that firstly, I have to plot time versus displacements x,y,z and time versus rotations in Rx,Ry,Rz. Based on this determine the load curves for a particular step over the same time range? I found only some explanation of load curves in manual of Febio, where else can I find more profound explanation of load curve definition?

                        Cheers,
                        Nat

                        Comment

                        Working...
                        X
                        😀
                        😂
                        🥰
                        😘
                        🤢
                        😎
                        😞
                        😡
                        👍
                        👎