小编d_1*_*999的帖子

Fortran reshape - N 维转置

我正在尝试在 Fortran 中编写一些代码,这需要重新排序 n 维数组。我认为重塑内在与order参数应该允许这样做,但是我遇到了困难。

考虑以下最小示例

program test
    implicit none
    real, dimension(:,:,:,:,:), allocatable :: matA, matB
    integer, parameter :: n1=3, n2=5, n3=7, n4=11, n5=13
    integer :: i1, i2, i3, i4, i5

    allocate(matA(n1,n2,n3,n4,n5)) !Source array
    allocate(matB(n3,n2,n4,n1,n5)) !Reshaped array

    !Populate matA
    do i5=1, n5
       do i4=1, n4
          do i3=1, n3
             do i2=1, n2
                do i1=1, n1
                   matA(i1,i2,i3,i4,i5) = i1+i2*10+i3*100+i4*10000+i5*1000000
                enddo
             enddo
          enddo
       enddo
    enddo

    print*,"Ad1 : ",matA(:,1,1,1,1),shape(matA)
    matB = reshape(matA, shape(matB), order = [3,2,4,1,5])
    print*,"Bd4 : ",matB(1,1,1,:,1),shape(matB) !Leading …
Run Code Online (Sandbox Code Playgroud)

fortran transpose memory-layout multidimensional-array reshape

5
推荐指数
2
解决办法
2403
查看次数

将数组传入/传出程序 Fortran 90 的函数

我正在尝试将数组传递到函数中,以便能够计算将替换该数组中的原始值的新值。但是,我不断收到返回的零,我不知道为什么。我的代码如下:

program HW10
    implicit none
    integer :: i
    integer, parameter :: &
    p=38      !lines to read
    real, parameter :: &
    g=9.81    !Value of gravity acceleration
    integer , dimension(p) :: direction, speed, rh, speedconv
    real, dimension (p) :: pressure, height, temp, dewpt, mixr
    real :: average, knots

    open(1,file='HW10input.txt', status='old', action='read')

    10 format (F6.1, T9, F6.1, T16, F5.1, T23, F5.1, T33, I2, T38, F4.2, T46, I3, T53, I3)

    do i=1,p
        read(1,10)pressure(i), height(i), temp(i), dewpt(i), rh(i), mixr(i), direction(i), speed(i)
    end do


    close (1) …
Run Code Online (Sandbox Code Playgroud)

fortran

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