CAE分析大系——ABAQUS Python二次开发攻略(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-05 04:13:53

点击下载

作者:苏景鹤 江丙云

出版社:人民邮电出版社有限公司

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

CAE分析大系——ABAQUS Python二次开发攻略

CAE分析大系——ABAQUS Python二次开发攻略试读:

前言

随着计算机性能的飞速发展,有限元作为工程应用领域的重要方法,在许多行业尤其是制造业中得到了广泛的应用。每一个成功的设计都离不开有限元分析的数据支持,它能确保轻便、稳定、高效和安全的设计。

计算机技术和商业有限元软件的迅速发展,直接推动了有限元分析在设计中的使用。当前工业界常用的Abaqus、ANSYS等软件无论在界面易用性还是求解器效率方面都愈趋成熟,工程师可以迅速地借助软件实现分析任务。随着设计活动对有限元分析的需求越来越大,有限元分析也变得越来越常规,分析任务也越来越繁重。对企业来说,与其增加资源(人力财力)来满足日益增长的分析需求,不如想办法定制自动化分析流程,帮助使用者提高分析的效率。

达索的Abaqus软件为使用者提供了这样的可能——使用Python脚本语言实现分析的自动化。利用它使用者可以简化某些重复性操作,定制特定的分析流程以提高工作效率,甚至于进一步和其他软件结合使用拓展Abaqus的使用场景。本书中作者结合自己几年的Abaqus使用经验,采用语言API讲解+实例说明的方法来介绍Abaqus/Python使用过程中比较有意思的一些知识点,希望能帮助读者进入Abaqus/Python的领域。

本书正文中提到的附件内容已作为资源提供下载,点击进入http://read.zhiliaobang.com/book/39即可下载。

统一技术支持

读者在学习过程中如遇到困难,可以通过我们的立体化服务平台(微信公众服务号:iCAX)与我们联系,我们会尽量为读者解答问题。此外,在这个平台上我们还会分享更多的相关资源。使用微信扫描下面的二维码就可以查看相关内容。微信公众服务号:iCAX

如果读者无法通过微信访问,也可以给我们发邮件,邮箱是iCAX@dozan.cn。

感谢西澳大学田英辉老师和SIMULIA中国区总监白锐先生于百忙中为本书作序。此外本书的撰写过程得到了许多朋友和前辈的支持,如石亦平博士、沈新普教授、梁琳站长、隋洪涛总经理、高绍武博士、姚新军先生、陈玮先生等,在此一并谢过。

由于作者水平有限,本书难免有错误和不足之处,恳请读者批评指正,以供今后修订时借鉴。作者2016年2月10日于南京序一

Abaqus是大型通用有限元程序包,拥有强大的非线性分析能力。Abaqus的雏形始于1978年成立的HKS公司(三位创造人Hibbitt、Karlsson和Sorensen名字的首字母),当时的版本只有约15000行的Fortran代码,可以使用4种单元进行分析。Abaqus最早期的产品只有隐式求解器Abaqus/Standard,显式求解器Abaqus/Explicit于1991年推出,实现了与Abaqus/Standard的无缝集成和相互传递数据。2002年年底HKS公司改名为Abaqus公司,于2005年为Dassault Systèmes公司所并购,现为公司力推的Simulia产品。

Abaqus求解器是采用input file(扩展名为inp)驱动的,输入文件基于keywords。早期的Abaqus没有前后处理器,需要手写输入input file,也可借助于第三方软件进行,这对复杂几何模型具有很大的局限性。Abaqus于1999年推出了Abaqus/CAE这一集成分析环境,使得这一局面得到了极大改善。Abaqus/CAE基于现代CAD理念和feature建模概念,采用Part生成Assembly,可以高效实现几何模型构建并生成有限元网格。Abaqus/CAE可将生成的模型在后台生成input file,并提交给Abaqus/Standard或Abaqus/Explicit求解器。Abaqus/CAE可以实时监测求解器运行情况,并提供了多种灵活方便的方式对分析结果进行后处理。需要说明的一点是Abaqus/CAE并不是支持Abaqus求解器的所有的keywords,目前仍有少数功能需要手动修改input file来实现,这也说明Abaqus/CAE仍在持续发展中,对求解器keywords的支持在不断的增强。

Python是一个独立的程序语言,其语法简洁而清晰。Abaqus/CAE采用Python作为脚本语言,和微软的Excel等Office软件采用VBA作为后台脚本是很类似的。当用户打开Abaqus/CAE时,会自动实时产生一个replay文件(扩展名为rpy),里面几乎记录每一步的操作。事实上,当用户保存Abaqus/CAE模型时,都会有个journal file(扩展名为jnl)产生,里面是生成CAE模型所需的Python脚本代码。Journal file清晰明了,可作为蓝本进行Python脚本程序开发。Abaqus/Python有着巨大的潜力,使用Python脚本不但可以减少很多Abaqus/CAE前后处理的重复性工作,大大提高效益,更重要的是还可以程序化实现原本手动不太可能做的事情。

我和作者苏景鹤素未谋面,于2012年相识于虚拟的网络空间,当时我正开发大变形有限元分析方法,基于Map solution采用网格重划技术遇到了一些问题,景鹤丰富的Abaqus/Python知识给我提供了不少技术支持,更令我难忘的是他的侠骨热肠。承蒙景鹤不嫌我知识浅陋,邀我为本书作序,在读完初稿后我欣然同意。在目前并不多的系统地介绍Abaqus/Python的教程中,本书以笔记的形式娓娓道来,不尚八股教条,可以看出本书是作者大量使用Python脚本开发程序的经验总结。我相信本书将十分有助于初学者进入Abaqus/Python程序开发的殿堂,对有一定基础的用户也很有参考价值。田英辉2016年2月22日西澳大学 天鹅河畔序二

非常高兴看到这本《CAE分析大系——Abaqus Python二次开发攻略》的出版,并有幸受邀作序。

众所周知,有限元技术早已成为工程和科学技术领域最为重要的数值分析方法之一。Abaqus以其分析复杂工程力学、驾驭庞大求解规模和强大的非线性分析功能,在众多有限元软件中得以突出,成为国际上公认的优秀大型通用有限元软件。

目前,已经有很多优秀的通用软件分析平台,比如Abaqus,基于这些平台进行二次开发比开发全新的专用软件更加快速高效。Python语言作为脚本语言具有可扩充性、可移植性、解释性、面向对象、可扩展性和可嵌入性等优点,再加上其丰富和强大的类库,无论是网络编程,或是大数据处理,甚至是科学计算等领域都可以看到Python语言的应用足迹。因此在众多的二次开发脚本语言中,Abaqus挑选Python作为其官方的脚本语言。基于Python实现Abaqus二次开发功能,毋庸置疑是一种完美的组合。

令人感到欣喜的是,最近几年市面上关于Abaqus的书籍层出不穷,水平越来越高,这与早几年大家只能参考庄茁老师、石亦平博士撰写的寥寥几本水平较高书籍的情况相比已经大为改观。作者此前参编的Abaqus教程在广大读者中的口碑非常不错,实用性很高,此次得知作者再接再厉编撰完成此书时,惊于其毅力坚韧,写一般专业书就需要很大的毅力和长久的坚持,更何况编程的枯燥与琐碎;同时也欣慰于有这么一本帮助用户学习使用Python进行Abaqus二次开发的书终于出版。目前关于Abaqus二次开发的书少之又少,此书的出版正好填补了这方面的空缺。

作者苏景鹤先生与江丙云先生均是SimWe论坛资深版主。苏先生自硕士毕业后一直从事结构分析与优化相关工作,有丰富的有限元分析经验,业余爱好程序设计,尤其是CAE软件二次开发;而江先生具有超过6年的世界500强企业有限元分析经验,精通Abaqus结构分析。该书是两位作者宝贵经验的总结,相信读者一定能从该书受益。

本书作者充分发挥各自专业特长,结合自己的Abaqus使用经验和论坛交流心得,采用“API讲解+实例说明”的方法,将原本枯燥的Abaqus二次开发知识点娓娓道来。书中涵盖内容丰富、讲解清晰、结构严谨、理论结合实践,相信这本书对从事Abaqus二次开发的科学研究或者工程应用人员一定大有裨益。白锐SIMULIA中国区总监2016年3月于上海评语

Abaqus提供了全面的二次开发接口,掌握Abaqus二次开发技术将会大大提升使用者的应用水平,国内很多使用者迫切期待学好此技术。本书作者结合其多年Abaqus使用和二次开发经验,详细介绍了二次开发的技术。本书难易结合、由浅入深、重点突出、案例典型,且作者把自己多年二次开发经验融入到了书中,是一本值得期待的学习Abaqus二次开发的好书。达索SIMULIA南方区 高级经理 高绍武 博士

Abaqus在各个仿真领域都日益得到越来越广泛的应用,特别是其开放的二次开发功能。本书系统详尽、深入浅出,在有限篇幅内,全面清晰地介绍了Python的编程方法和二次开发的关键要点,读者借助此优秀的Abaqus/Python教程,能够快速学习并掌握其强大功能。相信无论是Abaqus初学者,还是其资深用户,都会从本书有所收获,在仿真领域取得更大的成就。

北京金风科创风电设备有限公司 总工程师助理 石亦平 博士

作为Abaqus二次开发的工具语言,Python具有强大的功能,用户使用Python编制的子程序不仅能够实现若干批处理自动化操作,还能够通过这些子程序实现许多超出Abaqus基本功能的行为模拟。本书很好地阐述并总结了应用Python进行Abaqus模型分析的二次开发技术,并给出了相关实例,对相关工程技术人员具有很好的参考价值。北方工业大学 特聘教授 沈新普 博士

总版主苏景鹤和版主江丙云是SimWe仿真论坛里最让人敬佩的专业技术大咖,对工程数值模拟技术和工具应用有独特见解,他们的实战经历足以表明此书值得我们期待。毋容置疑,这是一本在实践中总结的精华教程,如果你想深入玩转Abaqus,此书是必读之作。SimWe仿真论坛 创始人 梁琳 站长

二次开发是中国CAE技术发展的重要方向之一,它既满足了不同用户的特色需求,又对原有软件技术进行了深入和拓展。本书作者将Abaqus二次开发方面的优秀应用经验与读者分享,必将帮助后来者少走弯路、提高学习效率。非常感谢作者的分享精神,也期待更多同行分享自己的优秀经验,共同推动中国CAE技术的发展速度。海基科技 副总裁 隋洪涛 博士

基于Python的前后处理及GUI开发是Abaqus非常有特色的一项高级应用技术。本书从Python的编程基础起步,全面介绍了与数值计算和结果可视化相关的NumPy、SciPy及Matplotlib等扩展模块,并基于众多实例对面向Abaqus的Python脚本和GUI开发进行了介绍。本书可作为Abaqus/Python二次开发的入门和进阶教程,读者能由此掌握Python这一强有力的工具,发挥出Abauqs更大的效能。美敦力上海创新中心 首席科学家 黄霖 博士

在达索任职时,时常有用户要求推荐Abaqus书籍,我一般建议“参考Abaqus手册,既系统又全面”,但是英文阅读并不适合大多数工程师。随着Abaqus越来越广泛的应用,相关的中文书籍也逐渐多了。看了初稿后,觉得《ABAQUS Python二次开发攻略》一书超出了我的预期,非常期待这本新书早日上市,给广大的仿真同仁带来帮助。这本内容丰富、充实的二次开发书,不只对初学者实用,对于很多资深工程师也是非常好的参考书。德尔福(上海)动力推进系统有限公司 王飞 博士

不同于市面上一些翻译帮助文件的软件教材,本书从编程思路、操作技巧和结果讨论出发,采用“API讲解+实例说明”的方法将Abaqus二次开发知识点由浅入深地娓娓道来,令人眼前一亮,对提升仿真工程师的专业能力和二次开发水平大有裨益。上海澎睿信息技术有限公司 技术总监 李礼

目前市面上鲜有关于Abaqus二次开发的书籍,本书正好弥补了这一空缺,是学习Abaqus二次开发的好帮手。全书内容丰富,讲解条理清晰,并考虑到读者Python功底的不同,有针对性地编排了章节内容,既有编程的基础知识,也有丰富的与工程实际相关的各种实例,将枯燥的二次开发写得通俗易懂。上海捷能汽车技术有限公司 刘敏

Abaqus在中国已有广泛的用户基础,能为广大的Abaqus用户提供一本高质量的参考书是作者多年来一直追求的目标。本书详细介绍了Python语言及其在Abaqus二次开发中的应用,读者在学习Python和Abaqus的同时,可以掌握二次开发的技能,提高工作效率。作为Abaqus的老用户,本人从本书中获取了很多新知识,希望广大读者也能从中获益。上海冠一航空工业技术有限公司 高级结构强度工程师 孔祥宏 博士

本书作者长期从事专职CAE工作,并作为SimWe仿真论坛版主多年,在Abaqus的应用和二次开发方面具有丰富的经验。本书结合Python语言和工程实例,详细讲解了Abaqus/Python的二次开发,对于我们公司来说,能够帮助开发易于客户操作的前后处理界面及其相关材料模型。对于广大读者而言,也将是一本难得的二次开发教程。巴斯夫(中国)有限公司 CAE助理经理 曾乐“工欲善其事,必先利其器”,Abaqus二次开发高效实用,但掌握起来难度很大,作者将多年的学习和实践心得整理成册以飨广大的CAE工作者,其深厚的理论功底结合实际工程的经验,以专题的形式为我们呈现了解决问题的思路、方法,尤其针对工程中常见的棘手问题,如参数优化、扭力弹簧和数据传递等,提供了行之有效的解决方案。潍柴动力上海研发中心计算分析所 聂文武

Abaqus/Python语法简洁、功能强大,对于数据的预处理和提取有“独门绝技”:第一,“化繁为简”,直接通过Python脚本来生成INP文件,简便灵活;第二,“去粗取精”,对分析结果进行自动过滤和提取,高效准确。本书作者将多年的实战经验无私地总结出来,为广大CAE爱好者尤其Abaqus使用者提供了非常宝贵的参考资料,甚是难得。上海普利特复合材料股份有限公司 CAE技术经理 祁宙

本书将Python语言在Abaqus二次开发中的高效与便捷完美体现,全书章节编排环环相扣,语言生动形象,理论概念清晰易懂,实例讲解细致入微,充分表明了作者具有多年的CAE实践经验,以及对二次开发详尽深入的理解。SimWe仿真论坛资深版主 清华大学 航天航空学院 杜显赫

Python作为Abaqus的接口语言是完美的选择,熟练掌握Abaqus/Python二次开发就可以定制自动化分析流程,尤其体现在运用Abaqus的前后处理模块,可以提高分析效率、降低分析成本。该书贴近读者,由浅入深地分三大部分详实介绍Python基础、Abaqus/Python基础和工程实例。作者结合多年经验有的放矢地指引读者更好地提高二次开发能力。研发埠仿真论坛讲师 上海交通大学 余燕 博士

本书通俗易懂,与具体实例紧密结合,把仿真工程师从枯燥的程序语句中解放出来,是一本真正适合读者使用的二次开发书籍。当读者“进入”本书,会不断被Abaqus/Python的强大魅力所吸引,迸发出强烈的学习欲望。上海卓宇信息技术有限公司 技术经理 李保罗

当进行二次开发工作时,难以找到合适的书籍帮助寻找解决问题的灵感。有幸能够研读此书,此书中的一些例子,完全可以直接拿来用到自己的项目中。作者花费了很多的时间和精力,挑选了最接近实际工程的案例,深入浅出地讲述了Abaqus二次开发的过程和方法。从我个人参考使用的情况来看,此书是一本非常有用的工具书,值得推荐。泰科电子家电事业部 全球技术分析工程师 李伟国第一部分 引言在引言部分我们将Abaqus二次开发引荐给读者,内容主要包括:• Abaqus二次开发体系的简介;• 不同的读者应该如何对待本书;• 常用的几种开发环境的搭建。第1章 Abaqus二次开发简介

对于CAE软件提供商,打造大平台,集成CAD/CAE/CAM已经成为一种趋势,而对于特定的CAE用户或者企业,制定适合自己的流程化CAE软件包越来越重要。对CAE提供商来说,要想直接定制适合企业使用的程序包,工业背景的缺乏是横在CAE开发者面前的一道坎,另外开发针对特定行业的软件无疑会缩小自己的市场,这一点也会减缓CAE提供商开发特定行业软件的步伐。对于CAE企业用户虽然掌握了工业应用背景和知识,但是花费不菲的人力、物力、财力去开发一款自己使用的CAE分析软件包也是得不偿失的。CAE软件包本身为用户提供全面易用的二次开发的接口,就是一种折中的解决方案。基于上面这些考虑,当前主流的CAE软件包都会为用户提供相应的二次开发的接口程序,方便用户定制适合自己的工业应用程序,比如Abaqus中使用的Python/FORTRAN子程序,ANSYS中使用的APDL,HYPERWORKS中提供的Tcl/Tk接口,以及PATRAN/NASTRAN使用的PCL等。作者主要使用Abaqus/Python,因此本书的展开都是基于对Abaqus二次开发认识的基础上。1.1 为什么是Python

初识Python的时候,一位朋友说过:Abaqus软件是一群绝顶高手开发并维护的,他们选择了Python作为Abaqus的接口语言,聪明人的选择也是聪明的。我对这个观点深信不疑,虽然当时对Python一无所知。现在有了几年的Python开发经验以后,回头想想这个的确是聪明的选择。

Python是简洁的、免费的、跨平台的、大众的,这些特色直接决定,对CAE工程师这样的“业余”程序使用者,Python是完美的选择。

Python是目前最为火热的脚本语言之一,而且现在的Python已经远远超出脚本语言的范畴,向着大语言发展。表1-1是来自权威的[1]TIOBE编程语言排行榜(2015年3月)的数据,可以看出,除了主流的编程语言C/C++/C#/VB/Java外,脚本语言中Python跻身前十,热度相当于Perl和Ruby的总和,这些数据足以表明当前Python的火热。

Python的流行确保了Python讨论和学习的环境比较平坦,易于掌握,加上Python本身所提倡的简洁特性,使得Python语言成为Abaqus的“官方”接口语言。

Python是跨平台的,这意味着使用Python编写的二次开发程序可以直接从Windows平台移植到Linux环境下使用。这一点对于CAE工程师非常重要:由于Linux系统对硬件资源更好地调用,大部分CAE分析用的系统都是Linux,而日常交流又常常在Windows平台上完成,这个时候语言的跨平台特性就十分重要。

Python的流行也得益于许多优秀的第三方Python类库,比如xlrd/xlwt(用于Python操作MS Excel文件),matplotlib(绘制仿Matlab风格的二维数据图片绘制),pyQt(Qt类库的Python封装,可以生成漂亮的软件界面)、NumPy和SciPy(处理大规模数据和进行科学计算的Python类库,实现类似Matlab的基本功能)以及Reportlab(编辑生成pdf文件的Python类库)等。这些优秀的类库大部分都是免费的,而Abaqus/CAE界面就是基于一种免费易用的跨平台的GUI类库的Python封装实现的。表 TIOBE排行TOP 20(2015年3月数据)1.2 Python、FORTRAN与Abaqus

目前Abaqus的二次开发有两种,求解器层次的FORTRAN和前后处理层次的Python。在说明Abaqus/Python能做什么之前,我们必须先弄清楚Abaqus中两种二次开发的区别。我们需要先了解一下Abaqus软件包的架构。

Abaqus软件包包括两大部分:用来进行前后处理的Abaqus/CAE(包括Abaqus/GUI和Abaqus/Kernel)以及用来对有限元模型进行求解计算的求解器(包括Abaqus/standard,Abaqus/Explicit,Abaqus/CFD或者Abaqus/Aqua),如图1-1所示。Abaqus/CAE运行后会产生3个进程:abq6141.exe、ABQcaeG.exe(Abaqus/CAE GUI)和ABQcaeK.exe(Abaqus/CAE Kernel)。图1-1 Abaqus软件环境结构

GUI或者负责收集建模参数交给Kernel建模并最终形成INP文件,或者打开现有的ODB文件,提取数据并显示云图,这一过程基本上都是Python语言完成的。达索公司为Abaqus/CAE提供了丰富的接口,如对模型操作的MDB相关接口,对结果数据ODB操作的接口,以及常用的CAE相关的session操作的接口。Abaqus/Python二次开发主要就是基于这一部分进行的,目的或者是快速自动建模并形成INP,或者是处理现有的ODB结果并提取所需数据。

无论通过CAE或者手动编辑最终都要形成INP文件,它记录建立的网格模型、载荷以及边界条件和分析类型等,它是Abaqus standard/Abaqus explicit…等求解模块唯一可识别的输入类型。这些计算模块就可以利用INP文件所描述的网格模型和边界条件求解问题的解并记录到结果文件中。像Abaqus/Standard等求解器都是使用FORTRAN语言(或者C/C++)实现的,这些程序可以满足大部分求解分析需求。但对一些比较复杂的问题,Abaqus为用户提供了对基本模块功能进行扩展的接口,如我们熟知的用于描述复杂材料本构的材料模型子程序(如UMAT/VUMAT)等;用于描述复杂加载方式的DFLUX或者DLOAD等;用于描述变化边界条件的UMOTIONS/UMESHMOTION等;以及用于描述用户定义特性单元的UEL。这个层次的二次开发都必须使用FORTRAN语言来完成。

当然因为INP文件有自己固有的格式,这个也就方便使用者绕过Abaqus/CAE直接利用Python程序生成INP文件,然后利用对应的Solver来求解。这个方法对于一些特定的问题十分有效,也可以认为是二次开发的范畴。

本书所介绍的就是基于Python实现的前后处理层次上的二次开发;或者是编写程序段完成某一特定的分析优化计算;或者是利用Python对大量计算结果进行后处理提取想要的结果;或者是编写更契合用户使用习惯的GUI界面,简化使用者的操作流程。1.3 基于Python二次开发

从上面的介绍可以看出Abaqus/Python二次开发就是要代替Abaqus/CAE实现前后处理工作,因此基本上能在Abaqus/CAE中实现的前后处理操作都可以通过Python程序来实现。只不过有些问题使用Abaqus/CAE更为高效,比如从第三方CAD软件中导入的几何模型常常需要几何清理,这个工作就不适合使用Abaqus/Python来实现。下面从作者自己的认识列出几个判断问题是否适合进行二次开发的标准。(1)当前所面对的分析问题在日常工作中是否经常遇到。这个实际上是做应用开发首要考虑的问题,确保问题值得花费额外的时间去做二次开发。一般二次开发都是在了解了分析过程的基础上进行,如果仅仅是偶发问题,使用Abaqus/CAE建立模型分析一次解决问题即可,花时间做二次开发就显得有些多此一举。对那些日常工作中常常要碰到的问题,二次开发就可以帮我们节省大量的时间,避免重复劳动。举一个简单的情况,如果模型中存在非常多的part部件,要赋予相同的截面属性,如果在Abaqus/CAE中操作,会非常繁琐,我们可以考虑编写一个对模型中所有part赋予相同截面属性的功能插件,后面面对类似的情况,只需要单击一下按钮就可以。(2)一些涉及参数优化或者参数灵敏性分析的问题,常常需要对同一模型进行多次分析,这类问题就非常适合做二次开发。(3)有时候借助程序进行二次开发是必须的,如在建立一些随机模型的时候,利用程序可以得到一些伪随机数来完成建模的过程。(4)面对没有特定规律的问题,通常不适合二次开发。编写程序实际上是对有特定规律问题的统一化解决方案,如果问题本身就是[2]不确定的,比如几何清理的问题,那么二次开发也就无从谈起。

举个例子,对于焊接温度分布的模拟,Abaqus中可以使用DFLUX子程序来完成。这一系列模拟流程非常适合二次开发:分析流程比较固定,不同的计算只需要使用对应的几何参数即可完成。因此可以编写一个完成焊接分析流程的小插件。该插件使用如图1-2所示的GUI界面收集输入参数,单击“OK”按钮后程序自动建立如图1-3所示的模型以及模拟的过程中需要的DFLUX子程序,等程序计算完成后可以得到如图1-4所示的温度分布云图。图1-2 焊接插件界面图1-3 两种工况:平板焊和圆管焊图1-4 温度分布云图与时间历程

Abaqus/Python的二次开发可以在工程应用以及科学研究中发挥重要作用,作者尝试记录自己在使用Abaqus/Python中的心得,希望能帮助大家更快地学习和使用Abaqus/Python来高效完成自己手头的工作。

[1]TIOBE排行榜基于互联网上有经验的程序员、课程和第三方厂商的数据,并使用搜索引擎(如google、bing、yahoo!、百度)以及wikipedia、amazon、youtube统计出的排名数据,主要反映某个编程语言的热门程度,并不说明语言的优劣。

[2]实际上几何清理在一定程度上也可以利用二次开发来解决,比如可以通过判断面的大小来删除一些小面,通过判断四边形面中两对边长度的比值大小来判断细长面的存在,但是由于工程问题对应的模型都比较复杂,因此这种二次开发往往不能彻底解决问题。第2章 Python能力确认

为了能让读者有针对性地阅读本书,这里给出三个例子,让大家可以通过读程序来确认自己的Python功底,从而确认从那一章节阅读此书比较合适。

pyTest1.py设计了一个包含基本运算和流程控制的函数,对C语言比较熟悉的读者应该可以准确地推断出程序的输出。这个就是本书4~6章所要讲的内容,如果这个程序可以看懂,那么就可以跳过4~6章直接从第7章开始看起。

pyTest2.py设计了一个文件读写和类创建的程序段,对C++和Java这类面向对象语言比较熟悉的同学应该可以推断出程序的输出。这个就是本书7~9章节所要讲的内容,如果这个程序可以看懂,那么就可以跳过7~9章直接从第10章开始看起。

pyTest3.py给出的是一个简单的工程实例二次开发代码。这个就是本书12~16章所要讲的内容,如果这个程序可以看懂,那么就可以跳过12~16章直接从第17章开始看。2.1 测试程序

测试程序1(pyTest1.py)#=====================================================================1 # -*- coding: utf-8 -*-2 3 def is_prime(num):4 # Initial to presume it's a prime5 rt = True6 # To test the numbers if it can be divided exactly by a smaller number.7 for i in range(2, num):8 if num % i == 0:9 rt = False10 break11 return rt12 13 a = []14 b = {}15 for i in range(1,10):16 if not(is_prime(i)):17 a.append(i)18 else:19 b["Prime Number"+str(i)*2] = i20 for key,value in b.iteritems():21 print "%s = %s" % (key, value)22 print "the composite numbers is %s" % a#=====================================================================

测试程序2(pyTest2.py)#=====================================================================1 # -*- coding: utf-8 -*-2 import sys3 import math4 import re5 import os6 import csv7 8 class myMaterial:9 """this is a class to define the optimization material"""10 11 infor='Author JingheSu, Email:: su.jinghe@outlook.com'12 cluster='optimization'13 14 def __init__ (self,density,elastic,plastic,expansion,specificheat,15 conductivity):16 self.elastic=elastic17 self.plastic=plastic18 self.expansion=expansion19 self.specificheat=specificheat20 self.conductivity=conductivity21 self.density=density22 23 def setElastic (self,elastic):24 self.elastic=elastic25 26 def setPlastic (self,plastic):27 self.plastic=plastic28 29 def setExpansion (self,expansion):30 self.expansion=expansion31 32 def setSpecificheat (self,specificheat):33 self.specificheat=specificheat34 35 def setConductivity (self,conductivity):36 self.conductivity=conductivity37 38 def setDensity (self,density):39 self.density=density40 41 def printInfor (self):42 print self.infor43 print 'this material belongs to set: '+self.cluster44 45 #============================================================46 47 def updateMaterial():48 """this function is used to update the material in current49 directory. with this function you can insert your material50 just by updating your material data using a csv file"""51 csvlist=[]52 cdir=os.getcwd()53 clist=os.listdir(cdir)54 matDict={}55 for item in clist:56 filedir=os.path.join(cdir, item)57 if os.path.isfile(filedir) and str(item).endswith('mat.csv'):58 csvlist.append(filedir)59 if len(csvlist)==0:60 print 'you got no material to use, material collection programm' \61 'exit!'62 return 063 else:64 for item in csvlist:65 csvreader=csv.reader(file(item))66 tempDensity=[]67 tempElastic=[]68 tempPlastic=[]69 tempExpansion=[]70 tempSpecificheat=[]71 tempConductivity=[]72 for row in csvreader:73 num=len(row)74 templist=[]75 typename=row[0].strip()76 for data in row[1:]:77 posteddata=data.strip()78 if posteddata!='':79 templist.append(float(posteddata))80 if typename=='density':81 tempDensity.append(templist)82 elif typename=='elastic':83 tempElastic.append(templist)84 elif typename=='plastic':85 tempPlastic.append(templist)86 elif typename=='expansion':87 tempExpansion.append(templist)88 elif typename=='specificheat':89 tempSpecificheat.append(templist)90 elif typename=='conductivity':91 tempConductivity.append(templist)92 tempMat=myMaterial(tempDensity,tempElastic,tempPlastic,93 tempExpansion,tempSpecificheat,tempConductivity)94 (filepath, filename) = os.path.split(item) 95 matDict[filename[:-4]]=tempMat96 97 return matDict98 #===========================================================99 100 if __name__ == '__main__':101 result=updateMaterial()102 print len(result)103 print result.values()[0].density104 print result.values()[0].specificheat

测试程序3(pyTest3.py)1 # -*- coding: utf-8 -*-2 3 from abaqus import *4 from abaqusConstants import *5 from viewerModules import *6 import regionToolset7 import mesh8 9 length = 1000 #mm10 Cload = 40 #N11 radius = 3.0 #mm12 Mdb()13 #: Create a mdb: model-1.14 s = mdb.models['Model-1'].ConstrainedSketch(name='beam', 15 sheetSize=200.0)16 g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints17 s.Line(point1=(0.0, 0.0), point2=(length, 0.0))18 p = mdb.models['Model-1'].Part(name='beam', dimensionality=THREE_D, 19 type=DEFORMABLE_BODY)20 p = mdb.models['Model-1'].parts['beam']21 p.BaseWire(sketch=s)22 del mdb.models['Model-1'].sketches['beam']23 24 mdb.models['Model-1'].Material(name='steel')25 mdb.models['Model-1'].materials['steel'].Elastic(table=((210000.0, 0.28), ))26 mdb.models['Model-1'].materials['steel'].Density(table=((7.8e-09, ), ))27 mdb.models['Model-1'].CircularProfile(name='Profile-1', r=radius)28 mdb.models['Model-1'].BeamSection(name='Section-beam', profile='Profile-1', 29 integration=DURING_ANALYSIS, poissonRatio=0.28, material='steel', 30 temperatureVar=LINEAR)31 p = mdb.models['Model-1'].parts['beam']32 e = p.edges33 region = regionToolset.Region(edges=e)34 p.SectionAssignment(region=region, sectionName='Section-beam', offset=0.0, 35 offsetType=MIDDLE_SURFACE, offsetField='', 36 thicknessAssignment=FROM_SECTION)37 e = p.edges38 region=regionToolset.Region(edges=e)39 p.assignBeamSectionOrientation(region=region, method=N1_COSINES, n1=(0.0, 0.0, 40 -1.0))41 42 a = mdb.models['Model-1'].rootAssembly43 a.DatumCsysByDefault(CARTESIAN)44 p = mdb.models['Model-1'].parts['beam']45 a.Instance(name='beam-1', part=p, dependent=ON)46 47 mdb.models['Model-1'].StaticStep(name='Step-load', previous='Initial', 48 nlgeom=ON)49 50 a = mdb.models['Model-1'].rootAssembly51 v1 = a.instances['beam-1'].vertices52 verts1 = v1.findAt(((0,0,0),),)53 a.Set(vertices=verts1, name='Set-fix')54 verts1 = v1.findAt(((length,0,0),),)55 a.Set(vertices=verts1, name='Set-force')56 region = a.sets['Set-fix']57 mdb.models['Model-1'].DisplacementBC(name='BC-fix', createStepName='Step-load', 58 region=region, u1=0.0, u2=0.0, u3=0.0, ur1=0.0, ur2=0.0, ur3=0.0, 59 amplitude=UNSET, fixed=OFF, distributionType=UNIFORM, fieldName='', 60 localCsys=None)61 region = a.sets['Set-force']62 mdb.models['Model-1'].ConcentratedForce(name='Load-load', 63 createStepName='Step-load', region=region, cf2=-1.0*Cload, 64 distributionType=UNIFORM, field='', localCsys=None)65 66 p = mdb.models['Model-1'].parts['beam']67 e = p.edges68 p.seedEdgeBySize(edges=e, size=length/100.0, deviationFactor=0.1, 69 constraint=FINER)70 elemType1 = mesh.ElemType(elemCode=B32, elemLibrary=Standard)71 pickedRegions =(e, )72 p.setElementType(regions=pickedRegions, elemTypes=(elemType1, ))73 p.generateMesh()74 a = mdb.models['Model-1'].rootAssembly75 a.regenerate()76 mdb.Job(name='beam-load', model='Model-1', description='', type=ANALYSIS, 77 atTime=None, waitMinutes=0, waitHours=0, queue=None, memory=50, 78 memoryUnits=PERCENTAGE, getMemoryFromAnalysis=True, 79 explicitPrecision=SINGLE, nodalOutputPrecision=SINGLE, echoPrint=OFF, 80 modelPrint=OFF, contactPrint=OFF, historyPrint=OFF, userSubroutine='', 81 scratch='', multiprocessingMode=DEFAULT, numCpus=1)82 mdb.jobs['beam-load'].submit(consistencyChecking=OFF)83 84 mdb.jobs['beam-load'].waitForCompletion()85 odbpath = os.path.join(os.getcwd(),"beam-load.odb")86 pngPath = os.path.join(os.getcwd(),"deformation")87 oo = session.openOdb(name=odbpath)88 vp = session.Viewport(name='myView')89 vp.makeCurrent()90 vp.maximize()91 vp.setValues(displayedObject=oo)92 vp.odbDisplay.setPrimaryVariable(variableLabel='U', 93 outputPosition=NODAL, refinement=(INVARIANT, 'Magnitude'), )94 vp.odbDisplay.display.setValues(plotState=CONTOURS_ON_DEF)95 session.graphicsOptions.setValues(backgroundStyle=SOLID, 96 backgroundColor='#FFFFFF')97 vp.viewportAnnotationOptions.setValues(legendDecimalPlaces=2, 98 legendNumberFormat=SCIENTIFIC, triad=OFF, legendBox=OFF)99 vp.viewportAnnotationOptions.setValues(100 legendFont='-*-verdana-medium-r-normal-*-*-180-*-*-p-*-*-*')101 vp.viewportAnnotationOptions.setValues(102 legendFont='-*-verdana-bold-r-normal-*-*-180-*-*-p-*-*-*')103 vp.odbDisplay.contourOptions.setValues(spectrum='Black to white')104 vp.viewportAnnotationOptions.setValues(105 titleFont='-*-verdana-medium-r-normal-*-*-140-*-*-p-*-*-*')106 vp.viewportAnnotationOptions.setValues(107 stateFont='-*-verdana-medium-r-normal-*-*-140-*-*-p-*-*-*')108 vp.view.fitView()109 session.printOptions.setValues(vpDecorations=OFF, reduceColors=False)110 session.printToFile(fileName=pngPath, format=TIFF, canvasObjects=(111 vp, ))112 2.2 程序运行结果

测试程序1(pyTest1.py)

该程序定义了一个函数is_prime,其用来判断一个正整数是否为素数:对1、2、3……9这9个数字根据其是否为素数将其分别存储在一个列表和字典类型的变量中,最后以一定的格式打印显示。程序的执行结果如下:---------- Python ----------Primer Number11 = 1Primer Number22 = 2Primer Number77 = 7Primer Number55 = 5Primer Number33 = 3the composite numbers is [4, 6, 8, 9]

测试程序2(pyTest2.py)

该程序定义了一个存储材料物性参数的类myMaterial,以及一个可以对当前目录下文件进行扫描并将所有以mat.csv结尾的文件中的信息提取出来的函数updateMaterial。该函数可以生成一个由文件名为键名,myMaterial类的对象为键值的字典。程序的执行结果如下:

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载