I was preparing my contribution for preCICE-minisymposium during the ECCOMAS conference and came accross the possibility of the scaled-consistent mapping constraint in the preCICE version 2.3, which I overlooked until now but can be interesting for me. I was wondering how the integral value is calculated (with which quadrature rule) and how the mapping matrix is affected by this constraint (for consistent mapping: each row sum equals one; for conservative mapping: each column sum equals one). Can be integral value also be set manually (in the config file)?
Thanks in advance for the information!
I was not involved in the development of this feature, but here are a few starting points:
I was one of the developers of the feature but it has been a long time. Let me try to answer some of your questions.
- Integral is calculated by simple area-weighted averaging. A fancier quadrature rule might be better indeed but currently it is a straightforward calculation. In case there are no connectivity elements associated with the interface, the integral is simply the sum of nodal values.
- Mapping matrix is a little bit trickier. So idea behind is that: Apply consistent mapping → Calculate surface integral → Scale the values. Therefore, from practical point of view, the mapping matrix is same as the Consistent mapping one. I am not entirely sure its consequences from mathematical point of view. This publication might give more insight about the mathematical indications (we did not follow this paper one-to-one)
- No, it is not possible to set this integral value manually. Especially not in the config file since the integral value would probably depend on the current data values in the interface. In order to manipulate the data manually, you can use actions in preCICE.
I hope this is somewhat helpful. Please let me know if I can do more.
Mathematically, it should be like this:
We start with a consistent mapping from mesh B to mesh A:
v_A = M \cdot v_B
As the mapping is consistent, each row of M sums up to 1.
Now, we do a scaling as a post-processing. Mathematically this means multiplication with a diagonal matrix D.
v_A = D \cdot M \cdot v_B
And the scaling is constructed in such a way that the overall mapping becomes conservative, meaning each column of D \cdot M sums up to 1.
@JurgenKersschot Have you seen the (experimental) direct mesh access option already? IIRC, you were interested in such a feature at some point for your DG code.
Yes, Thank you all for the information! Yes, I saw the direct access feature, in the meantime I came up with a work-around, but it is on my to-do list to try the direct access feature out as well!