I have a 3D NS problem. when I set everything up to run in OpenFOAM I have 4 dependent variables u,v,w,p just like I expect. Everything solves correctly. However when I try to use the built in laminar model with the built in solver when parseprob is called it adds a new dependent variable __lm1_p and displays the message "Adding prssure integral constraint."
Is it possible for me to change my setup to force parseprob to not add that integral constraint? What is it? Why does it not get added when using OpenFOAM.
It seems to have something to do with the boundary conditions. I think I inadvertently setup some boundary conditions that didn't make sense. Maybe no slip everywhere, but it seems like even after I fixed the boundary conditions the extra dependent variable was still there.
The "__lm#_dvar" variables refer to lagrange multipliers for depentent variable "dvar", which are used to implement boundary and subdomain intergral constraints. Effectively what this does is to add rows/columns to your system matrix which couples the affected degrees of freedom so as to satisfy prescribed integral value(s).
The "parsephys" (called by "parseprob") tries to check and validate your problem and adds these if it deems necessary. The issue is that solutions to stationary/static problems without any fixed value (Dirichlet) boundary conditions are only unique up on an arbitrary constant which the solvers typically don't like. For example, a static heat transfer problem with only flux boundary conditions will have this issue, and for the driven cavity flow problem where only velocities are prescribed the pressure is not uniquely defined. So to fix this an integral constraint using lagrange multipliers is added (by default fixing the mean value zero).
To avoid the automatic addition of this constraint you can either add it manually (before parsing), or introduce a pressure boundary condition, or fix the pressue in at least one point.
It might be possible to add and automatically remove it afterwards in the future, but currently the solver has no information about what has been added by parsephys/prob or by the user, so it will not remove anything just in case.