Issues when trying to set different BCs along different boundaries

You can shut off the deprecation warnings with the following:

import warnings
from ffc.quadrature.deprecation \
    import QuadratureRepresentationDeprecationWarning
warnings.simplefilter("ignore", QuadratureRepresentationDeprecationWarning)

TSFC is actually pretty easy to use, and doesn’t require re-building FEniCS. You just need to install a few extra things with pip3 for it to work:

pip3 install git+https://github.com/blechta/tsfc.git@2018.1.0
pip3 install git+https://github.com/blechta/COFFEE.git@2018.1.0
pip3 install git+https://github.com/blechta/FInAT.git@2018.1.0
pip3 install singledispatch networkx pulp

As for optimizing UserExpression, you can code your own C++ subclasses of Expression and use them in Python scripts, as in this example

although I’m not sure that counts as “trying to keep my program simple”.