Setting up OpenGL with Visual Studio 2017

1. Using NuGet
1.1  Install Nuget package manager
     Run visual studio installer to see if NuGet package manager n\be checked. It not, check up and install it. By the way, You must also have Windows SDK be installed.


1.2  Open your project and pull down the program setting menu to find NuGet package manager.

  Searching "freeglut", you would find following three package 
where package nupengl ncludes freeglut, glew and glfw. Install it.

2. Just copying nupengl to relevent directories.
2.1 Download nupengl at https://github.com/jcdickinson/NupenGL
2.2 Copy all include files downloaded to C:\Program Files (x86)\Windows Kits\10\Include\10.0.16299.0\um\gl
      Copy all libraries files to C:\Program Files (x86)\Windows Kits\10\Lib\10xxxxxxx\um\x86(32bit) or \x64(64bit)
      Copy all 64bit dll files to C:\Windows\SysWOW64, copy all 32bit dll files to C:\Windows\system32

That's all


日本的仿真软件开发和国家项目(2)

下面介绍两个参考价值不是很大的国家项目,至此应该可以网罗日本的仿真软件国家项目了。

4. 高精度地球変動予測软件软件開発 (高精度の地球変動予測のための並列ソフトウェア開発 ): 1998-2002
     这是一个目标很明确的项目,着眼的是大规模,大时间跨度的计算,也就是大型并行计算。解析功能当然少不了断层,土壤的力学描述等。牵头的是东京大学的矢川元基教授,开发者以日本高度情報科学技術研究機構(RIST)为主体。开发出的软件叫GeoFEM,原来也是开源软件,但是现在已在网上消失了。现在日本的沿岸计算研究中心有一个经过开发扩展的版本,作为商品出售[1]。

5. VCAD系统[2]: 2001-2010
   Volume CAD的简称。这里将所有物体都来用正六面体来表述,称为VCAD。其优点很明显: 没有网格划分问题;其缺点也很明确: 是否存在针对这种格式的有效计算方法,或者说能否得到精度足够的计算结果。这是一个走偏门的项目,在一个技术没有确立的领域内能拿到国家开发预算真是有些不可思议。牵头的是当时日本理化学研究所的主任研究员牧野内昭武,开发者的主体是理化学研究所和其它院所的研究人员。开发的软件在此公开: http://vcad-hpsv.riken.jp/en/release_software/。这个项目开发的流体软件出现在前述FrontFlow/Violet中。
   与此相关的公司: 理研VCAD[3] . 刚才查看了一下公司网页,2015年后其更新为零。不知它是否还活着。



参考文献
[1] http://www.cdit.or.jp/program/geo.html
[2] http://vcad-hpsv.riken.jp/en/research/outline/
[3] http://trialpark.co.jp/riken-vcad/
 

日本的仿真软件开发和国家项目

  说的极端一点,除了极个别的例外,如[1],在仿真软件市场不存在有竞争力的日本制软件,ABAQUS, STARCD,ANSYS等横行日本,这一点和中国类似,与十几,二十年前如日中天的日本制造业相比也是对比鲜明。奇怪的是日本的游戏软件非常发达,我想也许与其发达的动漫文化有关吧。
   话说回来,日本政府对仿真软件的开发还是很重视的,从1997年开始就不断有大型国家项目不间断地往里投钱。本文下面想罗列一下这些日本仿真软件开发的国家项目,一是供有心人参考,另外这些项目开发的软件基本都是开源的,可供参考利用。

1. 1997-2002: Adventure Project[2]
1.1  首先这个项目的成果。在下图中可以看出,这个开发的软件包括从CAD到网格生成到解析结果的输出的整个过程。嗯,除去使用GUI的前后处理功能外基本上齐整了。 
 
图1

