小编arg*_*asm的帖子

在Fortran Makefile中自动排序对象文件"*.o"

这里我有两个Fortran90文件和一个makefile:

文件 main_mod.f90的内容:

module main_mod

contains

  subroutine add(a, b)
    implicit none
    integer, intent(in) :: a, b
    print *, (a+b)
  end subroutine add

end module main_mod
Run Code Online (Sandbox Code Playgroud)

文件 main_mod2.f90的内容

module main_mod2
  use main_mod

contains

  subroutine add2(a, b)
    implicit none
    integer, intent(in) :: a, b

    call add(a, b)
  end subroutine add2

end module main_mod2
Run Code Online (Sandbox Code Playgroud)

makefile中,我自动生成当前目录中的".o"文件列表:

F90 = /usr/bin/gfortran
COMPFLAGS    =  -c
%.o: %.f90
        $(F90) $(COMPFLAGS) $*.f90

all: $(patsubst %.f90,%.o,$(wildcard *.f90))
Run Code Online (Sandbox Code Playgroud)

当我创建项目时,make文件中的wildcard语句生成一个目标文件列表,如:

main_mod2.o main_mod.o
Run Code Online (Sandbox Code Playgroud)

然后编译失败,因为首先,需要编译main_mod.f90文件,这将给我们main_mod2.f90中使用的 …

dependencies fortran makefile wildcard

9
推荐指数
1
解决办法
3025
查看次数

指针阵列到一个不连续的数组部分

我可以有一个指向目标数组的不连续部分的指针数组吗?在以下程序中:

program test
  implicit none

  integer :: i
  integer, dimension(4), target :: orig
  integer, dimension(:), pointer :: ref

  orig = (/ (i , i = 1,4) /)

  ref(1:2) => orig(1:2)   
  ref(3:3) => orig(4:4)

  print *, 'orig = ', orig
  print *, 'ref = ', ref

end program test
Run Code Online (Sandbox Code Playgroud)

我希望指针ref指向(/1,2,4/)目标数组的不连续部分orig.代码编译时没有警告,但是输出不是所希望的:

code output:
 orig =            1           2           3           4
 ref =            4
Run Code Online (Sandbox Code Playgroud)

看起来编译器强制指针指向一个连续的子部分,即使我首先指向索引1:2但编译器只强制指向4:4.结果,我在末尾的指针只指向一个条目.

我可以将条目打包(/1,2,4/)到另一个数组中然后连续使用它,但这对于大数据集来说不是有效的Fortran编码.你知道怎么做这个吗?

arrays fortran pointers

3
推荐指数
1
解决办法
123
查看次数

标签 统计

fortran ×2

arrays ×1

dependencies ×1

makefile ×1

pointers ×1

wildcard ×1