Shallow water flow - equation system unstable

Click For Summary
SUMMARY

The discussion centers on the instability of a shallow water flow simulation using the MacCormack scheme with fractional predictor-corrector steps. The user, Martin, reports that despite implementing the Dxy factor to stabilize the equations, the results yield excessively high values, reaching up to 10^80. The provided Mathematica code outlines the simulation setup, but the instability issue remains unresolved, indicating potential errors in the implementation or parameter selection.

PREREQUISITES
  • Understanding of shallow water flow dynamics
  • Familiarity with the MacCormack numerical scheme
  • Proficiency in Mathematica programming
  • Knowledge of fractional predictor-corrector methods
NEXT STEPS
  • Investigate the stability criteria for the MacCormack scheme in shallow water simulations
  • Review the implementation of the Dxy factor in numerical models
  • Explore alternative numerical methods for solving hyperbolic partial differential equations
  • Examine parameter sensitivity analysis in shallow water flow simulations
USEFUL FOR

Researchers, engineers, and students involved in fluid dynamics, particularly those focusing on numerical simulations of shallow water flow and stability analysis in computational fluid dynamics.

MartinV
Messages
68
Reaction score
0
Hello, everyone.

I'm working on simulating shallow water flow. I'm using the MacCormack scheme and fractional predictor-corrector steps. The Dxy factor should make the equation system stable but no matter what numbers I input, the results skyrocket, up to 10^80 and more.

Has anyone worked with this before? If so, could you tell me what I'm doing wrong?


Thank you,
Martin





Below is the code I've written in Mathematica (since I doubt this is an error by Mathematica, I think this doesn't belong in Computing part of the forum):

g = 9.81; q1 = 0.0001; dzdx = -0.005; dzdy = -0.01; kov = 1.5*10^-3; dt = 0.0000005; dx =
dy = 0.0005; dim = 20; qx = 0.00009; h = (q1 - qx/dx)*dt

U[1] = Table[{h, qx, 0}, {y, 1, dim}, {z, 1, dim}];
G[x_] := {x[[2]], x[[2]]*x[[2]]/x[[1]] + g/2*x[[1]]*x[[1]], x[[2]]*x[[3]]/x[[1]]};
H[x_] := {x[[3]], x[[2]]*x[[3]]/x[[1]], x[[3]]*x[[3]]/x[[1]] + g/2*x[[1]]*x[[1]]};
S[x_] := {q1, -g*dzdx*x[[1]] - kov/8*x[[2]]/x[[1]]/x[[1]], g*dzdy*x[[1]] - kov/8*x[[3]]/x[[1]]/x[[1]]};
Dxy[x_] := {1, 1/(1 - dt*kov/8/x[[1]]/x[[1]]/x[[1]]), 1/(1 - dt*kov/8/x[[1]]/x[[1]]/x[[1]])};

UU2 = ConstantArray[0, {dim, dim}];
UU3 = ConstantArray[0, {dim, dim}]; UU4 = ConstantArray[0, {dim, dim}];
UU5 = ConstantArray[0, {dim, dim}]; UU6 = ConstantArray[0, {dim, dim}];
UU7 = ConstantArray[0, {dim, dim}]; UU8 = ConstantArray[0, {dim, dim}];
UU9 = ConstantArray[0, {dim, dim}];
UU = U[1];

(*Predictor Lx1*)
For[j = 1, j <= dim, j++,
(*Calc. first line*)
UU2[[1, j]] =
UU[[1, j]] -
Dxy[UU[[1, j]]]*dt/dx/2*(G[UU[[1, j]]] - G[UU[[2, j]]]) +
Dxy[UU[[1, j]]]*dt/2*S[UU[[1, j]]];
For[i = 2, i <= dim, i++,
(*Calc. other lines*)
UU2[[i, j]] =
UU[[i, j]] -
Dxy[UU[[i, j]]]*dt/dx/2*(G[UU[[i, j]]] - G[UU[[i - 1, j]]]) +
Dxy[UU[[i, j]]]*dt/2*S[UU[[i, j]]];
];
];

(*Corrector Lx1*)
For[j = 1, j <= dim, j++,
For[i = 1, i <= dim - 1, i++,
(*Calc. other lines*)
UU3[[i, j]] =
0.5*(UU[[i, j]] - UU2[[i, j]] -
Dxy[UU[[i, j]]]*
dt/2/dx*(G[UU2[[i + 1, j]]] - G[UU2[[i, j]]]) +
Dxy[UU[[i, j]]]*dt/2*S[UU2[[i, j]]]);
];
(*Calc. last line*)
UU3[[dim, j]] =
0.5*(UU[[dim, j]] - UU2[[dim, j]] -
Dxy[UU[[dim, j]]]*
dt/2/dx*(G[UU2[[dim - 1, j]]] - G[UU2[[dim, j]]]) +
Dxy[UU[[dim, j]]]*dt/2*S[UU2[[dim, j]]]);
];

