VUMAT基本知识

合集下载

基于VUMAT的三维裂纹动态扩展有限元模拟

基于VUMAT的三维裂纹动态扩展有限元模拟

2010年 6月
第 24卷 第 2期
基于 VUMAT的三维裂纹动态扩展有限元模拟 43
本文拟采用应力失效准则 ,直接处理材料点 。 允许的范围之内 ; 而且 ,从试验和数值结果分析可
对于 (2)式中的每一个增量步 ,只要在距裂纹尖端 见 ,应力集中主要在于裂尖局部范围 ,开裂后形成的
附近某个积分点的应力值达到了给定的门槛值 ,那 么此点就开裂了 ,本文采取删除材料点的方式模拟 开裂 。由于应力分布具有一定的区域性 (即在一定
有限元法较早就已经广泛应用于断裂力学问题 的分析研究 [ 2 ] (52) ,但由于裂纹不连续位移场的特殊
行计算 ,裂纹扩展路径基本一致 ,此处仅展示厚度为 5mm 时模拟结果 。
性及裂尖端应力 、应变场的奇异性问题 ,使得对有限
元网格的划分有特殊要求 ,如宏观裂纹表面要保证
与单元边界一致 ,并依靠有限单元边界来勾画其位
在有限元软件的选择上 ,大概可以分成四种方 式 : (1)选用专业的断裂分析有限元软件 ,如 NAS2 GRO , AF2GROW、FRANC2D、FRANC3D 等 , 它 们可 以进行较为全面的断裂问题计算 ,计算精度也很高 , 但是计算效率不高 ,并且与通用软件接口不太友好 , 很难适用于大型工程模型分析 。 ( 2)选用大型通用 有限元软件如 ANSYS和 NASTRAN 等 ,使用这些程 序时首先必须根据实际问题对软件命令流或者脚本 语言进行编程 ,然后再进行断裂问题模拟计算 。该 过程相对复杂 ,在工程实际应用上有一定难度 ,计算 准确性也难以保证 。 ( 3 )选用专业非线性有限元软 件如 ABAQUS和 MARC等 ,这些软件在非线性计算 能力和收敛性方面功能强大 ,但是在三维裂纹动态 扩展方面都还不完善 。 ( 4)用户自主开发专业有限 元软件 ,但难度极大 。本文利用 ABAQUS / EXPL IC2 IT强大的非线性求解能力 ,开发直接对材料积分点 添加自定义本构方程和失效准则的子程序 VUMAT, 在网格适当加密的情况下就能完成三维裂纹动态扩 展模拟 ,通过四点弯曲模型算例与文献 [ 12 ] (169) 中 试验结果进行了对比 ,验证了本文方法的有效性 ,可 以推广至复杂工程模型 。

vumat子程序中props里面用到的输入参数

vumat子程序中props里面用到的输入参数

vumat子程序中props里面用到的输入参数【原创版】目录1.Vumat 子程序的概述2.Props 的定义和作用3.Vumat 子程序中 Props 的输入参数详解4.参数的应用示例5.总结正文【1.Vumat 子程序的概述】Vumat 子程序是一款用于计算机视觉和图像处理领域的深度学习模型。

该模型通过使用大量的训练数据,可以有效地对图像进行处理和分析,以完成各种任务,如目标检测、图像分类和语义分割等。

【2.Props 的定义和作用】在 Vumat 子程序中,Props 是指属性,它是一组定义输入数据的参数。

这些参数可以包括图像的大小、颜色空间、数据类型等,以确保输入数据符合模型的要求。

Props 在 Vumat 子程序中起到了至关重要的作用,因为它们可以有效地组织和管理输入数据,从而使模型训练和预测更加高效和准确。

【3.Vumat 子程序中 Props 的输入参数详解】Vumat 子程序中 Props 的输入参数主要包括以下几个方面:(1)图像大小(Image Size):图像大小是指输入图像的宽度和高度。

在 Vumat 子程序中,图像大小通常以像素为单位进行表示。

(2)颜色空间(Color Space):颜色空间是指输入图像所使用的颜色表示方法。

常见的颜色空间有 RGB、HSV 和 LAB 等。

在 Vumat 子程序中,通常使用 RGB 颜色空间进行图像处理。

(3)数据类型(Data Type):数据类型是指输入数据的类型。

在 Vumat 子程序中,输入数据的类型通常为浮点数(float32)或整数(int32)等。

(4)其他参数:除了上述参数之外,Vumat 子程序中还可能涉及到其他一些参数,如归一化方法、数据增强策略等。

这些参数的具体取值取决于模型的结构和训练需求。

【4.参数的应用示例】假设我们要使用 Vumat 子程序训练一个目标检测模型,那么我们需要为该模型设置适当的 Props 输入参数。

ABAQUS 子程序VUMAT 的坐标系的问题的讨论

ABAQUS 子程序VUMAT 的坐标系的问题的讨论

SimWe 仿真论坛---(论坛实行邀请码注册)'s Archiver SimWe 仿真论坛---(论坛实行邀请码注册) » A04:ABAQUS » ABAQUS 子程序VUMAT 的坐标系的问题的讨论billowriver 发表于 2009-4-6 05:50ABAQUS 子程序VUMAT 的坐标系的问题的讨论在ABAQUS/Explicit 里面,Vumat 里的所有变量都是相对于一个corotational 坐标系 来说的,而在ABAQUS 的odb 里面显示的是cauchy stress, 是相对于当前坐标系来讲的。

因为变形梯度 F=RU ,意思是材料先变形U ,再做一个刚体旋转R ,而这个corotational 坐标系是在材料做刚体旋转前的坐标系,ABAQUS 上面说由于做刚体旋转不会影响应力在相应坐标系里的大小,因此刚体旋转前后应力大小应该一样,即VUMAT 里面的StressNew 和odb 里面显示的cauchy stress 大小应该一样。

我在做单轴拉伸模拟得到的结果二者一样,但是如果做剪切模拟,如果剪切力和正应力同时存在的话,StressNew 和odb 里面的应力不一样,即使把StressNew 设成常数,在odb 里得到的应力也不是常数。

很奇怪。

这种影响在小变形下差别很小,但是大变形时候会产生很大误差。

如何用VUMAT 计算出当前的cauchy stress, 哪位高手知道或者有兴趣的可以一起讨论下。

S_true=RSR',但是ABAQUS 里面没有直接提供R ,而是提供了F_old ,F_new, U_old, U_new ,但是Vumat 里面应变也是基于corotational 坐标系的,而且是lnV,在这里=lnUshawn2008 发表于 2009-4-6 06:05[i=s] 本帖最后由 shawn2008 于 2009-4-6 06:07 编辑 [/i]太多概念错误,我都不知道从哪开始说起了。

vulmap 用法

vulmap 用法

vulmap 用法Vulmap是一款开源的漏洞扫描框架,用于自动化地扫描和检测Web应用程序的安全漏洞。

它能够帮助安全测试人员和开发人员发现和修复潜在的漏洞,以提高Web应用程序的安全性。

Vulmap的使用方法如下:1.安装及部署:首先,需要在支持PHP的服务器上安装Vulmap。

可以通过克隆Vulmap的GitHub仓库来获取源代码,并将源代码放置在web服务器的根目录下。

然后,通过访问Vulmap的URL来完成Vulmap的部署。

2.目标配置:在Vulmap的管理界面中,可以添加和配置目标,以指定需要扫描的Web应用程序。

目标可以是单个URL或者是URL列表。

配置目标后,可以为目标设置一些扫描参数,如漏洞扫描深度和并发请求数等。

3.漏洞扫描:在目标配置完成后,可以开始进行漏洞扫描。

Vulmap会自动化地进行漏洞检测,并将检测结果以易于阅读的报告形式呈现出来。

扫描过程中会涉及到诸多漏洞检测模块,如SQL注入、XSS、CSRF等。

除了以上基本的使用方法外,可以进一步拓展Vulmap的功能,例如:1.自定义漏洞检测规则:Vulmap提供了一些常见漏洞检测模块,但也可以根据具体需求自定义漏洞检测规则。

通过编写自定义脚本,可以检测特定的漏洞类型或者特定的漏洞细节。

2.集成到CI/CD流程:Vulmap可以与CI/CD工具集成,实现自动化的安全测试。

可以将Vulmap加入到持续集成和持续交付流水线中,定期执行漏洞扫描,并将结果与开发团队共享。

总结来说,Vulmap是一款功能强大的漏洞扫描框架,能够辅助安全测试人员和开发人员快速发现和修复Web应用程序中的安全漏洞。

它的用法包括安装及部署、目标配置、漏洞扫描等。

此外,还可以通过自定义漏洞检测规则和集成到CI/CD流程等方式进行功能拓展。

abaqus vumat 原理

abaqus vumat 原理

abaqus vumat 原理英文回答:VUMAT is a user-defined material subroutine in Abaqus that allows users to define their own material behavior. It is a powerful tool that can be used to model complex material behavior that cannot be captured by Abaqus' built-in material models.VUMAT is a Fortran subroutine that is called by Abaqus during the solution of a finite element analysis. The subroutine is passed a set of input parameters, including the current stress, strain, and temperature state of the material. The subroutine then calculates the new stress and strain state of the material based on the input parameters and the user-defined material model.VUMAT can be used to model a wide variety of material behaviors, including:Elastic-plastic behavior.Viscoelastic behavior.Damage behavior.Failure behavior.VUMAT is a complex subroutine to write, but it can be a very powerful tool for modeling complex material behavior.中文回答:VUMAT 是 Abaqus 中的一个用户定义材料子程序,允许用户定义自己的材料行为。

写UMAT或VUMAT概览目的书写UMAT或VUMAT所需要采取

写UMAT或VUMAT概览目的书写UMAT或VUMAT所需要采取

第六讲写UMAT或VUMAT概览目的书写UMAT或VUMAT所需要采取的步骤UMAT接口例子VUMAT接口例子概览ABAQUS / Standard和ABAQUS /显有接口,使用户执行本构方程。

-在ABAQUS /标准用户定义的材料通过用户子程序UMAT模型实施。

-在ABAQUS /明确的用户定义的材料通过用户子程序VUMAT模型实施。

当在ABAQUS素材库中没有任何一种已经存在的材料,能够准确反映当前用来建模所用材料的特性时,就需要使用UMAT和VUMAT进行建模。

这些接口能够确定各种复杂本构关系的材料模型。

用户定义的材料模型可用于任何ABAQUS结构元素类型。

多用户材料可通过一个单一的UMAT或VUMAT或一起使用。

在这个讲座,在UMAT或VUMAT中的材料模型的实施将会被讨论并举例说明目的为了模拟实验结果而进行地高级的本构模行测试往往需要复杂的有限元模型。

-先进的结构element-复杂加载条件-热负荷-接触和摩擦条件-静态和动态分析如果本构模型模拟不稳定性和具有本地化现象的材料,特别的分析问题就会产生。

-准静态分析需要特别的解决方案。

-鲁棒元素配方应当提供。

-显式动态的解决方案以及强大矢量联系算法需要改进。

此外,强大的功能要求随时的可视化结果。

(就是可以动态的可视化结果)-轮廓和路径图的状态变量。

-函数地块。

-列表的结果。

材料模型的开发者应当只关注的材料模型的发展,而不是有限元软件的开发和维持。

-发展和材料没关系的建模方法-新系统的移植问题-用户开发的代码长期的计划维持书写UMAT或VUMAT所需要采取的步骤需要采取的步骤书面UMAT或VUMAT:这就需要定义一个适当的本构方程,如下:-明确定义应力(柯西应力大变形应用)-定义的应力变化率(仅在corotational框架)此外,它很可能需要:-时间,温度,或外地变量这些所依赖东西的定义-内部状态变量的定义,显式的或者用带有偏微分的函数。

形状记忆合金本构的VUMAT二次开发

形状记忆合金本构的VUMAT二次开发

a a b
(1-3a)
卸载时:
σ b E A ε-ε b Ε Α εd Ε A ε εd Ε ε Α
其中: εc b a d
c b d c d
止应变; d 为再次按奥氏体弹性模量
卸载的开始应变。
加载段分为两段:
段 d-o 段,则再加载的第一加 载段和第二加载段的分界点 将是原来的 a 点。 双旗型-SMA 超弹性本构模型 为压缩和拉伸的本构关系对称的 形式,如图 1-1 所示。

a
ΕΑ ΕΑ
PR OP S 物 理 性 系 系 1 2 3 4 5 6 7 8

-T


-T
a d
-T -T

-C


-C
a
-C
d
-C
A
ΕΑ
b

注:T -拉伸,C-压缩
c
d
A
a
SMA-VUMA T 子程序的主要编制思路, 如下:
εb
o εd
c
1) 以应变是否大于零,来区分拉伸和 压缩两种情况。 2) 以应变增量是否大于零,来区分加 载和卸载两种情况。 3) 以关键点的应力值作为加载段 \ 卸 载段的划分依据,对不同的加载段 \卸载段进行划分, 根据当前传递过 来的应力值,判断其所在的加载 \ 卸载段,定义新的应力值计算公 式。 最终编制成功的 SMA-VUMA T 子程序, 经过单个单元和构件的双重测试,测试情况 多样,全面,概况如下: 1) 单纯拉伸\压缩: 加载进入第一加载 段或第二加载段的各种加载再卸 载情况。 2) 单纯拉伸\压缩: 卸载进入第一加载 段、第二加载段或第三卸载段的各 种加载、卸载再加载的情况。 拉伸与压缩各种混合加载\ 卸载情

