-
Notifications
You must be signed in to change notification settings - Fork 708
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MatrixFree::loop with hp not working #12102
Comments
As far as I remember, we do not support MatrixFree+hp+DG(aka. MatrixFree::loop). But let me check tomorrow what is missing for your use case (I have recently misused and extended the infrastructure so that we can do MatrixFree+DG methods also for mixed meshes). For sake of simplicity, could you post the complete test program. Thx! |
Here is the commit containing the file. Like I said if you use distributed Vector then the code crashes even earlier, even one processor. It's not a big for me if don't support it but it would be great if we had an assert in the code. |
It's right, we don't support it right now, but I think the combination |
I see that makes sense. Personally, I only care about |
Yes. This is what I also think: in the case of mixed meshes we know that both sides have the same number of quadrature points, here we can also simply decide which quadrature rule to use. This is what I was referring to as "misusing" (i.e. a dirty specialization).
Let me check where you are thrown out. I'll get to you back later! |
I am kicked out here (during setup of the mapping data in the quadrature points): dealii/include/deal.II/matrix_free/mapping_info.templates.h Lines 2084 to 2087 in 42e48fa
which makes sense since Personally, I would like to keep the code here as it is, but throw out any faces and face-face pairs that have on one side a |
A face is created here: dealii/include/deal.II/matrix_free/face_setup_internal.h Lines 947 to 1021 in 42e48fa
and they are inserted into the global data structures here: dealii/include/deal.II/matrix_free/face_setup_internal.h Lines 770 to 935 in 42e48fa
I am happy to help out. However, we should agree if the proposed solution is acceptable or a bit too hacky... |
Yes, I think that makes sense. Another way would be to allow MatrixFree to take a predicate similar to what I did for CUDA #11780 This allows me to only loop over cells of a given fe index and thus, I can skip all the cells with FE_Nothing. For CUDA it was pretty easy to do since we create a graph that contains all the cells before we start looping and so the predicate determines which cells are added to the graph. |
This is a bit more complicated here, since we also have to take care of faces. But let's wait for @kronbichler how he would tackle this issue and/or he agrees. |
May I ask: I consider multi-physical problems, where the solution has a jump over the interface. Therefore I use the comibantion FE_QxFE_Nothing and FE_NothingxFE_Q (according to step-46). At the interface the coupling is described by an nonlinear Neumann condition. So this would be a missing part for the matrix-free implementation of my problem right? In that case I would also be interested in fixing that issue. |
Yes, you will hit the same problem. We need to decide how we should fix this. @kronbichler any preference? Should we ignore FE_Nothing faces in |
I am also interested in this feature and thought about tackling it in the near future. |
I am also interested in this feature. I want to evaluate a boundary condition on faces that separate |
Let us remove this from the current release milestone. It would be great to soon provide a fix, but I fear we won't manage to do it in the next few days. |
In #14014, we said that the problem I reported here is fixed but we have only partially fix it. The problem appears if you use a different quadrature for dealii/include/deal.II/matrix_free/mapping_info.templates.h Lines 1880 to 1883 in 1c182b6
because |
@Rombur Do you have a small test? |
No, I can try to write one tomorrow |
@Rombur Ping? Can I propose that we postpone this issue to the next release? |
Let us postpone this issue; while we will address it, it has been open long enough that it will not make a difference. After all, the short-term fix would have been a better assertion. |
I am successfully using
MatrixFree::cell_loop()
withFE_Nothing
and I wanted to useMatrixFree::loop()
to impose Neumann boundary condition but that does not work. Is it something that we support or not? As an example of the problems I've encountered, I've modifiedmatrix_free/matrix_vector_hp.cc
using the following patch:I get the following error:
In my own code, I use
LA::distributed::Vector
instead of serialVector
. In that case, I get an error earlier fromdealii::internal::MatrixFreeFunctions::DoFInfo::compute_tight_partitioners
.Should I expect code that works with
cell_loop
to also work withloop
or not?The text was updated successfully, but these errors were encountered: