动态循环数组存储方法与流程

文档序号:15424630发布日期:2018-09-14 20:36阅读:1600来源:国知局

本发明涉及大尺度结构的分析过程中的时历数据存储领域,尤其涉及一种动态循环数组存储方法。



背景技术:

结构的动力响应分析是工程领域的重要专题,尤其是大尺度结构的分析,在分析过程中,可能需要获取庞大的时历数据,这些数据的存储与处理为计算程序的开发带来了难题。结构分析的时域计算收敛与否与网格比,即(其中,τ为时间步长,h为空间步长)密切相关,往往需要很小的时间步长,也就是很小的网格比,为了获得足够长时间的结构时历数据,通常需要很大的时历数据存储数组。一次计算往往需要处理或者存储几十万步甚至上百万步的数据,这样就需要几十万、上百万规模大小的时历数组来保存这些数据,有时存在多个需要保存的时域数据项,这就导致程序会占用巨量的存储空间,对内存要求较大,难以在一般计算机上运行。目前一般通过改用高配置的计算机同时增大时间步长亦即增大网格比的设置来减小程序运行占用的存储空间。

开发的程序如果仅适用高配置的计算机,一方面将严重影响程序的推广使用,使得程序不具备普适性,另一方面也将面临随之而来的经济压力。时间步长的选取决定了计算的收敛与否,增大时间步长虽然减少了时历数据的产生,但是将严重影响计算结果的准确性,甚至有可能导致计算结果的不收敛。



技术实现要素:

在开发大尺度结构的相关分析程序时,计算过程中往往会产生很庞大的时历数据,存储及处理这些数据需要很大的存储数组,这给程序的开发和计算带来了巨大的障碍。为解决上述问题,本发明提供了一种动态循环数组存储方法。

一种动态循环数组存储方法,具体实现步骤如下:

1)创建并初始化解方程需要用到的参数矩阵;创建循环步数n和循环次数Fr,并将其初始化为0;创建存储某项历程数据的时历数组,创建并打开一文本文件,以备输入需要保存的时历数据;

2)计算结构初始解,对时历数组进行初始化;

3)当循环步数n小于所创建的时历数组长度时,对每一个时间步进行迭代求解,将初始迭代设置为迭代失败,以继续迭代,直到满足约束条件,停止迭代,将结果赋给时历数组;每迭代成功一次将时域模拟总消耗时间向前移动一个时间步长;

4)重复执行步骤3),直到循环步数n等于时历数组长度,此时时历数组循环至下一次重复利用,即时历数组进入循环使用状态;

5)将步骤3)中所得到的时历数组保存到步骤1)打开的文本文件中;

6)对时历数组进行初始化;

7)循环执行步骤3)‐6),直至整个分析程序成功执行完毕,保存并关闭所打开的文本文件,释放相关内存。

优选的,所述的步骤2)中对时历数组进行初始化方法为:根据结构静力特性,将零时刻的历程数据设置为特定值。

优选的,所述的步骤3)中达到约束条件的判定标准为:

3.1)利用Thomas方法求解三对角方程组,得到结构变化值ΔT;

3.2)进一步求出对应的结构误差以及误差向量范数;

3.3)如果误差向量范数小于指定误差限,则认为达到约束条件。

优选的,所述的步骤6)中对时历数组进行初始化具体为:

6.1)重置循环步数n为零,循环次数Fr增加1;

6.2)定义一中间存储变量以记录上一时刻的值;

6.3)释放时历数组所占内存,利用6.2)中定义的中间存储变量为其重新赋值;所赋值必须为上一个循环最后时刻的历程数据值;

6.4)释放中间存储变量。

本发明通过采用动态循环数组存储的方法,不需要通过减小时间步长,以降低计算结果准确度为代价,有效解决了程序计算过程中产生的数量庞大的时历数据存储问题,不仅降低了对计算机配置的要求,同时大大提高了计算结果的精确度。

附图说明

