Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用FORTRAN高效搜索数组_Fortran_Numerical Methods_Finite Element Analysis - Fatal编程技术网

用FORTRAN高效搜索数组

用FORTRAN高效搜索数组,fortran,numerical-methods,finite-element-analysis,Fortran,Numerical Methods,Finite Element Analysis,我试图以稀疏格式将刚度矩阵存储在FORTRAN中以节省内存,即,我使用三个非零元素向量irows、icols、A。确定这些数组的大小后,下一步是在其中插入值。所以我使用高斯点,也就是说,对于每个高斯点,我要找出局部刚度矩阵,然后把这个局部刚度矩阵插入到全局irows,icols,A中 这种插入的主要问题是,每次我们都必须检查全局数组中是否存在新值,因此,如果该值存在,则将新值添加到旧值中,如果不存在,则将其追加到末尾。i、 我们必须搜索整个数组,以找到该值是否存在。如果这些数组的大小irows、

我试图以稀疏格式将刚度矩阵存储在FORTRAN中以节省内存,即,我使用三个非零元素向量irows、icols、A。确定这些数组的大小后,下一步是在其中插入值。所以我使用高斯点,也就是说,对于每个高斯点,我要找出局部刚度矩阵,然后把这个局部刚度矩阵插入到全局irows,icols,A中

这种插入的主要问题是,每次我们都必须检查全局数组中是否存在新值,因此,如果该值存在,则将新值添加到旧值中,如果不存在,则将其追加到末尾。i、 我们必须搜索整个数组,以找到该值是否存在。如果这些数组的大小irows、icols、A很大,那么这种搜索在计算上非常昂贵


有谁能建议一种更好的方法,为每个高斯点插入局部刚度矩阵,即全局刚度矩阵。

如果使用预排序的数据结构,搜索它将非常有效。作为主数据结构或辅助数据结构。您需要一个可以在中间插入另一个条目的条目。例如,二叉搜索树http://en.wikipedia.org/wiki/Binary_search_tree.

如果使用预先排序的数据结构,搜索它将非常有效。作为主数据结构或辅助数据结构。您需要一个可以在中间插入另一个条目的条目。例如,二叉搜索树http://en.wikipedia.org/wiki/Binary_search_tree.

我相当肯定这是FEM分析中的一个众所周知的问题-我在这篇文章中找到了它的参考,但当然这些原则是独立于语言的。基本上你应该做的是按照你现有的格式创建你的矩阵,但是不要搜索矩阵来查看条目是否已经存在,只要假设它不存在就行了。这意味着您将得到重复的条目,这些条目需要加在一起才能得到正确的值


一旦你构建了你的矩阵,你通常会将它转换成更有效的形式来求解它,例如-确切的格式可能由你使用的稀疏解算器决定。在这个转换过程中,重复的条目应该被添加到一起——一些稀疏矩阵库将为您完成这项工作。我知道scipy可以做到这一点,它的许多内部例程都是用fortran编写的,所以您可以使用其中一个,它们都是开源的。或者您可以检查是否有任何合适的选项处于启用状态。

我相当肯定这是FEM分析中的一个众所周知的问题-我在本文中找到了它的参考,但当然,这些原则与语言无关。基本上你应该做的是按照你现有的格式创建你的矩阵,但是不要搜索矩阵来查看条目是否已经存在,只要假设它不存在就行了。这意味着您将得到重复的条目,这些条目需要加在一起才能得到正确的值


一旦你构建了你的矩阵,你通常会将它转换成更有效的形式来求解它,例如-确切的格式可能由你使用的稀疏解算器决定。在这个转换过程中,重复的条目应该被添加到一起——一些稀疏矩阵库将为您完成这项工作。我知道scipy可以做到这一点,它的许多内部例程都是用fortran编写的,所以您可以使用其中一个,它们都是开源的。或者,您可以检查是否有任何合适的选项处于打开状态。

那么,是哪一个?FORTRAN 90或FORTRAN 77?我正在使用FORTRAN 90,但我认为即使你能建议使用FORTRAN 77,它也会起作用。你可能想看看Tim Davis的书,这本书解释了稀疏数组是如何实现的。那么,是哪本?FORTRAN 90或FORTRAN 77?我正在使用FORTRAN 90,但我认为即使您可以建议使用FORTRAN 77,它也会起作用。您可能想看看Tim Davis的书,该书解释了稀疏数组是如何实现的。