分类目录归档:技术博客

针对一些技术的展示

chatGPT居然懂COMSOL!

试了一下chatGPT,居然懂COMSOL!

http://wenzhang.zhuluan.com/zh-cn/

也有不准确的地方

懂的挺多,但是解释了,又没有完全解释。

然后进一步问了一些数学相关的问题。额,概率论应该是不相关吧?

问题和回答的位置反了

小广告:COMSOL相关问题可以加琳泓大佬的群去找群友讨论

开放群:566811107
群一:836281296
群二:594368389
群三:1080606488
群四: 678357196

COMSOL 不同系统平台效率测试(Windows Linux Mac)

正好笔记本上装了黑苹果,就对COMSOL效率测试脚本进行些修改,成功在三个平台上运行了测试。

  • 三个系统分别为win10 家庭版,macOS 11 Big Sur,Ubuntu 22.04 LST。
  • 显然,Win耗时最长,效率最拉跨。
  • macOS表现比Win10优秀,并且在传热计算(第二项测试)上使用效率最高。
  • Ubuntu整体效率最优秀,初了第二项测试输给OSX,其他三项都耗时最短,一度比Win效率提升25%。

这也为我后续的工作提出了一个思路,后面可以自己几个主要的计算工作站,都安装Ubuntu Server,然后开发一个Matlab App,然后要计算的东西,进入Matlab Web App调用进行计算,这效率真是杠杠的,美滋滋~~~


COMSOL 硬件测试 7950x 5950x 3900x

用自己写的Matlab批量计算脚本测试了几个COMSOL案例库的仿真耗时,这个目前这个结果是有点迷。我那个7950x的优势感觉不是很明显啊,心痛我花的钱~!另外感觉3900x在某些计算中,有迷之优势。


COMSOL硬件效率测试脚本(Matlab Livelink)

今年AMD新出了7590x,心动了,正好工作室需要再加一个电脑,就自己配了一套。

电脑组好以后,想做一下几个不同软硬件平台的下的COMSOL计算效率测试,选了几个案例库里的案例,手动一个个点击计算,然后手动记录太麻烦了,然后就想着写了个Matlab Livelink的脚本,自动批量化计算并记录耗时的脚本,测试完毕后会发布生成一个html网页格式的报告。

测试的结果见下一篇文章。COMSOL 硬件测试 7950x 5950x 3900x

有兴趣的兄弟可以运行测试一下,整个流程的时长根据电脑配置的不同应该在20~60分钟不等,占用时间不多。测试结果方便的话发我邮箱一份,我将将各方面的数据一起统计发布到我的博客供各位参考(将计算完成后在脚本目录生成的html文件夹打包发给我即可:cswcswcsw2008@qq.com)。

脚本的使用比较简单,将以下两个matlab脚本(main.m、TestPublisher1.m)保存到本地文件夹里,然后打开COMSOL Matlab Livelink环境,运行main.m脚本即可,20~60分钟后,将脚本目录下生成一个html文件夹,并在其中生成一个自动化报告。另注意,我这个是基于COMSOL6.1的案例库来调用的案例。不保证其他版本是否可以通用。

脚本:

main.m

%% 运进测试脚本并发布
publish('TestPublisher1.m');
web('html/TestPublisher1.html');

TestPublisher1.m

%% *COMSOL 硬件效率测试报告*
% 
% 
% 此脚本用于测试批量计算测试不同硬件下COMSOL的计算效率,并生成效率数据图示
%% *系统环境信息*

system_info = cpuinfo();
disp(system_info);

% 设定循环测试次数

num_test = 3;
sol_time = zeros(2,num_test);


% 设置COMSOL安装目录的路径:

comsol_dir = uigetdir("C:\Program Files\COMSOL\COMSOL61","请选择COMSOL安装目录,默认为“C:\Program Files\COMSOL\COMSOL61”");

%% *计算各个案例文件:*
%继续批量化计算,并记录时间:

