diff --git a/src/cosserat-continuum.cc b/src/cosserat-continuum.cc index 9f2785521d05882968e95e5da808c2be9d70f9cb..58aafbd80e36fd0b72e211edd8d605dfd0123e4d 100644 --- a/src/cosserat-continuum.cc +++ b/src/cosserat-continuum.cc @@ -298,16 +298,27 @@ int main (int argc, char *argv[]) try } // Assembler using ADOL-C - using LocalEnergy = std::conditional<dim==dimworld, - CosseratEnergyLocalStiffness<FEBasis,3,adouble>, - NonplanarCosseratShellEnergy<FEBasis,3,adouble> >::type; - - LocalEnergy cosseratEnergyADOLCLocalStiffness(materialParameters, - &neumannBoundary, - neumannFunction, - volumeLoad); + using LocalEnergyBase = LocalGeodesicFEStiffness<FEBasis,RigidBodyMotion<adouble,3> >; + + std::shared_ptr<LocalEnergyBase> cosseratEnergyADOLCLocalStiffness; + + if (dim==dimworld) + { + cosseratEnergyADOLCLocalStiffness = std::make_shared<CosseratEnergyLocalStiffness<FEBasis,3,adouble> >(materialParameters, + &neumannBoundary, + neumannFunction, + volumeLoad); + } + else + { + cosseratEnergyADOLCLocalStiffness = std::make_shared<NonplanarCosseratShellEnergy<FEBasis,3,adouble> >(materialParameters, + &neumannBoundary, + neumannFunction, + volumeLoad); + } + LocalGeodesicFEADOLCStiffness<FEBasis, - TargetSpace> localGFEADOLCStiffness(&cosseratEnergyADOLCLocalStiffness); + TargetSpace> localGFEADOLCStiffness(cosseratEnergyADOLCLocalStiffness.get()); GeodesicFEAssembler<FEBasis,TargetSpace> assembler(gridView, &localGFEADOLCStiffness);