HydroCODE_2D 0.1
This is a implementation of fully explict forward Euler scheme for 2-D Euler equations of motion on Eulerian coordinate
flux_solver.c
浏览该文件的文档.
1
6#include <stdio.h>
7#include <math.h>
8
9#include "../include/Riemann_solver.h"
10#include "../include/var_struc.h"
11
12
24int GRP_2D_flux(struct i_f_var * ifv, struct i_f_var * ifv_R, const double tau)
25{
26 const double eps = config[4];
27 const double n_x = ifv->n_x, n_y = ifv->n_y;
28 double gamma_mid = config[6];
29 ifv->gamma = config[6]; ifv_R->gamma = config[6];
30 ifv->lambda_u = 0.0; ifv->lambda_v = 0.0;
31
32 double u, u_R, d_u, d_u_R, t_u, t_u_R;
33 u = ifv->U *n_x + ifv->V *n_y;
34 u_R = ifv_R->U *n_x + ifv_R->V *n_y;
35 d_u = ifv->d_u *n_x + ifv->d_v *n_y;
36 d_u_R = ifv_R->d_u*n_x + ifv_R->d_v*n_y;
37 t_u = ifv->t_u *n_x + ifv->t_v *n_y;
38 t_u_R = ifv_R->t_u*n_x + ifv_R->t_v*n_y;
39 ifv->V = -ifv->U *n_y + ifv->V *n_x;
40 ifv_R->V = -ifv_R->U *n_y + ifv_R->V *n_x;
41 ifv->d_v = -ifv->d_u *n_y + ifv->d_v *n_x;
42 ifv_R->d_v = -ifv_R->d_u*n_y + ifv_R->d_v*n_x;
43 ifv->t_v = -ifv->t_u *n_y + ifv->t_v *n_x;
44 ifv_R->t_v = -ifv_R->t_u*n_y + ifv_R->t_v*n_x;
45 ifv->U = u;
46 ifv_R->U = u_R;
47 ifv->d_u = d_u;
48 ifv_R->d_u = d_u_R;
49 ifv->t_u = t_u;
50 ifv_R->t_u = t_u_R;
51
52 double wave_speed[2], dire[6], mid[6], star[6];
53 double rho_mid, p_mid, u_mid, v_mid;
54
55#ifdef MULTIFLUID_BASICS
56 double phi_mid, z_a_mid;
57
58 // linear_GRP_solver_Edir_G2D(wave_speed, dire, mid, star, *ifv, *ifv_R, eps, eps);
59 // linear_GRP_solver_Edir_G2D(wave_speed, dire, mid, star, *ifv, *ifv_R, eps, -0.0);
60 linear_GRP_solver_Edir_Q1D(wave_speed, dire, mid, star, *ifv, *ifv_R, eps, -0.0);
61// Acoustic approximation
62 // linear_GRP_solver_Edir_Q1D(wave_speed, dire, mid, star, *ifv, *ifv_R, eps, INFINITY);
63#else
64 linear_GRP_solver_Edir_Q1D(wave_speed, dire, mid, star, *ifv, *ifv_R, eps, -0.0);
65#endif
66
67 if(mid[3] < eps || mid[0] < eps)
68 return 1;
69 if(!isfinite(mid[1])|| !isfinite(mid[2])|| !isfinite(mid[0])|| !isfinite(mid[3]))
70 return 2;
71 if(!isfinite(dire[1])|| !isfinite(dire[2])|| !isfinite(dire[0])|| !isfinite(dire[3]))
72 return 3;
73
74 rho_mid = mid[0] + 0.5*tau*dire[0];
75 u_mid = (mid[1] + 0.5*tau*dire[1])*n_x - (mid[2] + 0.5*tau*dire[2])*n_y;
76 v_mid = (mid[1] + 0.5*tau*dire[1])*n_y + (mid[2] + 0.5*tau*dire[2])*n_x;
77 p_mid = mid[3] + 0.5*tau*dire[3];
78
79 ifv->F_rho = rho_mid*(u_mid*n_x + v_mid*n_y);
80 ifv->F_u = ifv->F_rho*u_mid + p_mid*n_x;
81 ifv->F_v = ifv->F_rho*v_mid + p_mid*n_y;
82 ifv->F_e = (gamma_mid/(gamma_mid-1.0))*p_mid/rho_mid + 0.5*(u_mid*u_mid + v_mid*v_mid);
83 ifv->F_e = ifv->F_rho*ifv->F_e;
84
85 ifv->U_int = (mid[1] + tau*dire[1])*n_x - (mid[2] + tau*dire[2])*n_y;
86 ifv->V_int = (mid[1] + tau*dire[1])*n_y + (mid[2] + tau*dire[2])*n_x;
87 ifv->RHO_int = mid[0] + tau*dire[0];
88 ifv->P_int = mid[3] + tau*dire[3];
89
90#ifdef MULTIFLUID_BASICS
91 phi_mid = mid[5] + 0.5*tau*dire[5];
92 z_a_mid = mid[4] + 0.5*tau*dire[4];
93 gamma_mid = 1.0/(z_a_mid/(config[6]-1.0)+(1.0-z_a_mid)/(config[106]-1.0))+1.0;
94 ifv->F_phi = ifv->F_rho*phi_mid;
95 ifv->F_e_a = z_a_mid/(config[6]-1.0)*p_mid/rho_mid + 0.5*phi_mid*(u_mid*u_mid + v_mid*v_mid);
96 ifv->F_e_a = ifv->F_rho*ifv->F_e_a;
97 ifv->PHI = mid[5] + tau*dire[5];
98 ifv->Z_a = mid[4] + tau*dire[4];
99#endif
100
101#ifdef MULTIFLUID_BASICS
102 ifv->U_qt_add_c = ifv->F_rho*u_mid*phi_mid;
103 ifv->V_qt_add_c = ifv->F_rho*v_mid*phi_mid;
104 ifv->U_qt_star = p_mid*n_x;
105 ifv->V_qt_star = p_mid*n_y;
106 ifv->P_star = p_mid/rho_mid*ifv->F_rho;
107#endif
108 return 0;
109}
void linear_GRP_solver_Edir_Q1D(double *wave_speed, double *D, double *U, double *U_star, const struct i_f_var ifv_L, const struct i_f_var ifv_R, const double eps, const double atc)
A Quasi-1D direct Eulerian GRP solver for unsteady compressible inviscid two-component flow in two sp...
int GRP_2D_flux(struct i_f_var *ifv, struct i_f_var *ifv_R, const double tau)
This function calculate Eulerian fluxes of 2-D Euler equations by 2-D GRP solver.
Definition: flux_solver.c:24
Interfacial Fluid VARiables.
Definition: var_struc.h:47
double V
variable values at t_{n}.
Definition: var_struc.h:49
double V_int
interfacial variables at t_{n+1}.
Definition: var_struc.h:50
double PHI
Definition: var_struc.h:57
double lambda_v
grid moving velocity components in direction x and y
Definition: var_struc.h:54
double t_v
tangential spatial derivatives OR spatial derivatives in Lagrangian coordinate ξ
Definition: var_struc.h:53
double U_int
Definition: var_struc.h:50
double U
Definition: var_struc.h:49
double n_y
Definition: var_struc.h:48
double gamma
specific heat ratio
Definition: var_struc.h:55
double F_rho
Definition: var_struc.h:51
double RHO_int
Definition: var_struc.h:50
double n_x
Definition: var_struc.h:48
double F_e
Definition: var_struc.h:51
double d_u
Definition: var_struc.h:52
double t_u
Definition: var_struc.h:53
double Z_a
Definition: var_struc.h:58
double F_u
Definition: var_struc.h:51
double F_v
interfacial fluxes at t_{n+1/2}.
Definition: var_struc.h:51
double lambda_u
Definition: var_struc.h:54
double d_v
normal spatial derivatives.
Definition: var_struc.h:52
double P_int
Definition: var_struc.h:50
double config[]
Initial configuration data array.
Definition: hydrocode.c:115