diff --git a/src/quasiconvexity-test-micromorphic.cc b/src/quasiconvexity-test-micromorphic.cc index 2dc74d0f5b22705dfa58c258d4448afee49bfa46..98dbaf1b62266a8e87fd3e0f1c5237c368f24a1a 100644 --- a/src/quasiconvexity-test-micromorphic.cc +++ b/src/quasiconvexity-test-micromorphic.cc @@ -224,7 +224,34 @@ int main (int argc, char *argv[]) try if (parameterSet.hasKey("initialIteratePython")) { - DUNE_THROW(NotImplemented, "initialIteratePython is not implemented"); +#if 1 + auto initialDisplacement = [&x0, F0](const FieldVector<double,2>& x) { + + auto l1 = 1.0 / sqrt(x0); + int numStripes = 6; + + std::array<int,2> p = {std::round(x[0] * numStripes), + std::round(x[1] * numStripes)}; + + double delta = 0.5; + double l = ((p[0]+p[1])%2) ? delta : -delta; + return l*F0; + }; + + Dune::Functions::interpolate(feBasis, x, initialDisplacement); +#else + // The python class that implements the Dirichlet values + Python::Module initialIterateModule = Python::import(parameterSet.get<std::string>("initialIteratePython")); + + // Method of that python class + auto pythonInitialIterate = Python::makeFunction<FieldMatrix<double,dim,dim>(const FieldVector<double,dim>&)>(initialIterateModule.get("f")); + + Functions::interpolate(feBasis, x, pythonInitialIterate); +#warning Set the correct Dirichlet values! +#endif + auto zeroMatrix = [](const FieldVector<double,2>& x) { return FieldMatrix<double,2,2> {0}; }; + // Write the correct Dirichlet boundary values + Dune::Functions::interpolate(feBasis, x, zeroMatrix, dirichletDofs); } if (parameterSet.hasKey("initialIterateFile"))