Python in Abaqus: Basic Template

  23 Oct 2015     Research, Python, and Abaqus

Abaqus provides a very powerful Python scripting interface. Every operation in Abaqus/CAE GUI has its corresponding Python command. By utilizing scripting interface, one can do tasks that can never be imagined by simply using GUI interface. I have been using Python scripting interface myself for several research projects. From my personal experience, I found at least the following advantages.

  • Automate repetitive tasks. E.g. create a commonly used material library (I have created a small material library for my research in stretchable electronics systems).
  • Parametric study. With a simple “for” statement, one can easily run a series of simulations of similar structures and extract the results automatically.
  • Better understanding of data structures in Abaqus. At least for me, I know better how geometries/elements are organized in Abaqus from my experience of using Python scripting interface.

This post is NOT meant to be an introductory tutorial for writing Abaqus Python scripts. The Abaqus Scripting User’s Guide in Abaqus documentation is a good introductory guide. Instead, this post is supposed to be a useful template for building Python scripts.

Import

1
2
3
4
5
6
7
8
9
10
11
# Abaqus/CAE Import
from abaqus import *
from abaqusConstants import *
from caeModules import *

# Abaqus/Viewer Import
from odbAccess import *

# Math Libraries
import math
import numpy as np

Adding Materials

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
currentModel = mdb.models.values()[0]

# Create Material
newMaterial = currentModel.Material(name='NewMaterial')

# Density
density = 1E3
currentModel.materials['NewMaterial'].Density(table=(( density, ), ))

# Elasticity
youngs = 1E6
poisson = 0.3
currentModel.materials['NewMaterial'].Elastic(table=(( youngs, poisson), ))

# Hyper-Elasticity (Monney Rivilin Model)
youngs = 1E6
poisson = 0.3
Hyper_C10=youngs/(5*(1+poisson))
Hyper_C01=youngs/(20*(1+poisson))
Hyper_D1 =6*(1-2*poisson)/youngs
currentModel.materials['NewMaterial'].Hyperelastic(materialType=ISOTROPIC,
  testData=OFF, type=MOONEY_RIVLIN, volumetricResponse=VOLUMETRIC_DATA,
  table=(( Hyper_C10, Hyper_C01, Hyper_D1), ))

2D Plane Strain/Stress Part

TBA

3D Shell Part

TBA

3D Part

TBA


独立博客建站随想

  12 Jul 2015     Blog

维护一个独立博客并不是一件简单的事情。

一个博客的结构并不复杂,纯静态的网页都可以实现一个简单博客的所有功能。即使从头编写HTML和CSS代码,编写一个博客框架也并不会花费多少时间。当然,更简单的还可以直接安装Wordpress之类的博客工具,只需要安装插件,选择主题,调整样式了。我自己对编写独立博客感兴趣始于两年前。当时我发现了Jekyll,一个非常轻量级的建站工具。循着一些教程,我也为自己搭建了第一个博客。初次建站,我自然非常兴奋,愿意到处向人炫耀自己的网站。然而兴奋之余,随着时间流逝,我自己忙于课业、申请,博客很快就荒废了。直到前些日子突然又对网页前端感兴趣,才又拾起当年的网站,重新写了更加Responsive的界面,以及完善了评论、订阅等等博客应有的功能。然而维护过独立博客的人都知道,真正的困难在于坚持!此番热情又能维持多久,也只能日后回头才能知道。类似的问题困扰了大多数个人博客–搜索引擎里找到许多个人博客,最新的一篇帖子常常停留在一年两年之前。个人博客往往是博主的业余兴趣,博客的维护也全凭博主的热情。能在琐碎的日常生活和繁重的工作中保持这种热情,自然并非易事。

另外实际管理博客的时候,也会遇到种种问题。最大的问题莫过于一些链接的不稳定。不同于商业网站,所有的版块内容都先有较为清晰的设计,个人网站的调整往往更加随博主心情,而这些调整往往就需要调整网页的路径。这对于想要引用博文的读者就会造成许多困扰–我在查找资料过程中,常常遇到一些链接到404的URL,这些Link往往都属于一些个人博客。另外博客的曝光率也是一个很大的问题。既然选择将博文设为公开,多少希望有读者可以驻足,甚至能有所互动,结交一些志同道合的朋友。然而实际是,除去一些知名的博客,大多数个人博客都成为了互联网大海中的孤岛、暗礁。我自己的博客在很长一段时间都无法在Google上找到,即使现在,我也无法直接在搜索引擎上寻找到我的博文内容。缺少读者,博主写作的热情自然也降温不少。

