You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/Include/nmNum/nmData/nmDataAutomaticFitting.h

162 lines
5.9 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#ifndef NMDATAAUTOMATICFITTING_H
#define NMDATAAUTOMATICFITTING_H
#include "nmData_global.h"
#include "nmDataBase.h"
#include "nmDataAttribute.h"
#include <QVector>
// 一项拟合未知量,参数类型仍沿用原来的六种;储层参数的井编码为空。
struct NM_DATA_EXPORT nmFitParameter
{
nmFitParameter() : type(0), selected(false), initial(0.0), lower(0.0), upper(0.0) {}
QString wellCode, wellName;
int type; // 0 k,1 Skin,2 C,3 phi,4 Dfc,5 裂缝半长。
bool selected;
double initial, lower, upper;
QString name() const;
QString code() const;
QString unit() const;
QString samplingKey() const;
};
class NM_DATA_EXPORT nmDataAutomaticFitting : public nmDataBase
{
Q_OBJECT
public:
nmDataAutomaticFitting();
~nmDataAutomaticFitting();
nmDataAutomaticFitting(const nmDataAutomaticFitting& other); // 拷贝构造函数
nmDataAutomaticFitting& operator=(const nmDataAutomaticFitting& other); // 赋值运算符
// 实现 nmDataBase 的抽象方法:将当前 C++ 对象序列化为 RapidJSON Value
virtual rapidjson::Value ToJsonValue(rapidjson::Document::AllocatorType& allocator) const override;
// 实现 nmDataBase 的抽象方法:从 RapidJSON Value 反序列化数据到当前 C++ 对象
virtual void FromJsonValue(const rapidjson::Value& jsonValue) override;
// 多井参数按表格顺序保存,旧项目无此列表时沿用原单井配置。
QVector<nmFitParameter>& getModelParameters();
const QVector<nmFitParameter>& getModelParameters() const;
bool hasSelectedParameters() const;
// Getter and Setter for permeabilityMax
nmDataAttribute& getPermeabilityMax();
void setPermeabilityMax(const nmDataAttribute& permeabilityMax);
// Getter and Setter for permeabilityMin
nmDataAttribute& getPermeabilityMin();
void setPermeabilityMin(const nmDataAttribute& permeabilityMin);
// Getter and Setter for skinMax
nmDataAttribute& getSkinMax();
void setSkinMax(const nmDataAttribute& skinMax);
// Getter and Setter for skinMin
nmDataAttribute& getSkinMin();
void setSkinMin(const nmDataAttribute& skinMin);
// Getter and Setter for wellboreStorageMax
nmDataAttribute& getWellboreStorageMax();
void setWellboreStorageMax(const nmDataAttribute& wellboreStorageMax);
// Getter and Setter for wellboreStorageMin
nmDataAttribute& getWellboreStorageMin();
void setWellboreStorageMin(const nmDataAttribute& wellboreStorageMin);
// Getter and Setter for porosityMax
nmDataAttribute& getPorosityMax();
void setPorosityMax(const nmDataAttribute& porosityMax);
// Getter and Setter for porosityMin
nmDataAttribute& getPorosityMin();
void setPorosityMin(const nmDataAttribute& porosityMin);
// Getter and Setter for fractureConductivityMax
nmDataAttribute& getFractureConductivityMax();
void setFractureConductivityMax(const nmDataAttribute& fractureConductivityMax);
// Getter and Setter for fractureConductivityMin
nmDataAttribute& getFractureConductivityMin();
void setFractureConductivityMin(const nmDataAttribute& fractureConductivityMin);
// Getter and Setter for fractureHalfLengthMax
nmDataAttribute& getFractureHalfLengthMax();
void setFractureHalfLengthMax(const nmDataAttribute& fractureHalfLengthMax);
// Getter and Setter for fractureHalfLengthMin
nmDataAttribute& getFractureHalfLengthMin();
void setFractureHalfLengthMin(const nmDataAttribute& fractureHalfLengthMin);
// Getter and Setter for iteration count
nmDataAttribute& getIterationCount();
void setIterationCount(const nmDataAttribute& iterationCount);
// Getter and Setter for error tolerance
nmDataAttribute& getErrorTolerance();
void setErrorTolerance(const nmDataAttribute& errorTolerance);
QString getAlgorithmName() const;
void setAlgorithmName(const QString& algorithmName);
bool getSurrogateScreeningEnabled() const;
void setSurrogateScreeningEnabled(bool enabled);
// Getter and Setter for parameter selection flags
bool getPermeabilitySelected() const;
void setPermeabilitySelected(bool selected);
bool getSkinSelected() const;
void setSkinSelected(bool selected);
bool getWellboreStorageSelected() const;
void setWellboreStorageSelected(bool selected);
bool getPorositySelected() const;
void setPorositySelected(bool selected);
bool getFractureConductivitySelected() const;
void setFractureConductivitySelected(bool selected);
bool getFractureHalfLengthSelected() const;
void setFractureHalfLengthSelected(bool selected);
private:
QVector<nmFitParameter> m_modelParameters;
// 参数最大值
nmDataAttribute m_permeabilityMax;
nmDataAttribute m_skinMax;
nmDataAttribute m_wellboreStorageMax;
nmDataAttribute m_porosityMax;
nmDataAttribute m_fractureConductivityMax;
nmDataAttribute m_fractureHalfLengthMax;
// 参数最小值
nmDataAttribute m_permeabilityMin;
nmDataAttribute m_skinMin;
nmDataAttribute m_wellboreStorageMin;
nmDataAttribute m_porosityMin;
nmDataAttribute m_fractureConductivityMin;
nmDataAttribute m_fractureHalfLengthMin;
// 迭代参数
nmDataAttribute m_iterationCount; // 迭代步数
nmDataAttribute m_errorTolerance; // 误差精度
QString m_algorithmName; // 算法名称
bool m_surrogateScreeningEnabled;
// 参数选择标志
bool m_permeabilitySelected; // 是否选择渗透率进行拟合
bool m_skinSelected; // 是否选择表皮系数进行拟合
bool m_wellboreStorageSelected; // 是否选择井筒储集系数进行拟合
bool m_porositySelected; // 是否选择孔隙度进行拟合
bool m_fractureConductivitySelected; // 是否选择裂缝导流能力进行拟合
bool m_fractureHalfLengthSelected; // 是否选择裂缝半长进行拟合
};
// 敏感性窗口持有的临时拟合设置,确认后才替换,不写入当前模型。
struct nmSensitivityFitSettings
{
nmSensitivityFitSettings() : confirmed(false) {}
bool confirmed;
nmDataAutomaticFitting parameters;
QString targetWell;
QVector<double> initialValues;
};
#endif // NMDATAAUTOMATICFITTING_H