5.本构模型-应力更新专题-UMAT和VUMAT

5.本构模型-应力更新专题-UMAT和VUMAT
计算固体力学
应力更新专题
柳占立 庄茁 liuzhanli@
2016年10月13日
有限元基本知识
导出有限元方程(完全,更新、共旋) 求解有限元方程(隐式和显式)
第4-6章
有限元高级知识
单元技术、结构单元、接触等
第7-10章
不同用户要求: 知道有限元基本流程; 编写本构关系、节点内力 开发有限元程序
1 或 Sij JFik s kl FljT
二阶张量的后拉和前推运算给出了在变形和未变形构形情况下 张量之间的关系,例如 Green 应变率和变形率的关系, PK2 应力与 Cauchy应力的关系。
这些定义取决于是否一个张量是动力学还是运动学的,区别在 于由这些张量所观察到的功的共轭性:如功共轭的运动学和动力学 张量被后拉或前推,则功必须保持不变。 许多关系来自于框3.2,这些概念能够使我们发现那些不容易显 示的关系。一些重要的二阶张量的后拉和前推在框5.16给出。
×
s
ÑT
1 æ D -1 º F×ç F × ( Js ) × F J è Dt
(
)
ö T T × F = s + Ñ × v s L × s s × L ÷ ø
t Js
t
ÑT
æ D -1 -T ö - L ×t - t × L = F × ç ºt F × t × F ÷ × FT º Lvt è Dt ø
0
t
σT L σ σ LT vσ σ
Green-Naghdi率:
σG Ω σ σ ΩT σ
Jaumann率: σ σJ W σ σ WT 本构关系
2.几种客观率
σ Cs D : D
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

