Skip to content
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

Consistently evaluate Neumann BC in generalized-alpha method #88

Open
aabrown100-git opened this issue Sep 23, 2022 · 6 comments
Open

Comments

@aabrown100-git
Copy link
Contributor

aabrown100-git commented Sep 23, 2022

As I understand the generalized-alpha method (see Chung and Hulbert, 1993) if we have, for example, a time-dependent pressure boundary condition, then this BC contributes to the residual vector using the value of pressure at $t_{n+\alpha_f}$ (or $t_{n+1-\alpha_f}$ depending on the definition of $\alpha_f$). Looking through the code (starting from SETBCNEU()), it appears the value of pressure at $t_{n+1}$ is being used instead. Is this is an error in the code, or else please let me know where I am mistaken.

@vvedula22
Copy link
Contributor

Yes, the paper states that the applied load should be at $n+\alpha_f$ but we compute the load at $n+1$. This variant is shown in Bazilevs et al. (2008) where even the pressure as a state variable is evaluated at $n+1$.

I don't think this makes a noticeable difference in the solution or convergence as the applied load is not a function of the state variable and this term doesn't contribute to LHS. In the case of the follower pressure load, the contribution to LHS is evaluated at $n+\alpha_f$ but the actual load is still at $n+1$. It is more important to have the state variable terms consistently evaluated at $n+\alpha_m$ or $n+\alpha_f$. Nevertheless, you could try and report how it goes.

@aabrown100-git
Copy link
Contributor Author

Thanks for that paper! I see that pressure as a state variable for the fluid system is evaluated at $n+1$ (eqs. 156-158), but it doesn't seem say when the value of the Neumann BC (like an applied surface pressure) for the solid system should be evaluated. These are two different quantities, right?

I agree that it probably won't make much of a difference. I'm thinking that if this really is an error, then the effect is that we are applying a slightly higher or lower pressure to the solid than we think we are.

@aabrown100-git
Copy link
Contributor Author

Adding a relevant recent paper A note on the accuracy of the generalized- scheme for the incompressible Navier-Stokes equations. This paper discusses whether to use $p_{n+1}$ or $p_{n+\alpha_f}$ in the NS residual, and also whether to evaluate the Neumann BC at $t_{n+1}$ or $t_{n+\alpha_f}$. See in particular the introduction and Eq. (11) onwards. I believe we are currently performing Scheme 3. The paper recommends Scheme 2, but shows that Scheme 1 (which I believe is what I am suggesting) is better than Scheme 3. Of course, this is for the Navier-Stokes equations, so I'm not sure if these results directly extend to struct and ustruct equations.

@vvedula22
Copy link
Contributor

@aabrown100-git Earlier our pressure integration was based on the Bazilevs 2008 paper which is different from Scheme 1 but I changed it to Scheme 2 later. Reg. the pressure boundary condition, let us change it to evaluate it at $n+\alpha_f$.

@vvedula22 vvedula22 changed the title Error in Neumann BC residual contribution in generalized-alpha method? Consistently evaluate Neumann BC in generalized-alpha method Oct 4, 2022
@alisonmarsden
Copy link

alisonmarsden commented Oct 11, 2022 via email

@aabrown100-git
Copy link
Contributor Author

aabrown100-git commented Oct 17, 2022

In terms of implementation in svFSI, I see two options. Denoting the Neumann BC value $\mathbf{h}(t)$, we can

  1. Evaluate $\mathbf{h}(t_{n+\alpha_f})$ and use that value when constructing the residual
  2. Evaluate $\mathbf{h}(t_{n})$ and $\mathbf{h}(t_{n+1})$ and interpolate between these value to get $\mathbf{h}(t_{n+\alpha_f})$, then construct the residual

I'm not sure if there is any meaningful difference between the two, but one may be easier to implement than the other. Option 2 may be more appropriate when the Neumann BC value is obtained from an external LPN code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants