c++矩阵类_面向对象有限元编程|单元类

单元对象是构成整个结构对象的基本要素,如杆单元,梁单元,板单元,壳单元等等。虽然单元形状和特性各不相同,但基本特征和功能是相同的。比如都具有一定的几何形状,通过节点与其它单元连接,包含材料信息,在结构分析中各单元皆以单元刚度矩阵的形式组装成整体结构。各种单元的层次关系如图所示

▲单元层次关系

# 抽象单元类(基类)
class AbstractElement:
    def __init__ (self, id):
        self.id = id

对于一个桁架单元,其特征有编号、材料类型、横截面面积、两个节点的信息、单元长度、单元局部坐标与总体坐标的夹角、单元局部坐标与总体坐标的转换矩阵、单元局部坐标系下的刚度矩阵、单元整体坐标系下的刚度矩阵、应力矩阵、应变矩阵等等。

# 平面桁架单元类
class TrussElement2D(AbstractElement):
    def __init__ (self,id, A, mat, node1, node2):
        super().__init__(id)
        self.A = A
        self.mat = mat
        self.node1 = node1
        self.node2 = node2

    def elemDisp(self):
        return np.array( [ [0.], [0.], [0.], [0.] ] )
                          


    def elemLength(self):
        dx = self.node2.coord_X - self.node1.coord_X
        dy = self.node2.coord_Y - self.node1.coord_Y
        return  math.sqrt(dx*dx + dy*dy)

    def COS(self):
        dx = self.node2.coord_X - self.node1.coord_X
        return dx / self.elemLength()

    def SIN(self):
        dy = self.node2.coord_Y - self.node1.coord_Y
        return  dy / self.elemLength()

    def Trans(self):
        S = self.SIN()
        C = self.COS()
        return np.array([ [C, S, 0, 0],
                          [0, 0, C, S] ])

    def elemStiffnessMatrix(self):
        EA = self.mat.E * self.A
        S = self.SIN()
        C = self.COS()
        ek = np.array([ [C*C,  C*S, -C*C, -C*S ], 
                       [C*S,  S*S, -C*S, -S*S ], 
                       [-C*C, -C*S, C*C,  C*S], 
                       [-C*S, -S*S, C*S,  S*S]   ] )

        return EA/self.elemLength() * ek

    def strainMatrix(self):
        L  = self.elemLength()
        tmp1 = np.array( [-1.0, 1.0] )
        return 1/L * np.array( [-1.0, 1.0] )
        
    def normalForce(self, T, elemDisp):
        EA = self.mat.E * self.A
        b = self.strainMatrix() 
        tmp1 = EA * b
        
        tmp2 = np.dot(tmp1, T)
        return np.dot(tmp2, elemDisp)

采用从基类按层次继承来建立单元类的方法,除了重用父类代码之外,另一个很重要的优点就是可以运用多态。通过指向单元基类对象的指针,调用各派生单元类的成员函数。来看一个例子:从一个抽象单元类派生两个不同的单元类。现在要获取这两个单元的编号。

#include 
#include 
using namespace std;

class AbstractElement
{
public:

    virtual ~AbstractElement() = default;
    virtual size_t getID() const = 0;   // 纯虚函数 
};


class Truss : public AbstractElement
{
protected:
    size_t id{ 0 };

public:
    Truss() = default;
    Truss(size_t id_) : id{ id_ } {}
    size_t getID() const override { return id; }


};


class Beam : public AbstractElement
{
protected:
    size_t id{ 0 };

public:
    Beam() = default;
    Beam(size_t id_) : id{ id_ } {}
    size_t getID() const override { return id; }
};

