有限单元法教学中编程能力的培养
2021-03-15谭晓慧侯晓亮马海春
谭晓慧 侯晓亮 马海春
[摘 要] 有限单元法是进行数值计算及解决工程问题的重要工具,“有限单元法”课程的教学包括理论教学、程序教学及软件教学。其中,程序教学是培养研究生编程能力及创新能力的重要途径之一。针对当前研究生“有限单元法”课程在程序教学方面存在的问题,分析总结了有限元教学程序的选择原则,建议选择简短完整、与学生的专业方向有关的程序作为有限元教学程序,提出了“以点带面,点面结合”的有限元程序教学模式及具体的教学方法。通过指导学生绘制有限元程序流程图、学习重点子程序的编程、运行并修改有限元程序、小组交流与讨论等方式来组织教学,可以有效激发研究生学习“有限单元法”课程的热情,加深对有限单元法理论知识的理解,提高研究生的编程能力及创新能力。
[关键词] 有限单元法;教学;研究生;编程;程序
[中图分类号] G642.0 [文献标识码] A [文章编号] 1674-9324(2021)03-0161-04 [收稿日期] 2020-10-16
一、引言
有限单元法是一种重要的数值模拟方法,基于有限单元法的多种商用软件(如ANSYS、ABAQUS、NASTRAN及AIDNA等)已广泛应用于地质、岩土、水利、力学等多种工程领域。随着工程技术及国家工程建设的发展,有限单元法已经成为分析复杂工程问题的重要手段,运用有限单元法解决工程难题、进行科学研究是大多数工科专业研究生必备的基本能力之一[1,2]。有限单元法综合运用了线性代数、矩阵论、数值分析、微分方程、弹塑性力学及计算机编程等知识,要求学生具有良好的数学及力学功底,是一门理论性很强的课程。同时,通过有限单元法课程的教学,应使学生能够灵活应用理论知识解决工程实践中出现的问题。因此,“有限单元法”是将理论知识运用于解决工程实践问题的重要工具,是培养研究生创新能力的一门重要课程。在教学时数有限的情况下,“有限单元法”课程教学中常常存在偏重理论讲解或偏重有限元商用软件的使用训练这两种情况,二者的共同特点是忽视了对有限元程序的教学。有限元程序是理论与软件之间的桥梁[3-5],忽视对有限元程序的教学会使学生无法理解理论公式与有限元软件之间的关系,这不利于培养研究生的创新能力。为了提高教学效果,一些高校对“有限单元法”课程的教学方法进行了改革与探索。例如,文献[6]采取“实践应用—理论—实践应用”的三步逆向教学法来组织教学,在教学中注重对学生编程能力的培养。文献[7]将科学计算语言MATLAB应用于有限单元法的教学,利用该语言的公式推导及图形处理功能来辅助教学,提高学生的学习兴趣和编程能力。文献[8]指出在教学中应利用多种手段来强化学生的编程能力及软件应用能力。文献[9]提出利用开源编程学习工具FreeMat及开源有限元工具箱CALFEM来进行有限单元法课程的教学。这些教改实践均强调了在“有限单元法”课程教学中应重视训练学生的编程能力。但是在具体的教学实践中如何进行程序教学、如何提高学生的编程能力等问题仍有待进一步探索。为此,笔者根据多年的教学经验,以地质工程专业研究生的“有限单元法”课程教学为例,从有限元教学程序的选择及教学过程的组织等方面进行探讨,提出一些具体的教改措施。
二、有限元教学程序的选择原则
为了克服传统教学方法中存在的问题,培养研究生的编程及创新能力,在教学过程中,应该以“理论讲解、程序验证、软件计算”相结合的方式来组织教学[3],其中程序教学是关键的一环。通过程序教学,可以将理论知识程序化,令枯燥的理论知识鲜活起来。学生通过编程训练,可以体会到理论知识在整个有限元程序框架中的位置及作用,加深对有限元理论公式的理解,这样可以进一步提升学生对有限元理论知识学习的热情。进行有限元程序教学的前提是合理选择有限元教学程序。多年的教学实践表明,多数学生喜欢学习使用有限元软件,但对有限元程序的学习有畏难情绪,主要原因是很多有限元教学程序篇幅较长,采用的编程语言较旧,程序中包含很多非结构化语句,不便于理解及阅读;程序对应的理论知识点众多,学生难以把握重点。因此,我们可以按如下原则选择有限元教学程序。
1.有限元教学程序应简短而完整,这是保证教学效果的重要前提。简短是指有限元教学程序的主体部分要简洁,使学生在较短的时间内就可以了解程序的大体结构及各部分的主要内容。完整是指有限元教学程序应该包括网格划分、设定边界条件、单元分析与组装、平衡方程的求解、应变及应力的计算等有限单元法的主要计算步骤。这样可以让学生了解有限元程序的全貌,起到高屋建瓴的作用。
2.有限元教学程序应该包括理论教学中的重要知识点,以便将理论知识与程序教学相结合。例如,理论讲解中若包含某种屈服准则及材料的本构关系,则教学程序中也应包含相应的内容,以便将理论知识与编程实践相对应。上一条准则与本条准则分别对有限元程序教学提供了“面”及“点”的教学条件。通过“点面结合、以点带面”的方式,既可让学生了解有限元程序的整体框架,亦可让学生学习重要的知识点。
3.有限元教学程序应该与学生的专业方向有关,学生可以采用该程序对所学专业的简单工程实例进行有限元计算。在了解程序结构的基础上对专业算例进行计算,可以让学生切身体会理论知识的实用价值。学生有一种成就感后,反过来会促使自己投入更多的时间与精力来学习有限元的理论,提升其对理论知识的学习兴趣。
综上所述,在对地质工程专业研究生进行“有限单元法”课程教学时,选择了文献[10]中3节点三角形单元的平面应力分析程序,以及平面应变问题的承载力分析程序、边坡稳定性分析程序和土压力分析程序作为主要教学程序。这些程序的长度约在两页A4纸的范围内,程序由结构化科学计算语言VISUAL FORTRAN编写,可读性强,操作方便,而且这些程序适用于地质工程中求解地基承載力、挡土墙背土压力及边坡稳定性分析等典型工程算例。
三、有限元程序的教學方法
为了提高学生的编程能力及创新能力,在有限元程序教学方面,我们通过“点面结合,以点带面”的方式来组织教学,既注重引导学生对有限元程序整体结构的学习,也注重学生对重要理论知识点的学习。一方面,只有从总体上了解了有限元程序的结构,才能真正理解有限单元法求解工程问题的具体过程,否则,若只学习若干知识点,则可能会陷入“盲人摸象”的误区。另一方面,有必要学习与有限单元法基本原理及专业应用相关的重要知识点对应的程序模块,学习其具体的编程方法与技巧。创新的前提是模仿,对这些重要知识点的学习与模仿是培养学生编程及创新能力的重要保证。对有限元程序教学的具体方式如下。
程序主体结构的教学(“面”的教学),其主要教学方法是引导学生绘制有限元程序流程图,让学生绘制程序流程图是了解有限元程序总体结构的好办法,通过绘制程序流程图可以学习有限元程序的一般框架与编程技巧。在引导学生学习有限元程序的主体结构时,需提醒学生重点在于了解有限元主程序中各程序模块的功能、主要子程序的作用、输入及输出参数,此时不必纠结于程序的编程细节。这样,学生可以节省学习时间,不被各种子程序的具体内容所干扰,将精力放在学习有限元程序的主要功能模块上,提高学习效率。子程序的教学(“点”的教学)对于重要的理论知识点,要求学生阅读子程序的具体内容,找出子程序中语句与理论公式的对应关系。一般而言,子程序只对应某种具体的功能,程序较短,学习难度大大降低了。还有一些子程序只涉及较多的数学知识(如大型线性方程组的求解等),在学习时只需了解该子程序的作用,不必学习该类子程序的具体内容。通过这种方式,可以让学生把精力放在学习与有限元理论和具体专业关系密切相关的知识点上,了解将这些理论公式转化为程序的具体过程。当学生有创新想法时,可在对这些子程序学习的基础上进行模仿与创新。运行并修改有限元程序,在引导学生阅读有限元程序的同时,要求学生进行程序的编译与运行。学生在编译及调试程序时遇到并解决问题的过程有助于他们对有限元理论知识的学习与理解;有了程序的运行结果会让学生有成就感,极大地提升了学生学习的积极性;将简单有限元教学程序的运行结果与商用有限元软件的计算结果进行对比,可以让学生体验程序与软件的差别,教师可以在此基础上进一步介绍理论分析的重要性,激发学生的创新精神。在运行有限元程序的基础上,教师可以布置简单的编程任务,如:根据研究生的具体研究方向及研究课题,让学生修改简单有限元教学程序中的边界条件及材料的本构关系等,这种简单的编程模仿是训练学生编程能力的重要手段。小组配合:上述教学方式可将复杂的有限元程序教学任务分解成若干个容易实现的小任务。但是由于有限元程序涉及的内容及知识点众多,让学生独自完成上述各项任务的难度很大。在教学实践中,我们将学生分成若干小组,每组3~4人,给每组分配一个独立的有限元教学程序。绘制流程图的任务由组员在课余共同探讨,合作完成。多个子程序的学习及程序调试等任务则由不同学生在课余分别完成。学生完成各项任务之后,教师在课堂上组织交流与讨论,每组选一位同学汇报主程序的流程结构,其他同学汇报各主要子程序的内容、编程要点及它们与理论知识点的对应关系。教师在学生汇报的基础上进行点评,各组学生之间也进行相互点评。通过这种教学互动,学生对绘制的流程图初稿进行改进,分析总结有限元程序的基本框架与功能模块。近年来的有限单元法教学实践表明,通过这种互助学习的方式,可以充分发挥学生学习程序的主观能动性及团队协作精神,切实提高了学生的编程能力。
四、结语
“有限单元法”课程是进行数值计算、解决工程实际问题的重要工具,该课程中的程序教学是培养研究生创新能力的重要途径之一。针对当前研究生“有限单元法”课程教学实践中程序教学上存在的问题,分析了有限元教学程序的选择原则,提出了“以点带面,点面结合”的有限元程序教学模式。教学实践表明,通过指导学生绘制有限元程序流程图、学习重点子程序、运行并修改有限元程序、小组交流与讨论等方式,可以有效激发研究生学习“有限单元法”课程的热情,加深对有限单元法理论知识的理解,提高研究生的编程能力及创新能力。
(课题组成员:谭晓慧、侯晓亮、马海春、马雷)
参考文献
[1]杨帆,王莉华,赵金峰.有限元仿真的一堂课——兼说实例驱动型启发式教学法[J].力学与实践,2019,41(4):463-469.
[2]金浩,周顺华,杨新文.地下铁道方向本科生有限单元法授课方式探讨[J].大学教育,2019,104(2):51-53.
[3]谭晓慧,侯晓亮,查甫生.有限单元法课程教学探索[J].教育教学论坛,2014(41):185-187.
[4]江巍,刘章军,吴勃.土木工程专业研究生有限单元法课程教学改革初探[J].教育教学论坛,2020(1):170-173.
[5]李元松,王亚军,王章琼,等.案例引导的有限单元法课程教学方法改革与实践[J].高等建筑教育,2018,27(6):110-116.
[6]黄明,石宪章,刘春太.《有限元法》课程逆向教学法探析[J].高教论坛,2013(3):83-85.
[7]徐荣桥,杨仲轩,吕朝锋.MATLAB在有限元教学中的应用与实践[J].力学与实践,2010,32(102):101-103.
[8]JENSEN D,PRAMONO E. Method for teaching finite elements which combines the advantages of commercial pre- and postprocessing with student-written software[J].Computer Applications in Engineering Education,2015,6(2):105-114.
[9]SISWANTO WA,DARMAWAN AS.Teaching finite element method of structural line elements assisted by open source freemat[J].Research Journal of Applied Sciences,Engineering and Technology,2012,4(10):1277-1286.
[10]SMITH IM,GRIFFITHS DV,MARGETTS L.Programming the Finite Element Method[M].New Jersey:John Wiley&Sons Ltd,2014.