00001
00002
00003 #ifndef AMROC_PROBLEM_H
00004 #define AMROC_PROBLEM_H
00005
00006 #define DIM 3
00007
00008 #include "LBMProblem.h"
00009 #include "LBMD3Q19.h"
00010
00011 typedef double DataType;
00012 typedef LBMD3Q19<DataType> LBMType;
00013
00014 #define OWN_AMRSOLVER
00015 #include "LBMStdProblem.h"
00016
00017 class SolverSpecific :
00018 public AMRPreAdaptSolver<MicroType,FixupType,FlagType,DIM> {
00019 typedef AMRPreAdaptSolver<MicroType,FixupType,FlagType,DIM> base;
00020 typedef MicroType::InternalDataType DataType;
00021 public:
00022 SolverSpecific(IntegratorSpecific& integ,
00023 base::initial_condition_type& init,
00024 base::boundary_conditions_type& bc) : base(integ, init, bc) {
00025 SetLevelTransfer(new LBMF77LevelTransfer<LBMType,DIM>(integ.Scheme(), f_prolong, f_restrict));
00026 SetFileOutput(new SchemeFileOutput<LBMType,DIM>(integ.Scheme()));
00027 SetFixup(new FixupSpecific(integ.Scheme()));
00028 SetFlagging(new FlaggingSpecific(*this,integ.Scheme()));
00029 }
00030
00031 ~SolverSpecific() {
00032 delete _LevelTransfer;
00033 delete _Flagging;
00034 delete _Fixup;
00035 delete _FileOutput;
00036 }
00037
00038 virtual void SetupData() {
00039 base::SetupData();
00040 base::NAMRTimeSteps = 1;
00041 base::AdaptBndTimeInterpolate = 0;
00042 base::Step[0].LastTime = 1.e37;
00043 base::Step[0].VariableTimeStepping = -1;
00044 base::Step[0].dtv[0] = ((LBMIntegrator<LBMType,DIM> &)Integrator_()).LBM().TimeScale();
00045
00046 LBMType &lbm = (LBMType &)((LBMIntegrator<LBMType,DIM> &)Integrator_()).LBM();
00047 DataType u_avg_p = ((LBMBoundaryConditions<LBMType,DIM> &)BoundaryConditions_()).Side(3).aux[0];
00048 BBox wb = base::GH().wholebbox();
00049 DCoords lc = base::GH().worldCoords(wb.lower(),wb.stepsize());
00050 DCoords uc = base::GH().worldCoords(wb.upper()+wb.stepsize(),wb.stepsize());
00051 DataType l0_p=uc(0)-lc(0);
00052 DataType omega = lbm.Omega(lbm.TimeScale());
00053 double Re_p=u_avg_p*l0_p/lbm.GasViscosity();
00054 double Re_lbm=(u_avg_p/lbm.VelocityScale())*(l0_p/lbm.LengthScale())/lbm.LatticeViscosity(omega);
00055 std::cout << "l0_p=" << l0_p << " u_avg_p=" << u_avg_p
00056 << " Re_p=" << Re_p << " Re_lbm=" << Re_lbm << std::endl;
00057 assert(std::fabs(Re_p-Re_lbm)<DBL_EPSILON*LB_FACTOR);
00058 }
00059 };