[Libmesh-users] Non-conforming meshes

 [Libmesh-users] Non-conforming meshes From: - 2006-01-23 15:50:59 ```Hi, I am developing a Runge-Kutta discontinuous Galerkin (RKDG) solver to study compressible flow in turbomachines. By using this great library I was able to code the serial version of the 2D and the 3D solvers in less than an month. To compute steady-state in a turbomachines (3D) with a single row of blades we only need a domain with a single blade with appropriated periodic conditions. These periodic condition are imposed by applying a rotation of ( 360 deg / num_blades ) to the conservative variables and conservative fluxes. These periodic boundaries are geometrically equal but have different surface meshes. The periodic boundary conditions are handled quite easily in the serial version of the code because the RKDG only needs the numerical solution from the periodic neighbors at the surface integration points. I coded this by finding which element of the other periodic surface contains the desired surface integration point. The problem is when I try to perform the parallelization of the code. The parallel code that finds the periodic neighbors was almost equal to the serial version because the entire mesh is passed to all the processors. My BIG PROBLEM is how to get the solution at elements that contains the integration points in the periodic surfaces that belong to other processors but are not included the send_list of the processor? Best regards, João Henriques ```

 [Libmesh-users] Non-conforming meshes From: - 2006-01-23 15:50:59 ```Hi, I am developing a Runge-Kutta discontinuous Galerkin (RKDG) solver to study compressible flow in turbomachines. By using this great library I was able to code the serial version of the 2D and the 3D solvers in less than an month. To compute steady-state in a turbomachines (3D) with a single row of blades we only need a domain with a single blade with appropriated periodic conditions. These periodic condition are imposed by applying a rotation of ( 360 deg / num_blades ) to the conservative variables and conservative fluxes. These periodic boundaries are geometrically equal but have different surface meshes. The periodic boundary conditions are handled quite easily in the serial version of the code because the RKDG only needs the numerical solution from the periodic neighbors at the surface integration points. I coded this by finding which element of the other periodic surface contains the desired surface integration point. The problem is when I try to perform the parallelization of the code. The parallel code that finds the periodic neighbors was almost equal to the serial version because the entire mesh is passed to all the processors. My BIG PROBLEM is how to get the solution at elements that contains the integration points in the periodic surfaces that belong to other processors but are not included the send_list of the processor? Best regards, João Henriques ```
 [Libmesh-users] Non-conforming meshes From: John Peterson - 2006-01-23 17:08:16 ```Jo=E3o Henriques writes: >=20 > My BIG PROBLEM is how to get the solution at elements that contains = the=20 > integration points in the periodic > surfaces that belong to other processors but are not included the=20= > send_list of the processor? One way might be to build a std::vector of the appropriate length, and on each processor, insert the part of the solution from the periodic su= rface. Then, use a direct MPI call to communicate this vector to all processor= s, I believe MPI_AllGatherv, or similar. Of course, the structure of this= vector (the ordering) is up to you. I suggest mapping the global eleme= nt numbers of the surface elements to sequential entries in the vector, e.= g. suppose elements 12, 45, and 51 are on the boundary, and there are 4 so= lution values (a,b,c,d) for each of the elements. Then the entries in the vec= tor would be [0]=3D12a [1]=3D12b [2]=3D12c [3]=3D12d [4]=3D45a [5]=3D45b [6]=3D45c [7]=3D45d [8]=3D51a [9]=3D51b [10]=3D51c [11]=3D51d Of course, you will also need to store the mapping: [12, 45, 51] so you know which offset into the vector to use. What do = you think? It should work in serial (but be a bit slower than your origina= l code) as well. -J ```