这里写目录标题

  • Msc.Marc的python开发#2
    • 开发目的
    • 流程图
      • 整体结构
      • 单元结构
    • 应用实例

Msc.Marc的python开发#2

今天接着上一篇的文章介绍。上一篇说到,利用Msc.Marc的python接口,实现自动定义材料的功能,主要用到的是Marc配置的py_mentat模块,核心思想其实很简单,那就是 一个换了python皮的procedure 文件 ,换句话说,把需要人工输入的命令汇集到python源文件中,并通过命令行和Marc进行交互,向Marc下各种命令,并获得Marc 的数据库中的各种数据。

那么今天我们要用python进行Marc的后处理,用的是py_post模块。这个模块在应用上更接近python的面向对象特点,单元、节点都有自己的类,ID、坐标都成为了类的属性,访问起来更方便更有逻辑。

开发目的

我今天要做的事情是针对一个钢筋混凝土框架,想办法调整配筋数据,使得经过某个地震波的时程分析后,只出现梁端塑性铰,而不出现柱端塑性铰,而且要尽可能接近临界状态,也就是钢筋不能超配太多。我的基础是用PKPM按中国规范分析得出的配筋数据。Marc模型是梁柱纤维梁模型,搭配课题组开发的纤维梁子程序。

流程图

整体结构

Created with Raphaël 2.2.0开始初始化材料特性写入材料文件运行分析提取塑性铰数据,写入两个列表,分别是总塑性铰列表和当前塑性铰列表总塑性铰列表中是否只有第一层柱?结束利用二分法更改配筋面积数据yesno

单元结构

应用实例

