Loading src/FlowSolverRHEA.cpp +166 −58 Original line number Diff line number Diff line Loading @@ -1074,22 +1074,40 @@ void FlowSolverRHEA::updateBoundaries() { rho_g = rho_field[I1D(i,j,k)]; T_g = ( bocos_T[_WEST_] - wg_in*T_in )/wg_g; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double rel_error = 1.0; /// Aitken’s delta-squared process: double x_0_Aitken = rho_g; #pragma acc loop seq for( int ite = 0; ite < max_iter; ite++ ) { if( rel_error >= rel_tol ) { /// Aitken's x_1 double drho_dx_g = ( rho_in - rho_g )/Delta_g; double du_dx_g = ( u_in - u_g )/Delta_g; double dP_dx_g = ( P_in - P_g )/Delta_g; double L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; double L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; double dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); double rho_g_old = rho_g; rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); rel_error = abs( ( rho_g - rho_g_old )/rho_g_old ); //cout << ite << " " << rho_g_old << " " << rho_g << " " << rel_error << endl; double x_1_Aitken = rho_g; /// Aitken's x_2 drho_dx_g = ( rho_in - rho_g )/Delta_g; du_dx_g = ( u_in - u_g )/Delta_g; dP_dx_g = ( P_in - P_g )/Delta_g; L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double x_2_Aitken = rho_g; /// Aitken's iteration double denominator = x_2_Aitken - 2.0*x_1_Aitken + x_0_Aitken; rho_g = x_2_Aitken - ( pow( x_2_Aitken - x_1_Aitken, 2.0 )/( denominator + epsilon ) ); P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); ///cout << ite << " " << rho_g << " " << x_0_Aitken << " " << x_1_Aitken << " " << x_2_Aitken << endl; /// Aitken's convergence if( abs( (rho_g - x_2_Aitken )/rho_g ) < rel_tol ) { break; /// If the result is within tolerance, leave the loop! } x_0_Aitken = rho_g; /// Otherwise, update x_0 to iterate again ... } } else if( bocos_type[_WEST_] == _SUBSONIC_OUTFLOW_ ) { double Delta_g = mesh->x[i+1] - mesh->x[i]; Loading Loading @@ -1237,22 +1255,40 @@ void FlowSolverRHEA::updateBoundaries() { rho_g = rho_field[I1D(i,j,k)]; T_g = ( bocos_T[_EAST_] - wg_in*T_in )/wg_g; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double rel_error = 1.0; /// Aitken’s delta-squared process: double x_0_Aitken = rho_g; #pragma acc loop seq for( int ite = 0; ite < max_iter; ite++ ) { if( rel_error >= rel_tol ) { /// Aitken's x_1 double drho_dx_g = ( rho_in - rho_g )/Delta_g; double du_dx_g = ( u_in - u_g )/Delta_g; double dP_dx_g = ( P_in - P_g )/Delta_g; double L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; double L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; double dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); double rho_g_old = rho_g; rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); rel_error = abs( ( rho_g - rho_g_old )/rho_g_old ); //cout << ite << " " << rho_g_old << " " << rho_g << " " << rel_error << endl; double x_1_Aitken = rho_g; /// Aitken's x_2 drho_dx_g = ( rho_in - rho_g )/Delta_g; du_dx_g = ( u_in - u_g )/Delta_g; dP_dx_g = ( P_in - P_g )/Delta_g; L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double x_2_Aitken = rho_g; /// Aitken's iteration double denominator = x_2_Aitken - 2.0*x_1_Aitken + x_0_Aitken; rho_g = x_2_Aitken - ( pow( x_2_Aitken - x_1_Aitken, 2.0 )/( denominator + epsilon ) ); P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); ///cout << ite << " " << rho_g << " " << x_0_Aitken << " " << x_1_Aitken << " " << x_2_Aitken << endl; /// Aitken's convergence if( abs( (rho_g - x_2_Aitken )/rho_g ) < rel_tol ) { break; /// If the result is within tolerance, leave the loop! } x_0_Aitken = rho_g; /// Otherwise, update x_0 to iterate again ... } } else if( bocos_type[_EAST_] == _SUBSONIC_OUTFLOW_ ) { double Delta_g = mesh->x[i-1] - mesh->x[i]; Loading Loading @@ -1400,22 +1436,40 @@ void FlowSolverRHEA::updateBoundaries() { rho_g = rho_field[I1D(i,j,k)]; T_g = ( bocos_T[_SOUTH_] - wg_in*T_in )/wg_g; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double rel_error = 1.0; /// Aitken’s delta-squared process: double x_0_Aitken = rho_g; #pragma acc loop seq for( int ite = 0; ite < max_iter; ite++ ) { if( rel_error >= rel_tol ) { double drho_dy_g = ( rho_in - rho_g )/Delta_g; double dv_dy_g = ( v_in - v_g )/Delta_g; double dP_dy_g = ( P_in - P_g )/Delta_g; double L_2_lambda_2_g = sos_in*sos_in*drho_dy_g - dP_dy_g; double L_5_lambda_5_g = dP_dy_g + rho_in*sos_in*dv_dy_g; double dQ_1_dy_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); double rho_g_old = rho_g; rho_g = rho_in - Delta_g*dQ_1_dy_in; /// Aitken's x_1 double drho_dx_g = ( rho_in - rho_g )/Delta_g; double du_dx_g = ( u_in - u_g )/Delta_g; double dP_dx_g = ( P_in - P_g )/Delta_g; double L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; double L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; double dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double x_1_Aitken = rho_g; /// Aitken's x_2 drho_dx_g = ( rho_in - rho_g )/Delta_g; du_dx_g = ( u_in - u_g )/Delta_g; dP_dx_g = ( P_in - P_g )/Delta_g; L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double x_2_Aitken = rho_g; /// Aitken's iteration double denominator = x_2_Aitken - 2.0*x_1_Aitken + x_0_Aitken; rho_g = x_2_Aitken - ( pow( x_2_Aitken - x_1_Aitken, 2.0 )/( denominator + epsilon ) ); P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); rel_error = abs( ( rho_g - rho_g_old )/rho_g_old ); //cout << ite << " " << rho_g_old << " " << rho_g << " " << rel_error << endl; ///cout << ite << " " << rho_g << " " << x_0_Aitken << " " << x_1_Aitken << " " << x_2_Aitken << endl; /// Aitken's convergence if( abs( (rho_g - x_2_Aitken )/rho_g ) < rel_tol ) { break; /// If the result is within tolerance, leave the loop! } x_0_Aitken = rho_g; /// Otherwise, update x_0 to iterate again ... } } else if( bocos_type[_SOUTH_] == _SUBSONIC_OUTFLOW_ ) { double Delta_g = mesh->y[j+1] - mesh->y[j]; Loading Loading @@ -1563,22 +1617,40 @@ void FlowSolverRHEA::updateBoundaries() { rho_g = rho_field[I1D(i,j,k)]; T_g = ( bocos_T[_NORTH_] - wg_in*T_in )/wg_g; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double rel_error = 1.0; /// Aitken’s delta-squared process: double x_0_Aitken = rho_g; #pragma acc loop seq for( int ite = 0; ite < max_iter; ite++ ) { if( rel_error >= rel_tol ) { double drho_dy_g = ( rho_in - rho_g )/Delta_g; double dv_dy_g = ( v_in - v_g )/Delta_g; double dP_dy_g = ( P_in - P_g )/Delta_g; double L_2_lambda_2_g = sos_in*sos_in*drho_dy_g - dP_dy_g; double L_5_lambda_5_g = dP_dy_g + rho_in*sos_in*dv_dy_g; double dQ_1_dy_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); double rho_g_old = rho_g; rho_g = rho_in - Delta_g*dQ_1_dy_in; /// Aitken's x_1 double drho_dx_g = ( rho_in - rho_g )/Delta_g; double du_dx_g = ( u_in - u_g )/Delta_g; double dP_dx_g = ( P_in - P_g )/Delta_g; double L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; double L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; double dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); rel_error = abs( ( rho_g - rho_g_old )/rho_g_old ); //cout << ite << " " << rho_g_old << " " << rho_g << " " << rel_error << endl; double x_1_Aitken = rho_g; /// Aitken's x_2 drho_dx_g = ( rho_in - rho_g )/Delta_g; du_dx_g = ( u_in - u_g )/Delta_g; dP_dx_g = ( P_in - P_g )/Delta_g; L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double x_2_Aitken = rho_g; /// Aitken's iteration double denominator = x_2_Aitken - 2.0*x_1_Aitken + x_0_Aitken; rho_g = x_2_Aitken - ( pow( x_2_Aitken - x_1_Aitken, 2.0 )/( denominator + epsilon ) ); P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); ///cout << ite << " " << rho_g << " " << x_0_Aitken << " " << x_1_Aitken << " " << x_2_Aitken << endl; /// Aitken's convergence if( abs( (rho_g - x_2_Aitken )/rho_g ) < rel_tol ) { break; /// If the result is within tolerance, leave the loop! } x_0_Aitken = rho_g; /// Otherwise, update x_0 to iterate again ... } } else if( bocos_type[_NORTH_] == _SUBSONIC_OUTFLOW_ ) { double Delta_g = mesh->y[j-1] - mesh->y[j]; Loading Loading @@ -1726,22 +1798,40 @@ void FlowSolverRHEA::updateBoundaries() { rho_g = rho_field[I1D(i,j,k)]; T_g = ( bocos_T[_BACK_] - wg_in*T_in )/wg_g; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double rel_error = 1.0; /// Aitken’s delta-squared process: double x_0_Aitken = rho_g; #pragma acc loop seq for( int ite = 0; ite < max_iter; ite++ ) { if( rel_error >= rel_tol ) { double drho_dz_g = ( rho_in - rho_g )/Delta_g; double dw_dz_g = ( w_in - w_g )/Delta_g; double dP_dz_g = ( P_in - P_g )/Delta_g; double L_2_lambda_2_g = sos_in*sos_in*drho_dz_g - dP_dz_g; double L_5_lambda_5_g = dP_dz_g + rho_in*sos_in*dw_dz_g; double dQ_1_dz_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); double rho_g_old = rho_g; rho_g = rho_in - Delta_g*dQ_1_dz_in; /// Aitken's x_1 double drho_dx_g = ( rho_in - rho_g )/Delta_g; double du_dx_g = ( u_in - u_g )/Delta_g; double dP_dx_g = ( P_in - P_g )/Delta_g; double L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; double L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; double dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double x_1_Aitken = rho_g; /// Aitken's x_2 drho_dx_g = ( rho_in - rho_g )/Delta_g; du_dx_g = ( u_in - u_g )/Delta_g; dP_dx_g = ( P_in - P_g )/Delta_g; L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); rel_error = abs( ( rho_g - rho_g_old )/rho_g_old ); //cout << ite << " " << rho_g_old << " " << rho_g << " " << rel_error << endl; double x_2_Aitken = rho_g; /// Aitken's iteration double denominator = x_2_Aitken - 2.0*x_1_Aitken + x_0_Aitken; rho_g = x_2_Aitken - ( pow( x_2_Aitken - x_1_Aitken, 2.0 )/( denominator + epsilon ) ); P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); ///cout << ite << " " << rho_g << " " << x_0_Aitken << " " << x_1_Aitken << " " << x_2_Aitken << endl; /// Aitken's convergence if( abs( (rho_g - x_2_Aitken )/rho_g ) < rel_tol ) { break; /// If the result is within tolerance, leave the loop! } x_0_Aitken = rho_g; /// Otherwise, update x_0 to iterate again ... } } else if( bocos_type[_BACK_] == _SUBSONIC_OUTFLOW_ ) { double Delta_g = mesh->z[k+1] - mesh->z[k]; Loading Loading @@ -1889,22 +1979,40 @@ void FlowSolverRHEA::updateBoundaries() { rho_g = rho_field[I1D(i,j,k)]; T_g = ( bocos_T[_FRONT_] - wg_in*T_in )/wg_g; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double rel_error = 1.0; /// Aitken’s delta-squared process: double x_0_Aitken = rho_g; #pragma acc loop seq for( int ite = 0; ite < max_iter; ite++ ) { if( rel_error >= rel_tol ) { double drho_dz_g = ( rho_in - rho_g )/Delta_g; double dw_dz_g = ( w_in - w_g )/Delta_g; double dP_dz_g = ( P_in - P_g )/Delta_g; double L_2_lambda_2_g = sos_in*sos_in*drho_dz_g - dP_dz_g; double L_5_lambda_5_g = dP_dz_g + rho_in*sos_in*dw_dz_g; double dQ_1_dz_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); double rho_g_old = rho_g; rho_g = rho_in - Delta_g*dQ_1_dz_in; /// Aitken's x_1 double drho_dx_g = ( rho_in - rho_g )/Delta_g; double du_dx_g = ( u_in - u_g )/Delta_g; double dP_dx_g = ( P_in - P_g )/Delta_g; double L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; double L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; double dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double x_1_Aitken = rho_g; /// Aitken's x_2 drho_dx_g = ( rho_in - rho_g )/Delta_g; du_dx_g = ( u_in - u_g )/Delta_g; dP_dx_g = ( P_in - P_g )/Delta_g; L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double x_2_Aitken = rho_g; /// Aitken's iteration double denominator = x_2_Aitken - 2.0*x_1_Aitken + x_0_Aitken; rho_g = x_2_Aitken - ( pow( x_2_Aitken - x_1_Aitken, 2.0 )/( denominator + epsilon ) ); P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); rel_error = abs( ( rho_g - rho_g_old )/rho_g_old ); //cout << ite << " " << rho_g_old << " " << rho_g << " " << rel_error << endl; ///cout << ite << " " << rho_g << " " << x_0_Aitken << " " << x_1_Aitken << " " << x_2_Aitken << endl; /// Aitken's convergence if( abs( (rho_g - x_2_Aitken )/rho_g ) < rel_tol ) { break; /// If the result is within tolerance, leave the loop! } x_0_Aitken = rho_g; /// Otherwise, update x_0 to iterate again ... } } else if( bocos_type[_FRONT_] == _SUBSONIC_OUTFLOW_ ) { double Delta_g = mesh->z[k-1] - mesh->z[k]; Loading Loading
src/FlowSolverRHEA.cpp +166 −58 Original line number Diff line number Diff line Loading @@ -1074,22 +1074,40 @@ void FlowSolverRHEA::updateBoundaries() { rho_g = rho_field[I1D(i,j,k)]; T_g = ( bocos_T[_WEST_] - wg_in*T_in )/wg_g; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double rel_error = 1.0; /// Aitken’s delta-squared process: double x_0_Aitken = rho_g; #pragma acc loop seq for( int ite = 0; ite < max_iter; ite++ ) { if( rel_error >= rel_tol ) { /// Aitken's x_1 double drho_dx_g = ( rho_in - rho_g )/Delta_g; double du_dx_g = ( u_in - u_g )/Delta_g; double dP_dx_g = ( P_in - P_g )/Delta_g; double L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; double L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; double dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); double rho_g_old = rho_g; rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); rel_error = abs( ( rho_g - rho_g_old )/rho_g_old ); //cout << ite << " " << rho_g_old << " " << rho_g << " " << rel_error << endl; double x_1_Aitken = rho_g; /// Aitken's x_2 drho_dx_g = ( rho_in - rho_g )/Delta_g; du_dx_g = ( u_in - u_g )/Delta_g; dP_dx_g = ( P_in - P_g )/Delta_g; L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double x_2_Aitken = rho_g; /// Aitken's iteration double denominator = x_2_Aitken - 2.0*x_1_Aitken + x_0_Aitken; rho_g = x_2_Aitken - ( pow( x_2_Aitken - x_1_Aitken, 2.0 )/( denominator + epsilon ) ); P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); ///cout << ite << " " << rho_g << " " << x_0_Aitken << " " << x_1_Aitken << " " << x_2_Aitken << endl; /// Aitken's convergence if( abs( (rho_g - x_2_Aitken )/rho_g ) < rel_tol ) { break; /// If the result is within tolerance, leave the loop! } x_0_Aitken = rho_g; /// Otherwise, update x_0 to iterate again ... } } else if( bocos_type[_WEST_] == _SUBSONIC_OUTFLOW_ ) { double Delta_g = mesh->x[i+1] - mesh->x[i]; Loading Loading @@ -1237,22 +1255,40 @@ void FlowSolverRHEA::updateBoundaries() { rho_g = rho_field[I1D(i,j,k)]; T_g = ( bocos_T[_EAST_] - wg_in*T_in )/wg_g; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double rel_error = 1.0; /// Aitken’s delta-squared process: double x_0_Aitken = rho_g; #pragma acc loop seq for( int ite = 0; ite < max_iter; ite++ ) { if( rel_error >= rel_tol ) { /// Aitken's x_1 double drho_dx_g = ( rho_in - rho_g )/Delta_g; double du_dx_g = ( u_in - u_g )/Delta_g; double dP_dx_g = ( P_in - P_g )/Delta_g; double L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; double L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; double dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); double rho_g_old = rho_g; rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); rel_error = abs( ( rho_g - rho_g_old )/rho_g_old ); //cout << ite << " " << rho_g_old << " " << rho_g << " " << rel_error << endl; double x_1_Aitken = rho_g; /// Aitken's x_2 drho_dx_g = ( rho_in - rho_g )/Delta_g; du_dx_g = ( u_in - u_g )/Delta_g; dP_dx_g = ( P_in - P_g )/Delta_g; L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double x_2_Aitken = rho_g; /// Aitken's iteration double denominator = x_2_Aitken - 2.0*x_1_Aitken + x_0_Aitken; rho_g = x_2_Aitken - ( pow( x_2_Aitken - x_1_Aitken, 2.0 )/( denominator + epsilon ) ); P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); ///cout << ite << " " << rho_g << " " << x_0_Aitken << " " << x_1_Aitken << " " << x_2_Aitken << endl; /// Aitken's convergence if( abs( (rho_g - x_2_Aitken )/rho_g ) < rel_tol ) { break; /// If the result is within tolerance, leave the loop! } x_0_Aitken = rho_g; /// Otherwise, update x_0 to iterate again ... } } else if( bocos_type[_EAST_] == _SUBSONIC_OUTFLOW_ ) { double Delta_g = mesh->x[i-1] - mesh->x[i]; Loading Loading @@ -1400,22 +1436,40 @@ void FlowSolverRHEA::updateBoundaries() { rho_g = rho_field[I1D(i,j,k)]; T_g = ( bocos_T[_SOUTH_] - wg_in*T_in )/wg_g; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double rel_error = 1.0; /// Aitken’s delta-squared process: double x_0_Aitken = rho_g; #pragma acc loop seq for( int ite = 0; ite < max_iter; ite++ ) { if( rel_error >= rel_tol ) { double drho_dy_g = ( rho_in - rho_g )/Delta_g; double dv_dy_g = ( v_in - v_g )/Delta_g; double dP_dy_g = ( P_in - P_g )/Delta_g; double L_2_lambda_2_g = sos_in*sos_in*drho_dy_g - dP_dy_g; double L_5_lambda_5_g = dP_dy_g + rho_in*sos_in*dv_dy_g; double dQ_1_dy_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); double rho_g_old = rho_g; rho_g = rho_in - Delta_g*dQ_1_dy_in; /// Aitken's x_1 double drho_dx_g = ( rho_in - rho_g )/Delta_g; double du_dx_g = ( u_in - u_g )/Delta_g; double dP_dx_g = ( P_in - P_g )/Delta_g; double L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; double L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; double dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double x_1_Aitken = rho_g; /// Aitken's x_2 drho_dx_g = ( rho_in - rho_g )/Delta_g; du_dx_g = ( u_in - u_g )/Delta_g; dP_dx_g = ( P_in - P_g )/Delta_g; L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double x_2_Aitken = rho_g; /// Aitken's iteration double denominator = x_2_Aitken - 2.0*x_1_Aitken + x_0_Aitken; rho_g = x_2_Aitken - ( pow( x_2_Aitken - x_1_Aitken, 2.0 )/( denominator + epsilon ) ); P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); rel_error = abs( ( rho_g - rho_g_old )/rho_g_old ); //cout << ite << " " << rho_g_old << " " << rho_g << " " << rel_error << endl; ///cout << ite << " " << rho_g << " " << x_0_Aitken << " " << x_1_Aitken << " " << x_2_Aitken << endl; /// Aitken's convergence if( abs( (rho_g - x_2_Aitken )/rho_g ) < rel_tol ) { break; /// If the result is within tolerance, leave the loop! } x_0_Aitken = rho_g; /// Otherwise, update x_0 to iterate again ... } } else if( bocos_type[_SOUTH_] == _SUBSONIC_OUTFLOW_ ) { double Delta_g = mesh->y[j+1] - mesh->y[j]; Loading Loading @@ -1563,22 +1617,40 @@ void FlowSolverRHEA::updateBoundaries() { rho_g = rho_field[I1D(i,j,k)]; T_g = ( bocos_T[_NORTH_] - wg_in*T_in )/wg_g; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double rel_error = 1.0; /// Aitken’s delta-squared process: double x_0_Aitken = rho_g; #pragma acc loop seq for( int ite = 0; ite < max_iter; ite++ ) { if( rel_error >= rel_tol ) { double drho_dy_g = ( rho_in - rho_g )/Delta_g; double dv_dy_g = ( v_in - v_g )/Delta_g; double dP_dy_g = ( P_in - P_g )/Delta_g; double L_2_lambda_2_g = sos_in*sos_in*drho_dy_g - dP_dy_g; double L_5_lambda_5_g = dP_dy_g + rho_in*sos_in*dv_dy_g; double dQ_1_dy_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); double rho_g_old = rho_g; rho_g = rho_in - Delta_g*dQ_1_dy_in; /// Aitken's x_1 double drho_dx_g = ( rho_in - rho_g )/Delta_g; double du_dx_g = ( u_in - u_g )/Delta_g; double dP_dx_g = ( P_in - P_g )/Delta_g; double L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; double L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; double dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); rel_error = abs( ( rho_g - rho_g_old )/rho_g_old ); //cout << ite << " " << rho_g_old << " " << rho_g << " " << rel_error << endl; double x_1_Aitken = rho_g; /// Aitken's x_2 drho_dx_g = ( rho_in - rho_g )/Delta_g; du_dx_g = ( u_in - u_g )/Delta_g; dP_dx_g = ( P_in - P_g )/Delta_g; L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double x_2_Aitken = rho_g; /// Aitken's iteration double denominator = x_2_Aitken - 2.0*x_1_Aitken + x_0_Aitken; rho_g = x_2_Aitken - ( pow( x_2_Aitken - x_1_Aitken, 2.0 )/( denominator + epsilon ) ); P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); ///cout << ite << " " << rho_g << " " << x_0_Aitken << " " << x_1_Aitken << " " << x_2_Aitken << endl; /// Aitken's convergence if( abs( (rho_g - x_2_Aitken )/rho_g ) < rel_tol ) { break; /// If the result is within tolerance, leave the loop! } x_0_Aitken = rho_g; /// Otherwise, update x_0 to iterate again ... } } else if( bocos_type[_NORTH_] == _SUBSONIC_OUTFLOW_ ) { double Delta_g = mesh->y[j-1] - mesh->y[j]; Loading Loading @@ -1726,22 +1798,40 @@ void FlowSolverRHEA::updateBoundaries() { rho_g = rho_field[I1D(i,j,k)]; T_g = ( bocos_T[_BACK_] - wg_in*T_in )/wg_g; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double rel_error = 1.0; /// Aitken’s delta-squared process: double x_0_Aitken = rho_g; #pragma acc loop seq for( int ite = 0; ite < max_iter; ite++ ) { if( rel_error >= rel_tol ) { double drho_dz_g = ( rho_in - rho_g )/Delta_g; double dw_dz_g = ( w_in - w_g )/Delta_g; double dP_dz_g = ( P_in - P_g )/Delta_g; double L_2_lambda_2_g = sos_in*sos_in*drho_dz_g - dP_dz_g; double L_5_lambda_5_g = dP_dz_g + rho_in*sos_in*dw_dz_g; double dQ_1_dz_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); double rho_g_old = rho_g; rho_g = rho_in - Delta_g*dQ_1_dz_in; /// Aitken's x_1 double drho_dx_g = ( rho_in - rho_g )/Delta_g; double du_dx_g = ( u_in - u_g )/Delta_g; double dP_dx_g = ( P_in - P_g )/Delta_g; double L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; double L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; double dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double x_1_Aitken = rho_g; /// Aitken's x_2 drho_dx_g = ( rho_in - rho_g )/Delta_g; du_dx_g = ( u_in - u_g )/Delta_g; dP_dx_g = ( P_in - P_g )/Delta_g; L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); rel_error = abs( ( rho_g - rho_g_old )/rho_g_old ); //cout << ite << " " << rho_g_old << " " << rho_g << " " << rel_error << endl; double x_2_Aitken = rho_g; /// Aitken's iteration double denominator = x_2_Aitken - 2.0*x_1_Aitken + x_0_Aitken; rho_g = x_2_Aitken - ( pow( x_2_Aitken - x_1_Aitken, 2.0 )/( denominator + epsilon ) ); P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); ///cout << ite << " " << rho_g << " " << x_0_Aitken << " " << x_1_Aitken << " " << x_2_Aitken << endl; /// Aitken's convergence if( abs( (rho_g - x_2_Aitken )/rho_g ) < rel_tol ) { break; /// If the result is within tolerance, leave the loop! } x_0_Aitken = rho_g; /// Otherwise, update x_0 to iterate again ... } } else if( bocos_type[_BACK_] == _SUBSONIC_OUTFLOW_ ) { double Delta_g = mesh->z[k+1] - mesh->z[k]; Loading Loading @@ -1889,22 +1979,40 @@ void FlowSolverRHEA::updateBoundaries() { rho_g = rho_field[I1D(i,j,k)]; T_g = ( bocos_T[_FRONT_] - wg_in*T_in )/wg_g; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double rel_error = 1.0; /// Aitken’s delta-squared process: double x_0_Aitken = rho_g; #pragma acc loop seq for( int ite = 0; ite < max_iter; ite++ ) { if( rel_error >= rel_tol ) { double drho_dz_g = ( rho_in - rho_g )/Delta_g; double dw_dz_g = ( w_in - w_g )/Delta_g; double dP_dz_g = ( P_in - P_g )/Delta_g; double L_2_lambda_2_g = sos_in*sos_in*drho_dz_g - dP_dz_g; double L_5_lambda_5_g = dP_dz_g + rho_in*sos_in*dw_dz_g; double dQ_1_dz_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); double rho_g_old = rho_g; rho_g = rho_in - Delta_g*dQ_1_dz_in; /// Aitken's x_1 double drho_dx_g = ( rho_in - rho_g )/Delta_g; double du_dx_g = ( u_in - u_g )/Delta_g; double dP_dx_g = ( P_in - P_g )/Delta_g; double L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; double L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; double dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double x_1_Aitken = rho_g; /// Aitken's x_2 drho_dx_g = ( rho_in - rho_g )/Delta_g; du_dx_g = ( u_in - u_g )/Delta_g; dP_dx_g = ( P_in - P_g )/Delta_g; L_2_lambda_2_g = sos_in*sos_in*drho_dx_g - dP_dx_g; L_5_lambda_5_g = dP_dx_g + rho_in*sos_in*du_dx_g; dQ_1_dx_in = ( 1.0/( sos_in*sos_in ) )*( L_2_lambda_2_g + 0.5*( L_5_lambda_5_g + L_1_lambda_1_in_in ) ); rho_g = rho_in - Delta_g*dQ_1_dx_in; P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); double x_2_Aitken = rho_g; /// Aitken's iteration double denominator = x_2_Aitken - 2.0*x_1_Aitken + x_0_Aitken; rho_g = x_2_Aitken - ( pow( x_2_Aitken - x_1_Aitken, 2.0 )/( denominator + epsilon ) ); P_g = thermodynamics->calculatePressureFromTemperatureDensity( T_g, rho_g ); rel_error = abs( ( rho_g - rho_g_old )/rho_g_old ); //cout << ite << " " << rho_g_old << " " << rho_g << " " << rel_error << endl; ///cout << ite << " " << rho_g << " " << x_0_Aitken << " " << x_1_Aitken << " " << x_2_Aitken << endl; /// Aitken's convergence if( abs( (rho_g - x_2_Aitken )/rho_g ) < rel_tol ) { break; /// If the result is within tolerance, leave the loop! } x_0_Aitken = rho_g; /// Otherwise, update x_0 to iterate again ... } } else if( bocos_type[_FRONT_] == _SUBSONIC_OUTFLOW_ ) { double Delta_g = mesh->z[k-1] - mesh->z[k]; Loading