NBLOCK: 在调用Vumat时需要用到的材料点的数量Ndir:对称张量中直接应力的数量(sigma11,sigma22,sigma33)Nshr:对称张量中间接应力的数量(sigma12, sigma13, sigma23)Nstatev:与材料类型相关联的用户定义的状态变量的数目Nfieldv:用户定义的外场变量的个数Nprops:用户自定义材料属性的个数Lanneal:指示是否在退火过程中被调用例程的标志。

Lanneal=0,指示在常规力学性能增量,例程被调用。

Lanneal=1表示,这是退火过程,你应该重新初始化内部状态变量,stepTime:步骤开始后的数值totalTime:总时间Dt:时间增量值Cmname:用户自定义的材料名称,左对齐。

它是通过字符串传递的。

一些内部材料模型是以“ABQ_”字符串开头给定的名称。

为了避免冲突,你不应该在“cmname”中使用“ABQ_”作为领先字符串。

coordMp(nblock,*):材料点的坐标值。

它是壳单元的中层面材料点,梁和管(pipe)单元的质心。

charLength(nblock):特征元素长度,是基于几何平均数的默认值或用户子程序VUCHARLENGTH中定义的用户特征元长度。

props(nprops):用户使用的材料属性density(nblock):中层结构的物质点的当前密度strainInc (nblock, ndir+nshr):每个物质点处的应变增量张量relSpinInc (nblock, nshr):在随转系统中定义的每个物质点处增加的相对旋转矢量tempOld(nblock):物质点开始增加时的温度。

