2814 auto setup_sdf = [&]() {
2815 boost::shared_ptr<ContactOps::SDFPython> sdf_python_ptr;
2817 auto file_exists = [](std::string myfile) {
2818 std::ifstream file(myfile.c_str());
2825 char sdf_file_name[255] =
"sdf.py";
2827 sdf_file_name, 255, PETSC_NULL);
2829 if (file_exists(sdf_file_name)) {
2830 MOFEM_LOG(
"EP", Sev::inform) << sdf_file_name <<
" file found";
2831 sdf_python_ptr = boost::make_shared<ContactOps::SDFPython>();
2832 CHKERR sdf_python_ptr->sdfInit(sdf_file_name);
2833 ContactOps::sdfPythonWeakPtr = sdf_python_ptr;
2835 MOFEM_LOG(
"EP", Sev::warning) << sdf_file_name <<
" file NOT found";
2837 return sdf_python_ptr;
2839 auto sdf_python_ptr = setup_sdf();
2842 auto setup_ts_monitor = [&]() {
2843 boost::shared_ptr<TsCtx>
ts_ctx;
2845 if (set_ts_monitor) {
2847 auto monitor_ptr = boost::make_shared<EshelbianMonitor>(*ep_ptr);
2851 return std::make_tuple(
ts_ctx);
2854 auto setup_snes_monitor = [&]() {
2857 CHKERR TSGetSNES(ts, &snes);
2858 PetscViewerAndFormat *vf;
2859 CHKERR PetscViewerAndFormatCreate(PETSC_VIEWER_STDOUT_WORLD,
2860 PETSC_VIEWER_DEFAULT, &vf);
2864 void *))SNESMonitorFields,
2869 auto setup_section = [&]() {
2870 PetscSection section_raw;
2873 CHKERR PetscSectionGetNumFields(section_raw, &num_fields);
2874 for (
int ff = 0; ff != num_fields; ff++) {
2882 auto set_vector_on_mesh = [&]() {
2886 CHKERR VecGhostUpdateBegin(x, INSERT_VALUES, SCATTER_FORWARD);
2887 CHKERR VecGhostUpdateEnd(x, INSERT_VALUES, SCATTER_FORWARD);
2891 auto setup_schur_block_solver = [&]() {
2892 CHKERR TSAppendOptionsPrefix(ts,
"elastic_");
2893 CHKERR TSSetFromOptions(ts);
2896 boost::shared_ptr<EshelbianCore::SetUpSchur> schur_ptr;
2909 return std::make_tuple(setup_sdf(), setup_ts_monitor(),
2910 setup_snes_monitor(), setup_section(),
2911 set_vector_on_mesh(), setup_schur_block_solver());
2913 return std::make_tuple(setup_ts_monitor(), setup_snes_monitor(),
2914 setup_section(), set_vector_on_mesh(),
2915 setup_schur_block_solver());