Conversation
Could you not implement that via calls to separate I guess part of the dislike is that now the order of |
|
Can you outline for posterity here why non-sequential is important? Also probably should be in the docs why you might need to do this |
|
Codecov is correct - this should be tested, if we can cook a representative reason why we would want this |
That causes issues when, for example, I need to run one suboperator first in a MatCeed MatMult. In order to do that with separate operators, I would have to overload the MatCeed functions, when all I really need is to know that the suboperators will execute in order. |
|
The particular use case is that I need to project two quantities from different mesh elements to the same set of points. I then need to use both of those as inputs to the "real" qfunctions -- one that interpolates the computed output to each of the two sets of mesh nodes. That's a use-case that's fundamentally incompatible with the way that our at points operators work -- it requires 2 "setup" operators (one for each set of mesh elements) that just interp to points, then 2 "output" operators (again, one for each set of mesh elements) to compute the physics and interp-transpose back to the mesh nodes. But, the math is perfectly well-defined if that sequence is allowed. |
Yeah, I didn't add tests yet. I think that splitting the input and output parts of the operator like described above (but with only one mesh element set) would be a fine test. |
059c0f3 to
4543c65
Compare
|
Was that ref bug present in HIP or Sycl? |
f237a56 to
dad8f31
Compare
good question -- there were actually a few more cases I missed (none in Sycl though, I don't think it ever got the field ordering optimization) |
a366d8a to
b681510
Compare
|
Hmm, I'm realizing that this doesn't fix all my issues, especially when assembling. I have some additional ideas I'm workshopping |
|
I still think that this MR is useful, but I think I need a more fundamental solution long-term. See #1931 for my best idea. |
…o non-active outputs
b681510 to
11a8069
Compare
These are changes needed to support functionality in Ratel (https://gitlab.com/micromorph/ratel/-/merge_requests/1213).
First, I need to be able to turn off the parallel sub-operator functionality.
The particular use case is that I need to project a quantity from different mesh elements to the same set of points. The points here are "shared" between the two sides - they have the same quadrature weights and areas, etc. I then need to use both of those at-points vectors as inputs to the "real" QFunctions which use each of the interpolated values to compute the physics at quadrature points. These "real" QFunctions then interpolate back to each of the two sets of mesh elements. That's a use-case that's fundamentally incompatible with the way that our at points operators work, which group points by which element they are inside of. We strictly need 2 "setup" operators (one for each set of mesh elements) that just interp to points, then 2 "output" operators (again, one for each set of mesh elements) to compute the physics and interp-transpose back to the mesh nodes. There is never a situation where I would only run the "setup" or "output" -- they are explicitly coupled. But, the math is perfectly well-defined if that sequence is allowed.
Second, the linear assemble diagonal (and maybe also the normal assembly) were trying to write to passive outputs (particularly with CeedEvalNone), which is incorrect. This fixes that by adding an additional flag to the QFunction builder function.
Specifically, previously the point loop would have something like this:
Here,
d_out_1is a passive (CeedEvalNone`) output. We should instead just not include inactive outputs in the QFunction build routine.