from itertools import islice
import time
import os
from py_post import *
from py_mentat import *
HEIGHT = 4000  # height of a single story(length of a column)
LENGTH = 5000  # length of a beam
all_materials = {}
column_hinges = []
tol = 0.05class beam_comp(object):  # define compona_fiber beam element classdef __init__(self, string):data = string.split(',')self.lamb_low = 1.0self.lamb_high = 5.0self.lamb_mid = 1.0self.Nfloor = int(data[0])self.Nbeam = int(data[1])self.name = 'F' + data[0] + 'L' + data[1]  # nameself.Num_Rc = int(data[2])self.Num_S = int(data[3])self.dx = float(data[4])self.dy = float(data[5])self.bc = float(data[6])self.hc = float(data[7])self.Crt = float(data[8])self.Crb = float(data[9])self.Crl = float(data[10])self.Crr = float(data[11])self.Art = float(data[12])self.Arb = float(data[13])self.Arl = float(data[14])self.Arr = float(data[15])self.Ar1 = float(data[16])self.Ar2 = float(data[17])self.Ar3 = float(data[18])self.Ar4 = float(data[19])self.nf_bc = int(data[20])self.nf_hc = int(data[21])self.nrt = int(data[22])self.nrb = int(data[23])self.nrl = int(data[24])self.nrr = int(data[25])self.fc = float(data[26])self.kt = float(data[27])self.frt = float(data[28])self.frb = float(data[29])self.frl = float(data[30])self.frr = float(data[31])self.fr1 = float(data[32])self.fr2 = float(data[33])self.fr3 = float(data[34])self.fr4 = float(data[35])self.CFT = int(data[36])self.Sig_de = float(data[37])class colm_comp(object):  # define compona_fiber beam element classdef __init__(self, string):data = string.split(',')self.lamb_low = 1.0self.lamb_high = 5.0self.lamb_mid = 1.0self.Nfloor = int(data[0])self.Nbeam = int(data[1])self.name = 'F' + data[0] + 'C' + data[1]  # nameself.Num_Rc = int(data[2])self.Num_S = int(data[3])self.dx = float(data[4])self.dy = float(data[5])self.bc = float(data[6])self.hc = float(data[7])self.Crt = float(data[8])self.Crb = float(data[9])self.Crl = float(data[10])self.Crr = float(data[11])self.Art = float(data[12])self.Arb = float(data[13])self.Arl = float(data[14])self.Arr = float(data[15])self.Ar1 = float(data[16])self.Ar2 = float(data[17])self.Ar3 = float(data[18])self.Ar4 = float(data[19])self.nf_bc = int(data[20])self.nf_hc = int(data[21])self.nrt = int(data[22])self.nrb = int(data[23])self.nrl = int(data[24])self.nrr = int(data[25])self.fc = float(data[26])self.kt = float(data[27])self.frt = float(data[28])self.frb = float(data[29])self.frl = float(data[30])self.frr = float(data[31])self.fr1 = float(data[32])self.fr2 = float(data[33])self.fr3 = float(data[34])self.fr4 = float(data[35])self.CFT = int(data[36])self.Sig_de = float(data[37])def initate_mat(all_materials):with open('section_beam.csv') as file:for content in islice(file, 1, None):new_beam_comp = beam_comp(content)all_materials[new_beam_comp.name] = new_beam_compfile.close()with open('section_colu.csv') as file:for content in islice(file, 1, None):new_colm_comp = colm_comp(content)all_materials[new_colm_comp.name] = new_colm_compfile.close()returndef initate_from_info():passreturndef write_secinfo(all_materials):with open('secinfo.txt', 'wt') as db:db.write('%d\n' % len(all_materials))for i_floor in range(1, 5):for i_beam in range(1, 25):name = 'F%dL%d' % (i_floor, i_beam)db.write('%d,%d\n' %(all_materials[name].Num_Rc, all_materials[name].Num_S))db.write('%.6f,%.6f\n' %(all_materials[name].dx, all_materials[name].dy))db.write('%.6f,%.6f\n' %(all_materials[name].bc, all_materials[name].hc))db.write('%.6f,%.6f,%.6f,%.6f\n' %(all_materials[name].Crt, all_materials[name].Crb,all_materials[name].Crl, all_materials[name].Crr))db.write('%.6f,%.6f,%.6f,%.6f\n' %(all_materials[name].Art, all_materials[name].Arb,all_materials[name].Arl, all_materials[name].Arr))db.write('%.6f,%.6f,%.6f,%.6f\n' %(all_materials[name].Ar1, all_materials[name].Ar2,all_materials[name].Ar3, all_materials[name].Ar4))db.write('%d,%d\n' %(all_materials[name].nf_bc, all_materials[name].nf_hc))db.write('%d,%d,%d,%d\n' %(all_materials[name].nrt, all_materials[name].nrb,all_materials[name].nrl, all_materials[name].nrr))db.write('%.6f,%.6f\n' %(all_materials[name].fc, all_materials[name].kt))db.write('%.6f,%.6f,%.6f,%.6f\n' %(all_materials[name].frt, all_materials[name].frb,all_materials[name].frl, all_materials[name].frr))db.write('%.6f,%.6f,%.6f,%.6f\n' %(all_materials[name].fr1, all_materials[name].fr2,all_materials[name].fr3, all_materials[name].fr4))db.write('%d\n' % all_materials[name].CFT)db.write('%.6f\n' % all_materials[name].Sig_de)for i_floor in range(1, 5):for i_column in range(1, 17):name = 'F%dC%d' % (i_floor, i_column)db.write('%d,%d\n' %(all_materials[name].Num_Rc, all_materials[name].Num_S))db.write('%.6f,%.6f\n' %(all_materials[name].dx, all_materials[name].dy))db.write('%.6f,%.6f\n' %(all_materials[name].bc, all_materials[name].hc))db.write('%.6f,%.6f,%.6f,%.6f\n' %(all_materials[name].Crt, all_materials[name].Crb,all_materials[name].Crl, all_materials[name].Crr))db.write('%.6f,%.6f,%.6f,%.6f\n' %(all_materials[name].Art, all_materials[name].Arb,all_materials[name].Arl, all_materials[name].Arr))db.write('%.6f,%.6f,%.6f,%.6f\n' %(all_materials[name].Ar1, all_materials[name].Ar2,all_materials[name].Ar3, all_materials[name].Ar4))db.write('%d,%d\n' %(all_materials[name].nf_bc, all_materials[name].nf_hc))db.write('%d,%d,%d,%d\n' %(all_materials[name].nrt, all_materials[name].nrb,all_materials[name].nrl, all_materials[name].nrr))db.write('%.6f,%.6f\n' %(all_materials[name].fc, all_materials[name].kt))db.write('%.6f,%.6f,%.6f,%.6f\n' %(all_materials[name].frt, all_materials[name].frb,all_materials[name].frl, all_materials[name].frr))db.write('%.6f,%.6f,%.6f,%.6f\n' %(all_materials[name].fr1, all_materials[name].fr2,all_materials[name].fr3, all_materials[name].fr4))db.write('%d\n' % all_materials[name].CFT)db.write('%.6f\n' % all_materials[name].Sig_de)db.close()returndef get_name_postel(pObj, ind_elem):# obtain the name 'FXXX' for a post elementelement = pObj.element(ind_elem)nodes = element.itemsnode1 = pObj.node(nodes[0] - 1)node2 = pObj.node(nodes[1] - 1)if (node1.z == node2.z):  # it's a beam# we should allocate ID to the beam according the rule of serial number# which is# 1. beams parallel to the x axis come first(left to right)# 2. then beams parallel to the y axis(left to right)Nfloor = int(node1.z / HEIGHT)if (node1.x == node2.x):  # if the beam is parallel to the y axis.Nbeam = 4 + int(node1.x / LENGTH) + int((node1.y + node2.y) / (2 * LENGTH)) * 7else:  # if the beam is parallel to the x axisNbeam = 1 + int(node1.y / LENGTH) * 7 + int((node1.x + node2.x) / (2 * LENGTH))name = 'F%dL%d' % (Nfloor, Nbeam)  # assemble the name of beam elementelse:  # it's a columnNfloor = int((node1.z + node2.z) / (2 * HEIGHT)) + 1Ncolu = int(node1.x / LENGTH) + 4 * int(node1.y / LENGTH) + 1name = 'F%dC%d' % (Nfloor, Ncolu)return namedef tell_if_colu(pObj, ind_elem):element = pObj.element(ind_elem)nodes = element.itemsnode1 = pObj.node(nodes[0] - 1)node2 = pObj.node(nodes[1] - 1)if (node1.z == node2.z):  # it's a beamreturn Falseelse:return Truedef get_last_line(inputfile):filesize = os.path.getsize(inputfile)blocksize = 1024with open(inputfile, 'rb') as f:last_line = ""if filesize > blocksize:maxseekpoint = (filesize // blocksize)f.seek((maxseekpoint - 1) * blocksize)elif filesize:f.seek(0, 0)lines = f.readlines()if lines:linenum = 1while last_line == "":last_line = lines[-linenum].strip()linenum += 1f.close()return last_linedef run_job():py_send('*edit_job Time-history')py_send('*submit_job 1 *monitor_job')print('\tjob is running')time.sleep(420)while True:print('looping...')last_line = get_last_line('model1_Time-history.log')if last_line[-4:] == '3004':breakelse:print('\tjob is running')time.sleep(30)return 1def post_extract():global column_hingespObj = post_open("model1_Time-history.t16")# move to the last incrementninc = pObj.increments()  # the number total incrementspObj.moveto(ninc - 1)# check each element for the user defined variable 3,# if it's 1, collect it in a librarynelem = pObj.elements()  # the number of total elementsnes = pObj.element_scalars()  # number of scalars acquired for each elementfor i in range(nes):if pObj.element_scalar_label(i) == 'User Defined Variable 3':ind_UDV3 = icurr_colu_hinges = []for i_elem in range(nelem):slist = pObj.element_scalar(i_elem, ind_UDV3)if (slist[0].value == 1 or slist[1].value == 1):name = get_name_postel(pObj, i_elem)if tell_if_colu(pObj, i_elem):column_hinges.append(name)curr_colu_hinges.append(name)column_hinges = undupli(column_hinges)curr_colu_hinges = undupli(curr_colu_hinges)pObj.close()return curr_colu_hingesdef undupli(input_list):output_list = []for item in input_list:if item in output_list:continueelse:output_list.append(item)output_list.sort()return output_listdef tell_first_floor(column_hinges):# if all elements in column_hinges are on first floor# then return true, else return falselogic_flag = Truefor name in column_hinges:logic_flag = logic_flag and (name[1]=='1')return logic_flagdef adjust_area(all_materials, column_hinges, curr_colu_hinges):if len(column_hinges) == 0 or tell_first_floor(column_hinges):return Falseelse:for name in column_hinges:column = all_materials[name]if abs(column.lamb_high - column.lamb_low) < tol:lamb_pre = column.lamb_midcolumn.lamb_mid = column.lamb_high# prepare for a restartcolumn.lamb_high = column.lamb_mid + 1column.lamb_low = max(column.lamb_mid-1, column.lamb_low)column.Art = column.lamb_mid/lamb_pre * column.Artcolumn.Arb = column.lamb_mid/lamb_pre * column.Arbcolumn.Arl = column.lamb_mid/lamb_pre * column.Arlcolumn.Arr = column.lamb_mid/lamb_pre * column.Arrcolumn.Ar1 = column.lamb_mid/lamb_pre * column.Ar1column.Ar2 = column.lamb_mid/lamb_pre * column.Ar2column.Ar3 = column.lamb_mid/lamb_pre * column.Ar3column.Ar4 = column.lamb_mid/lamb_pre * column.Ar4all_materials[name] = columncolumn_hinges.remove(name)else:if name in curr_colu_hinges:column.lamb_low = column.lamb_midelse:column.lamb_high = column.lamb_midlamb_pre = column.lamb_midcolumn.lamb_mid = (column.lamb_low + column.lamb_high) / 2.0column.Art = column.lamb_mid/lamb_pre * column.Artcolumn.Arb = column.lamb_mid/lamb_pre * column.Arbcolumn.Arl = column.lamb_mid/lamb_pre * column.Arlcolumn.Arr = column.lamb_mid/lamb_pre * column.Arrcolumn.Ar1 = column.lamb_mid/lamb_pre * column.Ar1column.Ar2 = column.lamb_mid/lamb_pre * column.Ar2column.Ar3 = column.lamb_mid/lamb_pre * column.Ar3column.Ar4 = column.lamb_mid/lamb_pre * column.Ar4all_materials[name] = columnreturn Truedef main():global all_materialsglobal column_hingeslog = open('python.log', 'wt')print('\tlog has been opened')initate_mat(all_materials)print('\tmaterials has been initated')iteration = 1print('iteration %d' % iteration)write_secinfo(all_materials)print('\tsecinfo has been writen')run_job()print('\tjob has been run')curr_colu_hinges = post_extract()print('\tlenth of column_hinges list: %d' % len(column_hinges))for name in column_hinges:log.write('\t%s has lambda %f\n' % (name, all_materials[name].lamb_mid))print('\t%s has lambda %f' % (name, all_materials[name].lamb_mid))print('\titeration completed')while adjust_area(all_materials, column_hinges, curr_colu_hinges):iteration += 1print('iteration %d' % iteration)log.write('\niteration %d\n' % iteration)write_secinfo(all_materials)print('\tsecinfo has been writen')run_job()print('\tjob has been run')curr_colu_hinges = post_extract()print('\tlenth of column_hinges list: %d' % len(column_hinges))log.write('\ncolumn_hinges\n')for name in column_hinges:log.write('\t%s has lambda %f \n' % (name, all_materials[name].lamb_mid))print('\t%s has lambda %f' % (name, all_materials[name].lamb_mid))print('\tcurrent_hinges')log.write('\tcurrent_hinges\n')for name in curr_colu_hinges:log.write('\t%s has lambda %f \n' % (name, all_materials[name].lamb_mid))print('\t%s has lambda %f' % (name, all_materials[name].lamb_mid))print('\niteration completed\n')for key in all_materials:log.write('%s: %f \n' % (all_materials[key].name, all_materials[key].lamb_mid))print('finish')log.write('\nfinish\n')log.close()returnif __name__ == '__main__':py_connect("", 40007)main()py_disconnect()

