// Model.h : main header file for the MODEL library
//
// "Процессорность": однопроцессорный выриант, распараллеливание
enum TProcKind { kOneProc, kServerProc, kClientProc };
// Модель: скорости, вихря, тока, температуры, вязкости
enum TModelKind { kUModel, kOmModel, kPsiModel, kTModel, kNuModel };
// Тип ячейки: воздух (жидкость), здание (тело)
enum TCellKind { kAir, kBuildings };
// Модель вычисления вязкости
enum TNuMethodKind { kLaminaryMeth, kPKMethod, kSekundovMeth };
// Стороны: граница области, соседний проц
enum TSideKind { kBoundary=1, kNextProc=0 };
#define nFields 7
class AFX_EXT_CLASS CModel //: public CObject // Класс "Модель"
{
public:
int kProc, kNuMethod; // "Процессорность", метод выч-я вязкости
int kLeft, kRight; // Стороны (типа TSideKind)
int Nx, Ny; // Размеры сетки
double h, tau, Time; // Шаги по расстоянию и по времени, время
double // Коэффициенты и экстр.значения:
kMu, kMolNu, kNu, kR, // молярная масса, молекулярная вязкость,
вязкость и унив. газовая пост. воздуха
kRo, kP, kT, // плотность, давление, температура воздуха
kUx0, kUy0, // начальная скорость ветра
kMinT, kMaxT, // мин. и макс. температуры
kA, kQ_CRo, // коэффициенты A и (q)/c/ro
kMaxPsi, kEpsPsi; // макс. Psi и ошибка Psi
union { // Поля
(double **)Fields[nFields];
struct { double **Ux, **Uy, **Om, **Psi, **T, **Nu, **NewG; };
};
char **Cells; // Карта типов ячеек
double F, FP, FFr; // Силы: общая, трения и давления
// POINT Area = { (Nx+1)*h, (Ny+1)*h } // Координаты рассматриваемой
области в метрах
RECT Build; // <every_coord>*h // Координаты здания (тела) в метрах
// Инициализация
CModel ();
virtual ~CModel();
void AllocFields(); // Выделить память для полей
void FreeFields(); // Освободить память для полей
void Init (int akProc, int akLeft, int akRight, int akNuMethod,
int aNx, int aNy, double ah, double atau, RECT aBuild); //
Инициализировать модель
void InitFields (RECT aBuild); // Инициализировать коэф-ты и поля
// Расчет шага
void UpdateData(); // Сделать шаг по времени