%% 1、传热:碳纤维编织结构的各向异性传热
% <http://cn.comsol.com/model/anisotropic-heat-transfer-through-woven-carbon-fibers-16709 
% http://cn.comsol.com/model/anisotropic-heat-transfer-through-woven-carbon-fibers-16709>
% 
% 此模型和演示说明了如何在传热仿真中对纤维的各向异性属性进行建模。由于纤维取向不易明确定义,因此使用“曲线坐标”接口来定义纤维取向。 纤维在纤维方向上的热导率较高,在垂直方向上热导率较低。
% 
% 

mph = strcat(comsol_dir,'\Multiphysics\applications\Heat_Transfer_Module\Tutorials,_Conduction\carbon_fibers_infinite_elements.mph');
model=mphopen(mph);
for i=1:num_test
    tic;
    model.sol('sol1').runAll;
    sol_time(1,i)=toc;
    
    
    tic;
    model.sol('sol2').runAll;
    sol_time(2,i)=toc;

end
    figure(1);
    bar_plot_fun(sol_time(1,:),"Cal Time Cost:碳纤维编织结构的各向异性传热-sol1 曲线坐标计算");
    figure(2);
    bar_plot_fun(sol_time(2,:),"Cal Time Cost:碳纤维编织结构的各向异性传热-sol2 热传导计算");
%% 2、流体:毛细管填充(相场法)
% <http://cn.comsol.com/model/capillary-filling-1878 http://cn.comsol.com/model/capillary-filling-1878>              
% 
% 本例研究一个放置在装满水的蓄水池顶部的垂直细圆柱体。由于空气/水界面处的壁附着力和表面张力,水通过通道上升。
% 
% 在 MEMS  装置中,表面张力和壁附着力通常用于通过微通道输送流体,或者通过微量吸管测量、输送和放置少量流体。多孔介质中的多相流动和固体壁上的液滴是壁附着力和表面张力强烈影响流动动力学的另一个示例。
% 
% 为了对壁面上的黏附力进行正确建模,边界条件的处理非常重要。如果将壁上的速度固定为零,界面将无法沿壁移动。这就需要您允许非零滑移速度,并增加壁上的摩擦力。利用这样的边界条件,可以明确地设置接触角,即流体界面与壁之间的夹角。
% 
% 模型计算压力场、速度场以及水面的形状和位置,其中采用水平集方法或相场法来跟踪空气/水界面,并介绍如何增加摩擦力和指定通道壁的接触角。在整个仿真过程中,毛细力控制重力,因此界面在整个仿真过程中向上移动。                            
% 
% 

mph = strcat(comsol_dir,'\Multiphysics\applications\CFD_Module\Multiphase_Flow\capillary_filling_pf.mph');
model=mphopen(mph);
for i=1:num_test
    tic;
    model.sol('sol1').runAll;
    sol_time(3,i)=toc;
    bar_plot_fun(sol_time(3,:),"Cal Time Cost:毛细管填充(相场法)");
end
%% 3、结构&电磁:带屏蔽线圈的交流接触器
% <http://cn.comsol.com/model/ac-contactor-with-shading-coil-102771 http://cn.comsol.com/model/ac-contactor-with-shading-coil-102771>
% 
% 交流接触器是一种特殊类型的磁性开关装置,由交流电供电的初级线圈激活。与直流开关不同的是,这种装置可能会在交流电流过零时出现重新开启的趋势。通过增加一个支持相对于馈电线圈的延迟感应电流的屏蔽线圈,使它可以始终具有非零拉力,从而提供更稳定的闭合。
% 
% 

mph = strcat(comsol_dir,'\Multiphysics\applications\Structural_Mechanics_Module\Magnetomechanics\contactor_shading_coil.mph');
model=mphopen(mph);
for i=1:num_test
    tic;
    model.sol('sol1').runAll;
    sol_time(4,i)=toc;
    bar_plot_fun(sol_time(4,:),"Cal Time Cost:带屏蔽线圈的交流接触器");
end
%% *测试结果汇总*
%% 各项测试平均时间