1.2 下面再看看开发者。这里强调一下这里的非大学教职的民间开发者。在本以及以后的日本国家项目中,都有不少民间开发者,其目的是便于在国家项目结束后所开发软件能得到迅速推广和持续开发。这里列出的两个公司,一个主攻仿真计算[3],一个主攻前后处理[4],仍然存在,但[3]已被收购。
图2


 1.3这些 软件有什么特点,换句话说日本人想靠什么弯道超车。看看[2]中的申明
图3
  个人评论如下

   1)  大规模计算。🆗!一般性而言,通用仿真软件的大规模并行计算功能不是其强项。

   2) 并行效率高。这个要打个引号,在某些情况下并行效率还是不错的。
   3,4)  这些都是应该地,谈不上是优点
   5) 软件可扩张性好。😥 其实相当地不好
  另外有一点,吉村教授在各种发表会上必讲的优点是其联立方程式求解器极好。基本上什么问题都收敛。但据我所知这种技术目前仍不存在。

1.4 现状
1)开源版的Adventure
      除个别软件(ADVENTURE Magnetic)外,其更新已经停止。但是零星的用户是存在的,这些人比较熟悉其内核,可以自己修改程序。
2)商业版ADVC
   其开发公司[3]一,二年前被收购。现在仍有少数机构在使用该商用版软件。

1.5 个人评价
1)开源版软件不好用。如图1所示,完成一个计算你要运行至少4个程序。同理,编译这一程序要弄清各个程序的依存关系一个个来,运行时的边界条件设定,输出输入文件还要经过专门程序的变换处理。当然,这样的设计便于分大饼,也可用来鼓励用户去购买商业版。
2)基本设计很糟糕。该软件的大部分用c语言开发。这样的结构化语言的设计中,需要设计时需要导出不少相互关联尽量少的基本模块。对有限元软件来说,单独的联立方程式求解器模块是常识,该软件居然把联立方程式求解部分直接嵌入有限元计算。这样的软件读起来一团粥,想换个求解器几乎不可能。也不知道开发者是不是相信自己的求解器能一劳永逸地解决所有问题而禁止用户做二次开发。

1.6 下载网址 http://adventure.sys.t.u-tokyo.ac.jp/download/

2.  2002-2005: 战略的基础软件的开发(戦略的基盤ソフトウェアの開発)
    2005-2007:革新的模拟软件开发 (革新的なシミュレーションソフトウェアの開発)
 2008-2012:创新的基础模拟软件的开发 (イノベーション基盤シミュレーションソフトウェアの開発)
   虽然国家预算的关系分开了,这三个项目的内容基本上是连续的。项目的牵头人一直是东京大学的加藤千幸教授,具体的开发者虽然有变化,但基本上也是同一批人。

2.1  成果

  从2002-2005开发了量子化学计算软件Protein-DF,蛋白质-化学计算软件BioStation,CFD软件FrontFlow,固体变形计算软件NEXST(2005后大改后更新为FrontSTR,2008年后更新为FrontISTR),Middleware软件HPC-MW(后并入FrontISTR

  到2012年结束时留下的软件有FrontFlow(流体),FrontISTR(固体),FrontCOMP(增加了碳素纤维复合材料的解析功能的FrontISTR),REVOCAP(GUI,流固耦合机能等辅助工具),ProteinDF(量子化学),BioStation(蛋白质-化学)和Phase(纳米结构计算)。

2.2 ·开发者
  这时创建了一个有60个人的新公司AdvanceSoft[8]专注于该项目的开发。不过其后续项目有其他公司参与。这里列出的东京大学的教授们的位置更像工程承包商。有些教授还招聘研究员在自己手下做开发,有的就干脆全部外包。

2.3 项目的目的和特点
   
   这是一个有者远大目标的项目,其目标包括一流软件的生产,软件开发人才的养成,相应高科技风险公司的促成等。至于什么是计划中的一流软件,说实话这个我也不知道!

2.4  ·现状
1) 开源版诸软件
    这些软件都预装在日本国内的各巨型机(如[9,10])中。从这一点来看,该项目的成果效果是很明显的。因为即使有成熟的商业软件可用,这些软件在这些新型巨型机安装是个问题。另外这些商业软件的并行计算效率一般不高。最后,即使这些商业软件可用,其大多是按CPU个数来计价的,如果要进行成千上万的CPU的并行计算,那么使用这样的商业软件就相当于招呼强盗到你家里抢钱。
   存在一些数目不详的个人用户。相应地,前述Adventure Project开发的软件使用者在减少。
   除去FrontISTR[11]外,其他软件的更新已经停止。

