ABAQUS有一个非常大的单元库,含有多种类型单元,可以满足各种复杂的力学分析。相比于写一个完整的有限元求解程序,在一些现有程序的基础上编写用户单元可以大大降低开发成本、缩短开发时间,并且可以充分利用ABAQUS提供的强大的前后处理能力。此外,ABAQUS内置的求解器的效率非常高,求解非线性问题具有很好的收敛性,这也使得用户单元子程序具有非常广的应用前景,是一个很好的助力科研和工程的工具。......
2023-11-03
Fortran语言提供了5种内在的数据类型,也可以根据需要来自定义数据类型。这5种固有的类型为整型、实型、复数型、逻辑型和字符型。
1.整型
整型(整数类型)变量只能容纳整数数值。示例如下:
当编译并执行上述代码后,将输出4字节的整型变量所能保存的数的最大值,结果如下:
说明:这里使用了Fortran语言内置的函数huge(),它可以得到特定的整型变量所能保存的最大的数值。
此外,在声明整型变量时,还可以指定变量使用的字节数(占据的存储空间)。示例如下:
当编译并执行上述代码后,可以得到输出结果如下:
从这个例子也可以看出,默认的整型变量用4字节来存储。
2.实型
实型(实数类型)变量存储的是浮点数,如1.0,3.1415,-214.243等。实型又可以分为两种不同的类型,即默认实型(又称单精度实型)和双精度实型,它们的区别是存储的长度不同,从而导致浮点数的精度不同。示例如下:
当编译并执行上述代码后,将输出结果如下:
3.复数型
复数型变量通常用于存储复数变量。一个复数由实部和虚部构成。在Fortran语言中,用两个连续的实数来存储复数的这两部分。例如,用(2.0,-1.0)表示复数2.0-1.0i。示例如下:(www.chuimin.cn)
当编译并执行上述代码后(忽略了程序开头和结尾),将输出结果如下:
4.逻辑型
逻辑型变量只有两个逻辑值,即.true.和.false.。示例如下:
当编译并执行上述代码后(忽略了程序的开头和结尾),将输出结果如下:
这里T代表.true.。
5.字符型
字符型变量用于存储字符和字符串。字符串的长度可以通过len来指定,如果没有指定长度,则其长度是1。示例如下:
运行后,表达式“name(1:4)”将得到子串“Wang”。
说明:Fortran语言允许隐式地定义数据类型,也就是说,不必在使用前声明变量的类型。如果一个变量没有声明类型而被直接使用了,则将根据其名称的第一个字母来确定其类型。以字母i、j、k、l、m、n为首字母命名的变量被认为是整型变量,首字母为其他字母的变量都是实型变量。
但是一般不建议这样来编写代码,因为这样很容易把某些变量使用错误,而得到错误结果却很难被发现。我们应该声明所有变量的类型,这样才是一个良好的编程习惯。因此,建议在程序的开始加上如下语句:
这条语句将关闭隐式数据类型的声明。此时如果程序中有未声明的变量,则程序在编译时会报错,从而可以被及时被发现并改正。
有关基于ABAQUS的有限元子程序开发及应用的文章
ABAQUS有一个非常大的单元库,含有多种类型单元,可以满足各种复杂的力学分析。相比于写一个完整的有限元求解程序,在一些现有程序的基础上编写用户单元可以大大降低开发成本、缩短开发时间,并且可以充分利用ABAQUS提供的强大的前后处理能力。此外,ABAQUS内置的求解器的效率非常高,求解非线性问题具有很好的收敛性,这也使得用户单元子程序具有非常广的应用前景,是一个很好的助力科研和工程的工具。......
2023-11-03
蠕变是固体材料在保持应力不变的条件下,应变随时间延长而增加的现象。由于蠕变,材料在某瞬时的应力状态一般不仅与该瞬时的变形有关,而且与该瞬时以前的变形过程有关[24]。虽然Abaqus/Standard提供了丰富的蠕变本构模型,但Abaqus/Explicit还没有关于蠕变的本构模型。然而,对于一些特定的问题,采用Abaqus/Standard很难求解收敛,此时不得不借助Abaqus/Explicit进行求解,如果其中涉及的材料具有较为明显的蠕变特性,则需要借助VUMAT在Abaqus/Explicit中实现蠕变本构模型[26]。......
2023-11-03
在基于线程的并行计算中,对于公共空间的变量或者共享的资源,需要进行额外的保护。它们的编号为1~10,开发者可以通过它们的编号进行使用。初始化互斥锁的最佳位置在子程序uexternaldb中。示例如下:经过上面代码的计算,1号互斥锁(#1)就可以在其他要被调用的用户子程序中使用了,以保护对共享公用块中变量的访问,防止其被多个互相竞争的线程同时访问而造成破坏。......
2023-11-03
不同于基于线程的并行计算,MPI实现的并行是进程级的。基于MPI的用户子程序的并行计算,总是通过一些特定的函数来实现,先简单介绍一下这些函数:●MPI_Init:告知MPI系统进行所有必要的初始化设置。它写在启动MPI并行计算的最前面。以上只是表达了作为一个MPI并行计算的基本结构,并没有真正涉及进程之间的通信,为了更好地进行并行,必然需要在进程间通信。下面给出一个具体的基于MPI的并行计算的例子:......
2023-11-03
当一个含有用户子程序的模型被提交给ABAQUS分析时,正确的编译和链接命令应该被自动执行。对于不同的运行平台,ABAQUS正确的编译和链接命令默认存储在环境文件中,这个文件位于abaqus_dir/site目录下,这里的abaqus_dir是ABAQUS的安装目录。如果想将子程序提供给他人使用,但不希望他人看到子程序的源代码,在这种情况下,可将子程序的源码编译成obj文件提供给他人。这个目标文件可以运行子程序,但不会显示源代码。......
2023-11-03
相较于Fortran语言,C++语言的一大优势是含有丰富的外部库,可以满足各种计算需求,能大大提高开发子程序的效率。第1章已经简单介绍了使用外部库的好处,并通过一个简单的例子说明了使用外部库可以提高代码的可读性。本节以数值计算库armadillo为例来介绍如何在C++语言中调用外部库。如果没有进行这一步骤,则在运行中会弹出报错消息框并退出,而且弹出的是BLAS库的消息框。不过,在armadillo库中使用一维数组对矩阵进行初始化时是列优先的。......
2023-11-03
用户子程序UELMAT的接口和用户子程序UEL的接口相似,具体如下:与用户子程序UEL不同,用户子程序UELMAT可以直接调用ABAQUS内置的材料模型,这样我们可以在编程时重点考虑在单元层面的实现上,而无须考虑复杂的材料实现。为了在模型中使用用户子程序UELMAT,需要在模型的inp文件中添加接口,以指明哪些单元需要使用用户子程序UELMAT计算其单元刚度矩阵和右手边残差向量。......
2023-11-03
Fortran语言主程序的语法示例如下:接下来,以一个简单的Fortran语言程序为例,介绍Fortran语言程序的基本结构。完整的程序代码如下:在上面的Fortran语言程序中,代码后添加了相应的注释,这有助于我们很好地理解程序的逻辑和流程。除了字符串常量外,Fortran语言不区分字母的大写和小写。对此,很多习惯使用其他程序语言的编写者在转而使用Fortran语言编程时会有不适应,导致耗费很多时间用于调试一些低级错误。......
2023-11-03
相关推荐