bar_plot_fun(mean(sol_time,2),{"系统环境配置",...
                                strcat('CPU: ',system_info.CPUName), ...
                                strcat('内存: ',system_info.TotalMemory), ...
                                strcat('系统: ',system_info.OSVersion)
                                });
ylabel("各项测试平均耗时 s");
xlabel('测试项目');
%% 各项测试最短时间

bar_plot_fun(min(sol_time,[],2),{"系统环境配置",...
                                strcat('CPU: ',system_info.CPUName), ...
                                strcat('内存: ',system_info.TotalMemory), ...
                                strcat('系统: ',system_info.OSVersion)
                                });
ylabel("各项测试最短耗时 s");
xlabel('测试项目');
%% 本次测试整体耗时

disp(strcat('整个测试耗时:',num2str(sum(sum(sol_time))/60),' 分钟'));
save('html\data.mat','system_info','sol_time')

Matlab 对csv数据持续写入的方式

Matlab计算的数据保存有很多种方式,可以直接试用xlswrite函数讲数据保存成,也可以用csvwrite写成csv。

但是在你如果在某些循环计算中持续生成数据后然后实时写入csv中,dlmwrite函数是个比较好的方式。比以上两种方式速度快非常多,可以大量优化for循环效率。

dlmwrite('data.csv',data,'delimiter',',','-append');

COMSOL 参数化仿真自动导出报告

在使用COMSOL进行研究工作的过程中,涉及到很多需要对多组参数进行仿真,输出对应参数仿真结果的报告,在这个过程中可以使用COMSOL 提供的matlab脚本进行参数化结果的输出。

%% 0 清除所有数据
clear all;clc;
%% 1 打开mph文件
model = mphopen('FuelCell0825b.mph');

%% 2 输入需要参数化研究的参数
spacing_Outlet = [4000 1800 823 378 170 74.7 30.9];
width_Outlet = [992  625  394  248  156  98  62];

%% 3 for循环,对所有参数进行参数化研究仿真。
for N=3:9
    %% 3.1 设定参数
    model.param('par2').set('N', num2str(N));
    model.param('par2').set('spacing_Outlet', strcat(num2str(spacing_Outlet(N-2)),'[um]'));
    model.param('par2').set('width_Outlet', strcat(num2str(width_Outlet(N-2)),'[um]'));
    %% 3.2 运行研究
    model.sol('sol1').study('std1');
    model.sol('sol1').attach('std1');
    model.sol('sol1').runAll;
    %% 3.3 导出word报告
    model.result.report('rpt1').set('filename', ['E:\08 Science Compass\2208082536 ' native2unicode(hex2dec({'9e' 'c4'}), 'unicode')  native2unicode(hex2dec({'63' '2f'}), 'unicode')  native2unicode(hex2dec({'4e' '91'}), 'unicode') ' ' native2unicode(hex2dec({'71' 'c3'}), 'unicode')  native2unicode(hex2dec({'65' '99'}), 'unicode')  native2unicode(hex2dec({'75' '35'}), 'unicode')  native2unicode(hex2dec({'6c' '60'}), 'unicode') '\N=' num2str(N) '.docx']);
    model.result.report('rpt1').run;
    fprintf("Export N = %d",N)
end

小广告:COMSOL相关问题可以加琳泓大佬的群去找群友讨论

开放群:566811107
群一:836281296
群二:594368389
群三:1080606488
群四: 678357196

车灯仿真介绍03:雾气分析

在昼夜温差很大或者湿度很大的天气条件下,如果大灯出现雾气是一件让人非常恼火的事情,不仅影响了汽车大灯的透光率,照明效果又昏又暗,甚至可能很难看得清路面状况,也没有办法发出正确警示信号,对行车安全埋下了巨大的隐患。此外,大灯起雾还容易使大灯形成散光,不能正确地形成恰当的聚焦,对相对方向的车辆造成刺眼的光污染;更糟糕的是,它还容易对灯组的相关电气元件造成腐蚀等严重后果,破坏灯组的光学效果,长期以往会影响相关零部件的使用寿命。