与这些个人博客的困境相对的,如今盛行的社交网络似乎恰恰避免了这些问题。社交网络上互相订阅,自然不缺少读者和曝光度。在社交网络上发表帖子也格外简单–自twitter、微博以来,帖子越来越简短,到如今Instagram、朋友圈,更是已经以图片、视频为中心。时代的节奏越来越快,社交网络也在适应这样的变化。

我自己却并不适应这样的变化。我自己在社交网络上又偏偏是一个极度内向的人–我记忆中从来没有主动发表一个和自己有关的帖子。我不愿意太过于炫耀自己–尽管自己内心深处也希望被崇拜认同,然而自己更喜欢的状态是保持低调,当别人靠近才发现自己的闪光处。在社交网络上发言,却有种大声广播的感觉,与自己保持低调的愿望相去太远。然而我对社交网络态度也非常矛盾,我羞于发声的同时,又乐于在网络上看到好友的最新动态,因此又离不开社交网络。事实上我自己是一个社交网络重度使用者,我几乎注册了所有主流的、小众的社交网络,加满了自己认识的好友,每天也会有许多时间用在刷新facebook,朋友圈,给各种状态回复点赞。

不过沉溺于社交网络并不会消除任何寂寞孤单的感觉,这种感觉在自己来美国之后尤甚。放弃UCLA,选择西北,我与昔日的挚友联系越来越少。在这边虽然也遇到许多新朋友,但默契的培养还是需要时间。项目繁忙时,孤单感觉当然淡一些,一旦空闲下来,这种感觉还是清晰而忧伤。这种孤单寂寞是我这次有勇气重新开始记博客的一个重要原因吧。当然孤单的好处是给了自己更多的独处时间,去自由从事自己的兴趣爱好,自由的思考和写作。维护这样一个博客,多少也充实了一些无聊的时间,多勉励自己去阅读、去学习一些有意思的学问。另一方面,我也并不愿博客变成自己的羁绊、负担,太过浪费科研的时间和精力,因此也不会刻意要求按时更新,更不会去无病呻吟,行文亦可以随意些。总的宗旨即是,随心而已。


Polymer与前端开发心得

  28 Jun 2015     Web Development

整整一周都在“不务正业”,痴迷于各种网页技术。

一切都要从Google发布Polymer 1.0开始。最早是从Google I/O 2015的报道上看到Polymer,好奇搜索了一下,就被其Materials Design的效果惊艳了。虽然早就用惯了原生Android系统上各种Material Design的Google应用,但是看到能在Web端也有一套类似于SDK的工具可以快速写出同样效果的网页应用,还是非常惊讶的。

Polymer的主旨是一切都组件化,正如I/O上Polymer负责人所宣传的那样

Need a new feature in your app? There’s an element for that :)

这个和我多年来接受的软件工程教育是一致的,强调模块化和封装,因此也很自然接受了Polymer的理念。

多年以来,我自己对网页前端技术都是一直非常轻视的。我自己很早就接触了HTML和CSS,也尝试过一些JavaScript的小程序。这些都是入门门槛非常低的,而我自己一直非常天真觉得网页上再炫酷的效果,无非是HTML/CSS/JavaScript的组合,而相比自己写的其他程序,网页前端程序通常不涉及复杂的算法数据结构,自然应该是比较容易的。

然而真正在我自己设计自己网站的时候,才意识到自己前端知识的匮乏。好不容易用自己全部的HTML/CSS知识实现了网站,却总觉得和现在互联网上的其他网站比较起来太过简陋,缺乏现代元素。当然这一方面很大关系在于我缺乏设计经验,只能简单复制模仿一些他人的网页。另一方面,我也意识到现在要开发一个比较复杂的网站,从头开始写HTML/CSS的方法大概是行不通了,多少需要借助一些框架,而自己对现在流行的各种框架一点都不了解。所以给自己简单订一个补充前端技术的计划,一是把网页基本技术打扎实,熟悉JavaScript语言及其相关的文档对象模型等等,二是继续跟进Polymer,以及多阅读一些技术博客,了解前端技术的发展趋势。

当然无论自己多感兴趣,网页前端都并非是自己的专业领域。扪心自问,自己没有多少艺术天赋,最多不过尝试去遵循一些设计准则。即使是技术方面,网页前端是一个非常依赖于经验的领域,自己也难以达到前端工程师的要求。自己的目标,无非是把自己的个人网站和博客做的更加精致,即使无他人问津,自己每次写博客时也看的更加舒心。

某种意义上,前端也是一门艺术,何不就把前端开发作为自己业余兴趣爱好之一,恰如书法音乐绘画,并不强求精通,略懂就好。