ADINA二次开发培训

返回 相似
第1页 / 共63页
第2页 / 共63页
第3页 / 共63页
第4页 / 共63页
第5页 / 共63页
亲,该文档总共63页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述:
2019/5/18,1,ADINA二次开发专题培训内容,2019/5/18,2,主要内容,1. 预备知识 2. 材料本构二次开发 -- 线弹性材料 -- 非线性弹性材料 3. 摩擦算法的二次开发 4. 基于tcl/tk语言的联合开发,预备知识,开发环境, ADINA8.7版本Windows系统开发环境为Compaq Visual Fortran 6.6A;Linux是Intel Fortran;  方式是通过ADINA(对所有用户)提供的Makefile自动进行链接各个*.f文件生成动态链接库文件,针对不同的求解器开发,提供不同的Makefile文件,包括 ADINA-Structure模块adusr.dll ADINA-Thermal模块atusr.dll ADINA-CFD模块afusr.dll ADINA-FSI模块adfusr.dll ADINA-TMC模块adtusr.dll,开发代码是如何进入到求解器的, 任何程序段是通过以上列出的动态链接库将用户开发的内容传送给求解器的 ADINA-Structure模块adusr.dll-adina.exe ADINA-THermal模块atusr.dll -adinat.exe ADINA-CFD模块afusr.dll -adinaf.exe ADINA-FSI模块adfusr.dll -adfsi.exe ADINA-TMC模块adtusr.dll -adtmc.exe  当启动任何求解器时,DLL中的程序自动成为求解器的一部分,开发代码和输入数据是如何匹配的,开发代码中指定了各种变量,包括所谓已知变量和未知变量,已知变量的一部分是用户通过界面的相应菜单输入的,如本构二次开发过程中的材料参数,控制参数等等 例如在材料开发时 已知变量应变--程序计算确定数值,出现在等式的右侧 弹性模量、波松比--用户输入参数,程序从dat模型文件识别读入 未知变量应力--程序计算确定,出现在等式的左侧,DLL是如何编译的,Fortran源代码修改后,需要重新编译,生成一个新的DLL文件。用这个文件替代求解器当前目录(\x32或者\x64子目录下)的相应文件就实现了替换。DLL文件是如何编译的呢 每个文件都是用一个ADINA指定的文件进行编译 ADINA-Structure模块Makefile.adusr-adusr.dll-adina.exe ADINA-THermal模块 Makefile.atusr- atusr.dll -adinat.exe ADINA-CFD模块 Makefile.afusr- afusr.dll -adinaf.exe ADINA-FSI模块 Makefile.adfusr- adfusr.dll -adfsi.exe ADINA-TMC模块 Makefile.adtusr- adtusr.dll -adtmc.exe  编译过程 \DF98\bin\dfvars(启动编译环境) nmake /f Makefile. (编译生成DLL文件),DLL是如何编译的,Makefile文件已经编写了有关路径、指定源代码文件和OBJ文件等指令,因此除了材料本构可能需要修改外,其它的开发不需修改,自动都是包括在内的。 这意味着我们的代码都是嵌入到已经指定的那些源文件中,而不是任意生成一个新的源文件。  开发材料本构时,需要编辑Makefile.adusr文件,修改其中的参数 MAT2D_OBJ ovl30u_pl1.obj (2D模型) MAT3D_OBJ ovl40u_pl1.obj (3D模型) 这里,ovl30u_pl1.obj和ovl40u_pl1.obj分别指向ovl30u_pl1.f和ovl40u_pl1.f源文件,原因是可以进行编译的源文件很多,而ADINA每个只能指定一个进入DLL。,材料本构开发(2Dovl30u*.f; 3D ovl40u*.f,分别10个源文件) 摩擦算法开发(ovlusr.f) 单元算法开发 ovl160u.f 单元失效准则开发ovlusr.f 结构断裂力学和裂纹扩展规律开发2Dovl30u.f;3D ovl40u.f 压电材料/固结材料开发2Dovl30u.f;3D ovl40u.f 热本构开发(at00u.f) 流体本构开发(ovlf0u.f) 边界、载荷条件开发ovl170u.f,支持的二次开发工作,材料本构二次开发,材料本构开发入口条件,已知参数 c strain1 x应变 c strain2 y应变 c strain3 z应变 c strain4 xy应变 c strain5 yz应变 c strain6 zx应变 C 常用的其它参量 c c TIME 当前时间 c DT 当前时间步长 c TEMP1 当前温度,AUI输入参数 c CTI1young s modulus c CTI2poisson s ratio C CTIn C CTDD98),未知变量 STRESS1  xx STRESS2  yy STRESS3  zz STRESS4  xy STRESS5  yz STRESS6  zx,历史变量 ARRAYLGTH1 提供多于60个可以输出的实数型历史变量,常用于做如屈服应力、塑性应变、应力水平等数据的存储; IARRAY( LGTH2 ) 提供多个全局整数型历史变量,往往用于程序控制或其它用途;,材料本构开发入口条件,开发详细过程, 材料二次开发,与模型中采用的单元类型相关,因此2D和3D的应用是分开的;  前面提到,二次开发需先选择一个已经存在的源文件,可以是任何一个,因为对于开发来说其提供的入口条件是相同的;  现在要自己开发一个最简单的线弹性材料,用于3D模型,下面是详细的开发过程;  由于ovl40u_vp1.f中详细介绍了所以参数的含义,因此选择这个源文件进行修改。,SUBROUTINE CUSER3 [DLLEXPORT] NG,NEL,IPT,IDEATH,ITE,IUPDTL, 1 STRESS,EPS,STRAIN,DEPS,DEPST,THSTR1,THSTR2, 2 KTR,INTER,SCP,ARRAY,LGTH1,IARRAY,LGTH2, 3 D,ALFA,CTD,ALFAA,CTDD,CTI,TMP1,TMP2, 4 TIME,ETIMV,ETIMV2,DT,PHIST,PRST,RN,PHIST1, 5 DPSP,TGRAD,INTEG,ISUBM,INDNL, 6 DP,NELP,DPJE1D,DPJE2D,AKAPPA,PBAR, 7 NNODE,NODNUM,XYZ,DCA,IOUT,KEY C C ,子程序说明 传递的变量很多,完全满足绝大多数开发所需 常用变量STRAIN(应变) STRESS(应力) TIME(当前时间) DT(当前时间步长) TMP1(当前温度),材料本构开发入口条件,C C . . C . ELEMENTS Linear Elastic Model for 3-D SOLID ELEMENTS . C . . C C . . C . ADDITIONAL VARIABLES . C . . C . . C . YM YOUNG S MODULUS INPUT . C . PR POISSON S RATIO INPUT . C ,程序中的注释部分 一般程序中主要使用的中间变量给予说明; 如上面说明YM在程序中代表弹性模型;PR代表波松比;,开发详细过程,C IMPLICIT DOUBLE PRECISION A-H,O-Z REAL A DIMENSION STRESS6,STRAIN6,DEPS6,D6,6,EPS6 DIMENSION DEPST6,THSTR16,THSTR26 DIMENSION PHIST3,3,PRST3,DPSP6,TGRAD3 DIMENSION ARRAY*,IARRAY* DIMENSION CTD98,CTDD98,CTI99,SCP99 DIMENSION DP6,6 DIMENSION RN3,3 DIMENSION NODNUM*,XYZ3,* DIMENSION DPJE1D6,DPJE2D6,6 DIMENSION STDEV6,EDP6,TOLER2 DIMENSION EPR6,DPLAST6 SAVE AE,BK,XLMBDA,DFPL,EDP,EFST,EP,DCOEF DATA TOL1 / 1.E-2 / DATA C1D3 / .33333333333333D0 / DATA C2D3 / .66666666666666D0 / DATA XVUFL/ 1.D-300/ C,变量声明 采用ADINA开发实例中的变量声明即可。,开发详细过程,C GO TO 1,2,3,4, KEY C*I C*I C*I K E Y 1 C*I C*I INITIALIZE COMPONENTS OF REAL AND INTEGER WORKING ARRAYS C*I INITIALIZE ARRAY60 AND IARRAY2 C*I 1 CONTINUE C*I DO 11 I 1,LGTH1 11 ARRAYI 0.0 DO 12 I 1,LGTH2 12 IARRAYI 0 C RETURN,将整个程序分为四段,执行第一段程序,,,初始化两个数组,用于存放历史变量(ADINA在后处理时像位移、应力等变量显示这些数值),LGTH1和LGTH2是在AUI中输入的整数,有缺省值。,,开发详细过程,C*I K E Y 2 C*I INTEGRATION OF ELEMENT STRESSES CALCULATE STRESS6 2 CONTINUE C*I * * * I N S E R T U S E R - S U P P L I E D C O D I N G C L I N E A R E L A S T I C M A T E R I A L F O R 3 - D S O L I D E L E M E N T S C YMCTI1 PRCTI2 g2YM/1.0PR g0.5*g2 C davg-STRAIN1-STRAIN2-STRAIN3*C1D3 p-davg*YM/1.0-2.0*PR C STRESS1pg2*STRAIN1davg STRESS2pg2*STRAIN2davg STRESS3pg2*STRAIN3davg STRESS4g*STRAIN4 STRESS5g*STRAIN5 STRESS6g*STRAIN6 C RETURN,执行第二段程序,,,定义STRESS与STRAIN的关系,开发详细过程,3 CONTINUE C*I * * * I N S E R T U S E R - S U P P L I E D C O D I N G C ELASTIC CONSTITUTIVE MATRIX YMCTI1 PR CTI2 DO 315 I 1,6 DO 315 J 1,6 315 DI,J 0.D0 CM YM/1. - 2.*PR AE 1. PR/YM CP AE CP 1./CP C11 CM 2.*CP/3. C12 CM - CP/3. D1,1 C11 D1,2 C12 D1,3 C12 D2,2 C11 D2,3 C12 D3,3 C11 D4,4 0.5*CP D5,5 D4,4 D6,6 D5,5 DO 320 I 1,3 DO 320 J I,3 320 DJ,I DI,J RETURN,形成材料矩阵 如果开发非线性弹性材料不需改动; 如果开发塑性、粘塑性、混凝土则部分参数需要改动;,,执行第三段程序,,C*I K E Y 4 C*I PRINTING OF ELEMENT RESPONSE PRINT STRESS6,STRAIN6 C 4 CONTINUE C*I * * * I N S E R T U S E R - S U P P L I E D C O D I N G C PRINT HEADING AND ELEMENT NUMBER C 略 C RETURN END,执行第四段程序,,结果输出控制 采用例子中的程序即可,一般无需改动。,,程序结束,,开发详细过程,KEY 1 called once at the beginning of the analysis. KEY 2 called for each subincrement within a load time step KEY3 called when the new tangent stiffness matrix is to be Calculated KEY4 called for stress printout.,程序段调用过程,开发详细过程,, 保存文件pvl40u_vp1.f;  启动DOS系统 进入到\usrdll目录下,执行编译,注意如果有出错信息将在此时提示。,开发详细过程, 将\usrdll32目录下生成的adusr.dll复制到\x32目录下,在此之前最好备份标准安装的adusr.dll文件;  开发工作到此结束。,使用二次开发模型,, 建立一个计算模型,为了对比,同时建立两个几何体,一个使用ADINA提供的线弹性材料,另外一个使用用户自定义材料;  弹性模量和波松比分别是2e11、0.3。采用ADINA的User-Supplied材料模式;对应于用户定义程序,则CTI(1)=2e11赋值到YM,CTI(2)=0.3赋值到PR;如下图所示,CTI(99),SCP(99),LGTH1,LGTH2,CTDD(99),使用二次开发模型,同时采用ADINA提供的材料和用户自定义材料进行计算,结果应基本一致。,使用二次开发模型,其它问题-使用增量应变,2 CONTINUE C YMCTI1 PRCTI2 C davg-DEPS1-DEPS2-DEPS3/3. p-davg*YM/1.0-2.0*PR STRESS1STRESS1pg2*DEPS1davg STRESS2STRESS2pg2*DEPS2davg STRESS3STRESS3pg2*DEPS3davg STRESS4STRESS4g*DEPS4 STRESS5STRESS5g*DEPS5 STRESS6STRESS6g*DEPS6 C RETURN,其它问题-2D本构表达式,2 CONTINUE C C YMCTI1 PRCTI2 C g2YM/1.0PR g0.5*g2 davg-DEPS1-DEPS2-DEPS3/3. p-davg*YM/1.0-2.0*PR C STRESS1pg2*STRAIN1davg STRESS2pg2*STRAIN2davg STRESS4g*STRAIN4 STRESS3pg2*STRAIN3davg C RETURN,其它问题-程序段控制,使用SCP(*)数组,I1SCP1 IF I1.EQ.0 then Endif IF I1.EQ.1 then Endif,davg-DEPS1-DEPS2-DEPS3/3. p-davg*YM/1.0-2.0*PR davgtdavg/DT pt-davgt*YM/1.0-2.0*PR if TIME.LT.DT then pppt endif,其它问题-程序段控制,其它问题-初始应力施加,C pz0.0 C DO 21 I1,NNODE 21 pzpzXYZ3,I pzpz/NNODE C Szpz-Hr*Dens Sy0.3*Sz SxSy C c ARRAY10pz-Hr C STRESS1Sxpg2*STRAIN1davg STRESS2Sypg2*STRAIN2davg STRESS3Szpg2*STRAIN3davg STRESS4g*STRAIN4 STRESS5g*STRAIN5 STRESS6g*STRAIN6 C,C YMCTI1 PRCTI2 C DENSCTI3 HrCTI4 C c I1SCP1 C g2YM/1.0PR g0.5*g2 C davg-STRAIN1-STRAIN2-STRAIN3/3. p-davg*YM/1.0-2.0*PR C,其它问题-中间文件读写,open 173,file a.txt write173,* KSTEP,RFPARM2,TIME close173,其它问题-特殊变量保存和查看,灵活使用历史变量 ARRAY*(缺省60个) IARRAY* (缺省2个) 后处理在User Defined中可以获得历史变量的数值,单元失效的二次开发 Ovlusr.f,SUBROUTINE CURUP3 [DLLEXPORT] IA,A,NG,NEL,IPT,NINT, 1 STRESS,STRAIN,EPSP2,EPSC2,THSTR2,EPSTR2, 2 YLD2,IPEL,EPSPMX,IRUPTI,IRUPTE,IIN,IOUT IMPLICIT DOUBLE PRECISION A-H,O-Z C DIMENSION IA*,A* REAL A C DIMENSION STRESS6,STRAIN6,THSTR26,EPSP26,EPSC26 DIMENSION IRUPTININT C,代码,IF STRESS1.GT.1000000.0 THEN IRUPTIIPT1 else IRUPTIIPT0 ENDIF C C ELEMENT IS SET DEAD IF ANY ONE OF INTEGRATION POINTS IS DEAD C DO 100 J1,IPT IF IRUPTIJ .EQ.1 IRUPTE1 100 CONTINUE C 200 CONTINUE RETURN END,代码,,界面设置,测试模型,计算模型,模拟结果,测试模型,接触面摩擦算法的自定义,C THE INPUT PARAMETERS ARE C ------------------------- C PRESSU - CONTACT PRESSURE C XLAMDA - CONSISTENT CONTACT FORCE C CVN - NORMAL DIRECTION C VU - DIRECTION OF SLIDING C VT - THE OTHER TANGENTIAL DIRECTION C EPSILN - NORMAL CONTACT W-FUNCTION PARAMETER C EPSILT - FRICTIONAL CONTACT V-FUNCTION PARAMETER C UDOT - RELATIVE SLIDING VELOCITY C TAUS - FRICTIONAL FORCE,主要参数,C C XYZS0 - ORIGINAL COORDINATES OF CONTACTOR NODE C XYZS1 - CURRENT COORDINATES OF CONTACTOR NODE C NTMPR - 0 IF THERE IS NO TEMPERATURE DATA C 1 IF THERE IS C TEMP0 - INITIAL TEMPERATURE OF CONTACTOR NODE C TEMP1 - CURRENT TEMPERATURE OF CONTACTOR NODE C RFPARMIUFN - IUFN REAL CONTACT PARAMETERS C IFPARMIUFN - IUFN INTEGER CONTACT PARAMETERS C ITOD - 2 FOR 2D PROBLEMS C 3 FOR 3D PROBLEMS C IPAIR - CONTACT PAIR NUMBER C,主要参数,C NODNUM - GLOBAL NODE NUMBER OF CONTACTOR NODE C CONSTRAINT FUNCTION METHOD C TIME - TIME C NODCN - LOCATION OF CONTACTOR NODE IN ARRAY OF CONTACT C SURFACE NODES C KSTEP - LOAD STEP NUMBER C ITE - ITERATION NUMBER C IALG1 - ALGORITHM USED C 1 CONSTRAINT FUNCTION METHOD C 2 SEGMENT METHOD C IALG2 - ALGORITHM OPTIONS USED C 1 NODE-TO-SEGMENT C 2 NODE-TO-NODE not yet implemented,主要参数,C THE OUTPUT PARAMETERS ARE C -------------------------- C SCF - THE FRICTION COEFFICIENT C C IERR - FLAG 0 IF NO ERRORS, 0 OTHERWISE C CURRENTLY THIS IS WHAT THE DIFFERENT ERRORS MEAN C 1 - NO INTEGER PARAMETERS C 2 - SELECTED FRICTION MODEL NUMBER DOES NOT EXIST C 3 - INSUFFICIENT PARAMETERS FOR FRICTION MODEL C 4 - REAL PARAMETER IS OUT OF RANGE C 5 - REQUIRED TEMPERATURE DATA NOT AVAILABLE C ERMES - AN ERROR STRING LENGTH 120 CHARACTERS C,主要参数,本构8随时间变化模型,,,开发实例,USER-FRICTIO CLEAR 8 0.1000 0 25.000 0 0.8000 *,,,SCF,Time,,,,25,,0.1,0.8,0.0,开发实例,80 IF IUFN.LT.3 THEN IERR3 WRITE ERMES,2003 IUFN,IFPARM1 GOTO 900 ENDIF IF RFPARM2.LE.0.D0 THEN IERR4 WRITE ERMES,2004 2,RFPARM2,IFPARM1 GOTO 900 ENDIF SCFRFPARM1TIME/RFPARM2*RFPARM3-RFPARM1 IF TIME.LT.0.D0 SCFRFPARM1 IF TIME.GT.RFPARM2 SCFRFPARM3 GOTO 900,开发实例,本构6各向异性变化模型,开发实例,USER-FRICTIO CLEAR 6 0.70000 0 0.10000 0 0.50000 0 0.80000 0 0.0001 *,开发实例,60 IF IUFN.LT.5 THEN IERR3 WRITE ERMES,2003 IUFN,IFPARM1 GOTO 900 ENDIF IF RFPARM5.LE.0.D0 THEN IERR4 WRITE ERMES,2004 5,RFPARM5,IFPARM1 GOTO 900 ENDIF IF ABSUDOT.LE.RFPARM5 THEN SCFRFPARM4 ELSE SCFSQRTVU1*RFPARM1*VU1*RFPARM1 1 VU2*RFPARM2*VU2*RFPARM2 2 VU3*RFPARM3*VU3*RFPARM3 ENDIF GOTO 900,开发实例,0.75,库仑模型、时间相关模型、各向异性模型,开发实例,ADINA在地震模拟中的应用,地震触发过程的模拟动画,ADINA在地震模拟中的应用,高级非线性软件ADINA在全球范围内广泛应用于地球地壳运动、地震触发机制、应力波传播、建筑结构抗震等方面。例如地震过程中的地质带运动响应、地球物理科学中的大陆与海阳岩石圈的演化、地震过程中的海啸、桥梁、水坝、地下隧洞等人工建筑抗震分析等。 下面是一个简单的地震启动过程模拟,两个地质体界面采用接触,首先指定第一个地质体缓慢运动,由于两者摩擦系数很大1.0,带动第二个地质体产生变形,积蓄变形能量。到了某个时刻,强迫摩擦系数降低到很小(0.01),由于摩擦力的不足,引起断层界面的强烈错动,释放能量。,ADINA在地震模拟中的应用,在这个计算模型中,采用ADINA提供的User-Supplied Friction来模拟摩擦系数随着时间的变化过程。在ovlusr.f文件中,相应的语句改为 80 IF IUFN.LT.3 THEN IERR3 WRITE ERMES,2003 IUFN,IFPARM1 GOTO 900 ENDIF IF RFPARM2.LE.0.D0 THEN IERR4 WRITE ERMES,2004 2,RFPARM2,IFPARM1 GOTO 900 ENDIF SCFRFPARM1 IF TIME.LT.0.D0 SCFRFPARM1 IF TIME.GT.RFPARM2 SCFRFPARM3 GOTO 900,ADINA在地震模拟中的应用,在AUI界面中,关于ADINA摩擦的定义指定为,其中,整数8表示采用的摩擦算法类型号码;实数中的1表示在指定时刻前的摩擦系数,0.01是指定时刻后的摩擦系数。100是指定摩擦系数突变的时刻。,ADINA在地震模拟中的应用,计算模型的边界条件和载荷,ADINA在地震模拟中的应用,界面上一点沿Y方向(错动方向)位移变化曲线,ADINA在地震模拟中的应用,Y方向加速度变化曲线,ADINA在地震模拟中的应用,基于TCL/TK语言的联合开发,TCL/TK是基于文本的解释性语言,简明,高效,可移植性好的编程语言,实例,略,
展开阅读全文

高品质阅读 高比例分成 专业的C2C文档交易平台