车灯起雾的原因

1、汽车大灯结构设计原因:因汽车大灯腔内结构设计不同,温度场、流动场、材料的选用不同,起雾的概率也有所差别。灯泡附近的温度最高、远离灯泡的部位温度最低,大灯内部越规则,各部件之间的间隙越大,空气流通越好,就越不容易起雾。狭窄区域则恰好相反,气流无法流通,更容易在这些部位起雾。

2、大灯内部存在凝结核心:从物理的角度看,当尘埃等颗粒物进入大灯灯腔、配光镜或者灯罩内表面,都因为表面不光滑,从而为空气水分子找到凝结核心创造了条件。此外,大灯总成的密闭性变差,改装车辆的大灯时,遇到没有经验的小师傅,将大灯拆开又合上,湿润的水分子就很容易进入灯腔内。

3、外部环境变化:最常见的是,在车辆涉水或者暴雨过后下,发动机散热系统也是影响大灯是否会起雾的原因之一。因为在密闭的发动机舱内,水被高温的发动机舱蒸发成为大量水蒸气,容易通过通气管或通气孔渗透到汽车大灯灯组的内部。洗车时太过于暴力,拿高压水枪冲洗发动机舱,也是同样的道理,会加剧水分子进入灯腔的机会。

4、车灯密封性不好导致雾气:如果汽车大灯进水,从外表看并不是白茫茫的雾气,而是会在大灯灯罩上出现更大的水珠,在灯腔下部会看到明显的积水。这种情况主要是由于大灯总成的密封出现问题,或者直接是外壳出现破损、渗透以及破裂等情况。与大灯起雾容易自行消除不同,汽车大灯进水属于严重的维修问题,一般都很难修补,需要更换大灯总成才能彻底解决问题。

汽车行业对且车灯起雾问题提出的要求

从物理原理来说,热湿空气预冷,出现冷凝水凝结时常为难以避免的物理现象,但是从客户角度来说,起雾应该是一个尽量避免的现象。GB-10485中,我国的法规并未对车灯起雾方面提出详细的试验要求,但是各个汽车主机厂是都有各自的法规标准的,各家法规的总结如下:

1、淋雨试验条件下,不允许车灯起雾。(很多情况下,有些灯具是做不到这一点的)

2、车灯在某些实验条件下起雾,需要再室温无淋雨条件下点亮,一定时间内结雾完全消散消散

3、车灯在淋雨条件下起雾,点亮后规定时间内面罩上结雾面积,消散到5%面积以内。

车灯开发过程如何解决灯具起雾?

在于车灯结雾做长期斗争的过程中,有经验的工程师们总结出了一下几点策略:

  1. 加强灯具内外部空气对流,透气孔高低落差设计。
  2. 对于低温高湿度区域,防止低温区域的空气流动,或者加强该区域的空气流动来增强去雾能力。
  3. 防止易结雾区域温度过低。
  4. 调整机务区域的附近的装饰框边距,也可以将边角区域做一些花纹遮挡。

在车灯设计生产过程中,工程师们为了避免车灯产品出现结雾,在开发过程中有如下一些关注点:

1、设计过程

  1. 透气帽位置、布局上的设计分布。
  2. 装饰框与面罩的间隙。
  3. 面罩尖角位置背部的空间与换气设计。
  4. 易结雾区域加花纹等修改。

2、仿真分析

  1. 高湿度低温度区域的分布。
  2. 灯具内全局的气流的流向。

3、工艺过程

  1. 装配现场湿度。
  2. 灯罩内表面洁净状态。

车灯雾气仿真分析技术

1、基于稳态仿真的温湿度分析

温湿度的变化是湿气冷凝的必要条件,因此在车灯稳态分析中的温度场、湿度场、速度场等数据,可以为我们带来很多有用的信息,根据经验标准可以快速分析出结雾的风险区域。

2、基于瞬态仿真的液膜变化分析

