Commit be58d5fd authored by Jonathan Lambrechts's avatar Jonathan Lambrechts
Browse files

cavity ok but poiseuille error slightly larger

parent 6093aafc
Pipeline #3706 failed with stage
in 20 seconds
...@@ -242,37 +242,53 @@ typedef void f_cb(FluidProblem *problem, const double *n, double *f, const doubl ...@@ -242,37 +242,53 @@ typedef void f_cb(FluidProblem *problem, const double *n, double *f, const doubl
static void f_inflow(FluidProblem *problem,const double *n, double *f,const double *s,const double *ds,const double c,const double dt){ static void f_inflow(FluidProblem *problem,const double *n, double *f,const double *s,const double *ds,const double c,const double dt){
int n_fluids = problem->n_fluids; int n_fluids = problem->n_fluids;
int P = n_fluids*(D+1); int P = n_fluids*(D+1);
const double epsilon = problem->epsilon;
double p = s[P]; double p = s[P];
double dp[D];
for (int id = 0; id < D; ++id) {
dp[id] = ds[P*D+id];
}
for (int ifluid = 0; ifluid < n_fluids; ++ifluid) { for (int ifluid = 0; ifluid < n_fluids; ++ifluid) {
int U = ifluid*(D+1); int U = ifluid*(D+1);
int Q = ifluid*(D+1)+D; int Q = ifluid*(D+1)+D;
double q = s[Q]; double q = s[Q];
f[Q] = 0; f[Q] = 0;
for (int id = 0; id < D; ++id) { for (int id = 0; id < D; ++id) {
f[Q] -= s[U+id]*n[id]; f[Q] += -s[U+id]*n[id];
//f[Q] += dp[id]*n[id]*epsilon*q; f[Q] += dp[id]*n[id]*epsilon*q;
f[U+id] = 0;//-p*q*n[id]; f[U+id] = 0;//-p*q*n[id];
} }
} }
f[P] = 0; f[P] = 0;
for (int id = 0; id < D; ++id) {
//f[P] += dp[id]*n[id]*epsilon;
}
} }
static void f_outflow(FluidProblem *problem,const double *n, double *f,const double *s,const double *ds,const double c,const double dt){ static void f_outflow(FluidProblem *problem,const double *n, double *f,const double *s,const double *ds,const double c,const double dt){
int n_fluids = problem->n_fluids; int n_fluids = problem->n_fluids;
int P = n_fluids*(D+1); int P = n_fluids*(D+1);
const double epsilon = problem->epsilon;
double p = s[P]; double p = s[P];
double dp[D];
for (int id = 0; id < D; ++id) {
dp[id] = ds[P*D+id];
}
for (int ifluid = 0; ifluid < n_fluids; ++ifluid) { for (int ifluid = 0; ifluid < n_fluids; ++ifluid) {
int U = ifluid*(D+1); int U = ifluid*(D+1);
int Q = ifluid*(D+1)+D; int Q = ifluid*(D+1)+D;
double q = s[Q]; double q = s[Q];
f[Q] = 0; f[Q] = 0;
for (int id = 0; id < D; ++id) { for (int id = 0; id < D; ++id) {
f[Q] -= s[U+id]*n[id]; f[Q] += -s[U+id]*n[id];
//f[Q] += dp[id]*n[id]*epsilon*q; f[Q] += dp[id]*n[id]*epsilon*q;
f[U+id] = 0;//-p*q*n[id]; f[U+id] = 0;//-p*q*n[id];
} }
} }
f[P] = 0; f[P] = 0;
for (int id = 0; id < D; ++id) {
//f[P] += dp[id]*n[id]*epsilon;
}
} }
static void f_wall_pressure(FluidProblem *problem,const double *n, double *f,const double *s,const double *ds,const double c,const double dt) static void f_wall_pressure(FluidProblem *problem,const double *n, double *f,const double *s,const double *ds,const double c,const double dt)
...@@ -291,13 +307,13 @@ static void f_wall_pressure(FluidProblem *problem,const double *n, double *f,con ...@@ -291,13 +307,13 @@ static void f_wall_pressure(FluidProblem *problem,const double *n, double *f,con
double q = s[Q]; double q = s[Q];
f[Q] = 0; f[Q] = 0;
for (int id = 0; id < D; ++id) { for (int id = 0; id < D; ++id) {
//f[Q] += dp[id]*n[id]*epsilon*q; f[Q] += dp[id]*n[id]*epsilon*q;
f[U+id] = q*p*n[id]; f[U+id] = q*p*n[id];
} }
} }
f[P] = 0; f[P] = 0;
for (int id = 0; id < D; ++id) { for (int id = 0; id < D; ++id) {
f[P] += dp[id]*n[id]*epsilon; //f[P] += dp[id]*n[id]*epsilon;
} }
} }
...@@ -309,7 +325,7 @@ static void fluid_problem_f(FluidProblem *problem, double *f0, double *f1, doubl ...@@ -309,7 +325,7 @@ static void fluid_problem_f(FluidProblem *problem, double *f0, double *f1, doubl
double epsilonq = problem->epsilon/10; double epsilonq = problem->epsilon/10;
f0[P] = 1-c; f0[P] = 1-c;
for (int id = 0; id < D; ++id) { for (int id = 0; id < D; ++id) {
f1[P*D+id] = epsilonp*dp[id]; f1[P*D+id] = 0;//epsilonp*dp[id];
} }
for (int ifluid=0; ifluid < problem->n_fluids; ++ifluid) { for (int ifluid=0; ifluid < problem->n_fluids; ++ifluid) {
int Q = ifluid*(D+1)+D; int Q = ifluid*(D+1)+D;
...@@ -343,7 +359,7 @@ static void fluid_problem_f(FluidProblem *problem, double *f0, double *f1, doubl ...@@ -343,7 +359,7 @@ static void fluid_problem_f(FluidProblem *problem, double *f0, double *f1, doubl
for (int j = 0; j < D; ++j) { for (int j = 0; j < D; ++j) {
f1[(U+j)*D+i] = mu*(tau[i][j]+tau[j][i]) + (i==j ? -q*p : 0); f1[(U+j)*D+i] = mu*(tau[i][j]+tau[j][i]) + (i==j ? -q*p : 0);
} }
f1[Q*D+i] = epsilonq*dq[i]-u[i]; f1[Q*D+i] = epsilonq*dq[i]-u[i]+q*epsilonp*dp[i];
} }
} }
} }
......
...@@ -40,7 +40,7 @@ ii = 0 ...@@ -40,7 +40,7 @@ ii = 0
#physical parameters #physical parameters
g = -9.81 # gravity g = 0 # gravity
rho = 1000 # fluid density rho = 1000 # fluid density
nu = 1e-3 # kinematic viscosity nu = 1e-3 # kinematic viscosity
mu = nu*rho # dynamic viscosity mu = nu*rho # dynamic viscosity
...@@ -48,8 +48,8 @@ tEnd = 100000 # final time ...@@ -48,8 +48,8 @@ tEnd = 100000 # final time
#numerical parameters #numerical parameters
lcmin = .1 # mesh size lcmin = .1 # mesh size
dt = 5 # time step dt = 0.1 # time step
alpha = 1e-7 # stabilization coefficient alpha = 1e-6 # stabilization coefficient
epsilon = alpha*lcmin**2 /nu # stabilization parametre epsilon = alpha*lcmin**2 /nu # stabilization parametre
print('epsilon',epsilon) print('epsilon',epsilon)
...@@ -61,13 +61,14 @@ outf = 1 # number of iterations between ou ...@@ -61,13 +61,14 @@ outf = 1 # number of iterations between ou
#Format: strong_boundaries = [(Boundary tag, Fluid field, Value) #Format: strong_boundaries = [(Boundary tag, Fluid field, Value)
strong_boundaries = [ strong_boundaries = [
("Top",0,0,1), ("Top",0,0,1),
("PtFix",2,3,0), ("Top",1,1,0),
("PtFix",3,3,0),
("Bottom",0,0,0), ("Bottom",0,0,0),
("Bottom",1,1,0), ("Bottom",1,1,0),
("Left",0,0,0), ("Left",0,0,0),
("Left",1,1,0), ("Left",1,1,0),
("Right",0,0,0), ("Right",0,0,0),
("Right",1,1,0) ("Right",1,1,0),
] ]
fluid = fluid.fluid_problem("mesh.msh",g,[nu*rho],[rho],epsilon,strong_boundaries,1) fluid = fluid.fluid_problem("mesh.msh",g,[nu*rho],[rho],epsilon,strong_boundaries,1)
ii = 0 ii = 0
......
...@@ -20,4 +20,4 @@ Physical Line("Right") = {3}; ...@@ -20,4 +20,4 @@ Physical Line("Right") = {3};
Physical Line("Bottom") = {2}; Physical Line("Bottom") = {2};
Physical Line("Top") = {4}; Physical Line("Top") = {4};
Physical Surface("Domain") = {1}; Physical Surface("Domain") = {1};
Physical Point("PtFix") = {1}; Physical Point("PtFix") = {2};
...@@ -62,7 +62,7 @@ class Poiseuille(unittest.TestCase) : ...@@ -62,7 +62,7 @@ class Poiseuille(unittest.TestCase) :
shutil.copy("mesh.msh", outputdir +"/mesh.msh") shutil.copy("mesh.msh", outputdir +"/mesh.msh")
outf = 100 # number of iterations between output files outf = 10 # number of iterations between output files
#Object fluid creation + Boundary condition of the fluid (field 0 is horizontal velocity; field 1 is vertical velocity; field 2 is pressure) #Object fluid creation + Boundary condition of the fluid (field 0 is horizontal velocity; field 1 is vertical velocity; field 2 is pressure)
#Format: strong_boundaries = [(Boundary tag, Fluid field, Value) #Format: strong_boundaries = [(Boundary tag, Fluid field, Value)
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment