首页/文章/ 详情

Tungsten | 异质结构钛基接头不相容塑性变形的集成计算与实验分析

4月前浏览702
     
     

文章导读



     


多层金属材料的不相容变形经常限制其机械性能的一致性。这种固有问题在体心立方体和六方密排结构材料中尤为明显,它们表现出较差的可塑性,从而进一步加剧了各向异性行为。近日,韩国浦项科技大学金属与环保材料研究所团队在Tungsten发表题为“Integrated computational and experimental a nalysis on the incompatible plastic deformation of heterostructured Ti‑based joints”的研究内容。本研究对钛合金中异种界面的生长进行了系统调控,发现分层界面在拉伸各向异性中起主导作用。通过在定制温度下和特定中间过渡层的扩散连接来调整(α + β)Ti-6Al-4V和亚稳态β TB8合金中的不同界面,以阐明异质微观结构演化和力学性能的差异。采用非局部晶体塑性(CP)方法定量评价异质界面区的变形机理。实验和模拟结果都表明,不同界面之间的异质性,包括由于原子相互扩散和α/β转变导致的化学成分、晶粒尺寸和相形貌的变化,显著影响拉伸各向异性。这项工作为增材制造和挤压烧结工艺中调节异种钛合金的界面动力学和优化机械性能提供了见解。

       

文章封面 部分截图

     

   
       

部分内容 图文读解

     


定制温度和中间过渡层下

分层微观结构形成

图 1 呈现了 TC4/TB8 接头的 SEM 微观结构:两种合金扩散连接良好、无空隙残留。900、930、960℃下扩散连接的过渡区厚度分别为 9、13、24μm,均由致密细小的 α 沉淀相和 β 基体组成,且 900℃时的针状 α 沉淀相比 960℃更细;930℃扩散连接样品的界面特性介于另两温度之间。晶体取向分析显示,过渡区不同区域的 α 晶粒与 β 晶粒存在特定晶体学关系,{110}β 与 {0001}α、<111>β 与 < 1120>α 的错位角极小且近乎平行,符合 Burgers 定向关系({110}β∥{0001}α,<111>β∥<1120>α)。

   

图1:  900℃,930 °C和 960 °C下异质TC4/TB8接头的界面微观结构表征



材料属性标定和非局部

CP模型验证

基于 960℃扩散连接的 TC4/TB8 接头异质微观结构,构建了含 343 个 β 晶粒和 591 个 α 晶粒的 代表体单元模型。模型验证结果显示,其预测的接头真实应力 - 真实应变曲线(拉伸方向分别垂直和平行于连接界面)在变形早中期与实验拉伸数据吻合。

   

图2:基于真实微观结构的代表体单元和非局部CP模拟力学响应验证



垂直和平行拉伸响应的

非局部CP仿真

图 3 通过非局部CP 模拟展示了 TC4/TB8 接头在不同加载方向下的等效应力 - 应变响应:x 方向拉伸时,等效应力集中于界面等轴 α 晶粒,魏氏组织 α 晶粒及细小 α 沉淀相变形能力优异;变形至 10% 应变时,局部变形带跨界面扩展,异质界面的横向约束抑制裂纹扩展,提升材料韧性。y 方向拉伸时,应力 - 应变主要集中于 TC4 侧 α 晶粒,界面层内魏氏组织 α 的应力 - 应变浓度高于等轴晶粒。

   

图3: 不同全局应变阶段,在(a-b) x向拉伸和(c-d)y向拉伸下,异质结构TC4/TB8接头的Mises应力和等效塑性应变分布



变形后期 GND 密度演变

及强化机制

图4说明x 方向 10% 拉伸应变时,异质界面等轴软 α 晶粒及 TC4 基体软取向 α 晶粒中大量积累 GND,α 晶粒 GND 密度高于 β 晶粒,变形后期局部变形带跨界面扩展,异质界面横向约束提升韧性;y 方向 6% 拉伸应变时,仅 TC4 基体少量软取向 α 晶粒产生 GND,界面区小尺寸 β 晶及高临界f分切剪应力阻碍位错滑移,协同变形能力下降。GND 堆积产生的背应力是强化关键(背应力与有效域内 GND 密度梯度成正比),其堆积模式受微织构影响,且在较软 α 晶粒中后期趋于饱和,导致背应力强化不可持续、界面协调变形能力减弱;大晶粒界面处 GND 积累对提升接头力学性能至关重要

   

