====== XMaterial ====== **//Inherited from//** [[class::domain::nitem|NItem]], **//Inherited by//** NULL **//Friend class//** MaterialManager, **//Description//** XMatrial封装了材料信息的数据类,它表征了仿真分析中仿真对象所使用的材料本构模型,在不同应用领域中都有各自独特的材料本构模型。例如: 结构力学: (1) 线性弹性模型:假设材料在受力作用下的应变-应力关系是线性的。这种模型通常适用于小应变范围内的材料,如钢、铝等金属材料。 (2) 非线性弹性模型:假设材料在受力作用下的应变-应力关系是非线性的。这种模型通常适用于弹性和塑性混合的情况下,例如混凝土、岩石等。 (3) 塑性模型:适用于材料在受力作用下发生塑性变形的情况。常见的塑性模型包括Von Mises、Mohr-Coulomb等。 热力学: (1) 线性热弹性模型:假设材料在受热作用下的应变-应力关系是线性的。这种模型通常适用于小温度变化范围内的材料。 (2) 热塑性模型:适用于材料在受热作用下发生塑性变形的情况。常见的热塑性模型包括Johnson-Cook、Cazacu等。 流体力学: (1) 线性流体模型:假设材料在受力作用下的应变-应力关系是线性的。这种模型通常适用于小应变率范围内的流体,例如水、空气等。 (2) 非牛顿流体模型:假设材料在受力作用下的应变-应力关系是非线性的,这种模型通常适用于高剪切率下的流体,如血液、涂料等。常见的非牛顿流体模型包括Bingham、Herschel-Bulkley等。 由此可见材料本构包含的数据复杂多样,不同分析所需要的数据有很大差异,因此XT将材料数据细分为密度、弹性、塑性、膨胀、热传导、比热等不同类别的子项(XMaterialEntry),将材料对象设计为若干材料子项的容器,用户可以根据需要添加相应的材料子项,每种类型的材料子项至多包含一个。XT系统内置了密度、弹性、塑性、膨胀、热传导、比热等子项,开发者可以自由扩展定制专用的材料子项。 材料对象一般通过单元属性(XProperty)与模型数据建立联系,因此可以建立材料库在多个工程中共享使用。 **//Members//** * OrderContainer [[xmaterial#m_entries|m_Entries]] * MaterialEntryManager * [[xmaterial#m_pentrypool|m_pEntryPool]] **//Public interface//** * [[xmaterial#xmaterial1|XMaterial]](ulong id, XMemPool * item_pool) * [[xmaterial#~xmaterial|~XMaterial]]() * [[xmaterial#xmaterial2|XMaterial]](const [[xmaterial#xmaterial2|XMaterial]] & r) * XMaterial & operator [[xmaterial#copy|=]] (const XMaterial & r) * const XMaterialEntry * [[xmaterial#getfirstentry|getFirstEntry]]() const * void [[xmaterial#setentrypool|setEntryPool]](MaterialEntryManager * pool) * virtual XMaterialEntry * [[xmaterial#addentry|addEntry]](TypeID t) * void [[xmaterial#removeentry|removeEntry]](TypeID t) * void [[xmaterial#addentry|addEntry]](XMaterialEntry * me) * void [[xmaterial#removeentry|removeEntry]](XMaterialEntry * me) * void [[xmaterial#bindentryiterator|bindEntryIterator]](MaterialEntryIterator * lIter) const * const XMaterialEntry * [[xmaterial#getentry|getEntry]](TypeID t) const * XMaterialEntry * [[xmaterial#getentry|getEntry]](TypeID t) * void [[xmaterial#clear|clear]]() * bool [[xmaterial#hasentry|hasEntry]](TypeID t) const * const MaterialEntryAttrib * [[xmaterial#getattribute|getAttribute]](TypeID t) const * void [[xmaterial#setattribute|setAttribute]](TypeID t,MaterialEntryAttrib * pAttr) * void [[xmaterial#saveattributetoxml|saveAttributeToXml]](const char * xml) * void [[xmaterial#loadattributefromxml|loadAttributeFromXml]](const char * xml) * void [[xmaterial#savetolib|saveToLib]](XmlWriter *xw, XmlElement * par) * void [[xmaterial#loadfromlib|loadFromLib]](XmlReader *xr, XmlElement * par) * void [[xmaterial#write|write]](XBinaryIO * io) * ErrorCode [[xmaterial#read|read]](XBinaryIO * io) * void [[xmaterial#write|write]](H5IO * io, H5Obj * grp) * bool [[xmaterial#read|read]](H5IO * io, H5Obj * grp) * int [[xmaterial#getentrycount|getEntryCount]]() const * void [[xmaterial#exchangescript|exchangeScript]](ParamList* pl) * void [[xmaterial#setdensity|setDensity]](double v) * double [[xmaterial#getdensity|getDensity]]() const * void [[xmaterial#setmodulus|setModulus]](double shear, double youngs) * double [[xmaterial#getshearmodulus|getShearModulus]]() const * double [[xmaterial#getyoungsmodulus|getYoungsModulus]]() const * double [[xmaterial#getpoissonrate|getPoissonRate]]() const ---- {{anchor:m_entries}} **OrderContainer m_Entries** 材料子项容器 {{anchor:m_pentrypool}} **MaterialEntryManager * m_pEntryPool** 材料子项管理器,用于为材料子项分配、释放内存空间 ---- {{anchor:xmaterial1}} **XMaterial(ulong id, XMemPool * item_pool)** *function: 构造函数 *parameters: - [i]ulong id: 材料ID - [i] XMemPool * item_pool: 内存池 *return value: 无 {{anchor:~xmaterial}} **~XMaterial()** *function: 析构函数 *parameters: NULL *return value: 无 {{anchor:xmaterial2}} **XMaterial(const XMaterial & r) ** *function: 复制构造函数 *parameters: - [i]const [[xmaterial#xmaterial2|XMaterial]] & r: 被复制的材料对象引用 *return value: 无 {{anchor:copy}} **XMaterial & operator = (const XMaterial & r)** *function: 复制材料 *parameters: - [i]const XMaterial & r: 复制材料r的数据 *return value: 无 {{anchor:getfirstentry}} **const XMaterialEntry * getFirstEntry() const** *function: 获取第一个材料子项 *parameters: NULL *return value: 第一个材料子项指针 {{anchor:setentrypool}} **void setEntryPool(MaterialEntryManager * pool)** *function: 设置材料子项管理器 *parameters: - [i]MaterialEntryManager * pool: 材料子项管理器 *return value: 无 {{anchor:addentry}} **virtual XMaterialEntry * addEntry(TypeID t)** *function: 添加材料子项 *parameters: - [i]TypeID t: 材料子项类别 *return value: 材料子项指针 {{anchor:removeentry}} **void removeEntry(TypeID t)** *function: 删除指定类型的材料子项 *parameters: - [i]TypeID t: 材料子项类别 *return value: 无 {{anchor:addentry}} **void addEntry(XMaterialEntry * me)** *function: 将材料子项me添加到材料对象中 *parameters: - [i]XMaterialEntry * me: 材料子项指针 *return value: 无 {{anchor:removeentry}} **void removeEntry(XMaterialEntry * me)** *function: 删除材料子项me *parameters: - [i]XMaterialEntry * me: 材料子项指针 *return value: 无 {{anchor:bindentryiterator}} **void bindEntryIterator(MaterialEntryIterator * lIter) const** *function: 绑定材料子项遍历器 *parameters: - [i]MaterialEntryIterator * lIter: 材料子项迭代器 *return value: 无 {{anchor:getentry}} **const XMaterialEntry * getEntry(TypeID t) const** *function: 获取指定类型的材料子项 *parameters: - [i]TypeID t: 材料子项类别 *return value: 材料子项指针 {{anchor:getentry}} **XMaterialEntry * getEntry(TypeID t)** *function: 获取指定类型的材料子项 *parameters: - [i]TypeID t: 材料子项类别 *return value: 材料子项指针 {{anchor:clear}} **void clear()** *function: 清空所有材料子项 *parameters: NULL *return value: 无 {{anchor:hasentry}} **bool hasEntry(TypeID t) const** *function: 判断材料释放包含指定类型的材料子项 *parameters: - [i]TypeID t: 材料子项类别 *return value: 如材料包含指定类别的材料子项返回true,否则返回false {{anchor:getattribute}} **const MaterialEntryAttrib * getAttribute(TypeID t) const** *function: 获取指定类型材料子项的属性 *parameters: - [i]TypeID t: 材料子项类型 *return value: 材料子项指针 {{anchor:setattribute}} **void setAttribute(TypeID t,MaterialEntryAttrib * pAttr)** *function: 设置指定类型的材料子项属性 *parameters: - [i]TypeID t: 材料子项类型 - [i]MaterialEntryAttrib * pAttr: 材料子项属性 *return value: 无 {{anchor:saveattributetoxml}} **void saveAttributeToXml(const char * xml)** *function: 将材料输出为xml格式的文件 *parameters: - [i]const char * xml: xml文件名 *return value: 无 {{anchor:loadattributefromxml}} **void loadAttributeFromXml(const char * xml)** *function: 从xml文件中载入材料数据 *parameters: - [i]const char * xml: xml文件名 *return value: 无 {{anchor:savetolib}} **void saveToLib(XmlWriter *xw, XmlElement * par)** *function: 将材料保存到xml格式的材料库中 *parameters: - [i]XmlWriter *xw: xml格式的材料库句柄 - [i] XmlElement * par: 材料对应的xml节点 *return value: 无 {{anchor:loadfromlib}} **void loadFromLib(XmlReader *xr, XmlElement * par)** *function: 从xml格式的材料库中载入材料数据 *parameters: - [i]XmlReader *xr: xml格式的材料库句柄 - [i] XmlElement * par: 材料对应的xml节点 *return value: 无 {{anchor:write}} **void write(XBinaryIO * io)** *function: 将材料数据写入到二进制文件中 *parameters: - [i]XBinaryIO * io: 二进制文件句柄 *return value: 无 {{anchor:read}} **ErrorCode read(XBinaryIO * io)** *function: 从二进制文件中读取材料数据 *parameters: - [i]XBinaryIO * io: 二进制文件句柄 *return value: 成功读取返回Error_None,否则返回响应的错误码 {{anchor:write}} **void write(H5IO * io, H5Obj * grp)** *function: 将材料数据写入到HDF5文件中 *parameters: - [i]H5IO * io: HDF5文件句柄 - [i] H5Obj * grp: 材料对应的HDF5节点 *return value: 无 {{anchor:read}} **bool read(H5IO * io, H5Obj * grp)** *function: 从HDF5文件中读取材料数据 *parameters: - [i]H5IO * io: HDF5文件句柄 - [i] H5Obj * grp: 材料对应的HDF5节点 *return value: 无 {{anchor:getentrycount}} **int getEntryCount() const** *function: 获取材料子项的个数 *parameters: NULL *return value: 材料子项的个数 {{anchor:setdensity}} **void setDensity(double v)** *function: 快捷设置材料的密度 *parameters: - [i]double v: 密度值 *return value: 无 {{anchor:getdensity}} **double getDensity() const** *function: 获取材料的密度值 *parameters: NULL *return value: 密度值 {{anchor:setmodulus}} **void setModulus(double shear, double youngs)** *function: 设置材料的弹性模量值 *parameters: - [i]double shear: 剪切模量 - [i] double youngs: 杨氏模量 *return value: 无 {{anchor:getshearmodulus}} **double getShearModulus() const** *function: 获取剪切模量值 *parameters: NULL *return value: 剪切模量值 {{anchor:getyoungsmodulus}} **double getYoungsModulus() const** *function: 获取杨氏模量值 *parameters: NULL *return value: 杨氏模量值 {{anchor:getpoissonrate}} **double getPoissonRate() const** *function: 获取材料泊松比 *parameters: NULL *return value: 泊松比