试了一下chatGPT,居然懂COMSOL!
http://wenzhang.zhuluan.com/zh-cn/

也有不准确的地方

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

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


小广告:COMSOL相关问题可以加琳泓大佬的群去找群友讨论
开放群:566811107
群一:836281296
群二:594368389
群三:1080606488
群四: 678357196
试了一下chatGPT,居然懂COMSOL!
http://wenzhang.zhuluan.com/zh-cn/
也有不准确的地方
懂的挺多,但是解释了,又没有完全解释。
然后进一步问了一些数学相关的问题。额,概率论应该是不相关吧?
小广告:COMSOL相关问题可以加琳泓大佬的群去找群友讨论
开放群:566811107
群一:836281296
群二:594368389
群三:1080606488
群四: 678357196
chatGPT前段时间爆火,引起了全网讨论,可以在B站看到很多UP展示了怎样适用chatGPT的过程。前段时间没空研究,今天突然想到了继续去研究下python怎么搞图片水印的时,然后就想到了chatGPT学习一下,可惜国内IP不能适用了,找到了一个国内镜像站,分享一下:http://wenzhang.zhuluan.com/zh-cn/
不得不说,chatGPT对于我这种学习的新手来说,属实是很好的老师了。抛砖引玉的给出能给出主题框架的代码,然后基于给出的代码基础上进行细节的丰富。这样ctrl+C,ctrl+V的效率就更高了。
正好笔记本上装了黑苹果,就对COMSOL效率测试脚本进行些修改,成功在三个平台上运行了测试。
这也为我后续的工作提出了一个思路,后面可以自己几个主要的计算工作站,都安装Ubuntu Server,然后开发一个Matlab App,然后要计算的东西,进入Matlab Web App调用进行计算,这效率真是杠杠的,美滋滋~~~
偶然在逛B站逛到的有意思的说唱歌手 阿张。
用自己写的Matlab批量计算脚本测试了几个COMSOL案例库的仿真耗时,这个目前这个结果是有点迷。我那个7950x的优势感觉不是很明显啊,心痛我花的钱~!另外感觉3900x在某些计算中,有迷之优势。
今年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计算的数据保存有很多种方式,可以直接试用xlswrite函数讲数据保存成,也可以用csvwrite写成csv。
但是在你如果在某些循环计算中持续生成数据后然后实时写入csv中,dlmwrite函数是个比较好的方式。比以上两种方式速度快非常多,可以大量优化for循环效率。
dlmwrite('data.csv',data,'delimiter',',','-append');
前两周的时候,发现自己辞职在家SOHO快一年了,哈哈哈。
离职不是一时冲动。令人窒息的办公室氛围,对理想的向往,都在让我考虑何时能从这个地方抽身。但是在本地没有理想的工作,我作为恋家的独生子,也不想去外地工作,在这些纠结之中,无法抽身。最后在某个小会议室里和HR突然爆发的争吵,让我突然就释怀了。我决定了辞职。
然后就是写邮件提交书面申请,整理交接材料,然后HR约谈,和老板谈,大老板谈,最后我主动约谈老板,摊牌了我的理想,也表明了不想回头的决心。然后老板满足了我半个月离职的心愿。在整个过程中我是从一开始的被动约谈,到后面的主动出击,然后在我给自己定好的谈判策略下如愿以偿的达成了我的目标:快速离职,也将原来的工作谈成了可以让双方作为一个过渡的兼职。
在公司最后几天的时候,站在窗口看着园区的内道,想着几年前的自己,年轻气盛,妄想着自己能在职场靠着做最优秀的技术一路做上去。时过境迁,现在却是带着一种阅尽职场心酸心境下离开。
在家里办公最开始的第一周,我还是给自己的工作节奏定的挺明确的,保持原来的工作节奏,8点半坐到电脑前开始工作,中午到了十二点就喊一声“我下班啦!”,然后走到餐厅准备吃饭。然后第二周就开始崩了,基本睡到九十点起。
不过运气好的是,工作节奏并没崩。感谢某位大佬的介绍,认识了一群新的工作伙伴,在和新的工作伙伴共事配合下,工作节奏也越来越顺,当然,也挣到了一些钱。
在最开始的目标,是想出来尝试着找条路做软件产品。现在这个阶段来看,像是个笑话,市场的不成熟,技术的不明确,这个目标应该更多放在计划本的底部。现阶段来说更多是发挥自己的核心优势,做一些力所能及的事,并不断学习,保持自己技术优势。
不过想起来呢,也是做了一些事的,最主要的就是,摸索了搭建了一套自己的工作室软硬件系统。其中包括:
总的来说,这一年发生的事,很多时候感觉自己很幸运,同时,自己也是比较努力的,所以也是自己抓住了这些幸运。
没有特别幸运,请特别努力。
在使用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