I hate to have to follow up here again, but perhaps it will serve to aid for posterity’s sake.
I have followed the example that you use for the fault setup and material setup in the MMS testing where it was relevant. My example compiles, however for the test cases where the field discretization differs from what is set as the default value (say for an element of type TriP2), it does not appear to update the neumann boundary condition. A hard hack where TestPoroelasticity.cc was edited to print out basisOrder and quadOrder values in then loop where the setAuxiliarySubfieldDiscretization() call is given for the neumann BC produces the correct values, however these do not seem to be given to the neumann BC. I surmise this from the outputted error message (an example):
2) test: pylith::mmstests::TestIsotropicLinearPoroelasticity_Terzaghi_QuadQ3::testResidual (E)
uncaught exception of type std::exception (or derived).
- Quadrature order of subfields in auxiliary field 'NeumannTimeDependent auxiliary field' must all match the quadrature order in the target subfields 'solution'. Expected quadrature order of 3, but subfield 'initial_amplitude' has a quadrature order of 1.
This error message is produced by pylith::topology::FieldOps::checkDiscretization(solution, *auxiliaryField); within the pylith::bc::NeumannTimeDependent::createAuxiliaryField(const pylith::topology::Field& solution, const pylith::topology::Mesh& domainMesh) function from NeumannTimeDependent.cc.
Is there some call to setup a NeumanTimeDependent BC that I am missing? I have included the specific MMS test file (TestIsotropicLinearPoroelasticity_Terzaghi.cc), as well as all the relevant .cc and header files up the chain, following your MMS example from Incompressible Elasticity. I don’t entirely understand the process followed in the overall MMS test structure, so any help would be appreciated.
RobertTestIsotropicLinearPoroelasticity_Terzaghi.zip (9.7 KB)