Flac3D中的参数随机分布设置:控制双组参数的随机比例分配策略
Flac3d随机分布 参数随机分布 本命令主要用途为设置一个随机比例来实现两组不同参数的随机分布。在岩土工程数值模拟里材料参数的随机分布就像火锅底料——同一锅汤底牛油和辣椒的比例不同涮出来的毛肚口感完全不一样。今天咱们来扒一扒Flac3D里这个能让参数撒豆成兵的神奇操作。先看个实战场景模拟含裂隙的岩层时总不能给所有单元都设同一个弹性模量吧这时候就该祭出zone property distribution这个神器了。先上个热乎的代码片段model random 10086 ;←注意这个种子数老司机都爱用工号 zone cmodel assign mohr-coulomb zone property density 2650 zone property distribution young 2e9 ratio 0.3 ;←重点在这行 fish define set_params loop foreach zp zone.list if math.random 0.7 then ;←三成单元搞特殊 zone.prop(zp,young) 2e9 * (0.8 0.4*math.random) zone.prop(zp,cohesion) 1e6 * (0.5 math.random) endif endloop end set_params这段代码藏着几个骚操作distribution命令里的ratio参数控制着参数波动幅度0.3表示上下浮动30%。但别被这表面迷惑实际波动是±30%乘以随机数相当于在基准值附近晃悠老司机都知道要设随机种子那个10086这样每次跑出来的随机分布都能复现——甲方要改方案时能救命Fish函数里用math.random搞了个条件判断专门给30%的单元加buff这些幸运儿不仅弹性模量能飙到基准值的1.2倍粘聚力也随机增强不过要注意参数分布不是摇骰子比大小。曾经有个项目把摩擦角随机范围设太大结果模型还没开始计算就直接表演山体滑坡当场翻车。后来发现波动幅度得跟着现场勘察数据走像弹性模量这种敏感参数10%的浮动都可能导致位移量级突变。Flac3d随机分布 参数随机分布 本命令主要用途为设置一个随机比例来实现两组不同参数的随机分布。再分享个高阶玩法——用正态分布搞事情fish define normal_dist(mean, stdev) normal_dist mean stdev * math.sqrt(-2*math.ln(math.random)) * math.cos(2*math.pi*math.random) end zone property distribution young normal_dist(2e9, 1e8)这个自定义的Fish函数用Box-Muller算法生成正态分布比原生的均匀分布更贴近真实岩层的参数分布规律。不过要小心尾巴拖太长产生负数最好加个数值限制。最后说个血泪教训千万别在节理单元上乱用随机分布曾经有个模拟边坡的case节理面强度参数随机设置后计算了三天三夜死活不收敛最后发现是某个单元摩擦角设成了0.1度相当于在模型里塞了块肥皂。所以老铁们记得在随机赋值后加个校验循环把离谱的数值过滤掉。