2)商用版诸软件
     上述开源版诸软件全部有对应的商用版,如Adavance/PHASE,Advance/FrontFlow[8]等。其中FrontFlow的商用版最多,有数家公司在做继续开发。但是其市场占有率很低,大约在FLUENT,PHOENICS这些软件眼里其威胁可以忽略不计。

2.5  个人印象(仅含FrontISTR,FrontFlow)
 1) FrontFlow: 包含三个互不相关的软件:FrontFlow/blue(FEM), FrontFlow/red(FVM),和FrontFlow/violet(正交网格)。其中violet出自另外一个国家项目VCAD(后述)。大体上是一款充满70年代气息的怀旧软件。很难相信在2010年代还会出现Fortran· 77格式的新规软件出现。文档很少(只有用户使用说明书)。功能还说的过去。
2) FrontISTR: 程序的基本设计原来只考虑了线弹性计算。虽然经过大规模的修改,仍然问题多多。功能还说的过去。基本文档也有。

2.5 ·下载地址
   http://www.ciss.iis.u-tokyo.ac.jp/riss/dl/download/index.php
  FrontISTR下载地址:
  官方:https://github.com/FrontISTR/FrontISTR.git
  本人:https://github.com/hillyuan/FrontISTR.git

3. HPCI战略PROGRAM: 2009-2015[12,13]

   该项目转向为应用和运营。

  同行的朋友间有个说法,在日本只有一个成功的Made in Japan的软件[1]。 虽然是个情绪化的说法,但是应该有个七,八分的可信度。注意到这个软件与上述国家项目没有任何联系。这一事实至少可以证明"国家投资=成功,国家不投资=失败"这一公式并不成立。其中原因,值得思考。

参考文献
[1]  http://www.cradle.co.jp/
[2]  http://adventure.sys.t.u-tokyo.ac.jp/
[3]  http://www.alde.co.jp/
[4]  http://www.meshman.jp/
[5] http://www.ciss.iis.u-tokyo.ac.jp/fsis/en/index.html
[6] http://www.ciss.iis.u-tokyo.ac.jp/rss21/en/index.html
[7] http://www.ciss.iis.u-tokyo.ac.jp/riss/english/
[8] http://www.advancesoft.jp/
[9] https://www.j-focus.or.jp/focus/
[10] http://www.hpci-office.jp/folders/english
[11] http://www.multi.k.u-tokyo.ac.jp/FrontISTR/
[12] http://www.mext.go.jp/a_menu/kaihatu/jouhou/hpci/1307375.htm
[13] http://www.aics.riken.jp/jp/

有限元计算中的体积锁死现象和F-bar单元

1.  什么是体积锁死现象

图1 平面应变模型

   在图1所示的又两个三角形单元组成的平面应变问题中,如果变形体材料是不可压缩的,那么我们不管在加载点施加多大的力,从有限元法计算得到的所有节点的所有位移都为零。因为任意位移都会导致两个三角形中的一个的体积变化。这种有限元单元精度不足以表现所需体积应变的问题就是体积锁死现象。


图2   受内压的线弹性厚壁圆筒;理论解(点线)和有限元计算结果的比较(1)

    图2给出了另外一个例子。这里显示了受内压的厚壁圆筒在弹性圆筒的泊松比为0.3时,有限元计算结果逼近理论解;而当泊松比逼近0.5时,有限元计算结果与理论解相差极大(实际上当泊松比逼近0.5时,有限元计算位移逼近于零)。

