I just figured out what is going on in coupled BC.
In openfoam, face addressing (owner, neighbour ) is different from lduAddressing (lower, upper). There are two implementation in OFv1706. One is `fvMeshLduAddressing`, another one is `fvMeshPrimitiveLduAddressing`. 1. in `fvMeshLduAddressing`, lower==owner[0:nInternalFaces], upper==neighbour; 2. in `fvMeshPrimitiveLduAddressing` which is used in overset, there can be more elements in lower and upper. `fvMeshLduAddressing` is most commonly used. Because of LDU addressing, the function of lduMatrix is limited and it is designed to be like that. lduMatrix is a scalar matrix which only stores none zero coefficients in `upper_`, `lower_`, `diag_`. So the coupled BC cannot be represented in lduMatrix because of this limitation. So the coupled BC is implementated like this: the coupled BC related coefficients are stored in fvMatrix<T> as `internalCoeffs_` and `boundaryCoeffs_`. And the type is FieldField<Field,T>. Now all the coefficients can be accessed in fvMatrix<T>. And the coupled BC (both cyclic BC and processor BC) can be handled in an unified manner. However, I am still confusing about how fvVectorMatrix are solved in segrated or coupled manner. The code is very confusing.:confused: |
Quote:
I don't get the weight business with gradientInternalCoeffs, valueInternalCoeffs etc. It is irrelevant for me, I exactly know the fvMatrix coefficients in terms of upper, diagnol and source, I just want to run the darn thing in parallel |
All times are GMT -4. The time now is 11:57. |