图4: x和y拉伸载荷方向下不同相的GND密度和频率分布,重点关注与非均相相互作用的界面区晶粒G1



受拉伸变形影响的分层微观

结构的演化

图 5 的 EBSD 结果显示:TC4/TB8 接头在平行(x 方向)和垂直(y 方向)于扩散连接界面拉伸后,α/β 相界核平均取向错误(KAM)值更高,α/α 晶界与 α/β 相界处形成高密度位错等晶体缺陷,是几何必需位错(GND)的主要积累区域。平行拉伸样品的 α 相 KAM 值(0.453)高于垂直拉伸样品(0.267),取向关系与位错缠结的相互作用影响滑移系统激活,导致硬化行为波动;代表性 α 晶粒分析揭示了晶体取向与位错堆积、缠结的关联,KAM 分布表明 TC4 层在拉伸后仅发生轻微塑性变形。

   

图5: TC4/TB8试样中TC4合金在拉伸后的显微组织和取向分析



异种界面对塑性变形的影响

结合实验表征与非局部 CP 模拟量化分析,异质结构 Ti 基接头界面区 α、β 晶粒形貌在不同方向拉伸载荷下主导强度与延展性(图 6):激活 α 晶粒棱柱 / 锥面滑移可缓解塑性各向异性;x 方向拉伸时,界面等轴 α 晶粒内 GND 堆积增加,利于强度与延展性协同提升;y 方向拉伸时,针状 α 魏氏组织会阻碍 GND 堆积,且 BCC 与 HCP 相的固有有限塑性带来挑战。

   

图6: 具有多层异质结构的异质Ti基接头界面,定制晶粒形貌和激活滑移系统的塑性变形示意图:(a)x方向加载;(b)y方向加载

       

文章结论

     
     

本研究系统探究了异质结构钛基接头的形成及拉伸变形行为,并通过详细的微观结构表征与先进的非局部晶体塑性(CP)模拟,阐明了各向异性的起源。主要结论总结如下:

01


明确了加热与炉冷阶段 α/β 相变的行为及机理,将相变的主要驱动力确定为成分波动与温度变化。在钛基接头中观察到 α 和 β 晶粒的显著异质性。

02


添加中间过渡层后,多层 TC4/TB8 接头的抗拉强度保持稳定,而总伸长率从平行于连接界面拉伸取向的 19.4% 降至垂直于连接界面取向的 7.4%。要实现异种钛合金的优质接头,可控的界面 α/β 相相互作用与高温下稳健的塑性流动能力均至关重要。

03


高异质性导致拉伸变形过程中界面区域(包括 α/α 晶界与 α/β 相界)位错密度。此外,TB8 基体中的亚稳态晶粒具有独特的 α 沉淀相分布,兼顾了强度与相容性。

04


α-β 相互作用诱导的异种界面主导界面塑性变形。这种诱导的塑性各向异性可通过一定程度激活 α 晶粒内的棱柱滑移系与锥面滑移系得以缓解。拉伸载荷下,几何必需位错(GNDs)沿激活滑移系方向在较软的 α 晶粒内积累,但在针状魏氏组织(Widmanstätten)附近受到空间限制。

     
     

文章信息



主要作者情况:

吴仁豪(第一作者),李天乐(通讯作者),Hyoung Seop Kim(通讯作者)

通讯作者单位

1.韩国浦项科技大学金属与环保材料研究所

2.长沙理工大学材料科学与工程学院

3.日本东北大学材料科学高等研究所

文章标题:

Integrated computational and experimental a nalysis on the incompatible plastic deformation of heterostructured Ti‑based joints

期刊名称:

Tungsten

文章链接:

https://doi.org/10.1007/s42864-025-00361-w 


来源:我的博士日记
Deform化学增材裂纹化机材料
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-05-27
最近编辑:4月前
此生君子意逍遥
博士 签名征集中
获赞 62粉丝 133文章 155课程 0
点赞
收藏
作者推荐

一个考虑腐蚀的相场损伤模型源代码

