当前位置:
文档之家› 一个FLAC的PPT本构模型
一个FLAC的PPT本构模型
初始化各式 中的常数
const char *UserMohrModel::Run(unsigned uDim,State *ps){ if ((uDim!=3)&&(uDim!=2)) return("Illegal dimension in Mohr constitutive model"); if(ps->dHystDampMult > 0.0) HDampInit(ps->dHystDampMult); /* --- plasticity indicator: */ /* store 'now' info. as 'past' and turn 'now' info off ---*/ if (ps->mState & mShearNow) ps->mState = (unsigned long)(ps->mState | mShearPast); ps->mState = (unsigned long)(ps->mState & ~mShearNow); if (ps->mState & mTensionNow) ps->mState = (unsigned long)(ps->mState | mTensionPast); ps->mState = (unsigned long)(ps->mState & ~mTensionNow);
返回目录
double UserModel::GetProperty()和void UserModel:: SetProperty()函数 const char * UserModel::Initialize()函数 参数和状态指示器的初始化,并对派生类声明中定义的 私有变量进行赋值 const char * UserModel::Run(unsigned nDin,States *ps) 函数 由应变增量计算得到应力增量,从而获得新的应力 const char * UserModel::SaveRestore()函数 对计算结果进行保存。 程序的调试 在VC++的工程设置中将FLAC3D软件中的EXE文件路径加 入到程序的调试范围中,并将FLAC3D自带的DLL文件加 入到附加动态链接库(Additional DLLs)中,然后在 Initialize()或Run()函数中设置断点,进行调试; 在程序文件中加入return()语句,这样可以将希望得 到的变量值以错误提示的形式在FLAC3D窗口中得到。
返回目录
自定义本构模型的基本方法
头文件(usermodel.h)中进行新的本构模型派生类的声明 修改模型的ID(>100)、名称和版本 修改派生类的私有成员:私有变量和成员函数 C++文件(usermodel.cpp)中修改模型结构 (UserModel::UserModel(bool bRegister): ConstitutiveModel) const char **UserModel::Properties()函数 模型的参数名称字符串:用于在模型中显示 const char **UserModel::States()函数 计算过程中的状态指示器:单元屈服状态
常用模型信息传递指针变量
返回目录
模型源程序分解
返回目录
静力本构
(Mohr-Coulomb)
MC本构
① ②
①ቤተ መጻሕፍቲ ባይዱ剪切屈服 ②-拉伸屈服
1. 屈服函数
剪切屈服
2. 塑性势函数
非关联
拉屈服
关联
剪切屈服修正
写成线性函数S:
拉伸屈服修正
写成线性函数S:
const char *UserMohrModel::Initialize(unsigned uDim,State *) { if ((uDim!=2)&&(uDim!=3)) return("Illegal dimension in UserMohr constitutive model"); dE1 = dBulk + d4d3 * dShear; dE2 = dBulk - d2d3 * dShear; dG2 = 2.0 * dShear; double dRsin = sin(dFriction * dDegRad); dNPH = (1.0 + dRsin) / (1.0 - dRsin); dCSN = 2.0 * dCohesion * sqrt(dNPH); if (dFriction) { double dApex = dCohesion * cos(dFriction * dDegRad) / dRsin; dTension = dTension < dApex ? dTension : dApex; } dRsin = sin(dDilation * dDegRad); dRnps = (1.0 + dRsin) / (1.0 - dRsin); double dRa = dE1 - dRnps * dE2; double dRb = dE2 - dRnps * dE1; double dRd = dRa - dRb * dNPH; dSC1 = dRa / dRd; dSC3 = dRb / dRd; dSC2 = dE2 * (1.0 - dRnps) / dRd; dBISC = sqrt(1.0 + dNPH * dNPH) + dNPH; dE21 = dE2 / dE1; return(0); }
内
容
必要性
试验总结的本构模型 特定条件下的本构模型 交叉学科的本构模型
二次开发环境
自定义本构模型的功能 自定义本构模型的基本方法 常用模型信息传递指针变量 模型源程序分解
二次开发环境
FLAC3D采用面向对象的语言标准C++编写
本构模型都是以动态连接库文件(.DLL文件)的形式提供 VC++6.0(SP4)或更高版本的开发环境 优点
自定义的本构模型和软件自带的本构模型的执行效率
处在同一个水平
自定义本构模型(.DLL文件)适用于高版本的FLAC(2D)、
3DEC、UDEC等其他Itasca软件中
返回目录
自定义本构模型的功能
主要功能:对给出的应变增量得到新的应力 辅助功能: 模型名称、版本 读写操作 模型文件的编写 基类(class Constitutive Model)的描述 成员函数的描述 模型的注册 模型与FLAC3D之间的信息交换 模型状态指示器的描述