CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > Software User Forums > OpenFOAM > OpenFOAM Meshing & Mesh Conversion

[mesh manipulation] Arbitrary Mesh Interface (AMI) algorithm/ implementation

Register Blogs Community New Posts Updated Threads Search

Like Tree2Likes
  • 1 Post By crubio.abujas
  • 1 Post By crubio.abujas

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old   March 17, 2021, 08:19
Default Arbitrary Mesh Interface (AMI) algorithm/ implementation
  #1
New Member
 
Jeongbin Park
Join Date: Mar 2021
Location: USA
Posts: 3
Rep Power: 5
jbjb is on a distinguished road
Hi everyone,

I'm writing this post because there is something I don't understand about actual implementation of the AMI method. I really want to know how exactly this method is implemented in the simulation.

To my understanding, the AMI method connects disconnected regions by interpolating values at the face of shadow(or target) region using values at the face of master(or source) region. But as we store variables at cell centers, I wonder how we get the variable values at the cell faces of master region at each time step.
In other words, how can we get the values at the faces of master region which are used for the interpolation?
(I'm studying a propeller tutorial, so here the master region can be the rotating region, and the shadow region can be the static region)

I really hope someone can let me understand the method.
Thank you very much.
jbjb is offline   Reply With Quote

Old   March 17, 2021, 13:57
Default
  #2
Senior Member
 
Carlos Rubio Abujas
Join Date: Jan 2018
Location: Spain
Posts: 127
Rep Power: 9
crubio.abujas is on a distinguished road
Hi Jeongbin,

Forget for a second the AMI patch. Every face has one and only one cell assignated as owner, and may have one cell assignated as neighbour (in the case of an interior face) or not (in the case of a boundary face).

For an interior face, this relation owner-neighbour creates an link between these two cells, so if you need to get the pressure in the face you can interpolate among these two values (using some scheme predefined) and get the value at the face center.

The AMI boundary condition is amied to transform a boundary condition (a face without any neighbour) into an "interior" cell with one or more neighbour and define the rules to establish their relation. Typically it uses area weights to determine how much of which face goes to which one, but I cannot tell you the exact details of how it is implemented (you can try checking it in the source code).

I hope that helps!
jbjb likes this.

Last edited by crubio.abujas; March 18, 2021 at 07:51.
crubio.abujas is offline   Reply With Quote

Old   March 17, 2021, 15:04
Default
  #3
New Member
 
Jeongbin Park
Join Date: Mar 2021
Location: USA
Posts: 3
Rep Power: 5
jbjb is on a distinguished road
Quote:
Originally Posted by crubio.abujas View Post
Hi Jeongbin,

Forget for a second the AMI patch. Every face has one and only one face assignated as owner, and may have one face assignated as neighbour (in the case of an interior face) or not (in the case of a boundary face).

For an interior face, this relation owner-neighbour creates an link between these two cells, so if you need to get the pressure in the face you can interpolate among these two values (using some scheme predefined) and get the value at the face center.

The AMI boundary condition is amied to transform a boundary condition (a face without any neighbour) into an "interior" cell with one or more neighbour and define the rules to establish their relation. Typically it uses area weights to determine how much of which face goes to which one, but I cannot tell you the exact details of how it is implemented (you can try checking it in the source code).

I hope that helps!
Hi Carlos!

First of all, thank you for your answer.

If I understood correctly, what you are saying is that the AMI kinda couples two boundaries with an interpolation (using area weights or something) and treats them as an interior face.
But I haven't solved my curiosity yet..

So.. values at an interior face is evaluated by a predefined interpolation method that uses two cell-centered values, so that we can set up a system of equations using FVM.

So, I think we definitely need to know the values at each face.
To set up a system of equations of a problem which contains the AMI boundary, how do we get the face values for using FVM?
Is it just like.. the face values in one region is evaluated by weighted-sum of cell-centered values of intersecting cells in another region, and vice versa?

If I didn't understand the concepts well, please let me know.
Also, could you give me a hint on which part of the source code I should check?
I checked the source code, but I couldn't find what I wanted to know..

Thanks again for your help!
jbjb is offline   Reply With Quote

Old   March 18, 2021, 05:26
Default
  #4
Senior Member
 
Carlos Rubio Abujas
Join Date: Jan 2018
Location: Spain
Posts: 127
Rep Power: 9
crubio.abujas is on a distinguished road
Hi again,

I've been looking cyclicAMIFvPatch, which is the patch that interconnect two regions, as well as cycicAMILduInterface which is the abstract class modelling the interaction. There are different method available such as faceAreaWeightAMI.
It may be a little bit hard to understand something as the code has lines for parallel processing and a c++ inheritance entanglement that may be hard to follow.

Quote:
So, I think we definitely need to know the values at each face.
I don't see why do we need the value at each face. In the solver we do not generally know the value at the faces, but the value at the cell centers. When you need the value at the faceCenter you interpolate between the owner cell and the neighbour cell to get the value at the face. In this interpolatin you know the value at each center and the respecive distances between face and cell centers.

Quote:
To set up a system of equations of a problem which contains the AMI boundary, how do we get the face values for using FVM?
Is it just like.. the face values in one region is evaluated by weighted-sum of cell-centered values of intersecting cells in another region, and vice versa?
I think essentially yes. For an AMI patch it just a slight more complicated relation between one or more neighbour centers.

Each side of the AMI interface has a set of faces, so you need to do this interpolation once for each region. For the shadow, there is a face set owned by the shadow region where the neighbour is the source. On the opposite side, the source own other set of faces for whom the neighbour are the shadow faces.
The key idea is that, in this stage, the value of the cell center is frozen. You use these cell values to obtain the face values so you can update the solver coefficients for the next iteration.

Once you get the face value on each side the interaction is complete, you can continue to solve each region independently to update the cell values until the next iteration, where the process is repeated.
jbjb likes this.
crubio.abujas is offline   Reply With Quote

Old   March 18, 2021, 14:18
Default
  #5
New Member
 
Jeongbin Park
Join Date: Mar 2021
Location: USA
Posts: 3
Rep Power: 5
jbjb is on a distinguished road
Quote:
Originally Posted by crubio.abujas View Post
Hi again,

I've been looking cyclicAMIFvPatch, which is the patch that interconnect two regions, as well as cycicAMILduInterface which is the abstract class modelling the interaction. There are different method available such as faceAreaWeightAMI.
It may be a little bit hard to understand something as the code has lines for parallel processing and a c++ inheritance entanglement that may be hard to follow.



I don't see why do we need the value at each face. In the solver we do not generally know the value at the faces, but the value at the cell centers. When you need the value at the faceCenter you interpolate between the owner cell and the neighbour cell to get the value at the face. In this interpolatin you know the value at each center and the respecive distances between face and cell centers.


I think essentially yes. For an AMI patch it just a slight more complicated relation between one or more neighbour centers.

Each side of the AMI interface has a set of faces, so you need to do this interpolation once for each region. For the shadow, there is a face set owned by the shadow region where the neighbour is the source. On the opposite side, the source own other set of faces for whom the neighbour are the shadow faces.
The key idea is that, in this stage, the value of the cell center is frozen. You use these cell values to obtain the face values so you can update the solver coefficients for the next iteration.

Once you get the face value on each side the interaction is complete, you can continue to solve each region independently to update the cell values until the next iteration, where the process is repeated.
Hi Carlos,

Thank you very much for your clarification. This helps me a lot to better to understand the concept. And also thank you for the hint about the source code. I'll also check it by myself.

Thank you again. I hope you have a good day!
jbjb is offline   Reply With Quote

Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
sliding mesh problem in CFX Saima CFX 46 September 11, 2021 07:38
is it necessary to create a faceSet for Arbitrary Mesh Interface? anon_q OpenFOAM 0 July 18, 2019 10:56
Fluid Domain moving with Rigid body Lloyd Sullivan CFX 3 August 17, 2018 09:58
Drag and lift calculation in Arbitrary Mesh Interface simulation anon_q OpenFOAM 7 April 22, 2018 13:24
Compressor Simulation using rhoPimpleDyMFoam Jetfire OpenFOAM Running, Solving & CFD 107 December 9, 2014 13:38


All times are GMT -4. The time now is 23:43.