113 dcdg = 1.0 / (2. * sqrt(v[3])) - sqrt(v[3]) / (v[3]+
m_Suth);
119 c = pow(v[3], (
Omega-1.0));
120 dcdg = (
Omega - 1.0) * pow(v[3], (
Omega - 2.0));
131 dv[2] = - v[2] * (cp + v[0]) / c;
133 dv[4] = - v[4] * (cp +
m_Pr * v[0]) / c -
156 for (
int i = 0; i < n ; i++)
158 yt[i] = y[i] + hh * dydx[i];
163 for (
int i = 0; i < n; i++)
165 yt[i] = y[i] + hh * dyt[i];
170 for (
int i = 0; i < n; i++)
172 yt[i] = y[i] + h * dym[i];
173 dym[i] = dyt[i] + dym[i];
178 for (
int i = 0; i < n; i++)
180 yout[i] = y[i] + h6 * (dydx[i] + dyt[i] + 2 * dym[i]);
201 for (
int i = 0; i < nvar; i++)
209 h = (x2-x1) / m_xpoints;
214 RK4 (v, dv, nvar, x, h, v);
218 cout <<
"bug" << endl;
224 for (
int i = 0; i < nvar; i++)
266 z[i] = z[i-1] + 0.5 * (xx[i] - xx[i-1]) * (ff[3][i] + ff[3][i-1]);
267 dm = ff[3][i-1] - ff[1][i-1];
268 dd = ff[3][i] - ff[1][i];
269 sumd = sumd + 0.5 * (xx[i] - xx[i-1]) * (dd + dm);
271 if ((ff[1][i] > 0.999) && (flg < 1.0))
281 file3.open(
"physical_data.dat");
287 for (
int k = 0; k < 5; k++)
294 rho[i] = (1.0 / ff[3][i]);
295 vv[i] = -ff[0][i]/sqrt(
m_uInf);
297 velocity[i] = ff[0][i] ;
302 for (
int i = 0; i < nQuadraturePts; i++)
306 cout <<
"i" <<
" " << i <<
"/" << nQuadraturePts << endl;
309 xcher = x_QuadraturePts[i];
310 ycher = y_QuadraturePts[i];
314 rex = 0.5 * pow(((
m_Re) / scale), 2) + (
m_Re) * xin;
315 delsx = sqrt(2.0 / rex) * scale * (xin)*
m_Pr;
316 scale = scale / delsx;
318 scale2 = ycher * (scale * delta) / sqrt(
etamax) ;
319 coeff = 0.5 * sqrt( 2 / (xcher*
m_Re)) ;
321 if (scale2 > z[m_xpoints-3])
323 u_QuadraturePts[i] = 1;
324 rho_QuadraturePts[i] = 1;
325 T_QuadraturePts[i] = 1.0 / rho_QuadraturePts[i];
326 v_QuadraturePts[i] = coeff * (z[m_xpoints-3] -
327 velocity[m_xpoints-3]);
329 file3 << xcher <<
" "
331 << velocity[m_xpoints-3] <<
" "
332 << z[m_xpoints-3] <<
" "
338 for (
int j = 0 ; j< m_xpoints-1; j++)
340 if ((z[j] <= scale2) && (z[j+1] > scale2))
347 u_QuadraturePts[i] = u[index];
348 rho_QuadraturePts[i] = rho[index];
349 T_QuadraturePts[i] = 1.0/rho_QuadraturePts[i];
350 v_QuadraturePts[i] = coeff * (u[index]*scale2 - velocity[index]);
360 int main(
int argc,
char *argv[])
374 for (
int i = 0; i < nmax; i++)
396 int expdim = graphShPt->GetMeshDimension();
398 int nElements, nQuadraturePts = 0;
411 vSession->GetVariable(0));
414 nElements = Domain->GetExpSize();
415 std::cout <<
"Number of elements = "
416 << nElements << std::endl;
419 nQuadraturePts = Domain->GetTotPoints();
420 std::cout <<
"Number of quadrature points = "
421 << nQuadraturePts << std::endl;
427 Domain->GetCoords(x_QuadraturePts, y_QuadraturePts, z_QuadraturePts);
429 else if (expdim == 3)
439 nElements = Domain->GetExpSize();
440 std::cout <<
"Number of elements = "
441 << nElements << std::endl;
444 nQuadraturePts = Domain->GetTotPoints();
445 std::cout <<
"Number of quadrature points = "
446 << nQuadraturePts << std::endl;
452 Domain->GetCoords(x_QuadraturePts, y_QuadraturePts, z_QuadraturePts);
456 ASSERTL0(
false,
"Routine available for 2D and 3D problem only.")
460 vSession->LoadParameter(
"Re",
m_Re, 1.0);
461 vSession->LoadParameter(
"Mach",
m_Mach, 1.0);
462 vSession->LoadParameter(
"TInf",
m_Tinf, 1.0);
463 vSession->LoadParameter(
"Twall",
m_Twall, 1.0);
464 vSession->LoadParameter(
"Gamma",
m_Gamma, 1.0);
465 vSession->LoadParameter(
"Pr",
m_Pr, 1.0);
466 vSession->LoadParameter(
"L",
m_long, 1.0);
467 vSession->LoadParameter(
"rhoInf",
m_rhoInf, 1.0);
468 vSession->LoadParameter(
"uInf",
m_uInf, 1.0);
469 vSession->LoadParameter(
"GasConstant",
m_R, 1.0);
470 vSession->LoadParameter(
"vInf",
m_vInf, 1.0);
471 vSession->LoadParameter(
"mu",
m_mu, 1.0);
478 cout <<
"Number of points" <<
" " <<
m_xpoints << endl;
494 v[0] = 0.47 * pow(v[1], 0.21);
498 v[1] = 0.062 * pow(
m_Mach, 2) - 0.1 * (
m_Tw - 1.0) *
500 v[0] = 0.45 - 0.01 *
m_Mach + (
m_Tw - 1.0) * 0.06;
529 for (
int k = 0; k < maxit; k++)
548 cout <<
"err" << scientific << setprecision(9) <<
" " << err << endl;
554 cout <<
"Calculating" << endl;
556 y_QuadraturePts, u_QuadraturePts, v_QuadraturePts,
557 rho_QuadraturePts, T_QuadraturePts);
564 vstart[2] = v[0] + dv[0];
585 vstart[3] = v[1] + dv[1];
590 vstart[4] = v[1] + dv[1];
598 al11 = (f1[0] - f[0]) / dv[0];
599 al21 = (f1[1] - f[1]) / dv[0];
600 al12 = (f2[0] - f[0]) / dv[1];
601 al22 = (f2[1] - f[1]) / dv[1];
602 det = al11 * al22 - al21 * al12;
604 dv[0] = ( - al22 * f[0] + al12 * f[1]) / det;
605 dv[1] = (al21 * f[0] - al11 * f[1]) / det;
610 else if (expdim == 3)
615 cout <<
"Calculating" << endl;
617 z_QuadraturePts, u_QuadraturePts, v_QuadraturePts,
618 rho_QuadraturePts, T_QuadraturePts);
625 vstart[2] = v[0] + dv[0];
646 vstart[3] = v[1] + dv[1];
651 vstart[4] = v[1] + dv[1];
659 al11 = (f1[0] - f[0]) / dv[0];
660 al21 = (f1[1] - f[1]) / dv[0];
661 al12 = (f2[0] - f[0]) / dv[1];
662 al22 = (f2[1] - f[1]) / dv[1];
663 det = al11 * al22 - al21 * al12;
665 dv[0] = ( - al22 * f[0] + al12 * f[1]) / det;
666 dv[1] = (al21 * f[0] - al11 * f[1]) / det;
676 verif.open(
"similarity_solution.dat");
677 for (
int i=0; i< nQuadraturePts; i++)
679 verif << scientific << setprecision(9) << x_QuadraturePts[i]
680 <<
" \t " << y_QuadraturePts[i] <<
" \t " ;
681 verif << scientific << setprecision(9) << u_QuadraturePts[i]
682 <<
" \t " << v_QuadraturePts[i] <<
" \t " ;
683 verif << scientific << setprecision(9) << rho_QuadraturePts[i]
684 <<
" \t " << T_QuadraturePts[i] << endl;
689 for (
int i = 0; i < nQuadraturePts; i++)
691 rho_QuadraturePts[i] = rho_QuadraturePts[i] *
m_rhoInf;
692 u_QuadraturePts[i] = u_QuadraturePts[i] *
m_uInf;
693 v_QuadraturePts[i] = v_QuadraturePts[i] *
m_uInf;
694 T_QuadraturePts[i] = T_QuadraturePts[i] *
m_Tinf;
696 T_QuadraturePts[i] = T_QuadraturePts[i] * rho_QuadraturePts[i] *
m_R;
697 T_QuadraturePts[i] = T_QuadraturePts[i] / (
m_Gamma-1);
698 T_QuadraturePts[i] = T_QuadraturePts[i] + 0.5 * rho_QuadraturePts[i] * (
699 pow(u_QuadraturePts[i], 2.0) + pow(v_QuadraturePts[i], 2.0));
701 u_QuadraturePts[i] = u_QuadraturePts[i] * rho_QuadraturePts[i];
702 v_QuadraturePts[i] = v_QuadraturePts[i] * rho_QuadraturePts[i];
734 Basis = Domain->GetExp(0)->GetBasis(0);
735 numModes = Basis->GetNumModes();
737 std::cout <<
"Number of modes = " << numModes << std::endl;
742 Exp2D_uk->UpdatePhys(), 1);
744 Exp2D_vk->UpdatePhys(), 1);
746 Exp2D_rhok->UpdatePhys(), 1);
748 Exp2D_Tk->UpdatePhys(), 1);
757 Exp[0]->FwdTrans(Exp2D_rhok->GetPhys(), Exp[0]->UpdateCoeffs());
758 Exp[1]->FwdTrans(Exp2D_uk->GetPhys(), Exp[1]->UpdateCoeffs());
759 Exp[2]->FwdTrans(Exp2D_vk->GetPhys(), Exp[2]->UpdateCoeffs());
760 Exp[3]->FwdTrans(Exp2D_Tk->GetPhys(), Exp[3]->UpdateCoeffs());
763 cout << argv[1] << endl;
764 string tmp = argv[1];
765 int len = tmp.size();
766 for (
int i = 0; i < len-4; ++i)
768 file_name += argv[1][i];
770 file_name = file_name+
".rst";
773 std::vector<LibUtilities::FieldDefinitionsSharedPtr>
774 FieldDef = Exp[0]->GetFieldDefinitions();
775 std::vector<std::vector<NekDouble> > FieldData(FieldDef.size());
777 for (j = 0; j < 4; j++)
779 for (i = 0; i < FieldDef.size(); i++)
783 FieldDef[i]->m_fields.push_back(
"rho");
787 FieldDef[i]->m_fields.push_back(
"rhou");
791 FieldDef[i]->m_fields.push_back(
"rhov");
795 FieldDef[i]->m_fields.push_back(
"E");
797 Exp[j]->AppendFieldData(FieldDef[i], FieldData[i]);
803 else if (expdim == 3)
839 Basis = Domain->GetExp(0)->GetBasis(0);
840 numModes = Basis->GetNumModes();
842 std::cout<<
"Number of modes = " << numModes << std::endl;
847 Exp3D_rhok->UpdatePhys(), 1);
849 Exp3D_uk->UpdatePhys(), 1);
851 Exp3D_vk->UpdatePhys(), 1);
853 Exp3D_wk->UpdatePhys(), 1);
855 Exp3D_Tk->UpdatePhys(), 1);
865 Exp[0]->FwdTrans(Exp3D_rhok->GetPhys(), Exp[0]->UpdateCoeffs());
866 Exp[1]->FwdTrans(Exp3D_uk->GetPhys(), Exp[1]->UpdateCoeffs());
867 Exp[2]->FwdTrans(Exp3D_vk->GetPhys(), Exp[2]->UpdateCoeffs());
868 Exp[3]->FwdTrans(Exp3D_wk->GetPhys(), Exp[3]->UpdateCoeffs());
869 Exp[4]->FwdTrans(Exp3D_Tk->GetPhys(), Exp[4]->UpdateCoeffs());
872 cout << argv[1] << endl;
873 string tmp = argv[1];
874 int len = tmp.size();
875 for (
int i = 0; i < len-4; ++i)
877 file_name += argv[1][i];
879 file_name = file_name+
".rst";
882 std::vector<LibUtilities::FieldDefinitionsSharedPtr>
883 FieldDef = Exp[0]->GetFieldDefinitions();
884 std::vector<std::vector<NekDouble> > FieldData(FieldDef.size());
886 for (j = 0; j < 5; j++)
888 for (i = 0; i < FieldDef.size(); i++)
892 FieldDef[i]->m_fields.push_back(
"rho");
896 FieldDef[i]->m_fields.push_back(
"rhou");
900 FieldDef[i]->m_fields.push_back(
"rhov");
904 FieldDef[i]->m_fields.push_back(
"rhow");
908 FieldDef[i]->m_fields.push_back(
"E");
910 Exp[j]->AppendFieldData(FieldDef[i], FieldData[i]);
917 std::cout <<
"----------------------------------------------------\n";
918 std::cout <<
"\n=================================================\n";
919 std::cout <<
"Similarity solution \n";
920 std::cout <<
"===================================================\n";
921 std::cout <<
"***************************************************\n";
922 std::cout <<
"DATA FROM THE SESSION FILE:\n";
923 std::cout <<
"Reynolds number = " <<
m_Re
924 <<
"\t[-]" << std::endl;
925 std::cout <<
"Mach number = " <<
m_Mach
926 <<
"\t[-]" << std::endl;
927 std::cout <<
"Characteristic length = " <<
m_long
928 <<
"\t[m]" << std::endl;
929 std::cout <<
"U_infinity = " <<
m_uInf
930 <<
"\t[m/s]" << std::endl;
931 std::cout <<
"***************************************************\n";
932 std::cout <<
"---------------------------------------------------\n";
933 std::cout <<
"MESH and EXPANSION DATA:\n";
934 std::cout <<
"Done." << std::endl;
#define ASSERTL0(condition, msg)
static boost::shared_ptr< MeshGraph > Read(const LibUtilities::SessionReaderSharedPtr &pSession, DomainRangeShPtr &rng=NullDomainRangeShPtr)
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
void OUTPUT(int m_xpoints, Array< OneD, NekDouble > xx, Array< OneD, Array< OneD, NekDouble > > ff, int nQuadraturePts, Array< OneD, NekDouble > x_QuadraturePts, Array< OneD, NekDouble > y_QuadraturePts, Array< OneD, NekDouble > u_QuadraturePts, Array< OneD, NekDouble > v_QuadraturePts, Array< OneD, NekDouble > rho_QuadraturePts, Array< OneD, NekDouble > T_QuadraturePts)
boost::shared_ptr< ContField2D > ContField2DSharedPtr
boost::shared_ptr< SessionReader > SessionReaderSharedPtr
static SessionReaderSharedPtr CreateInstance(int argc, char *argv[])
Creates an instance of the SessionReader class.
void RKDUMB(Array< OneD, NekDouble > vstart, int nvar, NekDouble x1, NekDouble x2, int m_xpoints, Array< OneD, NekDouble > xx, Array< OneD, Array< OneD, NekDouble > > y)
void RK4(Array< OneD, NekDouble > y, Array< OneD, NekDouble > dydx, int n, NekDouble x, NekDouble h, Array< OneD, NekDouble > yout)
boost::shared_ptr< ExpList2D > ExpList2DSharedPtr
Shared pointer to an ExpList2D object.
boost::shared_ptr< ExpList3D > ExpList3DSharedPtr
Shared pointer to an ExpList3D object.
int main(int argc, char *argv[])
void Write(const std::string &outFile, std::vector< FieldDefinitionsSharedPtr > &fielddefs, std::vector< std::vector< NekDouble > > &fielddata, const FieldMetaDataMap &fieldinfomap)
Write a field file in serial only.
boost::shared_ptr< Basis > BasisSharedPtr
boost::shared_ptr< ContField3D > ContField3DSharedPtr
boost::shared_ptr< MeshGraph > MeshGraphSharedPtr
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
void COMPBL(Array< OneD, NekDouble > v, Array< OneD, NekDouble > dv)