Hi,
I can just to add, this error happens when you use a specific operator, for example for Face, on Volume. Face operator can ask for normal, which makes no sense on Volume.
But yes, we tract operator names thanks to that snipped,
MoFEMErrorCode
VolumeElementForcesAndSourcesCoreBase::UserDataOperator::setPtrFE(
ForcesAndSourcesCore *ptr) {
MoFEMFunctionBeginHot;
if (!(ptrFE = dynamic_cast<VolumeElementForcesAndSourcesCoreBase *>(ptr)))
SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
"User operator and finite element do not work together");
MoFEMFunctionReturnHot(0);
}
which check type op, and the if not throw error as follows,
#define CATCH_OP_ERRORS(OP) \
catch (MoFEMExceptionInitial const &ex) { \
FUNCTION_NAME_WITH_OP_NAME(OP) << PETSC_FUNCTION_NAME; \
return PetscError(PETSC_COMM_SELF, ex.lINE, ss.str().c_str(), __FILE__, \
ex.errorCode, PETSC_ERROR_INITIAL, ex.what()); \
} \
catch (MoFEMExceptionRepeat const &ex) { \
FUNCTION_NAME_WITH_OP_NAME(OP) << PETSC_FUNCTION_NAME; \
return PetscError(PETSC_COMM_SELF, ex.lINE, ss.str().c_str(), __FILE__, \
ex.errorCode, PETSC_ERROR_REPEAT, " "); \
} \
catch (MoFEMException const &ex) { \
FUNCTION_NAME_WITH_OP_NAME(OP) << ex.errorMessage; \
SETERRQ(PETSC_COMM_SELF, ex.errorCode, ss.str().c_str()); \
} \
catch (std::exception const &ex) { \
std::string message("Error: " + std::string(ex.what()) + " at " + \
boost::lexical_cast<std::string>(__LINE__) + " : " + \
std::string(__FILE__) + " in " + \
std::string(PETSC_FUNCTION_NAME)); \
FUNCTION_NAME_WITH_OP_NAME(OP) << message; \
SETERRQ(PETSC_COMM_SELF, MOFEM_STD_EXCEPTION_THROW, ss.str().c_str()); \
}
Regards,
L