Boundary force vector

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts
  • maryrose
    Member
    • May 2019
    • 32

    Boundary force vector

    Hi,

    I'm looking to apply a force vector to the solid boundaries from an external CFD solver. The external force vector is calculated for a surface. I'm wondering how I should incorporate this into FEBio. Should I replace the element force vector fe with the external boundary force vector? Also, fe is calculated for each element node. Should the external force be applied equally to all element nodes?

    Many Thanks,
    Maryrose
  • ateshian
    Developer
    • Dec 2007
    • 1824

    #2
    Hi Maryrose,

    There are two ways of prescribing known loads on boundaries for your purpose: (1) Prescribe nodal forces (as you mention) or (2) prescribe surface tractions. Which of these two choices you pick depends on what is available to you from the CFD solver and how you construct your solid model.

    First, do the boundaries in your solid model use the same mesh as the boundaries of your CFD model? If so, does your CFD model output nodal force values on this boundary? If the answer is yes to both questions, then option (1) is viable. If the mesh is the same but the CFD model does not output nodal forces, I assume it provides you the ability to output the traction (the projection of the stress tensor along the normal to each element on the boundary surface). In that case you can use these traction values as traction boundary conditions on your solid model.

    If the mesh of your CFD model is not the same as that of the solid model, then nodal forces are out of the question and your only option is to use traction boundary conditions. You will then need to interpolate the CFD results over the mesh of the solid model (cumbersome but technically doable).

    Also, fe is calculated for each element node. Should the external force be applied equally to all element nodes?
    External forces should only be applied to boundary nodes, not internal nodes.

    Best,

    Gerard

    Comment

    • maryrose
      Member
      • May 2019
      • 32

      #3
      Hi Gerard,

      The solid and CFD boundaries are the same. The CFD solver does not model nodal forces, instead a vector for pressure force and a vector for viscous force are calculated for each boundary surface. Can I apply these vectors as a traction? The traction, tn[], takes in a single value, not a vector?

      In regards to
      Also, fe is calculated for each element node. Should the external force be applied equally to all element nodes?
      I was wondering if the external force is applied equally to all of the boundary nodes of the element.

      Thanks,
      Maryrose

      Comment

      • ateshian
        Developer
        • Dec 2007
        • 1824

        #4
        Hi Maryrose,

        a vector for pressure force and a vector for viscous force are calculated for each boundary surface
        Do you mean that you get one single value for the entire surface? If that's the case this value will not be very useful to you.

        Instead, you need to look at your CFD solver and figure out how to extract the fluid stress tensor (pressure * identity tensor + viscous stress) at each element which has a face on the boundary. You also need to evaluate the unit normal to each element face. Then you can evaluate the traction vector on each element face as traction=stress*normal (this is a tensorial relation, the stress is a 3x3 symmetric matrix and the normal is a 3x1 vector, producing a 3x1 traction vector). Then you apply this traction vector on your solid model, on each element face (Physics->Add surface load...->Surface traction, which is a vector).
        I was wondering if the external force is applied equally to all of the boundary nodes of the element.
        Unfortunately no. The nodal force values depend on the interpolating functions for the surface element.

        Alternatively, you can perform a fluid-structure interaction analysis within FEBio, i.e., use the FSI solver in FEBio to perform the CFD analysis simultaneously with the solid analysis. The FSI module will take care of transferring the force from the fluid domain to the solid domain. From what you have mentioned so far in your post, I cannot tell if you expect the fluid forces to produce large or small deformations in the solid. If the solid deformations are expected to be small and the solid state of strain is expected to remain in the infinitesimal range, your current strategy of taking the CFD results and applying them to the solid boundary is okay. However, if the fluid forces produce large deformations, only an FSI analysis can give you the correct solution.

        If you would like to use the FEBio FSI solver, there is a tutorial available on this forum, check this post.

        Best,

        Gerard

        Comment

        • maryrose
          Member
          • May 2019
          • 32

          #5
          Hi Gerard,

          Do you mean that you get one single value for the entire surface? If that's the case this value will not be very useful to you.
          A vector for pressure force (Fp=[Fpx, Fpy, Fpz]) and a vector for the viscous force (Fv=[Fvx, Fvy, Fvz]) are calculated for each boundary segment (boundary element surface).

          Am I right in saying I would need to set the traction vector tn[i] in FETractionLoad as the traction vector calculated based on the fluid stress tensor?

          Many Thanks,
          Maryrose

          Comment

          • ateshian
            Developer
            • Dec 2007
            • 1824

            #6
            Hi Maryrose,

            If you already have the pressure force Fp and the viscous force Fv for each boundary segment, you can evaluate the traction vector as (Fp+Fv)/area, where area is the area of the corresponding boundary segment. In that case, you don't need to use the fluid stress tensor to evaluate the traction. (However, if it is not easy to evaluate the area of each segment, that option of using the fluid stress tensor remains valid).

            Best,

            Gerard

            Comment

            • maryrose
              Member
              • May 2019
              • 32

              #7
              Thanks Gerard, that will work for our CFD solver.

              I had another question relating to the traction vector, tn. For a solid only model, if I were to set a traction surface load in the input file, say <traction>10,20,30</traction>. Would the traction vector, tn, be set as this exactly?

              Many Thanks,
              Maryrose

              Comment

              • ateshian
                Developer
                • Dec 2007
                • 1824

                #8
                Hi Maryrose,

                The surface traction boundary condition has two entries, one is <scale> and the other is <traction>. The default for <scale> is 1. So if you keep this default value, then <traction> is equal to the traction vector exactly. Typically, the scale is used to ramp up the traction from 0 to the desired value using a load curve, since the deformations induced in the solid might be very large if applied in a single step otherwise.

                Best,

                Gerard

                Comment

                • maryrose
                  Member
                  • May 2019
                  • 32

                  #9
                  Hi Gerard,

                  I ran a solid simulation with an example traction vector of <traction>10,440,33</traction>. I printed the contents of the traction vector in FEBioMech/FETractionLoad.cpp, using the following:

                  std::cout << tn[i].x << tn[i].y << tn[i].z;

                  When I did this, the output showed that each component of the tn vector had the x value of my input traction vector (tn=[10, 10, 10]). Should it not be tn=[10, 440, 33]?

                  Many Thanks,
                  Maryrose

                  Comment

                  • ateshian
                    Developer
                    • Dec 2007
                    • 1824

                    #10
                    Hi Maryrose,

                    I tried the same thing you did but cannot reproduce your results. In my case the three (distinct) components of tn reflect the values that I entered in the input file. I was also able to confirm this by running FEBio through a debugger and pausing in FETractionLoad::Residual.

                    I have attached my test file (TestTraction.feb) in case it helps. Let me know what results you get with this file.

                    Best,

                    Gerard

                    Comment

                    • maryrose
                      Member
                      • May 2019
                      • 32

                      #11
                      Hi Gerard,

                      When I ran your test file, I got the same results as previous.

                      FETractionLoad.png
                      Traction Vector Result.png

                      Do you know where I went wrong with this?

                      Many Thanks,
                      Maryrose

                      Comment

                      • ateshian
                        Developer
                        • Dec 2007
                        • 1824

                        #12
                        Hi Maryrose,

                        Which version of FEBio are you using?

                        Also, can you please attach your copy of FETractionLoad.cpp? I can try it out on my end.

                        Best,

                        Gerard

                        Comment

                        • maryrose
                          Member
                          • May 2019
                          • 32

                          #13
                          Hi Gerard,

                          I'm using version 2.9.

                          I've attached my copy of FETractionLoad.cpp.

                          Many thanks,
                          Maryrose
                          Attached Files

                          Comment

                          • ateshian
                            Developer
                            • Dec 2007
                            • 1824

                            #14
                            Hi Maryrose,

                            Thanks for sending this file. I recompiled and ran FEBio2.9 with the FETractionLoad.cpp file you sent me and here is my output (with the model file that I created):

                            Code:
                            ===== beginning time step 1 : 0.1 =====
                            Reforming stiffness matrix: reformation #1
                            
                            ===== reforming stiffness matrix:
                            	Nr of equations ........................... : 12
                            	Nr of nonzeroes in stiffness matrix ....... : 78
                            
                            Node 1, Node ID: 2
                            tn[i] = (0.05, 0.025, -0.01)
                            
                            Node 2, Node ID: 6
                            tn[i] = (0.05, 0.025, -0.01)
                            
                            Node 3, Node ID: 8
                            tn[i] = (0.05, 0.025, -0.01)
                            
                            Node 4, Node ID: 4
                            tn[i] = (0.05, 0.025, -0.01)
                            So I still get the expected behavior (i.e., different components along x, y and z, as specified in the input file). I am a bit mystified at this point about the differences we are getting. Perhaps you can attach your model file so I can try that too?

                            Best,

                            Gerard

                            Comment

                            • maryrose
                              Member
                              • May 2019
                              • 32

                              #15
                              Hi Gerard,

                              I got the same result when running your .feb file and my model. I've attached my model file here.

                              Regards,
                              Maryrose
                              Attached Files

                              Comment

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