drwells / fiddle

4 stars 3 forks source link

Use 3D for invariants. #42

Closed drwells closed 2 years ago

drwells commented 2 years ago

@marshallrdavey should help me with this (he is quite good at the algebra).

Boyce pointed out that its typically, in 2D, easier to just use 3D models - this means some invariants need to be modified. For example, in 2D we should do I1 = tr(F^T F) + 1, so that we treat F as if it were 3x3 and the last row and column are 0 0 1.

Some notes from files on my laptop:

          for (unsigned int qp_n = 0; qp_n < stresses.size(); ++qp_n)
            {
              const auto &J        = me_values.get_det_FF()[qp_n];
              const auto &FF       = me_values.get_FF()[qp_n];
              const auto &I1       = me_values.get_first_invariant()[qp_n];
              const auto &FF_inv_T = me_values.get_FF_inv_T()[qp_n];
              // TODO make sure this is right in true 2D
              //
              // This should really use J^(-2/3) since Mike's model is based on
              // the modified invariants that do J^{-1/3} F in place of F for
              // the modified first invariant (only the deviatoric component).
              //
              // TODO double check that PP always equals the top left 2x2 of the
              // plane stress 3D version.

              // TODO use the 3D invariants: e.g., I1 / 3.0
              stresses[qp_n] = mu_s / J * (FF - (I1 / 2.0) * FF_inv_T);
            }