原始文献:《A phase field formulation for dissolution-driven stress corrosion cracking》来源于该文章,对腐蚀相关损伤建模的可以详细阅读原文,理解整个程序,作者模拟效果如下:原始代码如下: module kvisual implicit none real*8 UserVar(4,24,70000) integer nelem save end module!*********************************************************************** subroutine uexternaldb(lop,lrestart,time,dtime,kstep,kinc) include &#39;aba_param.inc&#39; !implicit real(a-h o-z) dimension time(2) if (lop.eq.0) then !start of an alysis call mutexinit(1) endif return end !*********************************************************************** subroutine uel(rhs,amatrx,svars,energy,ndofel,nrhs,nsvars, 1 props,nprops,coords,mcrd,nnode,u,du,v,a,jtype,time,dtime, 2 kstep,kinc,jelem,params,ndload,jdltyp,adlmag,predef,npredf, 3 lflags,mlvarx,ddlmag,mdload,pnewdt,jprops,njpro,period) use kvisual include &#39;aba_param.inc&#39; !implicit real(a-h o-z) dimension rhs(mlvarx,*),amatrx(ndofel,ndofel),props(*),svars(*), 1 energy(*),coords(mcrd,nnode),u(ndofel),du(mlvarx,*),v(ndofel), 2 a(ndofel),time(2),params(*),jdltyp(mdload,*),adlmag(mdload,*), 3 ddlmag(mdload,*),predef(2,npredf,nnode),lflags(*),jprops(*) parameter(ndim=2,ntens=4,ninpt=4,nsvint=24,ndof=4) dimension wght(ninpt),dN(nnode,1),dNdz(ndim,nnode),stress(ntens), 1 dNdx(ndim,nnode),b(ntens,nnode*ndim),ddsdde(ntens,ntens), 2 stran(ntens),xm(nnode,nnode),BB(nnode,nnode),dstran(ntens), 3 statevLocal(nsvint),eelas(ntens)! initialising do k1=1,ndofel rhs(k1,1)=0.d0 end do amatrx=0.d0 wght=1.d0! find number of elements if (dtime.eq.0.d0) then if (jelem.eq.1) then nelem=jelem else CALL MutexLock(1) if (jelem.gt.nelem) nelem=jelem CALL MutexUnlock(1) endif endif ! reading parameters D=props(5) xL0=props(6) a_phi=props(7) wh=props(8) AA=props(9) xk=props(10) ef=props(11) t0=props(12) cse=1.d0 ! Normalized equilibrium concentration of solid cle=0.036d0 ! Normalized equilibrium concentration of liquid xkap=1.d-7 ! well-conditioning parameter T=300.d0 ! Temperature (K) R=8314.d0 ! Gas constant do kintk=1,ninpt! evaluate shape functions and derivatives call kshapefcn(kintk,ninpt,nnode,ndim,dN,dNdz) call kjacobian(jelem,ndim,nnode,coords,dNdz,djac,dNdx,mcrd) call kbmatrix(dNdx,ntens,nnode,ndim,b) dvol=wght(kintk)*djac ! compmute phase field, concentration and strains from nodal values phi=0.d0 dphi=0.d0 cL=0.d0 do inod=1,nnode phi=phi+dN(inod,1)*u(ndim*nnode+inod) dphi=dphi+dN(inod,1)*du(ndim*nnode+inod,1) cL=cL+dN(inod,1)*u((ndim+1)*nnode+inod) end do dstran=matmul(b,du(1:ndim*nnode,1))! defining suitable functions hphi=-2.d0*phi**3+3.d0*phi**2 dhphi=-6.d0*phi**2+6.d0*phi ddhphi=-12.d0*phi+6.d0 gphi=(1.d0-phi)*(1.d0-phi)*phi**2 dgphi=2.d0*phi+4.d0*phi**3-6.d0*phi**2 ddgphi=2.d0+12.d0*phi**2-12.d0*phi! recover and assign state variables call kstatevar(kintk,nsvint,svars,statevLocal,1) stress=statevLocal(1:ntens) stran(1:ntens)=statevLocal((ntens+1):(2*ntens)) eelas(1:ntens)=statevLocal((2*ntens+1):3*ntens) ti=statevLocal(4*ntens+7) ei=statevLocal(4*ntens+8)! call umat to obtain stresses and constitutive matrix call kumat(props,ddsdde,stress,dstran,ntens,statevLocal,eelas, 1 spd,hphi,phi,xkap,Sh0,eqplas,deqpl)! enhance the value of L Sh=(hphi+xkap)*Sh0 pls=statevLocal(4*ntens+1) xkm=dexp(Sh*7.12d3/(R*T))*(1.d0+pls/(props(3)/props(1))) if (time(2).lt.3.01d0) then ti=0.d0 ei=0.d0 else ei=ei+statevLocal(4*ntens+5) ti=ti+dtime endif if (ei.gt.ef) then ti=0.d0 ei=0.d0 endif if (ti.lt.t0) then xL=xL0*xkm else xL=xL0*xkm*dexp(-xk*(ti-t0)) endif! store state variables statevLocal(1:ntens)=stress(1:ntens) statevLocal((ntens+1):(2*ntens))=statevLocal((ntens+1):(2*ntens)) 1 +dstran(1:ntens) statevLocal(4*ntens+2)=phi statevLocal(4*ntens+3)=xL statevLocal(4*ntens+4)=Sh statevLocal(4*ntens+6)=cL statevLocal(4*ntens+7)=ti statevLocal(4*ntens+8)=ei call kstatevar(kintk,nsvint,svars,statevLocal,0) ! form and assemble stiffness matrix and internal force vector amatrx(1:16,1:16)=amatrx(1:16,1:16)+dvol* 2 ((hphi+xkap)*matmul(matmul(transpose(b),ddsdde),b)) rhs(1:16,1)=rhs(1:16,1)- 1 dvol*(matmul(transpose(b),stress)*(hphi+xkap)) fc=AA*((cL-hphi*(cse-cle)-cle)**2)+wh*gphi dfc=-2.d0*AA*(cL-hphi*(cse-cle)-cle)*(cse-cle)*dhphi+wh*dgphi ddfc=wh*ddgphi-2.d0*AA*(cse-cle)* 1 (ddhphi*(cL-hphi*(cse-cle)-cle)-dhphi*dhphi*(cse-cle)) BB=matmul(transpose(dNdx),dNdx) xm=matmul(dN,transpose(dN)) amatrx(17:24,17:24)=amatrx(17:24,17:24)+ 1 +dvol*(xm/dtime+xL*xm*ddfc+xL*a_phi*BB) rhs(17:24,1)=rhs(17:24,1)-dvol* 1 (matmul(xm,du(17:24,1))/dtime+xL*dN(:,1)*dfc 2 +xL*a_phi*matmul(transpose(dNdx),matmul(dNdx,u(17:24)))) ww=(cse-cle)*dhphi amatrx(25:32,25:32)=amatrx(25:32,25:32)+dvol*(xm/dtime+D*BB) rhs(25:32,1)=rhs(25:32,1)-dvol*( 1 matmul(xm,du(25:32,1))/dtime+D*(matmul(transpose(dNdx), 2 matmul(dNdx,u(25:32))) 3 -ww*matmul(transpose(dNdx),matmul(dNdx,u(17:24)))))! output UserVar(kintk,1:ntens,jelem)=stress(1:ntens)*(hphi+xkap) UserVar(kintk,(ntens+1):(4*ntens+8),jelem)= 1 statevLocal((ntens+1):(4*ntens+8)) end do ! end loop on material integration points RETURN END!*********************************************************************** subroutine kshapefcn(kintk,ninpt,nnode,ndim,dN,dNdz)c include &#39;aba_param.inc&#39;c parameter (gaussCoord=0.577350269d0) dimension dN(nnode,1),dNdz(ndim,*),coord24(2,4) data coord24 /-1.d0, -1.d0, 2 1.d0, -1.d0, 3 -1.d0, 1.d0, 4 1.d0, 1.d0/ ! determine (g,h) g=coord24(1,kintk)*gaussCoord h=coord24(2,kintk)*gaussCoord! shape functions dN(1,1)=-0.25d0*(1.d0-g)*(1.d0-h)*(1.d0+g+h) dN(2,1)=0.25d0*(1.d0+g)*(1.d0-h)*(g-h-1.d0) dN(3,1)=0.25d0*(1.d0+g)*(1.d0+h)*(g+h-1.d0) dN(4,1)=0.25d0*(1.d0-g)*(1.d0+h)*(h-g-1.d0) dN(5,1)=0.5d0*(1.d0-g*g)*(1.d0-h) dN(6,1)=0.5d0*(1.d0+g)*(1.d0-h*h) dN(7,1)=0.5d0*(1.d0-g*g)*(1.d0+h) dN(8,1)=0.5d0*(1.d0-g)*(1.d0-h*h) ! derivative d(Ni)/d(g) dNdz(1,1)=0.25d0*(1.d0-h)*(2.d0*g+h) dNdz(1,2)=0.25d0*(1.d0-h)*(2.d0*g-h) dNdz(1,3)=0.25d0*(1.d0+h)*(2.d0*g+h) dNdz(1,4)=0.25d0*(1.d0+h)*(2.d0*g-h) dNdz(1,5)=-g*(1.d0-h) dNdz(1,6)=0.5d0*(1.d0-h*h) dNdz(1,7)=-g*(1.d0+h) dNdz(1,8)=-0.5d0*(1.d0-h*h) ! derivative d(Ni)/d(h) dNdz(2,1)=0.25d0*(1.d0-g)*(g+2.d0*h) dNdz(2,2)=0.25d0*(1.d0+g)*(2.d0*h-g) dNdz(2,3)=0.25d0*(1.d0+g)*(2.d0*h+g) dNdz(2,4)=0.25d0*(1.d0-g)*(2.d0*h-g) dNdz(2,5)=-0.5d0*(1.d0-g*g) dNdz(2,6)=-(1.d0+g)*h dNdz(2,7)=0.5d0*(1.d0-g*g) dNdz(2,8)=-(1.d0-g)*h return end!*********************************************************************** subroutine kjacobian(jelem,ndim,nnode,coords,dNdz,djac,dNdx,mcrd)! Notation: djac - Jac determinant; xjaci - inverse of Jac matrix! dNdx - shape functions derivatives w.r.t. global coordinates include &#39;aba_param.inc&#39; dimension xjac(ndim,ndim),xjaci(ndim,ndim),coords(mcrd,nnode), 1 dNdz(ndim,nnode),dNdx(ndim,nnode) xjac=0.d0 do inod=1,nnode do idim=1,ndim do jdim=1,ndim xjac(jdim,idim)=xjac(jdim,idim)+ 1 dNdz(jdim,inod)*coords(idim,inod) end do end do end do djac=xjac(1,1)*xjac(2,2)-xjac(1,2)*xjac(2,1) if (djac.gt.0.d0) then ! jacobian is positive - o.k. xjaci(1,1)=xjac(2,2)/djac xjaci(2,2)=xjac(1,1)/djac xjaci(1,2)=-xjac(1,2)/djac xjaci(2,1)=-xjac(2,1)/djac else ! negative or zero jacobian write(7,*)&#39;WARNING: element&#39;,jelem,&#39;has neg. Jacobian&#39; endif dNdx=matmul(xjaci,dNdz) return end!*********************************************************************** subroutine kbmatrix(dNdx,ntens,nnode,ndim,b)! Notation, strain tensor: e11, e22, e33, e12, e13, e23 include &#39;aba_param.inc&#39; dimension dNdx(ndim,nnode),b(ntens,nnode*ndim) b=0.d0 do inod=1,nnode b(1,ndim*inod-ndim+1)=dNdx(1,inod) b(2,ndim*inod-ndim+2)=dNdx(2,inod) b(4,ndim*inod-ndim+1)=dNdx(2,inod) b(4,ndim*inod-ndim+2)=dNdx(1,inod) end do return endc***************************************************************** subroutine kstatevar(npt,nsvint,statev,statev_ip,icopy)cc Transfer data to/from element-level state variable array from/toc material-point level state variable array.c include &#39;aba_param.inc&#39; dimension statev(*),statev_ip(*) isvinc=(npt-1)*nsvint ! integration point increment if (icopy.eq.1) then ! Prepare arrays for entry into umat do i=1,nsvint statev_ip(i)=statev(i+isvinc) enddo else ! Update element state variables upon return from umat do i=1,nsvint statev(i+isvinc)=statev_ip(i) enddo end if return endc***************************************************************** subroutine kumat(props,ddsdde,stress,dstran,ntens,statev,eelas, 1 spd,hphi,phi,xkap,Sh,eqplas,deqpl)cc Subroutine with the material modelc include &#39;aba_param.inc&#39; !implicit real(a-h o-z) dimension props(*),ddsdde(ntens,ntens),stress(ntens),statev(*), + dstran(ntens),eelas(ntens),eplas(ntens),flow(ntens),olds(ntens), + oldpl(ntens) parameter(toler=1.d-6,newton=20) eelas(1:ntens)=statev((2*ntens+1):3*ntens) eplas(1:ntens)=statev((3*ntens+1):4*ntens) eqplas=statev(1+4*ntens) deqpl=statev(5+4*ntens) olds=stress oldpl=eplas! Initialization ddsdde=0.d0 E=props(1) ! Young&#39;s modulus xnu=props(2) ! Poisson&#39;s ratio Sy=props(3) ! Yield stress xn=props(4) ! Strain hardening exponent ! Build elastic stiffness matrix eg=E/(1.d0+xnu)/2.d0 elam=(E/(1.d0-2.d0*xnu)-2.d0*eg)/3.d0 do i=1,3 do j=1,3 ddsdde(j,i)=elam end do ddsdde(i,i)=2.d0*eg+elam end do do i=4,ntens ddsdde(i,i)=eg end do! Calculate predictor stress and elastic strain stress=stress+matmul(ddsdde,dstran) eelas=eelas+dstran! Calculate equivalent von Mises stress Smises=(stress(1)-stress(2))**2+(stress(2)-stress(3))**2 1 +(stress(3)-stress(1))**2 do i=4,ntens Smises=Smises+6.d0*stress(i)**2 end do Smises=sqrt(Smises/2.d0) ! Get yield stress from the specified Ehardening curve Sf=Sy*(1.d0+E*eqplas/Sy)**xn! Determine if active yielding if (Smises.gt.(1.d0+toler)*Sf) then! Calculate the flow direction Sh=(stress(1)+stress(2)+stress(3))/3.d0 flow(1:3)=(stress(1:3)-Sh)/Smises flow(4:ntens)=stress(4:ntens)/Smises! Solve for Smises and deqpl using Newton&#39;s method deqpl=0.d0 Et=E*xn*(1.d0+E*eqplas/Sy)**(xn-1) do kewton=1,newton rhs=Smises-(3.d0*eg)*deqpl-Sf deqpl=deqpl+rhs/((3.d0*eg)+Et)! if(deqpl.lt.0.d0) deqpl=-deqpl Sf=Sy*(1.d0+E*(eqplas+deqpl)/Sy)**xn Et=E*xn*(1.d0+E*(eqplas+deqpl)/Sy)**(xn-1) if(abs(rhs).lt.toler*Sy) exit end do if (kewton.eq.newton) write(7,*)&#39;WARNING: plasticity loop failed&#39;! update stresses and strains stress(1:3)=flow(1:3)*Sf+Sh eplas(1:3)=eplas(1:3)+3.d0/2.d0*flow(1:3)*deqpl eelas(1:3)=eelas(1:3)-3.d0/2.d0*flow(1:3)*deqpl stress(4:ntens)=flow(4:ntens)*Sf eplas(4:ntens)=eplas(4:ntens)+3.d0*flow(4:ntens)*deqpl eelas(4:ntens)=eelas(4:ntens)-3.d0*flow(4:ntens)*deqpl eqplas=eqplas+deqpl! Calculate the plastic strain energy density do i=1,ntens spd=spd+(stress(i)+olds(i))*(eplas(i)-oldpl(i))/2.d0 end do! Formulate the jacobian (material tangent) effg=eg*Sf/Smises efflam=(E/(1.d0-2.d0*xnu)-2.d0*effg)/3.d0 effhrd=3.d0*eg*Et/(3.d0*eg+Et)-3.d0*effg do i=1,3 do j=1,3 ddsdde(j,i)=efflam enddo ddsdde(i,i)=2.d0*effg+efflam end do do i=4,ntens ddsdde(i,i)=effg end do do i=1,ntens do j=1,ntens ddsdde(j,i)=ddsdde(j,i)+effhrd*flow(j)*flow(i) end do end do endif ! Store strains in state variable array Sh=(stress(1)+stress(2)+stress(3))/3.d0 statev((2*ntens+1):3*ntens)=eelas statev((3*ntens+1):4*ntens)=eplas statev(4*ntens+1)=eqplas statev(4*ntens+5)=deqpl return endc***************************************************************** subroutine umat(stress,statev,ddsdde,sse,spd,scd,rpl,ddsddt, 1 drplde,drpldt,stran,dstran,time,dtime,temp2,dtemp,predef,dpred, 2 cmname,ndi,nshr,ntens,nstatv,props,nprops,coords,drot,pnewdt, 3 celent,dfgrd0,dfgrd1,noel,npt,layer,kspt,jstep,kinc) use kvisual include &#39;aba_param.inc&#39; !implicit real(a-h o-z) character*8 cmname dimension stress(ntens),statev(nstatv),ddsdde(ntens,ntens), 1 ddsddt(ntens),drplde(ntens),stran(ntens),dstran(ntens), 2 time(2),predef(1),dpred(1),props(nprops),coords(3),drot(3,3), 3 dfgrd0(3,3),dfgrd1(3,3),jstep(4) ddsdde=0.0d0 noffset=noel-nelem statev(1:nstatv)=UserVar(npt,1:nstatv,noffset) return end材料属性和状态变量如下:来源:我的博士日记

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