Msc.Marc的python开发#2相关推荐

  1. msc.marc的Python开发,MscMarc,python,2

    文章目录 Msc.Marc的python开发#2 开发目的 流程图 整体结构 单元结构 应用实例 Msc.Marc的python开发#2 今天接着上一篇的文章介绍.上一篇说到,利用Msc.Marc的p ...

  2. Msc.Marc的python开发#1

    文章目录 Msc.Marc的python开发#1 前期配置 核心思想 核心交互函数及数据库函数 核心交互函数: 数据库函数: 应用实例 Msc.Marc的python开发#1 Msc.Marc 是一款 ...

  3. python开发_xml.etree.ElementTree_XML文件操作

    python开发_xml.etree.ElementTree_XML文件操作_该模块在操作XML数据是存在安全隐患_慎用 xml.etree.ElementTree模块实现了一个简单而有效的用户解析和 ...

  4. eclipse配置python开发环境_Eclipse中配置python开发环境详解

    Eclipse中配置python开发环境详解 1.下载python安装包.python-2.6.6.msi.并安装. 默认python会安装在C:\Python26下,查看环境变量,如果没有在path ...

  5. 配置Python开发环境

    目录 安装开发包 配置IDEA插件 验证编译运行环境 安装开发包 https://www.python.org/ 注:x86适用Intel处理器,X86-64适用AMD处理器(选择对应的包,避免出现兼 ...

  6. Eclipse+Pydev搭建Python开发环境教程

    Eclipse+Pydev搭建Python开发环境教程 Eclipse+Pydev搭建Python开发环境 PyDev简介 准备文件 Jdk配置,1.8版本 python-2.7.18安装 Eclip ...

  7. windows10下python开发spark应用的环境搭建

    环境搭建主要涉及到3方面,第1是安装,第2是环境变量的配置,第3是验证安装和配置是否成功,总的涉及到以下5个部分. 环境变量配置是在 此电脑 -> 属性 -> 高级系统设置 -> 高 ...

  8. 搭建python开发环境

    python开发环境搭建 安装python 验证python是否安装成功 安装开发工具pycharm 安装python 安装的版本为python3.6 验证python是否安装成功 1.win+R建调 ...

  9. python安装包_迈出Python学习第一步:Python开发环境的下载与安装

    所谓"磨刀不误砍柴工"."工欲善其事,必先利其器",都在告诉我们一个道理:要做好一个事情,事先做好充分的准备工作是非常重要的.所以在我们正式学习用Python编 ...

