混凝土作为一种三相复合材料,从细观层面来说是由粗骨料、砂浆和过渡区(界面层)组成。这三种材料具有不同的力学特性,在混凝土的性能中起着重要作用。过去,主要基于宏观层次的混凝土力学研究已经不能很好地解释混凝土材料的损伤和破坏机理。由于骨料形态的复杂性和空间分布的随机性,建立一个能反映混凝土实际骨料级配、含量及其形态的随机骨料模型并进行有限元分析,是深入解释混凝土损伤机理的关键,也为研究混凝土性能提升提供了高效的方向指导。本文通过使用CAD插件实现Abaqus的模型构建,建立包含球形、凸型多面体(碎石)骨料,并考虑了界面层的三维混凝土细观随机模型,并对骨料的空间分布进行探讨。
本文运用CAD插件进行模型建立,并将模型导入Abaqus内,实现了随机骨料模型建模,极大地简化了混凝土细观力学研究的工作量。结合了参数化建模的思想,提出球形骨料生成算法,在此基础上进一步提出多面随机剖切算法,生成了随机凸型多面体骨料模型。同时,采用干涉判别算法,分别对球形骨料和多面体骨料进行了投放试验,形成包含骨料、砂浆、过渡区在内的三相混凝土模型。多面体骨料投放算法采用严格的空间三角网格碰撞数学运算,且提高了骨料体积含量。通过重力堆积算法,模拟混凝土中骨料的排列和分布情况。CAD插件内置的建模算法可以做到骨料、界面层、骨料分布的多参数控制,对于高效构建符合真实情况的混凝土细观模型具有重要意义。
参数化建模允许研究者通过调整一系列参数来控制模型的特性,例如骨料的大小、级配、分布等。这种可控性使得研究者能够灵活地模拟不同情况下的混凝土结构,更好地理解材料的行为。三维球体骨料模型的构建采用CAD随机球体颗粒&过渡区插件。
在混凝土试件中,骨料的各种参数通常是随机的。使用C#语言,可以调用多种生成随机数的函数来模拟这些参数。以下是一个示例,演示如何使用C#语言随机生成球体的半径和空间坐标:
using System; class Program { static void Main() { // 创建随机数生成器 Random random = new Random(); // 生成随机半径,假设半径范围在1到10之间 double radius = random.NextDouble() * (10 - 1) + 1; // 生成随机空间坐标,假设坐标范围在三维空间中 double xCoordinate = random.NextDouble() * 100; double yCoordinate = random.NextDouble() * 100; double zCoordinate = random.NextDouble() * 100; // 打印生成的结果 Console.WriteLine("外接球的半径: " + radius); Console.WriteLine("空间坐标 (x, y, z): (" + xCoordinate + ", " + yCoordinate + ", " + zCoordinate + ")"); } }
这里使用了Random类来生成随机数。通过NextDouble方法可以获得0到1之间的随机浮点数。这样的随机生成可以模拟混凝土试件中骨料的随机性,使得模拟更加真实和多样化。
骨料生成后进行随机投放程序,投放中需要对骨料间的相交性进行判别,同时需要考虑骨料与骨料间间距过小将导致小边的出现的问题。小边通常指的是与整个几何体相比较小的边缘或特征,它们可能导致在有限元分析中网格变得不规则或包含过多的小单元,从而增加计算复杂度并可能引发数值不稳定性。因此在骨料相交判别程序中插件引入球体最小间距参数。下面是采用C#对球体间的相交性进行判别的程序演示。
using System; class Program { static void Main() { // 定义第一个球体的参数 double x1 = 0; // 第一个球体的中心 x 坐标 double y1 = 0; // 第一个球体的中心 y 坐标 double z1 = 0; // 第一个球体的中心 z 坐标 double radius1 = 5; // 第一个球体的半径 // 定义第二个球体的参数 double x2 = 10; // 第二个球体的中心 x 坐标 double y2 = 0; // 第二个球体的中心 y 坐标 double z2 = 0; // 第二个球体的中心 z 坐标 double radius2 = 7; // 第二个球体的半径 // 定义两球体之间的最小距离阈值 double minDistance = 3; // 假设两球体之间的最小距离为3 // 计算两个球体中心之间的距离 double distance = Math.Sqrt(Math.Pow(x2 - x1, 2) + Math.Pow(y2 - y1, 2) + Math.Pow(z2 - z1, 2)); // 判断两个球体是否隔开一定距离 if (distance >= radius1 + radius2 + minDistance) { Console.WriteLine("True"); } else { Console.WriteLine("False"); } } }
同时使用C#中的for循环函数对n个骨料进行相交性判别:
// 利用for循环遍历每对骨料,并进行相交性判别 for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { // 计算两个骨料中心之间的距离 double distance = Math.Sqrt(Math.Pow(spheres[j, 0] - spheres[i, 0], 2) + Math.Pow(spheres[j, 1] - spheres[i, 1], 2) + Math.Pow(spheres[j, 2] - spheres[i, 2], 2)); // 判断两个骨料是否相交 if (distance < spheres[i, 3] + spheres[j, 3] + minDistance) { Console.WriteLine($"骨料{i + 1}和骨料{j + 1}相交."); } else { Console.WriteLine($"骨料{i + 1}和骨料{j + 1}不相交."); } } }
界面过渡区ITZ(Interfacial Transition Zone)的模型构建,可采用布尔运算的方式实现。在骨料基础上偏移一定距离,偏移距离为界面层的厚度,建立新的球体部件,再与之前的球形骨料做切割,即可生成其界面层。对于投放成功的骨料及过渡区,插件中采用数组记录所有参数。最终的Abaqus三维球体骨料及过渡区模型完成如下。
(未完待续...)