To follow up on this thread, I have not had much progress finding a solution to this problem. It seems no matter what I try, the culvert entrance node will have a depressed free surface and the exit node with have a super-elevated free surface. The phenomenon causes the culvert flow to be self-limited, biasing the culvert flow low - significantly in some cases. The culvert flow can be more sensitive to this error than even to the assigned loss coefficients!
The problem is more noticeable the higher the flow rate is. Spreading the flow across several nodes (i.e., turning one culvert into several sub-culverts) helps a bit, but is awkward and doesn't totally fix the problem.
Currently, my next approach will be to work-around the problem by having the culvert flow equations use the surface elevation from a neighboring node (i.e., a node where the free surface is not perturbed by the presence of the culvert) rather than the node assigned to the culvert entrance/exit. Does anyone have guidance on how to modify the BUSE.F subroutine to achieve this goal?
I see that the subroutine defines the free surface elevations at the entrance (S1) and exit (S2) using the P_DMAX and P_DMIN variables, but I'm unclear on how:
S1=P_DMAX(S1)+P_DMIN(S1)
S2=P_DMAX(S2)+P_DMIN(S2)
If someone could explain to me what's going on here, perhaps I could hack the subroutine to have it retrieve elevations from manually-specified nodes (for example by hard-coding in the neighboring node's global index).
Thanks so much for any input,
Ben