八节点等参单元平面有限元_第1页
八节点等参单元平面有限元_第2页
八节点等参单元平面有限元_第3页
八节点等参单元平面有限元_第4页
八节点等参单元平面有限元_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

八节点等参单元平面有限元 分析程序 土木工程学院 2011.2 目录目录 1.概述.1 2.编程思想.2 2.1. 八节点矩形单元介绍.2 2.2. 有限元分析的模块组织.5 3.程序变量及函数说明.6 3.1. 主要变量说明:.6 3.2. 主要函数说明.7 4.程序流程图.8 5.程序应用与 ANSYS 分析的比较.9 5.1. 问题说明.9 5.2. ANSYS 分析结果.10 5.3. 自编程序分析结果.12 5.4. 结果比较分析.12 参考文献 .14 附录 程序源代码 .15 第 1 页 计算力学课程大作业 1.概述 通常情况下的有限元分析过程是运用可视化分析软件(如 ANSYS、SAP 等)进行前处理 和后处理,而中间的计算部分一般采用自己编制的程序来运算。具有较强数值计算和处理 能力的 Fortran 语言是传统有限元计算的首选语言。随着有限元技术的逐步成熟,它被应用 在越来越复杂的问题处理中,但在实际应用中也暴露出一些问题。有时网格离散化的区域 较大,而又限于研究精度的要求,使得划分的网格数目极其庞大,结点数可多达数万个,从 而造成计算中要运算的数据量巨大,程序运行的时间较长的弊端,这就延长了问题解决的 时间,使得求解效率降低。因为运行周期长,不利于程序的调试,特别是对于要计算多种 运行工况时的情况;同时大数据量处理对计算机的内存和 CPU 提出了更高的要求,而在 实际应用中,单靠计算机硬件水平的提高来解决问题的能力是有限的。因此,必须寻找新 的编程语言。 随着有限元前后处理的不断发展和完善,以及大型工程分析软件对有限元接口的要求, 有限元分析程序不应只满足解题功能,它还应满足软件工程所要求的结构化程序设计条件, 能够对存储进行动态分配,以充分利用计算机资源,它还应很容易地与其它软件如CAD 的实体造型,优化设计等接口。现在可编写工程应用软件的计算机语言较多,其中C语言 是一个较为优秀的语言,很容易满足现在有限元分析程序编程的要求。 C 语言最初是为操作系统、编译器以及文字处理等编程而发明的。随着不断完善,它 已应用到其它领域,包括工程应用软件的编程。近年来,C 语言已经成为计算机领域最普 及的一个编程语言,几乎世界上所有的计算机都装有 C 的编译器,从 PC 机到巨型机到超 巨型的并行机,C 与所有的硬件和操作系统联系在一起。用 C 编写的程序,可移植性极好, 几乎不用作多少修改,就可在任何一台装有 ANSI、C 编译器的计算机上运行。C 既是高级 语言,也是低级语言,也就是说,可用它作数值计算,也可用它对计算机存储进行操作。 第 2 页 2.编程思想 本程序采用 C 语言编程,编制平面四边形八节点等参元程序,用以求解平面结构问题。 程序采用二维等带宽存储整体刚度矩阵,乘大数法引入约束,等带宽高斯消去法求解位移。 在有限元程序中,变量数据需赋值的可分为节点信息,单元信息,载荷信息等。对于 一个节点来说,需以下信息:节点编号(整型),节点坐标(实型),节点已知位移(实 型),节点载荷(实型),边界条件(实型)和节点温度(实型)等。同样,对于一个单 元来说,需以下信息:单元的节点联接信息(整型),单元类型信息(桁架、梁、板、壳 等)(整型) ,单元特性信息(厚度、内力矩等)(实型),材料信息(弹性模量,泊松 比等)(实型)等。 在 FORTRAN 程序中,以上这些变量混合在一起,很难辨认,使程序的可读性不好, 如需要进行单元网络的自适应划分,节点及单元的修改将非常困难。在进行 C 语言编译过 程中,采用结构 struct 使每个节点信息存储在一个结构体数组中,提高程序的可读性,使 数据结构更趋于合理。 1.1. 八节点矩形单元介绍 八节点矩形单元编号如图 2-1 所示 八节点矩形单元的位移函数为: * 2222 12345678 uxyxxyyx yxy MERGEFORMAT (2.1) 2222 910111213141516 vxyxxyyx yxy * MERGEFORMAT (2.2) 其形函数为 * 1 122334455667788 uN uN uN uN uN uN uN uN u MERGEFORMAT (2.3) * 1 1223 3445 56 6778 8 vN vN vN vN vN vN vN vN v MERGEFORMAT (2.4) 式* MERGEFORMAT (2.3)和式* MERGEFORMAT (2.4)中,并且采用等参( , ) ii NN 变换,则单元的坐标变换式可取为 * 1 122334455667788 1122334455667788 XN xN xN xN xN xN xN xN x YN yN yN yN yN yN yN yN y MERGEFORMAT (2.5) 图 2-1 第 3 页 单元应变矩阵为 * x y xy u x u y uv yx MERGEFORMAT (2.6) 式* MERGEFORMAT (2.6)一般简写为 * B MERGEFORMAT (2.7) 其中的子块矩阵为 B * i i i ii N x N B y NN yx MERGEFORMAT (2.8) 由于是、的函数,在中的、要按照复合函数来求导,即 i N i Bxy * iii iii NNNxy xx J NNNxy yy MERGEFORMAT (2.9) 从而有 * 1 ii ii NN x J NN y MERGEFORMAT (2.10) 因此,单元应力矩阵为 * DB 第 4 页 MERGEFORMAT (2.11) 单元刚度矩阵为 * T e A KBDB hdxdy MERGEFORMAT (2.12) 其中积分采用三点高斯积分, * 33 11 , 11 111 ( , )()( , ) nip ijijii iji fd dfW f ; MERGEFORMAT (2.13) (高斯积分点的总数) ,和或是加权系数,和是单元内的坐标.。对 2 nipn i j i W i j 于三点高斯积分,高斯积分点的位置: ,。 11 0.6,5.0 9.0 22 0.0,8.0 9.0 33 0.6,5.0 9.0 单元等效节点荷载 * T e S PNP ds MERGEFORMAT (2.14) 结构刚度矩阵 * e e KK MERGEFORMAT (2.15) 结构结点荷载列阵 * e e PP MERGEFORMAT (2.16) 注意,对于式* MERGEFORMAT (2.15)和式* MERGEFORMAT (2.16)中的理解 e 不是简单的叠加而是集成。 总刚平衡方程 * KP MERGEFORMAT (2.17) 从式* MERGEFORMAT (2.17)求出 * 1 KP MERGEFORMAT (2.18) 第 5 页 将回代入式* MERGEFORMAT (2.7)和式* MERGEFORMAT (2.11),得到和。 1.2. 有限元分析的模块组织 一个典型的有限元分析过程主要包括以下几个步骤: 1)读输入数据,定义节点及单元数组。 2)由边界条件计算方程个数,赋值荷载列阵。 3)读入在带状存储的总刚度矩阵中单元和载荷信息。 4)定义总刚度阵数组。 5)组装总刚度阵。 6)解方程组。 其流程图可见图 2-2。 输入边界条件(对称条件) 形成各荷载工况的节点荷载阵 总刚分解 回代求出位移及输出 计算应变、应力 形成单元刚阵 单刚向总刚投放 坐标变换 输入原始参数 计算总刚规模 形成总刚方程 向总节点荷载阵投放 形成单元荷载阵 调整几何、弹性矩阵 调整单元位移列阵 图 2-2 第 6 页 3.程序变量及函数说明 1.3. 主要变量说明: 主要程序变量说明 wide 分析模型的宽 hight 分析模型的高 wsize 宽度方向网格划分尺寸 hsize 高度方向网格划分尺寸 npoin 节点总数 nelem 单元总数 struct node500节点结构体变量 struct element 500单元结构体变量 ifpre500 节点约束信息 posgp3 高斯积分点 weigp3 权系数 gpcod29 高斯积分点总体坐标 bmatx316 单元变形矩阵 dmatx33 单元弹性矩阵 xjacm22 雅可比矩阵 xjaci22 雅可比矩阵的逆矩阵 djacb 雅可比矩阵 行列式的值 estif136 单元刚度矩阵 shape8 单元形函数 deriv28 形函数对局部坐标的导数 cartd28 形函数对整体坐标的导数 A30000 总体刚度矩阵 eload16 等效节点荷载 gpcod29 高斯积分点的总体坐标 1.4. 主要函数说明 第 7 页 主要函数说明 void meshing( )网格划分 void coordinate( ) 节点整体坐标计算 void input( ) 信息输入 void stif( ) 形成单元刚度矩阵 void sfr2()计算形函数对当前积分点及形函数 对局部坐标的到数值 void jacobi2( ) 形成雅可比矩阵 void modps( ) 形成弹性矩阵 void bmatps( ) 形成应变矩阵 void load( ) 计算等效节点荷载 void asem( ) 形成整体刚度矩阵和整体荷载列阵 void solve( ) 求解整体方程 void stre( ) 计算单元应力 第 8 页 4.程序流程图 任何一个有限元程序处理过程,都可以划分为三个阶段: 1)前处理:读入数据和生成数据 。 2)处理器:有限元的矩阵计算、组集和求解。 3)后处理:输出节点位移、单元应变 等。 为了更清楚地 描述程序,我们 给出了程序的流程图。 第 9 页 5.程序应用与 ANSYS 分析的比较 为了验证程序的正确性,我们取了一个简单框架结构,分别用自编程序和 ANSYS 进 行分析和比较。 1.5. 问题说明 图 5-1 所示一简支梁,高 3m,长 18m,承受均布荷载, 2 10/N m 10 2 10EPa ,取m,作为平面应力问题。0.1671t 由于结构和荷载对称,只对右边一半进行有限单元计算,如图 5-2 所示,而在 y 轴各 节点布置水平连杆支座。 图 5-1 图 5-2 第 10 页 1.6. ANSYS 分析结果 ANSYS 分析中,采用 plane82 单元,在板单元上边施加均布荷载,在 y 轴上 2 10/N m 的各结点约束 UX 方向的自由度,在板单元右下角的结点约束 UX 自由度,结点布置、网 格划分方案如图 5-3 所示。 图 5-3 图 5-4 位移图和图 5-5 各单元图分别给出了结构的位移图和应力云图。 X X 第 11 页 图 5-5 各单元图 X 从图 5-4 位移图和图 5-5 各单元图可以看到,跨中的位移和正应力最大,与简支 X 梁承受均布荷载,跨中挠度和正应力最大的力学常识相符合,可以初步认为模型是正确的。 表格 1 给出了的截面上的正应力和表格 2 给出了处各横截面方0.75xm X 1.5ymY 向位移,其中 的单位为,的单位为。 X aPym 表格 1 考查点的 y/m1.51.00.50-0.5-1.0-1.5 正应力 X -270.20-178.25-88.570.0088.57178.25270.21 表格 2 考查点的 x/m01.53.04.56.07.59.0 方向位移(10-6)Y-0.3485-0.3380-0.3069-0.2571-0.1914- 0.1133 0 1.7. 自编程序分析结果 用自编程序进行分析时,采用了整个结构模型进行计算,其他条件不变,因编程水平 有限,在后处理阶段没有给出节点处的位移与应力,而只能得到高斯积分点处的位移与应 力,得到积分点处的应力后,根据数值分析相关知识采用了插值进行处理,从而得到 的截面上的正应力和 处各横截面方向位移,分别列出表格如0.75xm X 1.5ym Y 下: 表格 3 考查点的 y/m1.51.00.50-0.5-1.0-1.5 正应力 X -297.2-196.06-93.250.0093196.08297.23 表格 4 考查点的 x/m01.53.04.56.07.59.0 方向位移(10-6)Y-0.3481-0.3376-0.3065-0.2568-0.1910- 0.1125 0 1.8. 结果分析比较 为了更直观的比较自编程序和 ANSYS 的计算结果,将表格 1 和表格 3 的数据绘入图 5-6,将表格 2 和表格 4 的数据绘入图 5-7。 图 5-6 应力比较 图 5-7 位移比较 自编程序所得结果与 ANSYS 分析结果进行比较发现,应力偏大而位移偏小。分析 图 5-4 位移图 第 12 页 其中的原因,一方面是编程水平有限,自编程序有很多不完善之处,有很多因素没有考虑 (温度、变形、非线性等) ,所得结果可信度不是很高,只能得到应力以及位移大概的分布 情况;另一方面是在后处理阶段,在对高斯积分点结果进行处理时,误差难以避免,还有 一方面的原因是在进行求解时保留数据精度不够,造成误差较大,并且进行数值运算时可 能会造成大数吃小数,从而引起结果的差异。 第 13 页 参考文献 1(美)史密斯(Smith,I.m.)著;王崧等译.有限单元法编程(第三版)M.北京:电子工业出版社, 2003 2王勖成.有限单元法M.北京:清华大学出版社,2003 3宋建辉,涂志刚.MATLAB 语言及其在有限元编程中的应用J.湛江师范学院学报. 2003.6(24):101-105 4郑大玉, 连宏玉, 周跃发. 有限元编程与 C 语言J. 黑龙江商学院学报.1997.3(13):23-28 5王伟,刘德富.有限元编程中应用面向对象编程技术的探讨J.三峡大学学报.2001.2(23): 124-128 6汪文立, 吕士俊.二级 C 语言程序设计教程M. 北京:中国水利水电出版社,2006 7赵翔龙.FORTRAN 90 学习教程M.北京:北京大学出版社,2002 第 14 页 附录 程序源代码 #include #include /*The gemotry of the model*/ float mesh2; float wide,hight; float wsize,hsize,young,poiss,thick; int i,j,k,knelem,npoin,elem500,ielem; float coord21,props31,lnods8500,ifpre1; float posgp3,weigp3,estif136,elcod28; int npoin,nelem,kevab,igaus,jgaus,kgasp,ngash,djacb; float gpcod29,bmatx316,dmatx33; float shape8,deriv28; float xjacm22,xjaci22,elcod28; float cartd28; float bmatx316,dmatx33; float nload1; float press32,pgash2,dgash2; struct node int nodenu;/*The number of the node*/ float cor2;/*The coordinate of the node*/ float displacement2;/*The displacement of the node*/ float load2; /*The load of the node*/ float boundary2; node500; struct int elementnu;/*The number of element*/ int localnu8;/*Local number*/ int localcorx8; int localcory8; /*Local coordinate of node*/ float qx,qy,t;/*The stress and strain*/ element500; 第 15 页 void meshing(float wide,float hight,float mesh2) printf(Please input the meshing sizen); scanf(%f%f, getchar(); mesh0=wide/wsize; mesh1=hight/hsize; /*The global coordinate of node*/ void coordinate() int i,j=1; float x,y; for(i=1;i=2*mesh1+1;i+) x=0; while(x=wide) if(i%2!=0) nodej.cor1+=wsize/2; nodej.cor2+=(i-1)*hsize; j+; else nodej.cor1+=wsize; nodej.cor2+=(i-1)*hsize; j+; main() int top500,bottom500;/*The number of top and bottom element*/ void input(); void stif(); void jacobi2( ); void load(); void asem(); void solve( ); void stre(); 第 16 页 npoin=8; for(i=1;i=8;i+) lnodsi1=i; for(i=1;i=3;i+) scanf(%f, printf(The EX is %enThe uo is %8fnThe bt is %8f,props11,props21,props31); getch(); printf(Please input the gemotry of the modeln); scanf(%f%f, getchar(); printf(The wide is %0.3f,the hight is %0.3f,wide,hight); getchar(); meshing(wide,hight,mesh); printf(The wide size is %f,the hight size is %fn,mesh0,mesh1); input(); getchar(); nelem=mesh0*mesh1; for(i=1;i=nelem;i+) /*The element number*/ elementi.elementnu=i; for(i=1;imesh0;i+) npoin+=5; for(i=1;imesh1;i+) npoin+=3*mesh0+2; printf(%d,npoin); for(i=1;i=npoin;i+) nodei.nodenu=i; for(i=1;i=nelem;i+) for(j=1;j=8;j+) elementi.localnuj=j; for (i=1;i=mesh0;i+) bottomi=i; j=1; for(i=mesh0*(mesh1-1)+1;i=nelem;i+) topj+=i; 第 17 页 for(i=1;ij;i+) printf(the top number is %dn,topi); printf(%dn,element1.localnu8); coordinate(); stif(); jacobi2( ); load(); asem(); solve( ); stre(); getchar(); /*data input*/ void input() int nnode=8; int notreadchar; /*input element node number*/ printf(input element node numbern); for(ielem=1;ielem=nelem;ielem+) for(i=1;i=nnode;i+) scanf(%d, /*Input restriction message*/ printf(double-digit is symbol of the restriction,1 representates stable,2 representates gived displacementn); i=1; while(i) scanf(%d, if(i!=0) scanf(%d, scanf(%d, else break; /*Element stiffness matrix*/ 第 18 页 void stif() int kevab,nstre,ievab,istre,lnode,jstre,jevab; float kgasp,exisp,etasp, dvolu; float btdbm,dbmat3; void sfr(); /*Gauss point*/ posgp1=-sqrt(0.6); posgp2=0; posgp3=sqrt(0.6); /*weight coefficient*/ weigp1=5.0/9.0; weigp2=8.0/9.0; weigp3=5.0/9.0; /*number of stress*/ nstre=3; /*form elastic matrix*/ for(ielem=1;ielem=nelem;ielem+) printf(The number of element is %dn,ielem); for(i=1;i=8;i+) lnode=lnodsiielem; for(j=1;j=2;j+) coordjlnode=nodelnode.corj; elcodji=coordjlnode; young=props11; poiss=props21; thick=props31; modps(young,poiss); /*The initial value of k*/ kevab=0; for(i=1;i=16;i+) for(j=1;j=i;j+) kevab+; 第 19 页 estifkevab=0.0; /*The gauss point shape function and deriv*/ kgasp=0; for(igaus=1;igaus=3;igaus+) for(jgaus=1;jgaus=3;jgaus+) kgasp=kgasp+1; exisp=posgpigaus; etasp=posgpjgaus; printf(The number of gauss point is %dn,kgasp); sfr2(exisp,etasp); jacob2(ielem,djacb,kgasp,elcod); dvolu=djacb*weigpigaus*weigpjgaus*thick; bmatps() /*The initial value of elastic matrix D*/ kevab=0; for(ievab=1;ievab=16;ievab+) for(istre=1;istre=nstre;istre+) dbmatistre=0.0; for(jstre=1;jstre=nstre;jstre+) dbmatistre=dbmatistre+bmatxjstreievab*dmatxjstreistre; for(jevab=1;jevab=ievab;ievab+) kevab=kevab+1; btdbm=0.0; for(istre=1;istre=nstre;istre+) btdbm=btdbm+dbmatistre*bmatxistrejevab; estifkevab=estifkevab+btdbm*dvolu; /*float sfr2(float s,float t) 第 20 页 float s2,t2,ss,tt,st,stt,sst,st2; /*Shape function*/ /*these variables are to simplify the formula */ s2=s*2.0; t2=t*2.0; ss=s*s; tt=t*t; st=s*t; stt=s*t*t; sst=s*s*t; st2=s*t*2.0; /*shape function*/ shape1=(-1.0+st+ss+tt-sst-stt)/4.0; shape2=(1.0-t-ss+sst)/2.0; shape3=(-1.0-st+ss+tt-sst+stt)/4.0; shape4=(1.0+s-tt-stt)/2.0; shape5=(-1.0+st+ss+tt+sst+stt)/4.0; shape6=(1.0+t-ss-sst)/2.0; shape7=(-1.0-st+ss+tt+sst-stt)/4.0; shape8=(1.0-s-tt+stt)/2.0; /* differential coefficient to local coordinate*/ deriv11=(t+s2-st2-tt)/4.0; deriv12=-s+st; deriv13=(-t+s2-st2+tt)/4.0; deriv14=(1.0-tt)/2.0; deriv15=(t+s2+st2+tt)/4.0; deriv16=-s-st; deriv17=(-t+s2+st2-tt)/4.0; deriv18=(-1.0+tt)/2.0; deriv21=(s+t2-ss-st2)/4.0; deriv22=(-1.0+ss)/2.0; deriv23=(-s+t2-ss+st2)/4.0; deriv24=-t-st; deriv25=(s+t2+ss+st2)/4.0; 第 21 页 deriv26=(1.0-ss)/2.0; deriv27=(-s+t2+ss-st2)/4.0; deriv28=-t+st; */ /*Jacobi matrix*/ void jacobi2( ) /* xjacm22:jacobi matrix;xjaci22:j-1;elcod28:local coordinate*/ float cartd28,gpcod29; int i,j,k; for(i=1;i=2;i+) gpcodikgasp=0.0; for(j=1;j=8;j+) gpcodikgasp=gpcodikgasp+elcodij*shapej; for(i=1;i=2;i+) for(j=1;j=2;j+) xjacmij=0.0; for(k=1;k=8;k+) xjacmij=xjacmij+derivik*elcodjk; /*Caculate the value of Jacobi matrix*/ djacb=xjacm11*xjacm22-xjacm12*xjacm21; printf(The det of jacobi matrix is %fn,djacb); if(djacb=1e-6) printf(The jacobi det of %d is less or equal 0n,ielem); /*The element of j-1*/ xjaci11=xjacm22/djacb; xjaci22=xjacm11/djacb; xjaci12=-xjacm12/djacb; xjaci21=-xjacm21/djacb; /*The deriv of shape function to global coordinate*/ for(i=1;i=2;i+) for(k=1;k=8;k+) cartdik=0.0; 第 22 页 for(j=1;j=2;j+) cartdik=cartdik+xjaciij*derivjk; /* Form elastic matris */ /*float modps() float bmatx316,dmatx33; float constant; int i,j,y,p; y=props11; p=props21; for(i=1;i=3;i+) for(j=1;j=3;j+) dmatxij=0.0; /*If Ntype=1,it is plane stress question*/ constant=y/(1.0-p*p); dmatx11=constant; dmatx22=constant; dmatx12=constant*p; dmatx21=constant*p; dmatx33=constant*(1.0-p)/2.0; */ /*Form strain matrix*/ /*void bmatps() float cartd28,shape8,deriv28,bmatx316,dmatx33; int npoin,nelem,ngash,mgash; float gpcod29; /*The initial value ofB*/ for(i=1;i=16;i+) for(j=1;j=3;j+) bmatxji=0.0; /*Form B*/ ngash=0; 第 23 页 for(i=1;i=8;i+) mgash=ngash+1; ngash=mgash+1; bmatx1mgash=cartd1i; bmatx1ngash=0.0; bmatx2mgash=0.0; bmatx2ngash=cartd2i; bmatx3mgash=cartd2i; bmatx3ngash=cartd1i; */ /*equal load of node*/ void load() float nload500; float elcod23,eload16,posgp3,weigp3; float press32,pgash2,dgash2,noprs3; int iedge,nedge,kount; float sgmar,tau,s,dvolu,pxcom,pycom,n,m,t; int lnode,number,nloca; /*The number of load side*/ /*element load*/ /*The position of gauss point*/ printf(input the number of load side*/n); scanf(%d, posgp1=-sqrt(0.6); posgp2=0.0; posgp3=sqrt(0.6); /*The weight of gauss point*/ weigp1=5.0/9.0; weigp2=8.0/9.0; weigp3=5.0/9.0; /*The initial load of element*/ for(i=1;i=nelem;i+) 第 24 页 nloadi=0.0; for(i=1;i=number;i+) /*The initial value of equal node load*/ for(i=1;i=16;i+) eloadi=0; scanf(%d, for(iedge=1;iedge=nedge;iedge+) for(i=1;i=3;i+) scanf(%f%f, /*if sgmar=0,input node load q(1,2,3)and t(1,2,3)*/ if(fabs(sgmar)1e-8)j=3;j+) for(i=1;i=2;i+) scanf(%f, else for(i=1;i=3;i+) pressi1=sgmar; pressi2=ta

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论