Need some hint to model an Earth Air Heat Exchanger #23441
-
Hello everybody, I am currently working on an Earth Air Heat Exchanger model: the soil around the pipe is meshed with 3D elements and will solve the soil temperature diffusion (variable "ts"). Inside the pipe, the air is circulating in the direction Z (see figure which is a small part of the entire mesh) and I would like to implement the fluid one dimensional circulation inside the pipe by 1D elements using my own kernels (solving for the air velocity "vz", air pressure "p" and air temperature "ta"). In the air energy equation, associated to the variable "ta", I have a convective term of the form h ( ta - ts_wall_mean) with ts_wall_mean = (1/2pi) integrate (theta=0->2pi) ts dtheta so I declared "ts" inside the pipe 1D elements. My problem is to implement the constraint between "ts" in the pipe 1D elements and its counterpart in the soil 3D elements so that "ts" in the pipe is the mean value of "ts" around the wall soil boundary. I had a look at LinearNodalConstraint but I am not able to get the nodes id of the pipe wall/soil efficiently. Does anyone can provide me some hint ? |
Beta Was this translation helpful? Give feedback.
Replies: 3 comments 1 reply
-
Hello I think the best option here will be to look at thermal contact options. I m less familiar with them unfortunately. Without this, or if it doesnt pan out, I would get started with an approach that does not properly compute the Jacobian, and solve with PJFNK, just to get started.
if this works, great. Other idea, easier to get started: Guillaume |
Beta Was this translation helpful? Give feedback.
-
Dear Guillaume, Thank you for your answer. I tested a solution close to your first suggestion:
If the NearestNodeValueAux kernel is commented I correctly get the mean value of ts on the wall, but when I decomment this NearestNodeValueAux, I get the following error
because "PIPE" is not a boundary..... I had a look at thermal contact but it seems also defined only for surfaces boundaries. Your second idea (3D pipe) was my first idea ;-) , but I want to use classic fluid correlations for 1D flow in pipes (simplified heat equation with experimental correlations for head loss, convection versus Nusselt and Reynolds etc....) . I keep this solution in mind if the "good" previous approach fails. Is there any way of creating a nodeset associated to the block of EDGE2 elements of "PIPE" ? |
Beta Was this translation helpful? Give feedback.
-
Dear Guillaume, After a long night making nightmares about MOOSE ;-) I finally found an easy way to get the model work. The air flow is solved in a small layer (called PIPE) and meshed with 3D elements and just near the soil interface (see figure below). To account for the convective term, I developed a small Kernel accounting for the width of the interface (I don't know if this kind of kernel already exists but I prefer having my own one):
I ran this kernel for ts and ta :
where "ts_mean_pipe" is an auxvariable calculated as the mean value of "ts" in PIPE (integrating in theta and r only) calculated with a "NearestRadiusLayeredAverage" user object coupled to a "SpatialUserObjectAux" auxkernel. The results were OK. There is no problem to add some new kernels solving the 1D flowing for the air pressure and air velocity in PIPE by using some kernel having a residue of the form:
since 2 (=Z) is the direction of the air flow (may be generalized by passing a flow direction vector as argument of the kernel). The thin width of the interface ensures no r dependence. Well, I would like to thank you for all your answers, the forum keeps alive because cool developers spend some time answering newbies. Best regards. |
Beta Was this translation helpful? Give feedback.
In 1)
You are using an auxiliary variable to store the output of the layered average. You dont need to do this, you can query those values directly in your kernel.
If you want to use an auxiliary variable use a block instead of a boundary restriction. Your mesh is not a boundary for the pipe, it s a block
I m afraid the EDGE2 pipe is currently a block and there is no lower dimensional boundary to create from it within MOOSE
You would have to redo your mesh to make a nodeset as well as a block (to solve equations)