相关疑难解决方法(0)

函数在Fortran中返回数组

我的理解是你可以从Fortran中的函数返回一个数组,但由于某种原因,我的代码只返回我要求它返回的数组中的第一个值.这是功能:

function polynomialMult(npts,x,y)
    integer npts
    double precision x(npts), results(npts + 1), y(npts,npts)

    polynomialMult =  x(1:npts) + 1

end function
Run Code Online (Sandbox Code Playgroud)

这就是我所说的

 C(1:numPoints) = polynomialMult(numPoints,x,f)

print *, C(1:numPoints)`
Run Code Online (Sandbox Code Playgroud)

现在它没有做任何有用的事情,因为我在编写逻辑之前试图理解语法.我看到了一些关于为函数指定类型的东西,但是当我写的时候

integer function polynomialMult(npts,x,y)
Run Code Online (Sandbox Code Playgroud)

或者无论我得到编译错误.

arrays fortran function fortran90

22
推荐指数
1
解决办法
4万
查看次数

函数在fortran中,传入数组,接收数组

我有这个功能,如下所示.它传递两个向量,每个向量具有三个值,并且应该传递出一个具有三个值的向量.我把这个函数称为:

Fr       = Flux(W(:,i),W(:,i+1))
Run Code Online (Sandbox Code Playgroud)

我通过搞乱代码,尝试纯函数和模块,以及研究错误陈述(我将包括在底部)来实现的是,fortran正在读取我的函数Flux,并认为输入向量是一个尝试从数组中调用一个条目.对于发生的事情,这是我最好的猜测.我问实验室周围,大多数人建议使用子程序,但这看起来很笨重,我认为应该有更优雅的方式,但我还没有找到它.我试着通过说:

 DOUBLE PRECISION FUNCTION Flux(W1,W2) Result(FluxArray(3))
Run Code Online (Sandbox Code Playgroud)

然后返回fluxarray,但这不起作用,因为fortran无法理解语法

实际的功能是这样的:

DOUBLE PRECISION FUNCTION Flux(W1,W2)
USE parameters
IMPLICIT NONE
DOUBLE PRECISION, DIMENSION(3), INTENT(IN)::W1, W2
DOUBLE PRECISION, DIMENSION(3), INTENT(OUT):: Flux
DOUBLE PRECISION, DIMENSION(3):: F1, F2
DOUBLE PRECISION::U1,U2,Rh1,Rh2,P1,P2,E1,E2,Rh,P,u,c,Lambda
INTEGER:: k
U1=W1(2)/W1(1)
U2=W2(2)/W2(1)

Rh1=W1(1)
Rh2=W2(1)

P1=(gamma_constant-1.d0)*(W1(3)-.5d0*Rh1*U1**2)
P2=(gamma_constant-1.d0)*(W2(3)-.5d0*Rh2*U2**2)

E1=W1(3)
E2=W2(3)

F1=[Rh1*U1,Rh1*U1**2+P1,(E1+P1)*U1]
F2=[Rh2*U2,Rh2*U2**2+P2,(E2+P2)*U2]

Rh=.5d0*(Rh1+Rh2)
P=.5d0*(P1+P2)
u=.5d0*(U1+U2)
c=sqrt(gamma_constant*P/Rh)

Lambda=max(u, u+c, u-c)
do k=1,3,1
    Flux(k)=.5d0*(F1(k)+F2(k))-.5d0*eps*Lambda*(W2(k)-W1(k))
end do
RETURN
END FUNCTION Flux
Run Code Online (Sandbox Code Playgroud)

这是错误声明:

Quasi1DEuler.f90:191.51:

DOUBLE PRECISION, DIMENSION(3), INTENT(OUT):: Flux
                                               1
Error: Symbol 'flux' at (1) already has …
Run Code Online (Sandbox Code Playgroud)

fortran fortran90

5
推荐指数
1
解决办法
1215
查看次数

如何声明在Fortran中返回数组的函数的类型?

我有一个返回数组的函数,比方说

function f(A)
    implicit none
    real, intent(in) :: A(5)
    real, intent(out) :: f(5)

    f = A+1
end
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何f在主程序单元中定义?例如

program main
    implicit none
    real :: A(5)
    real, dimension(5), external :: f  ! does not work

    ...
end 
Run Code Online (Sandbox Code Playgroud)

fortran

4
推荐指数
1
解决办法
754
查看次数

将数组传入/传出程序 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
查看次数

标签 统计

fortran ×4

fortran90 ×2

arrays ×1

function ×1