GMRES vs Newton-GMRES for Solving nonlinear PDE'sNewton-Raphson method for nonlinear partial differential equationsSolving a nonlinear algebraic system that includes a linear termIs it possible to solve nonlinear PDEs without using Newton-Raphson iteration?Solving a system of nonlinear equations with an ODE solver is faster than with the Newton method?Newton iteration applied to nonlinear PDESolving this nonlinear system of equationsNumerically solving a system of stiff nonlinear PDEsNewton method for a nonlinear system of time-independent PDEsNonlinear system with diagonal nonlinearityResidual value goes to NaN while solving a system of nonlinear equations
Helping ease my back pain by studying 13 hours everyday , even weekends
Story about a space war, and a human prisoner of war captured by alien enemy
Is it illegal to withhold someone's passport and green card in California?
Methodology: Writing unit tests for another developer
Should the party get XP for a monster they never attacked?
How to make clear to people I don't want to answer their "Where are you from?" question?
What are Elsa's reasons for selecting the Holy Grail on behalf of Donovan?
Prime sieve in Python
Dates on degrees don’t make sense – will people care?
What is the origin of Scooby-Doo's name?
"Correct me if I'm wrong"
Intuition for the role of diffeomorphisms
Count All Possible Unique Combinations of Letters in a Word
Similarity score: Can Sklearn SVR predict values greater than 1 and less than 0?
How does a blind passenger not die, if driver becomes unconscious
Excluding a rectangular region from an image in FITS
`-` in tar xzf -
Where's this swanky house and vineyard near a mountain?
How do I farm creepers for XP without them exploding?
LWC - Local Dev - How can I run the local server on HTTPS?
How to maintain a closed environment for one person for a long period of time
Greeting with "Ho"
Is there any proof that high saturation and contrast makes a picture more appealing in social media?
Can Ogre clerics use Purify Food and Drink on humanoid characters?
GMRES vs Newton-GMRES for Solving nonlinear PDE's
Newton-Raphson method for nonlinear partial differential equationsSolving a nonlinear algebraic system that includes a linear termIs it possible to solve nonlinear PDEs without using Newton-Raphson iteration?Solving a system of nonlinear equations with an ODE solver is faster than with the Newton method?Newton iteration applied to nonlinear PDESolving this nonlinear system of equationsNumerically solving a system of stiff nonlinear PDEsNewton method for a nonlinear system of time-independent PDEsNonlinear system with diagonal nonlinearityResidual value goes to NaN while solving a system of nonlinear equations
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
$begingroup$
Often when numerically solving nonlinear PDE's using method of lines approach with an implicit integrator a system of nonlinear equations have to be solved.
To be more specific, let's say we have simple backward Euler method:
beginalign
y^n=y^n+1-h f(y^n+1,t)= G(y^n+1,t)
endalign
From the available literature, it seems the most common approach is using an Newton-GMRES method to solve the nonlinear system, especially if it is stiff.
As far as I can understand GMRES is used because it is a matrix-free method and so also works with vector functions which is good when approximating the Jacobian with finite differences.
My question is then, why not just use the GMRES to solve the initial problem?
I see no reason why GMRES couldn't solve this for $y^n+1$ when for the Newton-GMRES we solve the system:
beginalign
H(y^n+1_k) &= y^n+1_k-y^n-h f(y^n+1_k,t)rightarrow 0 text for krightarrow infty\
Jv &simeq fracH(y^n+1_k+epsilon v)-H(y^n+1_k))epsilon simeq -H(y^n+1_k)\
y^n+1_k+1&=y^n+1_k+v
endalign
where the GMRES is used for the second part to find $v$. I don't see why solving for $v$ with GMRES followed by the Newton step should be easier/better than solving the general system in the top for $y^n+1$ using GMRES? Does the finite difference approximation to the Jacobian have better properties compared the the general system $y^n=G(y^n+1,t)$?
pde nonlinear-equations newton-method implicit-methods gmres
$endgroup$
add a comment |
$begingroup$
Often when numerically solving nonlinear PDE's using method of lines approach with an implicit integrator a system of nonlinear equations have to be solved.
To be more specific, let's say we have simple backward Euler method:
beginalign
y^n=y^n+1-h f(y^n+1,t)= G(y^n+1,t)
endalign
From the available literature, it seems the most common approach is using an Newton-GMRES method to solve the nonlinear system, especially if it is stiff.
As far as I can understand GMRES is used because it is a matrix-free method and so also works with vector functions which is good when approximating the Jacobian with finite differences.
My question is then, why not just use the GMRES to solve the initial problem?
I see no reason why GMRES couldn't solve this for $y^n+1$ when for the Newton-GMRES we solve the system:
beginalign
H(y^n+1_k) &= y^n+1_k-y^n-h f(y^n+1_k,t)rightarrow 0 text for krightarrow infty\
Jv &simeq fracH(y^n+1_k+epsilon v)-H(y^n+1_k))epsilon simeq -H(y^n+1_k)\
y^n+1_k+1&=y^n+1_k+v
endalign
where the GMRES is used for the second part to find $v$. I don't see why solving for $v$ with GMRES followed by the Newton step should be easier/better than solving the general system in the top for $y^n+1$ using GMRES? Does the finite difference approximation to the Jacobian have better properties compared the the general system $y^n=G(y^n+1,t)$?
pde nonlinear-equations newton-method implicit-methods gmres
$endgroup$
add a comment |
$begingroup$
Often when numerically solving nonlinear PDE's using method of lines approach with an implicit integrator a system of nonlinear equations have to be solved.
To be more specific, let's say we have simple backward Euler method:
beginalign
y^n=y^n+1-h f(y^n+1,t)= G(y^n+1,t)
endalign
From the available literature, it seems the most common approach is using an Newton-GMRES method to solve the nonlinear system, especially if it is stiff.
As far as I can understand GMRES is used because it is a matrix-free method and so also works with vector functions which is good when approximating the Jacobian with finite differences.
My question is then, why not just use the GMRES to solve the initial problem?
I see no reason why GMRES couldn't solve this for $y^n+1$ when for the Newton-GMRES we solve the system:
beginalign
H(y^n+1_k) &= y^n+1_k-y^n-h f(y^n+1_k,t)rightarrow 0 text for krightarrow infty\
Jv &simeq fracH(y^n+1_k+epsilon v)-H(y^n+1_k))epsilon simeq -H(y^n+1_k)\
y^n+1_k+1&=y^n+1_k+v
endalign
where the GMRES is used for the second part to find $v$. I don't see why solving for $v$ with GMRES followed by the Newton step should be easier/better than solving the general system in the top for $y^n+1$ using GMRES? Does the finite difference approximation to the Jacobian have better properties compared the the general system $y^n=G(y^n+1,t)$?
pde nonlinear-equations newton-method implicit-methods gmres
$endgroup$
Often when numerically solving nonlinear PDE's using method of lines approach with an implicit integrator a system of nonlinear equations have to be solved.
To be more specific, let's say we have simple backward Euler method:
beginalign
y^n=y^n+1-h f(y^n+1,t)= G(y^n+1,t)
endalign
From the available literature, it seems the most common approach is using an Newton-GMRES method to solve the nonlinear system, especially if it is stiff.
As far as I can understand GMRES is used because it is a matrix-free method and so also works with vector functions which is good when approximating the Jacobian with finite differences.
My question is then, why not just use the GMRES to solve the initial problem?
I see no reason why GMRES couldn't solve this for $y^n+1$ when for the Newton-GMRES we solve the system:
beginalign
H(y^n+1_k) &= y^n+1_k-y^n-h f(y^n+1_k,t)rightarrow 0 text for krightarrow infty\
Jv &simeq fracH(y^n+1_k+epsilon v)-H(y^n+1_k))epsilon simeq -H(y^n+1_k)\
y^n+1_k+1&=y^n+1_k+v
endalign
where the GMRES is used for the second part to find $v$. I don't see why solving for $v$ with GMRES followed by the Newton step should be easier/better than solving the general system in the top for $y^n+1$ using GMRES? Does the finite difference approximation to the Jacobian have better properties compared the the general system $y^n=G(y^n+1,t)$?
pde nonlinear-equations newton-method implicit-methods gmres
pde nonlinear-equations newton-method implicit-methods gmres
edited Jun 3 at 20:35
Anton Menshov♦
4,93322076
4,93322076
asked Jun 3 at 20:29
RasmusRasmus
503
503
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
$begingroup$
The reason is that GMRES can only be used for solving linear equations, i.e. equations of the form $Ax=b$, where $A$ is some matrix and $x,b$ are vectors. What GMRES does, essentially, is it approximates multiplication by the matrix $A^-1$ using a matrix polynomial of $A$.
In this case (I assume) $f(y^n+1,t)$ is not necessarily linear in the vector $y^n+1$, and so $y^n=G(y^n+1,t)$ can't be written in the form $y^n=A(t)y^n+1$, where $A(t)$ is a matrix-valued function of time. So you can't use GMRES directly.
The "Newton step" is actually the formation of the linear system of equations with the Jacobian; the point of Newton's method is that it approximates the solution of a nonlinear equation with the solution of a sequence of linear equations. GMRES is just a tool that is used to implement Newton's method.
$endgroup$
$begingroup$
But isn't the function evaluations $H(y^n+1_k(+epsilon v))$ used in the Jacobian approximation also non-linear? Or is this OK, since it approximates a linear operator J and if so couldn't you argue that there is some linear operator $L$ such that $Ly^n+1simeq G(y^n+1,t)$ such that you in effect solve that system instead?
$endgroup$
– Rasmus
Jun 4 at 7:54
1
$begingroup$
Approximating $G(y^n+1,1)$ with a linear operation $Ly^n+1$ is kind of what you're doing by using the Jacobian; what you're doing here is you're saying that $$ H(y^n+1_k)=G(y^n+1_k,t)-y^napprox H(y^n+1_k-1)+J(y^n+1_k-1)(y^n+1_k-y^n+1_k-1) $$ By taking the Jacobian of $H$ evaluated at $y^n+1_k-1$, you're linearizing the function $H$ around the point $y^n+1_k-1$. You can't do this just once, though; that linear approximation is only valid in the neighborhood around the point $y^n+1_k-1$, so you need to iterate in $k$ to solve the problem.
$endgroup$
– bgav
Jun 4 at 18:27
$begingroup$
Ahh, i see. That makes sense to me, thank you very much :)
$endgroup$
– Rasmus
Jun 5 at 6:44
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "363"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fscicomp.stackexchange.com%2fquestions%2f32788%2fgmres-vs-newton-gmres-for-solving-nonlinear-pdes%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
The reason is that GMRES can only be used for solving linear equations, i.e. equations of the form $Ax=b$, where $A$ is some matrix and $x,b$ are vectors. What GMRES does, essentially, is it approximates multiplication by the matrix $A^-1$ using a matrix polynomial of $A$.
In this case (I assume) $f(y^n+1,t)$ is not necessarily linear in the vector $y^n+1$, and so $y^n=G(y^n+1,t)$ can't be written in the form $y^n=A(t)y^n+1$, where $A(t)$ is a matrix-valued function of time. So you can't use GMRES directly.
The "Newton step" is actually the formation of the linear system of equations with the Jacobian; the point of Newton's method is that it approximates the solution of a nonlinear equation with the solution of a sequence of linear equations. GMRES is just a tool that is used to implement Newton's method.
$endgroup$
$begingroup$
But isn't the function evaluations $H(y^n+1_k(+epsilon v))$ used in the Jacobian approximation also non-linear? Or is this OK, since it approximates a linear operator J and if so couldn't you argue that there is some linear operator $L$ such that $Ly^n+1simeq G(y^n+1,t)$ such that you in effect solve that system instead?
$endgroup$
– Rasmus
Jun 4 at 7:54
1
$begingroup$
Approximating $G(y^n+1,1)$ with a linear operation $Ly^n+1$ is kind of what you're doing by using the Jacobian; what you're doing here is you're saying that $$ H(y^n+1_k)=G(y^n+1_k,t)-y^napprox H(y^n+1_k-1)+J(y^n+1_k-1)(y^n+1_k-y^n+1_k-1) $$ By taking the Jacobian of $H$ evaluated at $y^n+1_k-1$, you're linearizing the function $H$ around the point $y^n+1_k-1$. You can't do this just once, though; that linear approximation is only valid in the neighborhood around the point $y^n+1_k-1$, so you need to iterate in $k$ to solve the problem.
$endgroup$
– bgav
Jun 4 at 18:27
$begingroup$
Ahh, i see. That makes sense to me, thank you very much :)
$endgroup$
– Rasmus
Jun 5 at 6:44
add a comment |
$begingroup$
The reason is that GMRES can only be used for solving linear equations, i.e. equations of the form $Ax=b$, where $A$ is some matrix and $x,b$ are vectors. What GMRES does, essentially, is it approximates multiplication by the matrix $A^-1$ using a matrix polynomial of $A$.
In this case (I assume) $f(y^n+1,t)$ is not necessarily linear in the vector $y^n+1$, and so $y^n=G(y^n+1,t)$ can't be written in the form $y^n=A(t)y^n+1$, where $A(t)$ is a matrix-valued function of time. So you can't use GMRES directly.
The "Newton step" is actually the formation of the linear system of equations with the Jacobian; the point of Newton's method is that it approximates the solution of a nonlinear equation with the solution of a sequence of linear equations. GMRES is just a tool that is used to implement Newton's method.
$endgroup$
$begingroup$
But isn't the function evaluations $H(y^n+1_k(+epsilon v))$ used in the Jacobian approximation also non-linear? Or is this OK, since it approximates a linear operator J and if so couldn't you argue that there is some linear operator $L$ such that $Ly^n+1simeq G(y^n+1,t)$ such that you in effect solve that system instead?
$endgroup$
– Rasmus
Jun 4 at 7:54
1
$begingroup$
Approximating $G(y^n+1,1)$ with a linear operation $Ly^n+1$ is kind of what you're doing by using the Jacobian; what you're doing here is you're saying that $$ H(y^n+1_k)=G(y^n+1_k,t)-y^napprox H(y^n+1_k-1)+J(y^n+1_k-1)(y^n+1_k-y^n+1_k-1) $$ By taking the Jacobian of $H$ evaluated at $y^n+1_k-1$, you're linearizing the function $H$ around the point $y^n+1_k-1$. You can't do this just once, though; that linear approximation is only valid in the neighborhood around the point $y^n+1_k-1$, so you need to iterate in $k$ to solve the problem.
$endgroup$
– bgav
Jun 4 at 18:27
$begingroup$
Ahh, i see. That makes sense to me, thank you very much :)
$endgroup$
– Rasmus
Jun 5 at 6:44
add a comment |
$begingroup$
The reason is that GMRES can only be used for solving linear equations, i.e. equations of the form $Ax=b$, where $A$ is some matrix and $x,b$ are vectors. What GMRES does, essentially, is it approximates multiplication by the matrix $A^-1$ using a matrix polynomial of $A$.
In this case (I assume) $f(y^n+1,t)$ is not necessarily linear in the vector $y^n+1$, and so $y^n=G(y^n+1,t)$ can't be written in the form $y^n=A(t)y^n+1$, where $A(t)$ is a matrix-valued function of time. So you can't use GMRES directly.
The "Newton step" is actually the formation of the linear system of equations with the Jacobian; the point of Newton's method is that it approximates the solution of a nonlinear equation with the solution of a sequence of linear equations. GMRES is just a tool that is used to implement Newton's method.
$endgroup$
The reason is that GMRES can only be used for solving linear equations, i.e. equations of the form $Ax=b$, where $A$ is some matrix and $x,b$ are vectors. What GMRES does, essentially, is it approximates multiplication by the matrix $A^-1$ using a matrix polynomial of $A$.
In this case (I assume) $f(y^n+1,t)$ is not necessarily linear in the vector $y^n+1$, and so $y^n=G(y^n+1,t)$ can't be written in the form $y^n=A(t)y^n+1$, where $A(t)$ is a matrix-valued function of time. So you can't use GMRES directly.
The "Newton step" is actually the formation of the linear system of equations with the Jacobian; the point of Newton's method is that it approximates the solution of a nonlinear equation with the solution of a sequence of linear equations. GMRES is just a tool that is used to implement Newton's method.
answered Jun 3 at 21:16
bgavbgav
862
862
$begingroup$
But isn't the function evaluations $H(y^n+1_k(+epsilon v))$ used in the Jacobian approximation also non-linear? Or is this OK, since it approximates a linear operator J and if so couldn't you argue that there is some linear operator $L$ such that $Ly^n+1simeq G(y^n+1,t)$ such that you in effect solve that system instead?
$endgroup$
– Rasmus
Jun 4 at 7:54
1
$begingroup$
Approximating $G(y^n+1,1)$ with a linear operation $Ly^n+1$ is kind of what you're doing by using the Jacobian; what you're doing here is you're saying that $$ H(y^n+1_k)=G(y^n+1_k,t)-y^napprox H(y^n+1_k-1)+J(y^n+1_k-1)(y^n+1_k-y^n+1_k-1) $$ By taking the Jacobian of $H$ evaluated at $y^n+1_k-1$, you're linearizing the function $H$ around the point $y^n+1_k-1$. You can't do this just once, though; that linear approximation is only valid in the neighborhood around the point $y^n+1_k-1$, so you need to iterate in $k$ to solve the problem.
$endgroup$
– bgav
Jun 4 at 18:27
$begingroup$
Ahh, i see. That makes sense to me, thank you very much :)
$endgroup$
– Rasmus
Jun 5 at 6:44
add a comment |
$begingroup$
But isn't the function evaluations $H(y^n+1_k(+epsilon v))$ used in the Jacobian approximation also non-linear? Or is this OK, since it approximates a linear operator J and if so couldn't you argue that there is some linear operator $L$ such that $Ly^n+1simeq G(y^n+1,t)$ such that you in effect solve that system instead?
$endgroup$
– Rasmus
Jun 4 at 7:54
1
$begingroup$
Approximating $G(y^n+1,1)$ with a linear operation $Ly^n+1$ is kind of what you're doing by using the Jacobian; what you're doing here is you're saying that $$ H(y^n+1_k)=G(y^n+1_k,t)-y^napprox H(y^n+1_k-1)+J(y^n+1_k-1)(y^n+1_k-y^n+1_k-1) $$ By taking the Jacobian of $H$ evaluated at $y^n+1_k-1$, you're linearizing the function $H$ around the point $y^n+1_k-1$. You can't do this just once, though; that linear approximation is only valid in the neighborhood around the point $y^n+1_k-1$, so you need to iterate in $k$ to solve the problem.
$endgroup$
– bgav
Jun 4 at 18:27
$begingroup$
Ahh, i see. That makes sense to me, thank you very much :)
$endgroup$
– Rasmus
Jun 5 at 6:44
$begingroup$
But isn't the function evaluations $H(y^n+1_k(+epsilon v))$ used in the Jacobian approximation also non-linear? Or is this OK, since it approximates a linear operator J and if so couldn't you argue that there is some linear operator $L$ such that $Ly^n+1simeq G(y^n+1,t)$ such that you in effect solve that system instead?
$endgroup$
– Rasmus
Jun 4 at 7:54
$begingroup$
But isn't the function evaluations $H(y^n+1_k(+epsilon v))$ used in the Jacobian approximation also non-linear? Or is this OK, since it approximates a linear operator J and if so couldn't you argue that there is some linear operator $L$ such that $Ly^n+1simeq G(y^n+1,t)$ such that you in effect solve that system instead?
$endgroup$
– Rasmus
Jun 4 at 7:54
1
1
$begingroup$
Approximating $G(y^n+1,1)$ with a linear operation $Ly^n+1$ is kind of what you're doing by using the Jacobian; what you're doing here is you're saying that $$ H(y^n+1_k)=G(y^n+1_k,t)-y^napprox H(y^n+1_k-1)+J(y^n+1_k-1)(y^n+1_k-y^n+1_k-1) $$ By taking the Jacobian of $H$ evaluated at $y^n+1_k-1$, you're linearizing the function $H$ around the point $y^n+1_k-1$. You can't do this just once, though; that linear approximation is only valid in the neighborhood around the point $y^n+1_k-1$, so you need to iterate in $k$ to solve the problem.
$endgroup$
– bgav
Jun 4 at 18:27
$begingroup$
Approximating $G(y^n+1,1)$ with a linear operation $Ly^n+1$ is kind of what you're doing by using the Jacobian; what you're doing here is you're saying that $$ H(y^n+1_k)=G(y^n+1_k,t)-y^napprox H(y^n+1_k-1)+J(y^n+1_k-1)(y^n+1_k-y^n+1_k-1) $$ By taking the Jacobian of $H$ evaluated at $y^n+1_k-1$, you're linearizing the function $H$ around the point $y^n+1_k-1$. You can't do this just once, though; that linear approximation is only valid in the neighborhood around the point $y^n+1_k-1$, so you need to iterate in $k$ to solve the problem.
$endgroup$
– bgav
Jun 4 at 18:27
$begingroup$
Ahh, i see. That makes sense to me, thank you very much :)
$endgroup$
– Rasmus
Jun 5 at 6:44
$begingroup$
Ahh, i see. That makes sense to me, thank you very much :)
$endgroup$
– Rasmus
Jun 5 at 6:44
add a comment |
Thanks for contributing an answer to Computational Science Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fscicomp.stackexchange.com%2fquestions%2f32788%2fgmres-vs-newton-gmres-for-solving-nonlinear-pdes%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown