tokenpocketapp安卓版下载官网|umax

经过代码完成IDA剖析——以OpenSeesPy为例 - 知乎经过代码完成IDA剖析——以OpenSeesPy为例 - 知乎切换办法写文章登录/注册经过代码完成IDA剖析——以OpenSeesPy为例...

经过代码完成IDA剖析——以OpenSeesPy为例 - 知乎

经过代码完成IDA剖析——以OpenSeesPy为例 - 知乎切换办法写文章登录/注册经过代码完成IDA剖析——以OpenSeesPy为例Showmaker树洞,假如你知道我,请伪装没看到0 前语“Some of these difficulties are of great importance, while others are simply a nuisance. Reducing the issue to its simplest case helps to separate the important ideas from the merely tedious.” 关于大多数问题,抛开重要的难点部分,其他的进程是冗长杂余的,处理的办法在于树立一个简略的比方,将重要的观念从冗杂的事物中抽丝剥茧出来。Keith D. Hjelmstad, 2003IDA剖析办法是现在干流评价结构抗震才能的办法之一,被广泛运用于工程研讨和运用中,并被FEMA 350和FEMA P695等多个辅导手册运用,本文首要介绍运用代码完成IDA剖析进程,供同行参阅。文章的结构为:1.IDA剖析简介;2单自由度体系IDA剖析算例解说;3.IDA剖析的具体代码。1.IDA简介 IDA(Incremental Dynamic Analysis)全称为增量动力剖析法,由Bertero和Vamvatsikos对该办法的理论和运用进行体系总结。是现现在干流的评价结构抗震才能的办法之一。相较于Pushover法,其优势在于:① 能反映结构在不同地震强度下的功用特征,如结构的变形、屈从才能和极限状况。② 运用实在的台站地震记载对结构进行时程剖析,能较为实在地反响结构地震效果下的呼应③ 经过多条地震记载进行IDA剖析,能够研讨地震自身如频率特性以及不确认性对结构形成的影响。 IDA的根本原理是对地震波的强度进行调幅,输入至结构进行非线性时程剖析,经过不断增大幅值调查结构从弹性到坍毁的全进程反响。IDA办法的输出成果为IDA曲线,单个点则对应单次非线性时程剖析,单条IDA曲线反响的是地轰动强度目标IM(Intensity Measure)和结构的损害目标DM(Damage Measure)之间的联系,多条IDA曲线组成的曲线簇则能反映结构呼应在不同地震效果下的离散性。 其间,IM反映输入地震的强度,应具有单谐和可调性,如峰值加速度PGA、峰值速度PGV、谱加速度Sa、Arias Intensity、非线性反响谱参数等;而DM反响地震效果下结构的功用,如最大层间位移角θmax,最大基地剪力 Vmax,屋面位移角θr,max等。2简略算例 OpenSees首要开发者之一的Micheal Scott H个人主页的文章中梳理了许多 OpenSees运转、结构动力学、杆系结构弹塑性剖析原理,其间有一篇解说关于单自由度体系的IDA剖析,对用代码完成IDA剖析比较有启发性,这儿对代码进行简略的解读,文章的原文见:https://portwooddigital.com/2021/10/31/the-little-ida/代码:g = 386.4

# Seismic weight and mass

W = 500

tokenpocketapp安卓版下载官网|umax

m = W/g

# Stiffness and strength

Tn = 1.0

wn = 2*3.14159/Tn

k = m*wn**2

Fy = 300

import openseespy.opensees as ops

ops.wipe()

ops.model('basic','-ndm',1,'-ndf',1)

ops.node(1,0); ops.fix(1,1)

ops.node(2,0); ops.mass(2,m)

ops.timeSeries('Path',1,'-dt',0.02,'-filePath','tabasFN.txt','-factor',g)

ops.uniaxialMaterial('Hardening',1,k,Fy,0,0)

ops.element('zeroLength',1,1,2,'-mat',1,'-dir',1)

ops.analysis('Transient')

# Analysis duration and time step

Tf = 40.0

dt = 0.01

Nsteps = int(Tf/dt)

# Arrays for plotting

Uplot = []

gmPlot = []

# Maximum and increment in ground motion factor

maxGM = 2.0

dgm = 0.05

