本文摘要(由AI生成):
本文介绍了Abaqus的Disp子程序在渗流分析中的应用,通过读取水位监测数据文件,在坝体AB之间施加孔压,计算当前孔压分布。子程序的关键是判断某一个StepTime对应的水位,通过增量步判断,让程序只在第一个增量步读取水位数据并存在共用区,避免每次调用子程序都读取文件。
Abaqus的Disp子程序用于施加特定的boundary conditions,如复杂的位移边界热,热分析时的温度边界,渗流分析的孔压边界。Disp子程序本身较为简单,能方便的在其中可以定义与时间、坐标等相关的边界条件,下面以一个渗流分析孔压边界实例进行说明。
如下图为一个水库坝,现要对其进行渗流应力耦合析,A、B为最高水位和最低水位,C为某一时刻水位,在一个计算周期中C水位是从低到高,再从高到底逐渐变化的,具体水位对应每天的监测数据。在坝体AB之间施加孔压,孔压由水位与高度计算:
P=9800*(Head-y)
因而边界上的孔压是随时间和空间变化的。
子程序的关键是判断某一个StepTime对应的水位,所以我们需要先将水位和天数的数据读入子程序,再判断StepTime和天数的对应关系,然后找到StepTime 对应的水位,从而计算当前孔压分布。由于监测数据较多,这里我们通过读文件的形式来读取水位数据,存储在数组中备用。
水位监测数据文件
Disp子程序代码
读文件函数
这里重点强调一下数据读取的问题,由于在每个迭代步,每个积分点都会调用子程序,我们不可能让程序每调用一次就读一次文件[耗时],一般做法可以通过增量步判断,让程序只在第一个增量步读取,并存在共用区。这里我们运用了save语句解决了这个问题,通过isread变量,让程只调用一次ReadDate(),并用save语句使TT和Head数组的存储单元不被释放,在下次调用子程序时仍然可以使用。