voidPresetNodalBC::computeValue(NumericVector<Number> & current_solution){ dof_id_type & dof_idx = _var.nodalDofIndex(); _qp = 0; current_solution.set(dof_idx, computeQpValue());}
I think your understanding is correct: http://www.mooseframework.org/moose/source/bcs/PresetBC.html.
Understanding the call sequence can be difficult, but most things end up being called by some sort of compute object, in this case
it is the ComputeResidualThread.
PresetNodalBC::computeQpResudual calls computeValue
NodalBC::computeResidual calls computeQpResidual
ComputeResidualThread::onBoundary calls computeResidual
Although it doesn't help much for this case, looking at the inheritance diagram sometimes helps with this sort of digging:
http://mooseframework.org/docs/doxygen/moose/classPresetBC.html.
You are correct with where PresetBC is called, I gave you where DirichletBC is called by mistake.
When BCs are applied on surfaces with shared nodes, we do not guarantee which BC will take priority. One of them will win, but the winner is not guaranteed. To make certain that the BC you desire is applied you might consider removing the "x" node from surfaces 1 and 2 and create a nodeset that contains only the "x" node, this will allow you to set the correct BC at the location.
You probably can use the MeshModifiers (http://www.mooseframework.org/moose/syntax/MeshModifiers/index.html)
to add this nodeset; however, I am not certain.
To view this discussion on the web visit https://groups.google.com/d/msgid/moose-users/cf8bc540-1d2a-4b06-b4f8-8d1083bbce2b%40googlegroups.com.