gmFact = 0.0

while gmFact

gmFact += dgm

gmPlot.append(gmFact)

ops.remove('loadPattern',1)

ops.reset()

# Redefine ground motion with new factor

ops.pattern('UniformExcitation',1,1,'-accel',1,'-factor',gmFact)

# Perform analysis and record maximum displacement

Umax = 0

for i in range(Nsteps):

ops.analyze(1,dt)

U = ops.nodeDisp(2,1)

if abs(U) > Umax:

Umax = abs(U)

Uplot.append(Umax) 需求阐明的是选用的是英制单位,首要树立单自由度,一维空间,树立坐标相同两点,运用零长度单元衔接,模型如图所示(图中两点有间隔首要是便利咱们了解),固定节点1自由度,对节点2赋予质量,用于后续的结构动力剖析。康复力模型选用双折线的随动硬化模型,为了使结构的自振周期为1s,将质量设定为500kip(英制千磅力)/g。依据公式 k=m(\frac{2\pi}{T_{n}})^{2} 反推出赋予给单自由度体系的刚度,屈从力设定为300kip。模型及选用的本构模型(图片来历:https://portwooddigital.com/2021/10/31/the-little-ida/) 动力剖析代码不予赘述,地震波选用的tabasFN(源文件可在PEER官网上下载)。初始调幅系数为0,设定停止核算的条件为调幅系数≤2,循环进行动力剖析核算,并每次核算完成后,用两个列表别离记载节点2的位移和地震调幅系数。完成单次核算后,假如调幅系数仍小于2,则在原有的根底上添加0.05,直到调幅系数大于2。完毕核算后,用pyplot制作两个列表的联系图即单根IDA曲线,如下图所示。单条IDA曲线(图片来历:https://portwooddigital.com/2021/10/31/the-little-ida/) 在调幅系数小于0.6前,结构的位移开端是呈线性的;调幅系数抵达1后,结构位移忽然增大;调幅系数持续增大后发生复苏(resurrection,指调幅系数增大,呼应反而削减的现象),调幅系数1.5今后,曲线根本进入平直段,根本能够断定结构现已动力失稳。 归纳上述代码的功用,即:在抵达设定阈值前不断的进步地震强度,然后获取结构动力呼应与地轰动强度的联系曲线。经过这个简略的算例能够了解到IDA办法的实质在于,调查损害目标DM随强度目标IM增大发生趋势,判别结构是否现已动力失稳。 上述代码需求留意的是,由于在模型文件中循环进行动力剖析核算,每次核算都会指定一个编号为1的基底鼓舞的荷载办法,所以每次核算前应运用remove指令移除loadpattern为1的荷载办法,不然程序核算会报错,提示编号为1的荷载办法现已存在。3 依据hunt Trace Fill算法的IDA剖析代码待后续跟新引荐阅览[1] Vamvatsikos D, Cornell C. Tracing and post-processing of IDA curves: Theory and software implementation[R]. Report No RMS, 2001, 44.[2] Vamvatsikos D, Cornell C A. Incremental dynamic analysis[J]. Earthquake Engineering & Structural Dynamics, 2002, 31(3): 491-514.[3] Cornell C A. Applied incremental dynamic analysis[J]. Earthquake Spectra, 2004, 20(2): 523-553.修正于 2024-03-02 09:59・IP 属地四川结构工程防灾减灾工程抗震​附和 2​​添加谈论​同享​喜爱​保藏​恳求

《深化了解核算机体系》第二章:整数的表明_在核算机中umax是什么意思-CSDN博客

>

《深化了解核算机体系》第二章:整数的表明_在核算机中umax是什么意思-CSDN博客

《深化了解核算机体系》第二章:整数的表明

最新引荐文章于 2023-08-28 17:45:50 发布

Turbo码先生

最新引荐文章于 2023-08-28 17:45:50 发布

阅览量724

保藏

6

点赞数

4

分类专栏:

核算机根底

文章标签:

核算机组成原理

版权声明:本文为博主原创文章,遵从 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qq_34037358/article/details/113589634

版权

核算机根底

专栏录入该内容

5 篇文章

4 订阅

订阅专栏

《深化了解核算机体系》第二章:整数的表明

文章目录

《深化了解核算机体系》第二章:整数的表明前语一、64位机器上的数据类型二、无符号数的编码2.1 表明和核算2.2 UMax

三、有符号数的编码3.1 补码3.2 TMax&TMin

四、U2T&T2U 有无符号数的转化五、unsigned留意事项5.1 留意15.2 留意25.3 留意35.4 假如正确运用unsigned

六、Sign Extension 位扩展6.1 位扩展的留意事项6.2 有符号数扩展的数学证明

七、Truncating Numbers 位切断7.1 切断无符号数7.2 切断有符号数

总结

前语

我将在本篇文章,具体回忆一下自己对整数的表明的了解。

一、64位机器上的数据类型

需求留意的是,在64位机器上,long类型8个字节,然而在32位机器上long只占4个字节。unsigned是无符号数,原则上恒大于等于0的数。是C言语的专属特性,其他言语均不支撑无符号数。

二、无符号数的编码

2.1 表明和核算

运用B2U表明将二进制数表明成无符号数,举个比方如下: CSAPP原书里边给出了一个图形的办法来表明无符号数: 如上图所示,二进制【x1,x2,x3,…】等于,一切位为1的进度条的长度相加得到的和。

2.2 UMax

UMax: 无符号数的最大值 无符号的最大值是,一切位全为1;十进制的最大值表明:2^n-1;其间n是字节数。

三、有符号数的编码

无符号数不需求符号位来表明一个数,这样关于无符号数是比较简略和高效的,可是不能用来标识有符号数。在核算机中有符号数的表明运用补码的办法。 关于为什么是补码,我觉得这个博客讲的还能够,由于有种种原因吧,补码能够直接用于数字的核算。

3.1 补码

正数的补码 == 正数自身 负数的补码 == 原码的根底上, 符号位不变,其他各位取反, 最终+1

运用一个向量来表明有符号数,它的核算公式如下所示: 10000010 = -2^7 + 2 = -126,在比方下图所示:

关于符号位,要了解负权重的概念,不能简略的当作成一个符号位 需求留意的是-1在任何字节的补码表明下都是全1

3.2 TMax&TMin

TMax:有符号数的最大值

TMin: 有符号数的最小值

四、U2T&T2U 有无符号数的转化

有符号位和无符号位之间的转化规矩是: 1、位办法表明不变 2、需求从头解说 3、需求加减2^w 下面看一下公式的推导: 下面看一下CSAPP的图: 接下来看一个T2U的事例:

五、unsigned留意事项

C言语中,有符号数与无符号数的运算,会将有符号数转化成无符号数

5.1 留意1

,如下图的事例所示。 a = -1,可是当其与有符号数进行比较运算时,a的值会被转化成无符号数,x 4 294 967 295,而4 294 967 296是大于0的,所以会输出 -1 > 0 的成果。

5.2 留意2

下图所示的这种状况是由于 length - 1 应该等于 -1 ,可是在C言语中,无符号数与有符号数之间的运算,会将有符号数转化成无符号数,所以-1转成无符号数之后,便是无符号的最大数,可是数组的规模是有限的,当数组下标抵达最大无符号数的时分,数组肯定会呈现拜访越界。

5.3 留意3

下面这个比方来自于南大的课件,相同当n = 0是,n - 1 会被转化成无符号的最大值,而无符号数i是天然小于等于UMax的,所以这儿会呈现死循环。

5.4 假如正确运用unsigned

大神提出的处理办法如上图所示,可是除非必要,尽量不运用unsigned,是防止呈现这种问题的最直接办法。

六、Sign Extension 位扩展

6.1 位扩展的留意事项

1、无符号数的扩展,直接前面补0即可 2、有符号数的扩展,需求将无符号位进行扩展,比方下图所示: 有符号负数的扩展,前面补零;有符号负数的扩展前面补1。 正数的扩展没有什么好说的,比方byte类型的数7转成int类型,直接高位填充0即可。

00000111->00000000 00000000 00000000 00000111

负数的扩展,则是直接填充1

10000111(-121) -> 11111111 11111111 11111111 10000111

能够算一下上边负数的扩展是正确的。 留意:C++中负数不支撑左移位,由于成果是不定的,比方:int c = (unsigned int)(a & b)