defgradOld (nblock,ndir+2*nshr):在增量开始时,每个物质点出的变形梯度张量,在3d中形为(F11, F22,F33,F12,F23,F31,F21,F32,F13),在2d中形为(F11,F22,F33,F12,F21)stretchOld (nblock, ndir+nshr)fieldOld (nblock, nfieldv):在增量开始时,每个物质点处用户定义场变量的值stressOld (nblock, ndir+nshr):在增量开始时,每个物质点处的应力张量:stateOld (nblock, nstatev):在增量开始时,每个物质点处的状态变量:tempNew(nblock):在增量结束时,每个物质点处的温度defgradNew (nblock,ndir+2*nshr):在增量结束时,每个物质点出的变形梯度张量,在3d中形为(F11, F22,F33,F12,F23,F31,F21,F32,F13),在2d中形为(F11,F22,F33,F12,F21)fieldNew (nblock, nfieldv):在增量开始时,每个物质点处用户定义长变量的值Example: Elastic/plastic material with kinematic hardeningAs a simple example of the coding of subroutine VUMAT, consider the generalized plane strain case for an elastic/plastic material with kinematic hardening. The basic assumptions and definitions of the model are as follows.Let be the current value of the stress, and define to be the deviatoric part of the stress. The center of the yield surface in deviatoric stress space is given by the tensor , which has initial values of zero. Thestress difference, , is the stress measured from the center of the yield surface and is given byThe von Mises yield surface is defined aswhere is the uniaxial equivalent yield stress. The von Mises yield surface is a cylinder in deviatoric stress space with a radius ofFor the kinematic hardening model, R is a constant. The normal to the Mises yield surface can be written asWe decompose the strain rate into an elastic and plastic part using an additive decomposition:The plastic part of the strain rate is given by a normality conditionwhere the scalar multiplier must be determined. A scalar measure of equivalent plastic strain rate is defined byThe stress rate is assumed to be purely due to the elastic part of the strain rate and is expressed in terms of Hooke's law bywhere and are the Lamés constants for the material.The evolution law for is given aswhere H is the slope of the uniaxial yield stress versus plastic strain curve.During active plastic loading the stress must remain on the yield surface, so thatThe equivalent plastic strain rate is related to byThe kinematic hardening constitutive model is integrated in a rate form as follows. A trial elastic stress is computed aswhere the subscripts and refer to the beginning and end of the increment, respectively. If the trial stress does not exceed the yieldstress, the new stress is set equal to the trial stress. If the yield stress is exceeded, plasticity occurs in the increment. We then write the incremental analogs of the rate equations aswhereFrom the definition of the normal to the yield surface at the end of the increment, ,This can be expanded using the incremental equations asTaking the tensor product of this equation with , using the yield condition at the end of the increment, and solving for :The value for is used in the incremental equations to determine ,, and .subroutine vumat(C Read only -1 nblock, ndir, nshr, nstatev, nfieldv, nprops, lanneal,2 stepTime, totalTime, dt, cmname, coordMp, charLength,3 props, density, strainInc, relSpinInc,4 tempOld, stretchOld, defgradOld, fieldOld,3 stressOld, stateOld, enerInternOld, enerInelasOld,6 tempNew, stretchNew, defgradNew, fieldNew,C Write only -5 stressNew, stateNew, enerInternNew, enerInelasNew )Cinclude 'vaba_param.inc'CC J2 Mises Plasticity with kinematic hardening for planeC strain case.C Elastic predictor, radial corrector algorithm.CC The state variables are stored as:C STATE(*,1) = back stress component 11C STATE(*,2) = back stress component 22C STATE(*,3) = back stress component 33C STATE(*,4) = back stress component 12C STATE(*,5) = equivalent plastic strainCCC All arrays dimensioned by (*) are not used in this algorithm dimension props(nprops), density(nblock),1 coordMp(nblock,*),2 charLength(*), strainInc(nblock,ndir+nshr),3 relSpinInc(*), tempOld(*),4 stretchOld(*), defgradOld(*),5 fieldOld(*), stressOld(nblock,ndir+nshr),6 stateOld(nblock,nstatev), enerInternOld(nblock),7 enerInelasOld(nblock), tempNew(*),8 stretchNew(*), defgradNew(*), fieldNew(*),9 stressNew(nblock,ndir+nshr), stateNew(nblock,nstatev), 1 enerInternNew(nblock), enerInelasNew(nblock)Ccharacter*80 cmnameCparameter( zero = 0., one = 1., two = 2., three = 3.,1 third = one/three, half = .5, twoThirds = two/three,2 threeHalfs = 1.5 )Ce = props(1)xnu = props(2)yield = props(3)hard = props(4)Ctwomu = e / ( one + xnu )thremu = threeHalfs * twomusixmu = three * twomualamda = twomu * ( e - twomu ) / ( sixmu - two * e )term = one / ( twomu * ( one + hard/thremu ) )con1 = sqrt( twoThirds )Cdo 100 i = 1,nblockCC Trial stresstrace = strainInc(i,1) + strainInc(i,2) + strainInc(i,3) sig1 = stressOld(i,1) + alamda*trace + twomu*strainInc(i,1) sig2 = stressOld(i,2) + alamda*trace + twomu*strainInc(i,2) sig3 = stressOld(i,3) + alamda*trace + twomu*strainInc(i,3) sig4 = stressOld(i,4) + twomu*strainInc(i,4) CC Trial stress measured from the back stresss1 = sig1 - stateOld(i,1)s2 = sig2 - stateOld(i,2)s3 = sig3 - stateOld(i,3)s4 = sig4 - stateOld(i,4)CC Deviatoric part of trial stress measured from the back stresssmean = third * ( s1 + s2 + s3 )ds1 = s1 - smeands2 = s2 - smeands3 = s3 - smeanCC Magnitude of the deviatoric trial stress differencedsmag = sqrt( ds1**2 + ds2**2 + ds3**2 + 2.*s4**2 )CC Check for yield by determining the factor for plasticity,C zero for elastic, one for yieldradius = con1 * yieldfacyld = zeroif( dsmag - radius .ge. zero ) facyld = oneCC Add a protective addition factor to prevent a divide by zeroC when dsmag is zero. If dsmag is zero, we will not have exceededC the yield stress and facyld will be zero.dsmag = dsmag + ( one - facyld )CC Calculated increment in gamma (this explicitly includes theC time step)diff = dsmag - radiusdgamma = facyld * term * diffCC Update equivalent plastic straindeqps = con1 * dgammastateNew(i,5) = stateOld(i,5) + deqpsCC Divide dgamma by dsmag so that the deviatoric stresses areC explicitly converted to tensors of unit magnitude in theC following calculationsdgamma = dgamma / dsmagCC Update back stressfactor = hard * dgamma * twoThirdsstateNew(i,1) = stateOld(i,1) + factor * ds1stateNew(i,2) = stateOld(i,2) + factor * ds2stateNew(i,3) = stateOld(i,3) + factor * ds3stateNew(i,4) = stateOld(i,4) + factor * s4CC Update the stressfactor = twomu * dgammastressNew(i,1) = sig1 - factor * ds1stressNew(i,2) = sig2 - factor * ds2stressNew(i,3) = sig3 - factor * ds3stressNew(i,4) = sig4 - factor * s4CC Update the specific internal energy -stressPower = half * (1 ( stressOld(i,1)+stressNew(i,1) )*strainInc(i,1)1 + ( stressOld(i,2)+stressNew(i,2) )*strainInc(i,2) 1 + ( stressOld(i,3)+stressNew(i,3) )*strainInc(i,3) 1 + two*( stressOld(i,4)+stressNew(i,4) )*strainInc(i,4) ) CenerInternNew(i) = enerInternOld(i)1 + stressPower / density(i)CC Update the dissipated inelastic specific energy -plasticWorkInc = dgamma * half * (1 ( stressOld(i,1)+stressNew(i,1) )*ds11 + ( stressOld(i,2)+stressNew(i,2) )*ds2 1 + ( stressOld(i,3)+stressNew(i,3) )*ds3 1 + two*( stressOld(i,4)+stressNew(i,4) )*s4 ) enerInelasNew(i) = enerInelasOld(i)1 + plasticWorkInc / density(i)100 continueCreturnend。

相关文档
最新文档