int main(){
    Truss t1{ 1 };
    Beam  b1{ 2 };

    std::vector elems{ &t1, &b1 };for (auto* el : elems)
    {std::cout <getID() <std::endl;  //这里体现了多态
    }return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

file 选择的图片作为背景图片_酷炫!用Python把桌面变成实时更新的地球图片

如何拥有够酷炫逼格够高的桌面&#xff1f;本文教你轻松定制自己的桌面背景(建议带上耳机听一下地球的声音)最近疯狂迷恋地球卫星图和地球的卫星视频&#xff0c;看上面的视频简直极度舒适。不禁想把这种图片作为桌面背景图。这就产生抓取其背景图片作为桌面的想法。思路其实很…

摇杆怎么映射到键盘_[评测]YAMAHA PSRSX900:雅马哈升级幅度最大的高端编曲键盘键盘中国原创评测...

本文图片均由本人亲自拍摄&#xff0c;转载请注明出处。年前就收到这台国行PSR-SX900了。在这一个月特殊的日子里&#xff0c;不能出门&#xff0c;幸好有sx900的陪伴&#xff0c;让我可以天天弹琴、唱歌打发时间...现在很多地方开始逐渐复工了&#xff0c;我抽时间写下了这一个…

微软黑屏补丁_慎装微软最新Win7补丁 部分用户更新补丁后无法关机

清波科技2月9日报道 使用微软windows系统的用户&#xff0c;对于蓝屏肯定不陌生&#xff0c;不过现在还有比蓝屏更可怕的系统故障&#xff1a;无法关机和重启。近日&#xff0c;在微软更新了一个最新的Win7补丁后&#xff0c;有部分用户反馈&#xff1a;在试图从开始菜单关机或…

php支持二级域名共享,PHP二级域名session共享方案

一般来讲网站都会有主站和子站&#xff0c;比如域名是linuxidc.com&#xff0c;那么一般来讲linuxidc.com和www.linuxidc.com就会是主站&#xff0c;而像bbs.linu一般来讲网站都会有主站和子站&#xff0c;比如域名是linuxidc.com&#xff0c;那么一般来讲linuxidc.com和就会是…

swift 滑动 iphone解锁_这10个iPhone隐藏功能,我就不信你全知道

Hi&#xff0c;大家好&#xff0c;我是爱倒腾电子产品的祈雨。从安卓阵营转到苹果已经快一年了&#xff0c;我从最初的束手束脚&#xff0c;到现在的乐得清闲&#xff0c;已经逐渐适应了苹果的这套系统。总的来说&#xff0c;安卓就像去吃自助餐&#xff1a;满眼的食物任你挑选…

hash hashcode变化_Web安全 | 没想到 Hash 冲突还能这么玩,你的服务中招了吗?

图 by: 石头背景 其实这个问题我之前也看到过&#xff0c;刚好在前几天&#xff0c;洪教授在某个群里分享的一个《一些有意思的攻击手段.pdf》&#xff0c;我觉得这个话题应该还是有不少人不清楚的&#xff0c;今天我就准备来“实战”一把&#xff0c;还请各位看官轻拍。洪强宁…

桶式排序 php,PHP实现桶排序算法

简单意义上的桶排序:桶排序的原理是先安排N1个桶作为容器,若数据范围为N的话。然后将测试数据(所需排序的数据)进行循环&#xff0c;放入对应的桶内。数据一定是在范围N内的。最后,循环桶里的元素,并且输出,进行从大到小或从小到大的排序。例如:我们的取值范围是10,那么就要定义…

c#养老院老人信息管理系统源码 论文_包河区【失智老人养老院】

包河区【失智老人养老院】&#xff0c;光明老年护理院广受好评&#xff0c;本着“为政府分忧、帮子女尽孝”的服务宗旨;以“你把老人托给我&#xff0c;我把放心送给你”的服务理念;针对社会上有病的、子女无暇照顾的老年人&#xff0c;提供“爱心、耐心、热心”等全方位关怀服…

php mysql 作业计划,关于php:我需要使用cron作业每30分钟恢复一次数据库(mysql)

我是cron jobs的新手&#xff0c;我需要每30分钟恢复一次数据库(mysql)。 是否有一个cron作业命令可以从已被gzip压缩的.sql文件中恢复数据库&#xff1f;或者我是否需要创建一个php脚本来执行此操作并创建一个cron作业来每30分钟调用一次这个脚本&#xff1f;此外&#xff0c;…

querywrapper 时间区间查询_雅思官方:关于增设用于英国签证及移民的雅思考试考点的通知!附20192020雅思考试时间安排...

接英国文化教育协会通知&#xff0c;为满足广大考生日益增长的报考需求&#xff0c;英国文化教育协会(雅思考试主办方)即日宣布&#xff0c;在南京财经大学(仙林校区)增设用于英国签证及移民的雅思考试考点&#xff0c;首场考试日期为2019年12月21日。考点具体信息如下&#xf…

scandall pro找不到扫描仪_吉林机箱风扇灯条找哪家

吉林机箱风扇灯条找哪家&#xff0c;阶新科技&#xff0c;合作理念--开诚布公&#xff0c;互相信任&#xff0c;团结奋斗。吉林机箱风扇灯条找哪家&#xff0c; 拆开机箱的前置面板可以看到前置面板中间带有长条形的叉戟灯条设计&#xff0c;这样也就导致前置的机箱风扇只能装在…

PHP8编译swoole出错,swoole自定义错误的方法

创建错误处理器实现ErrorHandlerInterface接口namespace App;use Core\AbstractInterface\ErrorHandlerInterface;class Test implements ErrorHandlerInterface{function handler( $msg,$file null,$line null,$errorCode null,$trace ){echo "文件{$file}的第{$line}…

大数据技术架构_架构大数据图

大数据管理数据处理过程图大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察力。大数据处理的主要流程包括数据收集、数据存储、数据处理、数据应用等主要环节。随着业务的增长,大量和流程、规…

excel公式编辑器_Excel中自动更新超链接的文件目录,超简单

日常工作中&#xff0c;一个项目的文件往往会有很多个&#xff0c;在Excel中制作一个项目文件目录&#xff0c;可以快速方便的查看不同的文件。如下图所示&#xff0c;就是一个模拟的项目文件夹内的所有子文件夹&#xff0c;每个子文件夹内包含不同类型的文档&#xff0c;而且文…

蓝牙最新版本6.0_FIIL新品 T1 Lite,蓝牙5.2加持下的TWS耳机

说起汪峰老师&#xff0c;大家第一时间会想到他是国内内地著名男歌手、音乐创作人&#xff0c;摇滚先锋等几个身份&#xff0c;或者会联想到他是妻子著名国际影星章子怡。但如果你对音响或者耳机等音乐产品有所了解的话&#xff0c;你还会知道汪峰老师还亲自创立了一个知名的耳…

标准正态分布_正态分布,正态分布如何变换为标准正态分布

正态分布&#xff08;Normal distribution&#xff09;&#xff0c;又名高斯分布&#xff08;Gaussian distribution&#xff09;若随机变量X服从一个数学期望为μ、方差为σ^2的正态分布&#xff0c;记为N(μ&#xff0c;σ^2)。其概率密度函数为正态分布的期望值μ决定了其位…

WSL安装Oracle,折腾记录:WSL(Windows Subsystem for Linux,Windows上的Linux子系统)安装后的环境配置-Go语言中文社区...

WSL(Windows Subsystem for Linux&#xff0c;Windows上的Linux子系统)的安装比较简单&#xff0c;教程网上较多&#xff0c;此处略过。安装后须要进行一系列配置(如软件源配置、中文配置、图形化配置、开发环境配置)才能投入使用&#xff0c;以Ubuntu为例(其他Debian、Kali、O…

cad钣金展开插件_户外垃圾桶顶盖钣金拆分展开方法

今天给大家讲解一个户外垃圾箱顶盖的拆分展开方法如下图拆分零件如下对称的两个零件如下打开SolidWorks&#xff0c;新建草图如下点击拉伸凸台命令设置参数如下点击倒圆角命令设置参数选择下面蓝色面绘制草图点击草图等距实体选择下图所示蓝色面向内偏移一个板厚1.5点击直线将下…

未能初始化appscan应用程序现在将关闭_企业区块链应用程序的两个关键问题

点击上方“蓝色字体”&#xff0c;选择 “设为星标”关键讯息&#xff0c;D1时间送达&#xff01;很多架构师在使用区块链技术之前需要考虑一些关键问题&#xff0c;而这些问题与数据隐私和区块链类型有关。公共区块链通过提供数据的透明度、完整性、可追踪性、真实性来协调信任…

oracle导入substring,java中substring()和oracle中substr()区别

1)Java中substring(int x)一般是用来截取字符串的。返回一个新的字符串&#xff0c;新字符串是元字符串的子字符串。该新串是从原字符串的x索引处开始&#xff0c;直到原字符串的结尾为止。如&#xff1a;“jerry_player”.substring(1),结果是erry_player“Jerry”.substring(…