PHengLEI-NCCR/API/Geometry/include/Geo_Sample.h

227 lines
9.1 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 Geo_Sample.h
//! @brief To set location information and data structure for Sampling.
//! @author MengLiyuan.
#pragma once
#include "Math_BasisFunction.h"
#include "Geo_Grid.h"
#include "Geo_UnstructGrid.h"
#include "Geo_StructGrid.h"
using namespace std;
namespace PHSPACE
{
class ProbeData
{
private:
vector <RDouble> probeCoordinates;
int probeGlobalID;
int probeLineID;
int probeSurfaceID;
bool isProbeValid;
RDouble probeToCellDistance;
int probeCellType;
int probeCellZoneID;
int probeCellID;
int probeCellNI;
int probeCellNJ;
int probeCellNK;
public:
ProbeData();
~ProbeData();
public:
//! To set coordinates by in-parameter.
void SetProbeCoordinates(const vector <RDouble> &probeCoordinates);
//! To set global index of the probe.
void SetProbeGlobalID(const int &probeGlobalID);
//! To set line index of the probe.
void SetProbeLineID(const int &probeLineID);
//! To set surface index of the probe.
void SetProbeSurfaceID(const int &probeSurfaceID);
//! To set validity of the probe.
void SetProbeValidity(const bool &isProbeValid);
//! To set distance from the probe to its cell.
void SetProbeToCellDistance(const RDouble &probeToCellDistance);
//! To set grid type of the probe cell.
void SetProbeCellType(const int &probeCellType);
//! To set zone index of the probe cell.
void SetProbeCellZoneID(const int &probeCellZoneID);
//! To set index of the probe cell(unstructured grid).
void SetProbeCellID(const int &probeCellID);
//! To set the probe cell dimension of i direction (structured grid).
void SetProbeCellNI(const int &probeCellNI);
//! To set the probe cell dimension of j direction (structured grid).
void SetProbeCellNJ(const int &probeCellNJ);
//! To set the probe cell dimension of k direction (structured grid).
void SetProbeCellNK(const int &probeCellNK);
//! To get coordinates of the probe.
vector <RDouble> GetProbeCoordinates();
//! To get validity of the probe.
bool GetProbeValidity();
//! To get distance from the probe to its cell.
RDouble GetProbeToCellDistance();
//! To get grid type of the probe cell.
int GetProbeCellType();
//! To get zone index of the probe cell.
int GetProbeCellZoneID();
//! To get index of the probe cell(unstructured grid).
int GetProbeCellID();
//! To Get global index of the probe.
int GetProbeGlobalID();
//! To Get line index of the probe.
int GetProbeLineID();
//! To Get surface index of the probe.
int GetProbeSurfaceID();
//! To get the probe cell dimension of i direction (structured grid).
int GetProbeCellNI();
//! To get the probe cell node dimension of j direction (structured grid).
int GetProbeCellNJ();
//! To get the probe cell node dimension of k direction (structured grid).
int GetProbeCellNK();
//! To search the cell nearest to the probe.
void SearchNearestCell(Grid *grid);
//! To search the cell nearest to the probe for structured grid.
void SearchNearestCell(StructGrid *grid);
//! To search the cell nearest to the probe for unstructured grid.
void SearchNearestCell(UnstructGrid *grid);
//! To search the real cell where the probe is located.
void SearchRealCell(Grid *grid, bool &flag);
//! To search the real cell where the probe is located for structured grid.
void SearchRealCell(StructGrid *grid, bool &flag);
//! To search the real cell where the probe is located for unstructured grid.
void SearchRealCell(UnstructGrid *grid, bool &flag);
//! To dump the probe cell information of the each probe for structured grid.
void WriteStructProbeCellInfo(fstream &file);
//! To dump the probe cell information of the each probe for unstructured grid.
void WriteUnstructProbeCellInfo(fstream &file);
//! Compress each ProbeData probe cell information to DataContainer for structured grid.
void CompressStructProbeCellInfo(DataContainer *cdata);
//! Compress each ProbeData probe cell information to DataContainer for unstructured grid.
void CompressUnstructProbeCellInfo(DataContainer *cdata);
//! Decompress DataContainer's probe cell information into each ProbeData for structured grid.
void DecompressStructProbeCellInfo(DataContainer *cdata);
//! Decompress DataContainer's probe cell information into each ProbeData for unstructured grid.
void DecompressUnstructProbeCellInfo(DataContainer *cdata);
};
class SampleLocationInfo
{
private:
string defineFileName;
int numberToMonitor;
bool defineFileExist;
int numberOfTotalProbes;
vector <int> numberOfProbes;
vector <int> surfaceProbes_ni;
vector <int> surfaceProbes_nj;
vector <int> typeOfTotalProbes;
vector <ProbeData *> sampleLocationInfo;
public:
SampleLocationInfo();
~SampleLocationInfo();
public:
void Run();
//! To set the file name of data monitor parameter.
void SetDefineFileName(const string &defineFileName);
//! To set the number of lines or surfaces.
void SetNumberToMonitor(const int &numberToMonitor);
//! To set the total number of probes.
void SetTotalProbesNumber(const int &numberOfTotalProbes);
//! To set the probes number of each line or surface.
void SetProbesNumber(const vector <int> &numberOfProbes);
//! To set the probe dimension of I direction of each surface.
void SetSurfaceProbesNI(const vector <int> &surfaceProbes_ni);
//! To set the probe dimension of J direction of each surface..
void SetSurfaceProbesNJ(const vector <int> &surfaceProbes_nj);
//!To set the grid type of all probes.
void SetTotalProbesType(const vector <int> &typeOfTotalProbes);
//! Check if the defined file exist(xxx_XYZ.dat).
void CheckIfDefineFileExist();
//! To get the number of lines or surfaces.
int GetNumberToMonitor();
//! To get the file name of data monitor parameter.
string GetDefineFileName();
//!To get the total number of probes.
int GetTotalProbesNumber();
//!To get the probes number of each line or surface.
vector <int> GetProbesNumber();
//! To get the probe dimension of I direction of each surface.
vector <int> GetSurfaceProbesNI();
//! To get the probe dimension of J direction of each surface..
vector <int> GetSurfaceProbesNJ();
//!To get the grid type of all probes.
vector <int> GetTotalProbesType();
//! To get the location information of all probes.
vector<ProbeData *> GetSampleLocationInfo();
//! If the defined file exist or not(xxx_XYZ.dat).
bool IfDefineFileExist();
//! No dimension the parameter.
void Nondimensional();
private:
//! To read coordination parameter in probesDefineFile.
void ReadProbesData();
//! To read coordination parameter in linesDefineFile.
void ReadLinesData();
//! To read coordination parameter in surfacesDefineFile.
void ReadSurfacesData();
//! Check the invalid probes data in define file.
void CheckInvalidProbesData();
//! Add or update all the probes' cell information to ProbData.
void UpdateAllProbesData();
//! Add or update all the probes' nearest cell information to ProbData.
void UpdateNearestCellsData();
//! Add or update all the probes' real cell information to ProbData.
void UpdateRealCellsData();
//! Add or update some global parameters about probes information.
void UpdateProbesGlobalPara();
//! Communicate with each processor,then determine probes' cell of all zones with minimum distance.
void ServerCollectionProbesData();
//! Broadcast all probes data to all processor.
void BroadcastProbesData();
//! Compress each ProbeData probe cell information to DataContainer.
void CompressProbesData(DataContainer *cdata);
//! Decompress DataContainer's probe cell information into each ProbeData
void DecompressProbesData(DataContainer *cdata);
//! To save the all probes cells data to class grid.
void SampleLocationInfoToGrid();
//! To dump the information of the all probes cells.
void WriteProbesCellInfo(const string &filename);
};
//! Check if the probe in Min-Max box.
bool CheckIfProbeInMinMaxBox(RDouble coordX, RDouble coordY, RDouble coordZ, RDouble *pmin, RDouble *pmax);
//! To dump the probes cells information file title.
void WriteProbesCellInfoHeader(fstream &file);
}