PHengLEI-NCCR/CFD/SpecDiffHybSolver/include/SpecSolver.h

261 lines
6.7 KiB
C++

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// PPPPP H H EEEEE N N GGGGG L EEEEE III +
// P P H H E NN N G L E I +
// PPPPP HHHHH EEEEE N N N G GG L EEEEE I +
// P H H E N N N G G L E I +
// P H H EEEEE N N GGGGG LLLLL EEEEE III +
//------------------------------------------------------------------------+
// Platform for Hybrid Engineering Simulation of Flows +
// China Aerodynamics Research and Development Center +
// (C) Copyright, Since 2010 +
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//! @file SpecSolver.h
//! @brief Solver of Fourier-Spectral method.
//! @author Zhang Zipei.
#pragma once
#include "TypeDefine.h"
#include "Complex.h"
#include "LIB_Macro.h"
#include "Param_SpecSolver.h"
#include "SpecDiffHybGrid.h"
#include "Spectrum.h"
#include "SpecGrid.h"
#include "RescaleField.h"
#include "Statistics.h"
#include "LES.h"
using namespace std;
namespace PHSPACE
{
class Param_SpecSolver;
//class SpecDiffHybGrid;
class SpecSolver
{
public:
SpecSolver();
~SpecSolver();
protected:
RDouble1D *nonlinearTermCoef, *pressureGradientTermCoef;
Complex4D *convectiveTerm, *complexLaplacianVelocityTerm;
Complex5D *complexPressureGradientTerm;
Complex4D *complexViscousTerm, *complexNonlinearTerm, *complexVelocityGradient, *complexVelocitySquare;
RDouble4D *realVelocityGradient, *realVelocitySquare;
Complex3D *complexU, *complexV, *complexW, *complexP, *complexDivergenceU;
RDouble3D *realnut3d;
RDouble1D *ek3DInit, *ek3D;
string nonlinearTermFile, nonlinearTermBackupFile;
string pressureGradientTermFile, pressureGradientTermBackupFile;
string laplacianVelocityTermFile, laplacianVelocityTermBackupFile;
string timeInformationRestartFile;
string velocityRestartFile, velocityBackupFile;
string pressureRestartFile, pressureBackupFile;
string velocityNameFile, fieldNameFile;
bool IsConvectiveTermFailed;
private:
RDouble realnut;
public:
LIB_EXPORT Param_SpecSolver * GetControlParameters() const;
void Run();
virtual const string GetResidualFileName();
SpecGrid *GetGrid();
private:
void Init();
void AllocTimeDependentData();
void InitGlobal();
//void ReadConvectiveTerm();
//void ReadTimeDependentInformation();
void Solve();
//void RescaleVelocityField(const int);
//void GetVelocityGradient();
//void GetNonlinearTerm();
//void GetViscousTerm();
//void InitFieldData();
//void AllocFieldData();
//void GetInitField();
//void InitFieldFileName();
//void WriteVelocityName();
//void InitProfile();
//void InitFromOldField();
//void OutputFieldRestartFile(const int);
//void GetAssumedSpectrum( const double, const double, double & );
//void GetAssumedSpectrumNearWall( const double, const double, double & );
//void ReadinVelocityRestartFile();
//void ReadinPressureRestartFile();
//void WriteVelocityRestartFile(const string);
//void WritePressureRestartFile(const string);
//void SetInitTimeDataCoef();
//void SetTimeDataCoef();
//void VanishingDIVproj();
//void OutputFieldName();
//void GetStatistics();
//void OutputResidual(const int);
//void OutputRestartData(const int);
//void OutputOldTimeData(const int);
//void WriteConvectiveTerm(const string);
//void WriteTimeDependentInformation();
//void mode00fix();
RescaleFieldHIT * GetRescaleFieldData();
void SetRescaleFieldData(RescaleFieldHIT *RescaleFieldData);
Spectrum * GetSpectrumData();
void SetSpectrumData(Spectrum *SpectrumData);
LESHIT * GetLESData();
void SetLESData(LESHIT *LESData);
StatisticsHIT *GetStatisticData();
void SetStatisticData(StatisticsHIT *StatisticData);
void NormVector(RDouble *vec1, RDouble *vec2, int ndim);
void GetAssumedSpectrum(RDouble modk, RDouble &ek);
void GetCBCSpectrum(RDouble modk, RDouble &ek);
static void Splint(RDouble *xa, RDouble *ya, RDouble *y2a, int n, RDouble x, RDouble &y);
void InitPressure();
void GetEkAll(RDouble1D *ek3D, int nMax);
void GetInitSpectrum();
void GetGradientVector(PHComplex *var, PHComplex *dVardX, PHComplex *dVardY, PHComplex *dVardZ);
void GetDivergence(PHComplex *vecX, PHComplex *vecY, PHComplex *vecZ, Complex3D *divVar);
protected:
virtual void FreeControlParameters();
virtual void InitControlParameters();
virtual bool JudgeIfRestart();
void SetGrid(SpecGrid *GridData);
void InitSpectrumData();
virtual void InitGridData();
virtual void InitTimeDependentData();
virtual void InitTimeDependentFileName();
virtual void SetInitTimeDataCoef();
virtual void SetTimeDataCoef();
virtual void InitFieldData();
virtual void InitFieldFileName();
virtual void AllocFieldData();
virtual void GetInitField();
virtual void WriteVelocityName();
virtual void InitProfile();
virtual void InitLESData();
virtual void InitStatisticsData();
virtual void InitRescaleData();
virtual void InitFromOldField();
virtual void ReadinVelocityRestartFile();
virtual void ReadinPressureRestartFile();
virtual void OutputFieldRestartFile();
virtual void WriteVelocityRestartFile(const string velocityFileName);
virtual void WritePressureRestartFile(const string pressureFileName);
virtual void InputOldTimeData();
virtual void ReadConvectiveTerm();
virtual void ReadTimeDependentInformation();
virtual void OutputFieldName();
virtual void GetRHS();
virtual void GetVelocityGradient();
virtual void GetNonlinearTerm();
virtual void RescaleVelocityField(const int nstep);
virtual void GetStatistics();
virtual void OutputResidual();
void FillActionKey(ActionKey *actkey, int action, const int level);
virtual void DumpRes(ActionKey *actkey);
virtual void PrepareFormatedResidual(string &formatRes);
virtual void OutputRestartData();
virtual void OutputOldTimeData();
virtual void WriteConvectiveTerm(const string);
virtual void WriteTimeDependentInformation();
virtual void OutputStatisticVisual();
virtual void DeAllocateGlobalVariables();
private:
class Spectrum * SpectrumData;
class SpecGrid * GridData;
class RescaleFieldHIT * RescaleFieldData;
class StatisticsHIT * StatisticData;
class LESHIT * LESData;
protected:
Param_SpecSolver *controlParameters;
};
#include "SpecSolver.hxx"
}