00001
00002
00003
00004
00005
00006
00007 #ifndef AMROC_PROBLEM_H
00008 #define AMROC_PROBLEM_H
00009
00010 #define DIM 3
00011
00012 #include "LBMProblem.h"
00013
00014 #include "LBMD3Q19Thermal.h"
00015
00016 typedef double DataType;
00017 typedef LBMD3Q19Thermal<DataType> LBMType;
00018
00019 #define OWN_LBMSCHEME
00020 #include "LBMStdProblem.h"
00021
00022
00023 class LBMSpecific : public LBMType {
00024 typedef LBMType base;
00025 public:
00026 LBMSpecific() : base(), Tmp(1.), deltaTp(1.), gp(1.), betap(1.), Diffp(1.),GasRho(1.), Gasnu(1.), Gasp0(1.) {}
00027
00028 virtual void register_at(ControlDevice& Ctrl, const std::string& prefix) {
00029 base::register_at(Ctrl,prefix);
00030 RegisterAt(base::LocCtrl,"Tm",Tmp);
00031 RegisterAt(base::LocCtrl,"deltaT",deltaTp);
00032 RegisterAt(base::LocCtrl,"g",gp);
00033 RegisterAt(base::LocCtrl,"beta",betap);
00034 RegisterAt(base::LocCtrl,"Diff",Diffp);
00035 RegisterAt(base::LocCtrl,"Gas_rho",GasRho);
00036 RegisterAt(base::LocCtrl,"Gas_nu",Gasnu);
00037 RegisterAt(base::LocCtrl,"Gas_p0",Gasp0);
00038 }
00039
00040
00041 virtual void SetupData(GridHierarchy* gh, const int& ghosts) {
00042 base::SetupData(gh,ghosts);
00043
00044 BBox wb = base::GH().wholebbox();
00045 DCoords lc = base::GH().worldCoords(wb.lower(),wb.stepsize());
00046 DCoords uc = base::GH().worldCoords(wb.upper()+wb.stepsize(),wb.stepsize());
00047
00048
00049 DataType Hp=uc(1)-lc(1);
00050
00051 DataType Speed = base::SpeedUp();
00052
00053 DataType viscp = Gasnu;
00054 DataType Pr = viscp/Diffp;
00055
00056 DataType tScale = base::TimeScale();
00057 DataType lScale = base::LengthScale();
00058 DataType THp = Tmp+deltaTp/DataType(2.);
00059 DataType TCp = Tmp-deltaTp/DataType(2.);
00060
00061 DataType Ra = gp*betap*deltaTp*std::pow(Hp,3)/viscp/Diffp;
00062
00063
00064 DataType GasCsp = base::LatticeSpeedOfSound();
00065
00066 base::SetGas(Gasp0,GasRho,viscp,GasCsp);
00067 base::SetThermalGas(TCp,THp,Diffp,gp,betap);
00068
00069
00070 std::cout << "D3Q19Thermal: Gas_rho=" << base::GasDensity() << " Gas_Cs=" << base::GasSpeedofSound()
00071 << " Gas_nu=" << base::GasViscosity() << " Gas_nut=" << base::GasViscosityT() << std::endl;
00072 std::cout << "\nControl Parameters : " << std::endl;
00073 std::cout << "Ra = " << Ra << " Pr = " << Pr << std::endl;
00074 std::cout << "\nTemperature : " << std::endl;
00075 std::cout << "TH = " << THp << " TC = " << TCp << std::endl;
00076 std::cout << "\nFluid values : " << std::endl;
00077 std::cout << "visc = " << viscp << " Diff = " << Diffp << " g = " << gp << " betap = " << betap << std::endl;
00078 std::cout << "\nGeometry : " << std::endl;
00079 std::cout << "Channel Width = " << Hp << std::endl;
00080 std::cout << "\nLattice Units : " << std::endl;
00081 std::cout << "(Amroc) Omega = " << base::Omega(base::TimeScale()) << " (Amroc) OmegaT = " << base::OmegaT(base::TimeScale()) << std::endl;
00082 std::cout << "(Amroc) Gas_nu = " << base::LatticeViscosity(base::Omega(base::TimeScale())) << " (Amroc) Gas_nuT = " << base::LatticeViscosityT(base::OmegaT(base::TimeScale())) << std::endl;
00083
00084
00085
00086 std::cout << "\nScaling Factors: " << std::endl;
00087 std::cout << "LengthScale = " << base::LengthScale() << std::endl;
00088 std::cout << "TimeScale = " << base::TimeScale() << std::endl;
00089 std::cout << "VelocityScale = " << base::VelocityScale() << std::endl;
00090 std::cout << "SpeedUp = " << base::SpeedUp() << std::endl;
00091
00092 }
00093
00094 protected:
00095 DataType Tmp, deltaTp, gp, betap, Diffp;
00096 DataType GasRho, Gasnu, Gasp0, Ra;
00097 };
00098
00099
00100 #endif