(1)中的IF子句需要标量LOGICAL表达式

时间:2017-01-21 13:22:15

标签: fortran

我需要向Excel生成数据,并且我得到一个错误,无法确定命名常量。问题是当我希望yw使用if时,yw依赖于lp,如果lp为1或lp为50,那么我的{ {1}}等于yw,否则我必须更改y

这是代码

yw

现在错误看起来像这样:

program dane

parameter (ndim = 50)
dimension lp(ndim), x(ndim)
real*8, dimension (ndim):: y0,dy,y,yw
integer x,xmin, dx
real*8 a,b,c
a=0.2
b=-1.0
c=10.0
xmin=-20
dx=1
n=50
call randomize

open(1,file='dane_excel.csv')
lp=0
x=0
y0=0
dy=0
y=0
yw=0

do i=1,n,dx

  lp(i)=i;
  x(i)=xmin+(i-1);
  y0(i)=a*x(i)**2+b*x(i)+c
  call random_number(r)
  dy(i)=3*sqrt(y0(i))*(r-0.5)
  y(i)=y0(i)+dy(i)


  write(*,*)lp(i),';',x(i),';', y0(i),';',dy(i),';'
  write(1,*)lp(i),';',x(i),';', y0(i),';',dy(i),';'


end do

if (lp.eq.1) then 
yw(1)=y(1)
else if (lp.gt.1 .and. lp.lt.n) then 
     do j=2,n-1
        yw(j)=(y(j+1)+2*yw(j)+y(j-1))/4
     end do
else 
yw(n)=y(n)
end if



close(1)
read(*,*)
end

!***************************************
subroutine randomize
!***************************************
!   inicjowanie przypadkowych wartości poczatkowych generatorów liczb losowych
!   e.z. 13.10.2016
!***************************************
integer clock,seed(20)
integer*8 clock8
call system_clock(clock)    ! czas systemowy w milisekundach
call srand(clock)           ! ustawienie przypadkowej wartości geberatora irand

clock8=time8()             ! czas w sekundach  od 1.01.1970
call random_seed(size=n)   ! odczyt w ilu bajtach zapisane jest ziarno generatora
seed = clock + 37 * (/ (i - 1, i = 1, n) /)       ! przypadkowe wartości ziarna
call random_seed(put=seed(1:n))   ! zapisanie ziarna do generatora
return
end

0 个答案:

没有答案