我的理解是你可以从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)
或者无论我得到编译错误.
我有这个功能,如下所示.它传递两个向量,每个向量具有三个值,并且应该传递出一个具有三个值的向量.我把这个函数称为:
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) 我有一个返回数组的函数,比方说
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) 我正在尝试将数组传递到函数中,以便能够计算将替换该数组中的原始值的新值。但是,我不断收到返回的零,我不知道为什么。我的代码如下:
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)