新的液膜仿真技术可以模拟仿真气相水冷凝后,在物体表面产生的液相膜厚度变化。在这中模式中,我们可以模拟不同点灯时序逻辑,淋雨状态变化下的灯具冷凝液膜变化。因为需要计算随时间变化的瞬态过程,因此这类仿真相对稳态仿真需要耗费更多计算时间。但是相对结果更加直观,可以直接看到水气在车灯面罩上的结雾和除雾动态过程。

车灯仿真介绍02:热模拟分析

从汽车灯具的发展历史过程来说,汽车灯具经历过卤素灯、氙气灯、LED灯的潮流发展。无论是那种灯具,在研发设计过程中工程师们一直在面对着热设计方面的挑战;潮流设计趋势是灯具造型设计越来越复杂,光学方面的要求越来越高,间接的压缩了散热空间的设计,又提高了光源的功率要求,热学风险的确认在灯具设计过程中成为了一个非常重要的过程。

在车灯研发过程中,各个企业都研究出了一套自己的温度试验经验标准,不同的灯具有不同的试验要求,同样的灯还也有多个不同的试验流程,这些复杂的试验流程,将保证灯具在各种工况的使用下,保持灯具的热稳定性。

某汽车集团,对车灯提出的相关热试验要求:

在车灯设计过程中,为了能避免灯具在后续的热试验失败,工程师们将联合结构设计,材料选型,电路设计,散热设计等多个方面进行综合设计后,通过热仿真以及样件温度实验的方式来初步确定设计方案的可行性。在这个过程中,几个不同职位岗位的工程师将在一起头脑风暴去解决分析出的热风险。

在车灯热模拟分析中,工程师将会让灯具在最极限的工作环境温度下,模拟点亮各个光源后,得到各个主要零部件的模拟温度,进而用这些模拟结果来进行判断灯具的热风险,风险的关注有以下几个方面:

  • 塑料零部件是否会因温度过高出现软化失效?
  • 镀铝涂层是否会因高温出现变形脱落?
  • LED灯珠是否会的热衰过多,导致亮度无法满足光学要求?
  • PCB板上电子元器件是否会出现焊锡融化,导致元器件脱落?

以上疑问,都可以在车灯热模拟分析仿真中得到可靠的仿真结果,进行风险判定。

车灯仿真介绍01:太阳光聚焦仿真分析

透镜式设计带来的问题

透镜式的设计在车灯设计中在光学设计方面有独特的优势,同时在视觉效果上也给汽车带来了“画龙点睛”。但是在透镜大灯的普及应用中,出现了一些新的困扰。

透镜大灯在市场检验过程中,偶有反馈装饰框出现原因不明的条状区域烧伤,经过工程师们的分析,后来确定烧伤原因来自太阳光灼烧。

装饰框出现太阳光聚焦灼烧

透镜因为其凸透镜原理,可以对平行射入的太阳进行折射聚焦。如果在透镜下方正好设计存在一些辐射吸收率较好的零部件,将在辐射光斑区域产生高温区,进而发生灼烧损坏。

透镜的折射聚焦

设计流程中规避风险的方式

有了前车之鉴后,汽车灯具研发的工程师们,就开始考虑在灯具研发过程中对这种太阳光聚焦的风险进行规避。在灯具设计初期,可以通过数值仿真的方法,模拟太阳光聚焦对灯具零部件带来的聚焦效应;此外,在量产前可以用样件进行模拟太阳光照射的实验进行风险验证。

太阳光聚焦数值仿真
车灯模拟太阳光照射的试验

数值仿真聚焦分析

在太阳光聚焦仿真过程中,可以模拟太阳光在车灯前部左右90°,高度90°范围内的各个角度入射的太阳光,在灯具中的光线传播后,对灯具带来的热辐射吸收后的温度影响,从而快速分析太阳光聚焦的风险。

太阳光照射的方位角范围
数值仿真可以仿真各个角度太阳光照射下的光学、温度仿真
全角度扫描仿真后得到的装饰件最高温度表

【1】太阳光聚焦对汽车大灯的“作用”

【2】GMW 14906 Lamp Development and Validation Test Procedures