首页/文章/ 详情

面向对象有限元编程|节点类

6月前浏览5279

封装,继承和多态是面向对象的三大特征。

  • 封装

封装(Encapsulation)包括两个层次的概念。第一个层次是将对象的属性和方法集中起来--即对象本身。第二个层次是隐藏类的内部数据,以避免外部代码(客户端代码)直接访问。许多编程语言允许自定义私有变量和私有方法,对象可以访问这些变量和方法,外部代码却不行。Python中所有的变量都是可以公开访问的,若在变量名称前加下划线,可以起到私有变量的作用。


class RF
    def __init__(self):

        self._r = r
#r相当于私有,外部不能访问

  • 继承

子女会从父母那里继承血型,肤色等特征。类似地,在创建类时,该类也可以从另一个类那里继承属性和方法。被继承的类称为父类,继承的类则被成为子类。这个过程称为继承(Inheritance)。编写有限元程序时,先创建一个抽象的节点类:


class AbstractNode:
    def __init__ (self, id):
        self.id = id

然后其他的节点类可以从它这里继承,这样提高了代码的逻辑性,简洁性。比如创建一个桁架节点类,将抽象类的id属性继承过来,在此基础上扩展。


class TrussNode2D( AbstractNode ):
    def __init__ (self,  id,  coord_X, coord_Y, RX, RY, fx, fy):
        super().__init__(id)
        self.coord_X = coord_X             #X坐标
        self.coord_Y = coord_Y              #Y坐标
        self.RX = RX                       #X约束
        self.RY = RY                       #Y约束
        self.fx = fx                          #X节点力
        self.fy = fy                          #Y节点力

还可以将约束和节点力单独定义为类:

#include "AbstractNode.h"
#include "TrussRestrain.h"
#include "TrussNodeForce.h"

class TrussNode : public AbstractNode
{
protected:
    size_t id;
    double coordX, coordY;
    TrussRestrain  nodeRestrain;
    TrussNodeForce  nodeForce;


public:
    TrussNode() = default;
    TrussNode(size_t id_, double x_, double y_, int rx, int ry,
        double fx_, double fy_) :
        id{ id_ }, coordX{ x_ }, coordY{ y_ }, nodeRestrain{ rx, ry },
        nodeForce{ fx_, fy_ } { }


    virtual ~TrussNode() = default;

    double getCoordX() const return coordX; }
    double getCoordY() const return coordY; }

    size_t getID() const { return id; }

    void setCoordX(int x_) { coordX = x_; }
    void setCoordY(int y_) { coordY = y_; }

    size_t getNodeRX() const { return nodeRestrain.getRX(); }
    size_t getNodeRY() const { return nodeRestrain.getRY(); }

    void setNodeRX(int x_) { nodeRestrain.setRX(x_); }
    void setNodeRY(int y_) { nodeRestrain.setRY(y_); }

    double getNodeFx() const return nodeForce.getFx(); }
    double getNodeFy() const return nodeForce.getFy(); }

};


  • 多态

多态(Polymorphism)指的是“为不同数据类型”提供相关接口,即函数或者方法。下面就是一个多态的实例:print为字符串、整数和浮点数这3种数据类型提供了相同的接口。

print("hello world!")
print(2)
print(3.14)

如果一个有限元模型包含多种的节点和单元,则考虑多态。以后再谈。


来源:数值分析与有限元编程
ACTpython
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-04-02
最近编辑:6月前
太白金星
本科 慢慢来
获赞 5粉丝 8文章 318课程 0
点赞
收藏
作者推荐

面向对象的有限元编程|综述

一个重要的概念:类的聚合一个类可以包含诸多成员,而其中某些成员又可以是其他类的的对象。当一个类Person 包含一个成员name时,Person中的每个对象都将拥有一个string类的对象,这就是Has-a关系。每个person的实例都有(has)sring类的一个实例。术语聚合(Aggregation)通常用来描述一个类的对象拥有其它类的对象的情况。class person{ std::string name; int age;};//... 面向对象有限元编程综述在面向对象的有限元分析领域,具体的有限元模型可看作一个对象,叫作整体结构对象。整体结构对象又是一个聚合对象,它包含了多种其它类的对象,例如节点对象,单元对象,材料对象,荷载对象等等。如图1所示,将这些对象通过算法又形成整体结构对象。单元类单元对象是构成整个结构对象的基本要素,如杆单元,梁单元,板单元,壳单元等等。虽然单元形状和特性各不相同,但基本特征和功能是相同的。比如都具有一定的几何形状,通过节点与其它单元连接,包含材料信息,在结构分析中各单元皆以单元刚度矩阵的形式组装成整体结构。节点类节点是连接各单元的关节,单元按照节点分布组合成整体结构对象。节点类的属性主要有:节点坐标,节点自由度,节点力,节点约束等等。约束类约束类的节点类是Has-a关系,也就是说,节点对象的一个成员 是约束类的成员。以一个桁架节点约束为例class TrussRestrain { protected: int RX; int RY;//...};class TrussNode {protected: size_t id; double coordX, coordY; TrussRestrain nodeRestrain; //...}; 材料类材料类用于对材料特性的描述,如弹性模量,密度,线膨胀系数等等。对于线弹性静力分析,只需要弹性模量就可以了。对于非线性分析,还需要材料的本构关系。数值计算类数值计算类用于求解以及数据结构的组织,比如刚度矩阵,位移向量,节点力向量等等。整体结构类整体结构对象代表了整个结构,是一个聚合对象。整体结构类通过算法管理成员对象之间的关系,进行结构的计算分析。整体结构类只有一个实例,即结构对象。★★★ 往期相关 ★★★类和对象的哲学思考来源:数值分析与有限元编程

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