1.1  为什么会发生锁死现象

    这里给出一个非常粗糙的解释: 我们通常可以把变形体的变形功W分解为几个部分,比如说体积变形部分和非体积变形部分
          W = W1 + W2
由于数值计算的误差,当不同部分变形功的差相差很大时,将会带来很大的舍入误差,使计算结果变得很不可靠。具体来说,由于
    1) 单元尺寸带来的误差: 壳,梁单元是其典型。由于壳单元面内的尺寸和壳厚相差很大,使得面外应变与面内应变的计算精度相差很大,带来剪切锁死现象。由于细分后网格的单元边长和壳厚将会减小, 剪切锁死现象可以通过细分网格来减轻。
   2)由于材质带来的误差: 不可或近似不可压缩材料如泊松比趋于0.5的弹性材料,塑性材料,这时的体积应变对应于巨大的变形能,因而带来体积锁死。体积锁死现象不能靠细分网格来回避。
   3)由于物理现象不同带来的误差。比如说在做热-变形耦合分析时,温度(在三角形单元中线性分布)和应变(在三角形单元中均匀分布)计算精度带来的误差。
   对于该问题的进一步解释建议参看文献2),在哪里给出了通俗和准确的解释。

1.2  如何减轻锁死
   可以通过单元技术来减轻锁死的影响。如Selective reduce integeration, ·Incompatible,Assumed strain,Mixed formulation,MITC等等。对于近似不可压缩材料的体积锁死,最常见的对应方法是采用B-bar单元,这种单元的新式变种是F-bar单元,这是本文下面要讲的内容。

2. B-bar单元3,4)
   一般的,单元内任意一点的应变$\varepsilon$表为单元节点i的位移·ui·的函数$\varepsilon=\Sigma_iB_iu_i$. 在B-bar单元中将应变分解$\varepsilon=\varepsilon_s+\bar{\varepsilon}_v$。其中$\bar{\varepsilon}_v$为单元的平均体积应变$\bar{\varepsilon}_v=\sum_i\varepsilon_{vi}$或单元中心的体积应变值$\bar{\varepsilon}_v=\varepsilon_{vo}$. $\varepsilon_s$为偏差应变值。相应地,单元内任意一点的应变用下式计算
    $\varepsilon=\sum_i{(B_{si}+\bar{B}_{vi})u_i}$
   这里将体积应变做平均计算的方法缓和了体积锁死。这种方法实现起来非常简单,计算费用不高,效果也不错,因此得到非常广泛的应用。但是这种方法视乎不能满足LBB条件5)。

3. F-bar单元6,7)
   相应于B-bar单元对应变的加法分解,单元中的任意一点的变形梯度(deformation gradient)可以分解为体积变形梯度和偏差变形梯度两个部分: $F=F_sF_v$。 理论上来说这种分解方式是严密的,而B-bar单元中的应变加法分解是一种近似,只是在应变很小时与变形梯度的乘法分解相近。因此把B-bar单元推广到 F-bar单元是非常自然的,在变形较大时采用F-bar单元精度更好。
   在F-bar单元中,单元中的任意一点的变形梯度表述为$\bar{F}=(\bar{J}/J)^{1/3}F, J=detF$. 其中$\bar{J}$可以是单元中Jocobian J的平均值$\bar{J}=\frac{1}{V}\int_{V}JdV$,也可以指单元中心的Jocobian值。

3.1  Total Lagrange算式展开
   在Total Lagrange计算中,单元中变形能由Green应变E和第2Piola-Kirchhoff应力S的乘积在初始构型V中的积分计算得出$W=\int_{V}ESdV$, 其中$E=\frac{1}{2}(\bar{F}^T\bar{F}-I)$中的$\bar{F}$采用上述变形梯度表达式。如此,变形能变分为$\int_{V}\delta ESdV$, 单元的consistency stiff matrix可以由变形能变分的微分$d(\int_{V}\delta ES)dV$展开得出。

