Fortran Coder

标题: 我是新手,请问各位大神们,这个子程序是在做的什么循... [打印本页]

作者: 王二小    时间: 2018-5-1 17:13
标题: 我是新手,请问各位大神们,这个子程序是在做的什么循...
[Fortran] 纯文本查看 复制代码
SUBROUTINE multi_to_single(multi_array,simple_array)
USE mytype; USE params
IMPLICIT NONE
INTEGER      :: int_auxil
INTEGER      :: mm_sub, nn_sub
COMPLEX (dp) :: multi_array(-4:1,-4:num_max)
COMPLEX (dp) :: simple_array(1:length_coeff)
!
int_auxil = 1
DO nn_sub = -4, 1  
       DO mm_sub = -4,num_max         
               simple_array(int_auxil)=multi_array(nn_sub,mm_sub)      
               int_auxil = int_auxil+1
       END DO
END DO
   
!
return
END SUBROUTINE multi_to_single

作者: 王二小    时间: 2018-5-1 21:19
帮忙看一下呀
作者: li913    时间: 2018-5-1 21:52
二维转为一维存储。直接用reshape函数就是。
作者: 王二小    时间: 2018-5-2 00:22
li913 发表于 2018-5-1 21:52
二维转为一维存储。直接用reshape函数就是。

恩恩,谢谢。我这个子程序下边还有一个一维转二维的子程序,请问这样转来转去是干嘛呢?您看看这两个
[Fortran] 纯文本查看 复制代码
SUBROUTINE multi_to_single(multi_array,simple_array)
USE mytype; USE params
IMPLICIT NONE
INTEGER      :: int_auxil
INTEGER      :: mm_sub, nn_sub
COMPLEX (dp) :: multi_array(-4:1,-4:num_max)
COMPLEX (dp) :: simple_array(1:length_coeff)
!
int_auxil = 1
DO nn_sub = -4, 1  
       DO mm_sub = -4,num_max         
               simple_array(int_auxil)=multi_array(nn_sub,mm_sub)      
               int_auxil = int_auxil+1
       END DO
END DO

!
return
END SUBROUTINE multi_to_single
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
SUBROUTINE single_to_multi(simple_array,multi_array)
USE mytype; USE params
IMPLICIT NONE
INTEGER      :: int_auxil
INTEGER      :: mm_sub, nn_sub
COMPLEX (dp) :: simple_array(1:length_coeff)
COMPLEX (dp) :: multi_array(-4:1,-4:num_max)
!
int_auxil = 1
DO nn_sub = -4, 1
    DO mm_sub = -4,num_max
           multi_array(nn_sub,mm_sub)=simple_array(int_auxil)
               int_auxil = int_auxil+1
     END DO
END DO   
return
END SUBROUTINE single_to_multi



作者: 王二小    时间: 2018-5-2 05:37
li913 发表于 2018-5-1 21:52
二维转为一维存储。直接用reshape函数就是。

是不是多维输入,转一维进行计算,使计算变得简便,算完了再转多维输出,是这样吗?
作者: fcode    时间: 2018-5-2 08:05
有很多可能会让程序员有这种想法。比如它有个函数只识别二维输入,但它其他部分的计算都用的一维。
又不想改代码,嫌麻烦,就转一下。

实际上,reshape完全可以代替这俩函数。
这个程序作者为啥这么做?一个原因可能是这代码很老,当时还没有 reshape 函数。二个原因可能是作者对语法函数也不熟悉




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2