Fortran错误:数组引用中的排名不匹配(1)(2/1)

时间:2016-11-21 15:33:50

标签: arrays fortran

我正在执行此程序,但是当我尝试运行时出现此错误:错误:数组引用中的排名不匹配(1)(2/1)。部分代码是巴西葡萄牙语,我真的需要帮助。 此代码用于模拟受污染的细胞。

program novo2
integer, parameter :: tmax=10, L=10

integer:: i,j,rule
real :: semente(0,1),digitado,vet(0:tmax),recebe(0:L)
integer::mais(0:L),menos(0:L)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!valor digitado
!print*, 'Digite um valor para começar. Entre 0 e 1: '
!print*,'Ou digite 2 para um valor aleatório'
digitado=0
print*, "para configuracao inicial tipo semente digite 1"
read*, digitado !AQUI ESTAVA ESCRITO SEMENTE
!pick a  rule
!print*, 'Digite a regra desejada'
!read*, rule
!call transform(rule)
if(digitado==1)then
    !inicio atribuir o t=0 para teste
    semente=digitado
    vet=0
    vet(L/2,L/2)=1
    !do i=1,L
    !   !verificar se o valor de j é igual ao de t para atribuir ao vetor o boolean 
    !   if(i==(L*digitado))     vet(i)=1;
    !       print*,i,vet(i)
    !
    !enddo
    print*,"-----------------------------------------------------------------"
    !contorno
    menos(0)=L
    menos(L)=L-1
    do i=1,L
        menos(i)=i-1
    enddo
    mais(L)=0
    mais(0)=L+1
    do i=0,L-1
        mais(i)=i+1
    enddo 
!


 !regra 90
do j=0,L
 do i=0,L
  print*, vet
  if ((vet(menos(i))==0).and.(vet(mais(i))==0) .and. (vet(i)==0)) then
   recebe(i) = 0;
  elseif ((vet(menos(i))==0).and.(vet(mais(i))==0) .and. (vet(i)==1)) then
   recebe(i) = 1;
  elseif ((vet(menos(i))==0).and.(vet(mais(i))==1) .and. (vet(i)==1)) then
   recebe(i) = 1;
  elseif ((vet(menos(i))==0).and.(vet(mais(i))==1) .and. (vet(i)==0)) then
   recebe(i) = 1;
  elseif ((vet(menos(i))==1).and.(vet(mais(i))==0) .and. (vet(i)==1)) then
   recebe(i) = 0;
  elseif ((vet(menos(i))==1).and.(vet(mais(i))==0) .and. (vet(i)==0)) then
   recebe(i) = 1;
  elseif ((vet(menos(i))==1).and.(vet(mais(i))==1) .and. (vet(i)==1)) then
   recebe(i) = 0;
  elseif ((vet(menos(i))==1).and.(vet(mais(i))==1) .and. (vet(i)==0)) then
   recebe(i) = 0;
   vet = recebe;
   endif
   if(vet(i)==1) then
     print*, i,j
   endif  
   vet=recebe;

 enddo
 i=i+1;
print*,recebe;
print*,"-----------------------------------------------------------------"
enddo
j=j+1;
print*,vet
else 
if (digitado>0) then
vet=0 
    do i=1,L
        !verificar se o valor de j é igual ao de t para atribuir ao vetor o boolean 
        if(i==(L*digitado))     vet(i)=1;
            print*,i,vet(i)
    enddo
    print*,"-----------------------------------------------------------------"
    !contorno
    menos(0)=L
    menos(L)=L-1
    do i=1,L
        menos(i)=i-1
    enddo
    mais(L)=0
    mais(0)=1
    do i=0,L-1
        mais(i)=i+1
    enddo 






 !regra 90
do j=0,L
 do i=0,L
  print*, vet
  if ((vet(menos(i))==0).and.(vet(mais(i))==0) .and. (vet(i)==0)) then
   recebe(i) = 0;
  elseif ((vet(menos(i))==0).and.(vet(mais(i))==0) .and. (vet(i)==1)) then
   recebe(i) = 1;
  elseif ((vet(menos(i))==0).and.(vet(mais(i))==1) .and. (vet(i)==1)) then
   recebe(i) = 1;
  elseif ((vet(menos(i))==0).and.(vet(mais(i))==1) .and. (vet(i)==0)) then
   recebe(i) = 1;
  elseif ((vet(menos(i))==1).and.(vet(mais(i))==0) .and. (vet(i)==1)) then
   recebe(i) = 0;
  elseif ((vet(menos(i))==1).and.(vet(mais(i))==0) .and. (vet(i)==0)) then
   recebe(i) = 1;
  elseif ((vet(menos(i))==1).and.(vet(mais(i))==1) .and. (vet(i)==1)) then
   recebe(i) = 0;
  elseif ((vet(menos(i))==1).and.(vet(mais(i))==1) .and. (vet(i)==0)) then
   recebe(i) = 0;
   vet = recebe;
   endif
   if(vet(i)==1) then
     print*, i,j
   endif  
   vet=recebe;

 enddo
 i=i+1;
print*,recebe;
print*,"-----------------------------------------------------------------"
enddo
j=j+1;
print*,vet
endif
end if
if(digitado==2)then
    !inicio atribuir o t=0 para teste
    call RANDOM_NUMBER(semente)
    PRINT*,semente
    vet=0
    do i=1,L
        !verificar se o valor de j é igual ao de t para atribuir ao vetor o boolean 
        if(i<sdigitado)         vet(i)=1;
            print*,vet(i)

    enddo
    print*,"-----------------------------------------------------------------"
    !contorno
    menos(0)=L
    menos(L)=L-1
    do i=1,L
        menos(i)=i-1
    enddo
    mais(L)=0
    mais(0)=L+1
    do i=0,L-1
        mais(i)=i+1
    enddo 
!


 !regra 90
do j=0,L
 do i=0,L
  print*, vet
  if ((vet(menos(i))==0).and.(vet(mais(i))==0) .and. (vet(i)==0)) then
   recebe(i) = 0;
  elseif ((vet(menos(i))==0).and.(vet(mais(i))==0) .and. (vet(i)==1)) then
   recebe(i) = 1;
  elseif ((vet(menos(i))==0).and.(vet(mais(i))==1) .and. (vet(i)==1)) then
   recebe(i) = 1;
  elseif ((vet(menos(i))==0).and.(vet(mais(i))==1) .and. (vet(i)==0)) then
   recebe(i) = 1;
  elseif ((vet(menos(i))==1).and.(vet(mais(i))==0) .and. (vet(i)==1)) then
   recebe(i) = 0;
  elseif ((vet(menos(i))==1).and.(vet(mais(i))==0) .and. (vet(i)==0)) then
   recebe(i) = 1;
  elseif ((vet(menos(i))==1).and.(vet(mais(i))==1) .and. (vet(i)==1)) then
   recebe(i) = 0;
  elseif ((vet(menos(i))==1).and.(vet(mais(i))==1) .and. (vet(i)==0)) then
   recebe(i) = 0;
   vet = recebe;
   endif
   if(vet(i)==1) then
     print*, i,j
   endif  
   vet=recebe;

 enddo
 i=i+1;
print*,recebe;
print*,"-----------------------------------------------------------------"
enddo
j=j+1;
print*,vet
endif

end program novo2

抱歉英语不好。

0 个答案:

没有答案