图1是动态循环数组存储流程图;

图2是动态循环数组存储原理图;

图3是程序创建的文本文件示意图;

图4是缆绳某节点运动轨迹示意图;

图5是缆绳某节点时历张力图;

图6是动力计算结果验证图。

具体实施方式

下面结合说明书附图对本发明作进一步说明

本发明公开了一种动态循环数组存储方法,具体实现步骤如下:

1)图1中的a步骤为此方法的初始步骤,需要对相关变量进行创建。创建并初始化解方程需要用到的参数矩阵;创建整型变量,循环步数(n)和循环次数(Fr),并将其初始化为0;创建存储某项历程数据的时历数组,例如张力时历数组,速度、加速度或位移等时历数组;创建并打开一文本文件(.dat文件),以备输入需要保存的数据。

2)计算结构初始解,此初始解可以为初始形状以及其他相关初始解,并对时历数组进行初始化,第一次使用时历数组和循环状态下时历数组的初始化采用不同的方法。

2.1)当第一次使用该时历数组时,如图1中b流程项,将零时刻的张力或其他历程数据设置为特定值,此特定值为根据结构静力特性而定,例如,结构由静止到运动过程中,速度、加速度项特定值为0。

2.2)当时历数组进入循环状态时,即进入图1中的f流程项,新的循环开始,张力或其他项历程数据初始值必须为上一个循环最后时刻的相关值。

3)当循环步数(n)小于所创建的时历数组长度时,进入流程图1中c、d循环项。

3.1)对每一个时间步进行迭代求解。每个时间步的计算都需要一定的迭代次数,以满足一定的误差要求。将初始迭代设置为迭代失败,以继续迭代,直到满足约束条件,停止迭代,将结果赋给时历数组;

3.2)将时域模拟总消耗时间向前移动一个时间步长,重复执行3.1)步骤。循环原理如图2所示,假设每个时间步迭代后产生三个数据项,每迭代成功一次后,将时域模拟总消耗时间向前移动一个时间步长,继续进行下一个时间步的迭代计算;

4)当循环步数(n)等于时历数组长度时,进入图1中的e流程项。将步骤3)中所得到的时历数组保存到步骤1)打开的文本文件中。

5)时历数组循环至下一次重复利用,即时历数组进入循环使用状态,此时需要对0时刻重新初始化,亦即2.2步所述。

5.1)重置循环步数(n)为零,循环次数(Fr)增加1;

5.2)定义一中间存储变量以记录上一时刻的值;

5.3)释放时历数组所占内存,并为其重新分配内存,并利用中间存储变量以及步骤2中所述方法为其重新赋值;

5.4)释放中间存储变量;

6)循环执行步骤3)‐5),直至整个分析程序成功执行完毕,保存并关闭所打开的文本文件,释放相关内存。

借助于上述方法,开发了悬链式系泊缆绳动力特性的分析系统,计算所得数据可以在界面中以曲线形式实时显示出来,使得数据表现更加直观,易于观察数据特性。系统对缆绳时域动态响应过程中的张力、位移、跨距、速度等数据项采用时历数组进行存储,并利用动态循环数组存储方法对数据进行保存。以张力和跨距为例,时间步长设置为0.0001s,此时间步长足够小,确保了时历结果的准确性。保存数据所用到的文本文件如图3所示,假设总时间ts,将产生t*104时历数据。利用动态循环数组存储方法,完美解决了时历过程中庞大的数据存储问题。最终程序得到张力以及跨距时历结果,经过处理后如图4,5所示。

利用相关文献对程序的准确性进行验证,设定水深为3m,水流速度为0.5m/s,系泊缆直径为0.00599m,总长9m,弹性模量为2.107×1010N/m3,初始预张力为28.4886N,海水的密度为1030kg/m3,时间步长为0.02s。同时给定上端点为简谐运动激励,沿x正方向运动。如图6所示,本文程序计算结果基本与文献相符,周期和幅值基本一致。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1