【详细讲解 · 推荐】第3部分:降雨入渗条件下土质边坡任意时刻稳定性的批量实时分

(一)Abaqus .inp文件计算方法
将下述代码写入.txt文件,然后将文件类型改为.bat,随后双击.bat文件即可。
单个.inp文件计算:
abaqus Job=xxx1.inp cpus=3 int ask=off
多个.inp文件计算:
call abaqus Job=xxx1.inp cpus=3 int ask=off
call abaqus Job=xxx2.inp cpus=3 int ask=off
call abaqus Job=xxx3.inp cpus=3 int ask=off
…
文件夹中全部.inp文件计算:
for %%g in (*.inp) do (
abaqus Job=%%g cpus=3 int ask=off
)
(二)Python代码
# -*- coding: utf-8 -*- """ Created on Thu Dec 30 19:23:28 2021 @author: Administrator """ # 使用此脚本,应避免分析步中最小增量包含于总降雨时间相同的字符串 import math num_line=2919 # inp文件中需要替换行的序号,事先根据基准inp文件确定(step-rainInfil的数据行) Hour_delta=6 # 每隔~h创建一个inp文件 # 1. 读取基准inp文件全部行 file_inp=open("C:/Users/Administrator/Desktop/1/Jsn-final.inp") lines_all=file_inp.readlines() # 储存全部行的内容 # 2. 计算需生成inp文件的个数 context_ori=lines_all[num_line-1] # 需被替换行的内容(-1是因为python从0索引) TotalHour_rain=float(context_ori[5:8])# 根据基准inp文件读取降雨总时间 num_inpFiles=math.ceil(TotalHour_rain/Hour_delta)-1 # 需生成inp文件的个数 print("\n共创建"+str(num_inpFiles)+"个inp文件\n") # 3. 循环函数:形成该行新内容,替换原始行,并写入新inp文件 for i in range(num_inpFiles): # i=0~num_inpFiles-1 Hour_i=Hour_delta*(i+1) # 本inp文件设定的降雨时间 if Hour_i<=TotalHour_rain: context_i=context_ori context_i=context_i.replace(context_ori[5:8],str(Hour_i))# 本inp文件该行的内容 name_inp_i="Jfos-"+str(Hour_i)+"h.inp" # 本inp文件的名称 lines_all[num_line]=context_i # 本inp文件全部内容 file_inp_i=open(name_inp_i,"w") # 创建inp本地文件 file_inp_i.writelines(lines_all) # 写入本inp文件全部内容 file_inp_i.close() # 关闭本inp文件 file_inp.close() #关闭基准inp文件 # 4-1. 创建bat批处理文件,调用Abaqus计算内核 name_batFile="batch_cacu_FOS.bat" context_bat="for %%g in (*.inp) do (\n\ abaqus Job=%%g cpus=3 int ask=off\n\ )" file_bat=open(name_batFile,"w") file_bat.writelines(context_bat) file_bat.close() # 4-2. 执行bat批处理文件 if 0: #计算时间可能很长,请在需直接执行bat文件时改为1 import subprocess a=subprocess.getoutput(name_batFile) print(a)