My friend FJacq,
I've been working your advices. My program become something more complex. So I have worked it in blocks.
I want to send the flowchart of the algorithm (written in. doc) to you but I do not know how to do it.
By the way, I will send you one part ( one block) of my program. If you make it work, I send the entire program.
1 - generate an mxn matrix "A" with all elements negative .
2 - sum1 = ... A2,2*A2,1+A2,2*A2,3+A2,2*A1,2+A2,2*A3,2 +...+
A3,4*A3,3+A3,4*A3,5+A3,4*A4,4+A3,4*A2,4+...
Store sum1
3 - Do A1,1=-A1,1 and repeat the previous step (but this time we will call it sum2). Store sum2
4 - Delta=sum2-sum1
5 - if Delta <0, then "A" become this new configuration, with A1,1 positive.
6- if Delta >= 0, there are other way.
7 - go to the A1,2 element and repeat all steps.
It will be more easy if I had a way to send you the algorithm.
But, any way, follow the block, and the entire program.
BLOCK UNSOLVED
program teste2
implicit none
real:: somamult,SAb
integer, parameter::m=4
integer, parameter::n=3
integer::i,j,a(m,n)
a=-1
somamult=0
print*,a
pause
do i= 1,m !D - início
do j= 1,n !E - fim
a(i,j)=-a(i,j)
print*,'vai começar',a
pause
if((i==1).and.(j==1))then
somamult=somamult+a(i,j)*a(i,j+n-1)+a(i,j)*a(i,j+1)+a(i,j)*a(i+1,j)+a(i,j)*a(i+m-1,j)
Else if((i==1).and.(j/=1.and.j/=n))then
somamult=somamult+a(i,j)*a(i,j-1)+a(i,j)*a(i,j+1)+a(i,j)*a(i+1,j)+a(i,j)*a(i+m-1,j)
Else if((i==1).and.(j==n))then
somamult=somamult+a(i,j)*a(i,j-1)+a(i,j)*a(i,j-(n-1))+a(i,j)*a(i+1,j)+a(i,j)*a(i+m-1,j)
Else if((i/=1.and.i/=m).and.(j==1))then
somamult=somamult+a(i,j)*a(i,j+n-1)+a(i,j)*a(i,j+1)+a(i,j)*a(i+1,j)+a(i,j)*a(i-1,j)
Else if((i==m).and.(j==1))then
somamult=somamult+a(i,j)*a(i,j+n-1)+a(i,j)*a(i,j+1)+a(i,j)*a(i-(m-1),j)+a(i,j)*a(i-1,j)
Else if((i==m).and.(j/=1.and.j/=n))then
somamult=somamult+a(i,j)*a(i,j-1)+a(i,j)*a(i,j+1)+a(i,j)*a(i-(m-1),j)+a(i,j)*a(i-1,j)
Else if((i/=1.and.i/=m).and.(j==n))then
somamult=somamult+a(i,j)*a(i,j-1)+a(i,j)*a(i,j-(n-1))+a(i,j)*a(i+1,j)+a(i,j)*a(i-1,j)
Else if((i==m).and.(j==n))then
somamult=somamult+a(i,j)*a(i,j-1)+a(i,j)*a(i,j-(n-1))+a(i,j)*a(i-(m-1),j)+a(i,j)*a(i-1,j)
Else if((i/=1.and.i/=m).and.(j/=1.and.j/=n))then
somamult=somamult+a(i,j)*a(i,j-1)+a(i,j)*a(i,j+1)+a(i,j)*a(i+1,j)+a(i,j)*a(i-1,j)
print*,'elemento ij',i,j,'somamult='somamult
!Here appear this error:
!F95(40) : error 773 - Variable SOMAMULT follows another operand (possible unexpected space?)
!what is this?
pause
End if
end do !E - fim
end do !D - fim
SAb=somamult
print*,'SAb=',SAb
end program teste2
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
COMPLETE PROGRAM UNSOLVED TOO.
program testa_atr_matr
implicit none
real::somamult,r,w,energy,SA
real:: H,SAb,DE
real, parameter:: T=0.2
integer, parameter:: m=4 !I will choose other numbers after
integer, parameter:: n=3 !I will choose other numbers after
integer:: a(m,n),i,j,NU,G,k
NU=50 !number of elements
a=-1
somamult=0
do i= 1,m !A - início
do j= 1,n !B - início
if((i==1).and.(j==1))then
somamult=somamult+a(i,j)*a(i,j+n-1)+a(i,j)*a(i,j+1)+a(i,j)*a(i+1,j)+a(i,j)*a(i+m-1,j)
Else if((i==1).and.(j/=1.and.j/=n))then
somamult=somamult+a(i,j)*a(i,j-1)+a(i,j)*a(i,j+1)+a(i,j)*a(i+1,j)+a(i,j)*a(i+m-1,j)
Else if((i==1).and.(j==n))then
somamult=somamult+a(i,j)*a(i,j-1)+a(i,j)*a(i,j-(n-1))+a(i,j)*a(i+1,j)+a(i,j)*a(i+m-1,j)
Else if((i/=1.and.i/=m).and.(j==1))then
somamult=somamult+a(i,j)*a(i,j+n-1)+a(i,j)*a(i,j+1)+a(i,j)*a(i+1,j)+a(i,j)*a(i-1,j)
Else if((i==m).and.(j==1))then
somamult=somamult+a(i,j)*a(i,j+n-1)+a(i,j)*a(i,j+1)+a(i,j)*a(i-(m-1),j)+a(i,j)*a(i-1,j)
Else if((i==m).and.(j/=1.and.j/=n))then
somamult=somamult+a(i,j)*a(i,j-1)+a(i,j)*a(i,j+1)+a(i,j)*a(i-(m-1),j)+a(i,j)*a(i-1,j)
Else if((i/=1.and.i/=m).and.(j==n))then
somamult=somamult+a(i,j)*a(i,j-1)+a(i,j)*a(i,j-(n-1))+a(i,j)*a(i+1,j)+a(i,j)*a(i-1,j)
Else if((i==m).and.(j==n))then
somamult=somamult+a(i,j)*a(i,j-1)+a(i,j)*a(i,j-(n-1))+a(i,j)*a(i-(m-1),j)+a(i,j)*a(i-1,j)
Else if((i/=1.and.i/=m).and.(j/=1.and.j/=n))then
somamult=somamult+a(i,j)*a(i,j-1)+a(i,j)*a(i,j+1)+a(i,j)*a(i+1,j)+a(i,j)*a(i-1,j)
End if
end do !B - fim
end do !A - fim
energy=somamult
print*,'matriz A'
print*,''
print*,a
print*,''
print*,'soma de a =',sum(a)
print*,''
print*,'energy=',energy
pause
g=0
Do k=0,NU !C - início
if (k==0)then
SA=energy
else if (k/=0.and.k<NU)then
SA=H
else if (k==NU)then
print*,'k =NU','NU=',NU
pause
print*,''
print*,'H=',H
print*,''
pause
print*,'matriz a'
print*,a
print*,'o programa acabou'
stop
end if
do i= 1,m !D - início
do j= 1,n !E - fim
somamult=0
a(i,j)=-a(i,j)
if((i==1).and.(j==1))then
somamult=somamult+a(i,j)*a(i,j+n-1)+a(i,j)*a(i,j+1)+a(i,j)*a(i+1,j)+a(i,j)*a(i+m-1,j)
Else if((i==1).and.(j/=1.and.j/=n))then
somamult=somamult+a(i,j)*a(i,j-1)+a(i,j)*a(i,j+1)+a(i,j)*a(i+1,j)+a(i,j)*a(i+m-1,j)
Else if((i==1).and.(j==n))then
somamult=somamult+a(i,j)*a(i,j-1)+a(i,j)*a(i,j-(n-1))+a(i,j)*a(i+1,j)+a(i,j)*a(i+m-1,j)
Else if((i/=1.and.i/=m).and.(j==1))then
somamult=somamult+a(i,j)*a(i,j+n-1)+a(i,j)*a(i,j+1)+a(i,j)*a(i+1,j)+a(i,j)*a(i-1,j)
Else if((i==m).and.(j==1))then
somamult=somamult+a(i,j)*a(i,j+n-1)+a(i,j)*a(i,j+1)+a(i,j)*a(i-(m-1),j)+a(i,j)*a(i-1,j)
Else if((i==m).and.(j/=1.and.j/=n))then
somamult=somamult+a(i,j)*a(i,j-1)+a(i,j)*a(i,j+1)+a(i,j)*a(i-(m-1),j)+a(i,j)*a(i-1,j)
Else if((i/=1.and.i/=m).and.(j==n))then
somamult=somamult+a(i,j)*a(i,j-1)+a(i,j)*a(i,j-(n-1))+a(i,j)*a(i+1,j)+a(i,j)*a(i-1,j)
Else if((i==m).and.(j==n))then
somamult=somamult+a(i,j)*a(i,j-1)+a(i,j)*a(i,j-(n-1))+a(i,j)*a(i-(m-1),j)+a(i,j)*a(i-1,j)
Else if((i/=1.and.i/=m).and.(j/=1.and.j/=n))then
somamult=somamult+a(i,j)*a(i,j-1)+a(i,j)*a(i,j+1)+a(i,j)*a(i+1,j)+a(i,j)*a(i-1,j)
End if
end do !E - fim
end do !D - fim
SAb=somamult
DE=SAb-SA
print*,'k=',k,'SA=',SA,'SAb=',SAb,'DE=',DE
pause
if (DE<=0)then
go to 1
else
Call random_number(r)
w=exp(-DE/T)
if (r<=w)then
go to 1
Else
a(i,j)=-a(i,j)
end if
if (G>0)then
DE=0
go to 2
else
H=energy
go to 3
end if
end if
1 do G=1,NU !F - início
end do !F - fim
2 H=SA+DE
3 continue
print*,'k=',k,'H=',H
pause
End do !C - fim
end program testa_atr_matr