最新文章

  1. java 内存映射文件 主要应用_VC++中使用内存映射文件处理大文件(3)
  2. 某厂家精密空调精品培训资料
  3. Kindle使用技巧
  4. Spring in Action 3 (翻译)
  5. Service 的生命周期;两种启动方法和区别
  6. java分割汉字_Java分割中英文,并且中文不能分割一半?
  7. 5g通用模组是什么_中国联通发布《5G通用模组白皮书V2.0》
  8. 使用threeJS根据点的坐标绘制曲线
  9. 协议栈处理中的conntrack HASH查找/Bloom过滤/CACHE查找/大包与小包/分层处理风格
  10. you need python_Life is short, you need Python!
  11. StretchBlt()函数
  12. linux密码带星号,Shell实现输入密码并显示星号
  13. DoS攻击服务器过程
  14. vm tools iso 文件下载 win 7
  15. 1628_MIT 6.828 xv6_chapter0操作系统接口
  16. 一篇编译内核的详细配置文章[3]
  17. 内网服务器安装docker
  18. 计网 | 【三 数据链路层】知识点及例题
  19. 节能证书在哪里查询_证书查询
  20. Educational Codeforces Round 132 A - D

热门文章

  1. 华为HCIE 数通认证 基础必学GVRP协议是什么
  2. 谈谈一只菜鸟转行Erlang游戏服务端的经历(希望大佬指导,也希望我的经历能给一些还未毕业的同学或者正在迷茫自己工作内容的同学一些感触)
  3. 知道三个金,三个火,三水~~都念什么吗?
  4. 英文面试:自我介绍篇
  5. excel函数应用:Column函数替代列参数提高公式灵活性
  6. 如何让手机自带路由器,24小时wifi跟着你!知道后你就是大神!
  7. 【java小游戏】老虎杠子鸡游戏
  8. 计算机无法快速预览pdf,电脑中无法使用火狐浏览器预览PDF文档怎么解决
  9. 如何创建海外美区Apple ID,并使用支付宝购买Apple Store礼品卡,十分钟学会
  10. 基于thinkphp5的简单的下拉菜单二级联动