3.2 Updated Lagrange算式展开
   在Updated Lagrange计算中,单元中变形能由Almansi应变A和Cauchy应力T的乘积在现在构型v中的积分计算得出。$W=\int_{v}ATdv$, 其中$\bar{F}^TA\bar{F}=E$, $T=\frac{1}{J}\bar{F}S\bar{F}$。把这些变换带入3.1的相应算式即可得出Updated Lagrange法的内力,单元的consistency stiff matrix计算公式。

3.3 微小变形计算的算式展开
   如前所述,F-bar单元用于大变形计算。在微小变形计算中应用B-bar单元就可以了。不过由于应变的加法分解可以理解为变形梯度乘法分解的近似。那么可以从F-bar单元公式推出B-bar公式来。虽然从实用的角度来看这样做似乎意义不大。参见文献(9)

3.4 Fbar-patch 单元(8)
  Fbar单元不能应用于三角形一次和四面体一次单元,因为这些单元内的应变本身就是均匀分布的。为了将这一方法扩展到三角形一次和四面体一次单元,文献8)提出了将单元分解为相邻的patch的方法,称为Fbar-patch单元。

4. 算例: Cook's membrane (10,11)
  Cook's membrane benchmark见上图,锲形版材质设定为近似不可压缩的Mooney Rivlin超弹性材: 其·弹性能函数$W=C_{10}(\bar{I}_1-3)+C_{01}(\bar{I}_2+3)+\frac{1}{D_1}(J-1)^2$, with $C_{10}=1.0, C_{01}=0.925, {D_1}=0.000245$. 采用单元为六面体F-bar单元,B-bar单元 和一般的等参六面体单元。计算结果如下



(a)等参单元:受力方向最大位移值=0.2706


b)B-bar单元:受力方向最大位移值=3.898
b)F-bar单元:受力方向最大位移值=4.918

  



参考文献
1)Allan F. Bower: Applied Mechanics of Solids, CRC, 2010, p535
2) Gangan Prathap: FINITE ELEMENT ANALYSIS AS COMPUTATION, http://www.cmmacs.ernet.in/cmmacs/pdf/ch08.pdf
3)TJR Hughes: Ceneralization of selective integration procedure to anisotropic and nonlinear media, Intl. J. Numer. Methiods Engng., 15(1980), 1413-1418
4) JC Simo, KS Pister, RA Taylor: Variational and projection methods for the volume constraint in finite deformation elatoplasticity, Comp. Mthods Appl. Mech. Eng., 51(1985), 177-208
5) F Brezzi, M Fortin: Mixed and Hybrid Finite Element Method, Springer, 1991
6)  B Moran, M Oritz, CF Shin: Formulation of implicit finite-element methods for multiplicative finite deformation platicity, Intl. J. Numer. Methiods Engng., 29(1990), 483-514
7)  EA de Souza Neto, D Peric, M Dutko, DRJ Owen: F-bar based linear triangles and tetraheral for finite element strain analysis of nearly incompressible solids. Part I: Formulation and benchmarking Intl. J. Numer. Methiods Engng., 33(1996), 3277-3296
8)  EA de Souza Neto, D Peric, M Dutko, DRJ Owen: Design of simple low order finite element for large strain analysis of nearly incompressible solids, Intl. J. Numer. Methiods Engng., 62(2005), 353-383
9)CD Foster, T Mohammad Nejad,; Trilinear Hexahedra with integral-averaged volumes for nearly incompressible nonlinear deformation, Engineering, 7(2015), 765-788
10)  Cook, R. D.; Improved two-dimensional finite element; ASCE J. Struct. Div., ST9, 1851-1863 (1974).
11) Brink,  U., and E. Stein, On some Mixed Finite Element Methods for Incompressible and Nearly Incompressible Finite Elasticity,Computational Mechanics, vol. 19, pp. 105–119, 1996.

VS Code下cmake, c++编译,调试环境的构成步骤

1   下载必须extension      按[Ctrl+Shift+X]打开extension窗口,选择安装"C/C++", "CMake", "CMake Tools" 2   在VSCode下打开作业目录 ...