diff --git a/dune/gfe/assemblers/surfacecosseratstressassembler.hh b/dune/gfe/assemblers/surfacecosseratstressassembler.hh index bafe6bf7ac9263b6980e1582030f1e4d09f26ce3..56ea6d0b36eae127f9a12b0ed0315403f514320e 100644 --- a/dune/gfe/assemblers/surfacecosseratstressassembler.hh +++ b/dune/gfe/assemblers/surfacecosseratstressassembler.hh @@ -6,7 +6,6 @@ #include <dune/fufem/boundarypatch.hh> #include <dune/gfe/linearalgebra.hh> -#include <dune/gfe/functions/localgeodesicfefunction.hh> #include <dune/gfe/spaces/rotation.hh> #include <dune/matrix-vector/transpose.hh> @@ -18,10 +17,11 @@ namespace Dune::GFE \tparam BasisOrderD Basis used for the displacement \tparam BasisOrderR Basis used for the rotation + \tparam LocalGFEFunctionR Geometric FE function for the rotations \tparam TargetSpaceD Target space for the Displacement \tparam TargetSpaceR Target space for the Rotation */ - template <class BasisOrderD, class BasisOrderR, class TargetSpaceD, class TargetSpaceR> + template <class BasisOrderD, class BasisOrderR, class LocalGFEFunctionR, class TargetSpaceD, class TargetSpaceR> class SurfaceCosseratStressAssembler { public: @@ -238,9 +238,7 @@ namespace Dune::GFE for (std::size_t i=0; i<localConfigurationRot.size(); i++) localConfigurationRot[i] = rot[localViewOrderR.index(i)[0]]; //localViewOrderR.index(i) is a multiindex, its first entry is the actual index - const auto scalarBasisR = Functions::subspaceBasis(basisOrderR_,0); - typedef LocalGeodesicFEFunction<decltype(scalarBasisR), TargetSpaceR> LocalGFEFunctionType; - LocalGFEFunctionType localGeodesicFEFunction(lFEOrderR,localConfigurationRot); + LocalGFEFunctionR localGeodesicFEFunction(lFEOrderR,localConfigurationRot); auto evaluateAtPoint = [&](FieldVector<double,3> pointGlobal, FieldVector<double,3> pointLocal3d) -> FieldMatrix<double,dim,dim> { Dune::FieldMatrix<double,dim,dim> nablaTheta; diff --git a/src/film-on-substrate-stress-plot.cc b/src/film-on-substrate-stress-plot.cc index 7ccbee584c3e015b47d71a758b6f1f49740f0403..2294456c9a8d5bba7a8640016d8f4ca09409339c 100644 --- a/src/film-on-substrate-stress-plot.cc +++ b/src/film-on-substrate-stress-plot.cc @@ -43,6 +43,7 @@ #include <dune/gfe/filereader.hh> #include <dune/gfe/assemblers/surfacecosseratstressassembler.hh> +#include <dune/gfe/functions/localgeodesicfefunction.hh> #include <dune/gfe/spaces/rotation.hh> // grid dimension @@ -253,7 +254,11 @@ int main (int argc, char *argv[]) try ///////////////////////////////////////////////////////////// int quadOrder = parameterSet.hasKey("quadOrder") ? parameterSet.get<int>("quadOrder") : 4; - auto stressAssembler = GFE::SurfaceCosseratStressAssembler<decltype(basisOrderD),decltype(basisOrderR), FieldVector<double,dim>, GFE::Rotation<double,dim> > + const Functions::LagrangeBasis<GridView,rotationOrder> scalarBasisR(gridView); + + using LocalGFEFunctionR = GFE::LocalGeodesicFEFunction<decltype(scalarBasisR),GFE::Rotation<double,dim> >; + + auto stressAssembler = GFE::SurfaceCosseratStressAssembler<decltype(basisOrderD),decltype(basisOrderR), LocalGFEFunctionR, FieldVector<double,dim>, GFE::Rotation<double,dim> > (basisOrderD, basisOrderR); diff --git a/test/surfacecosseratstressassemblertest.cc b/test/surfacecosseratstressassemblertest.cc index be51c4270318df14f775e8084825ad47147eba4c..7c7aacfa12b166532bda3aabcb812fb65513b965 100644 --- a/test/surfacecosseratstressassemblertest.cc +++ b/test/surfacecosseratstressassemblertest.cc @@ -31,6 +31,7 @@ #include <dune/gfe/filereader.hh> #include <dune/gfe/assemblers/surfacecosseratstressassembler.hh> +#include <dune/gfe/functions/localgeodesicfefunction.hh> #include <dune/gfe/spaces/rotation.hh> #include <dune/matrix-vector/transpose.hh> @@ -237,7 +238,16 @@ int main (int argc, char *argv[]) ///////////////////////////////////////////////////////////// auto quadOrder = 4; - auto stressAssembler = GFE::SurfaceCosseratStressAssembler<decltype(basisOrderD),decltype(basisOrderR), FieldVector<double,dim>, GFE::Rotation<double,dim> > + + const Functions::LagrangeBasis<GridView,rotationOrder> scalarBasisR(gridView); + + using LocalGFEFunctionR = GFE::LocalGeodesicFEFunction<decltype(scalarBasisR),GFE::Rotation<double,dim> >; + + auto stressAssembler = GFE::SurfaceCosseratStressAssembler<decltype(basisOrderD), + decltype(basisOrderR), + LocalGFEFunctionR, + FieldVector<double,dim>, + GFE::Rotation<double,dim> > (basisOrderD, basisOrderR); std::shared_ptr<Elasticity::LocalDensity<dim,ValueType> > elasticDensity;