(*Predictor Ly1*)
For[i = 1, i <= dim, i++,
(*Calc. first collumn*)
UU4[[i, 1]] =
UU3[[i, 1]] -
Dxy[UU[[i, 1]]]*dt/2/dx*(H[UU3[[i, 1]]] - H[UU3[[i, 2]]]) +
Dxy[UU[[i, 1]]]*dt/2*S[UU3[[i, 1]]];
(*Calc. other collumns*)
For[j = 2, j <= dim, j++,
UU4[[i, j]] =
UU3[[i, j]] -
Dxy[UU[[i, j]]]*dt/2/dx*(H[UU3[[i, j]]] - H[UU3[[i, j - 1]]]) +
Dxy[UU[[i, j]]]*dt/2*S[UU3[[i, j]]];
];
];

(*Corrector Ly1*)
For[i = 1, i <= dim, i++,
(*Calc. other collumns*)
For[j = 1, j <= dim - 1, j++,
UU5[[i, j]] =
0.5*(UU3[[i, j]] - UU4[[i, j]] -
Dxy[UU[[i, j]]]*
dt/2/dx*(H[UU4[[i, j + 1]]] - H[UU4[[i, j]]]) +
Dxy[UU[[i, j]]]*dt/2*S[UU4[[i, j]]]);
];
(*Calc. last collumn*)
UU5[[i, dim]] =
0.5*(UU3[[i, dim]] - UU4[[i, dim]] -
Dxy[UU[[i, dim]]]*
dt/2/dx*(H[UU4[[i, dim - 1]]] - H[UU4[[i, dim]]]) +
Dxy[UU[[i, dim]]]*dt/2*S[UU4[[i, dim]]]);
];

(*Predictor Ly2*)
For[i = 1, i <= dim, i++,
(*Calc. other collumns*)
For[j = 1, j <= dim - 1, j++,
UU6[[i, j]] =
UU5[[i, j]] -
Dxy[UU[[i, j]]]*dt/2/dx*(H[UU5[[i, j + 1]]] - H[UU5[[i, j]]]) +
Dxy[UU[[i, j]]]*dt/2*S[UU5[[i, j]]];
];
(*Calc. last collumn*)
UU6[[i, dim]] =
UU5[[i, dim]] -
Dxy[UU[[i, dim]]]*
dt/2/dx*(H[UU5[[i, dim - 1]]] - H[UU5[[i, dim]]]) +
Dxy[UU[[i, dim]]]*dt/2*S[UU5[[i, dim]]];
];

(*Corrector Ly2*)
For[i = 1, i <= dim, i++,
(*Calc. first collumn*)
UU7[[i, 1]] =
0.5*(UU5[[i, 1]] + UU6[[i, 1]] -
Dxy[UU[[i, 1]]]*dt/2/dx*(H[UU6[[i, 1]]] - H[UU6[[i, 2]]]) +
Dxy[UU[[i, 1]]]*dt/2*S[UU6[[i, 1]]]);
(*Calc. other collumns*)
For[j = 2, j <= dim, j++,
UU7[[i, j]] =
0.5*(UU5[[i, j]] + UU6[[i, j]] -
Dxy[UU[[i, j]]]*
dt/2/dx*(H[UU6[[i, j]]] - H[UU6[[i, j - 1]]]) +
Dxy[UU[[i, j]]]*dt/2*S[UU6[[i, j]]]);
];
];

(*Predictor Lx2*)
For[j = 1, j <= dim, j++,
(*Calc. other lines*)
For[i = 1, i <= dim - 1, i++,
UU8[[i, j]] =
UU7[[i, j]] -
Dxy[UU[[i, j]]]*dt/2/dx*(G[UU7[[i + 1, j]]] - G[UU7[[i, j]]]) +
Dxy[UU[[i, j]]]*dt/2*S[UU7[[i, j]]];
];
(*Calc. last line*)
UU8[[dim, j]] =
UU7[[dim, j]] -
Dxy[UU[[dim, j]]]*
dt/2/dx*(G[UU7[[dim - 1, j]]] - G[UU7[[dim, j]]]) +
Dxy[UU[[dim, j]]]*dt/2*S[UU7[[dim, j]]];
];

(*Corrector Lx2*)
For[j = 1, j <= dim, j++,
(*Calc. first line*)
UU9[[1, j]] =
0.5*(UU7[[1, j]] + UU8[[1, j]] -
Dxy[UU[[1, j]]]*dt/2/dx*(G[UU8[[1, j]]] - G[UU8[[2, j]]]) +
Dxy[UU[[1, j]]]*dt/2*S[UU8[[1, j]]]);
(*Calc. other lines*)
For[i = 2, i <= dim, i++,
UU9[[i, j]] =
0.5*(UU7[[i, j]] + UU8[[i, j]] -
Dxy[UU[[i, j]]]*
dt/2/dx*(G[UU8[[i, j]]] - G[UU8[[i - 1, j]]]) +
Dxy[UU[[i, j]]]*dt/2*S[UU8[[i, j]]]);
];
];
 
Physics news on Phys.org

Similar threads

  • · Replies 6 ·
Replies
6
Views
6K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 2 ·
Replies
2
Views
1K
  • · Replies 0 ·
Replies
0
Views
2K
Replies
2
Views
2K
  • · Replies 1 ·
Replies
1
Views
1K
Replies
1
Views
3K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 2 ·
Replies
2
Views
2K
Replies
1
Views
1K