1 Replies - 3021 Views - Last Post: 22 November 2007 - 08:50 AM Rate Topic: -----

#1 bobby19  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 2
  • Joined: 21-November 07

Infinite Loop somewhere in Fortran Code

Posted 22 November 2007 - 12:03 AM

Hi, I am writing a function that takes in a real data array and a key partition value, which will rearrange the array so that elements with a lower value than x are placed before the elements with values >= the partition value. It then returns the index of the last element of the array with a value less than the partition value.

We were given some pseudo-code which uses the idea that we start from the left and right and simultaneously switch elements using two loops excited together.

 integer function partition_data( xdata, xmiddle )
	implicit none
 
   real, dimension(:) :: xdata
   real :: xmiddle !INTENT?

   integer ::  l = 1
   integer ::  r = 16
   real :: temp
	
	do
	   if (xdata(l) < xmiddle) then
		  if (l == r) then
			 partition_data = l
			 exit
		  end if	
		  
			 l = l + 1
		  
	   else
		  
		  do
			 if (xdata(r) >= xmiddle) then
				if (l == r) then
				   partition_data = l - 1
				   exit
				end if
				
				r = r - 1
						  
			 else
				
				temp = xdata(l)
				xdata(l) = xdata(r)
				xdata(r) = temp
				exit   
			 end if
		  end do
		  
				
		  
	   end if
	end do
		  
  end function partition_data



With the xdata array

xdata = (/ 0.00392, 0.0251, 0.453, 0.667, 0.963, 0.838, 0.335, 0.975, &
0.796, 0.833, 0.345, 0.871, 0.0899, 0.888, 0.701, 0.735 /)

The xmiddle was set to 0.5 in the main test program.

When I compile, I seem to get an infinite loop and I cannot find where it is.

If anyone can spot where I went wrong, that would be great.

Thanks in advance!

Is This A Good Question/Topic? 0
  • +

Replies To: Infinite Loop somewhere in Fortran Code

#2 NickDMax  Icon User is offline

  • Can grep dead trees!
  • member icon

Reputation: 2250
  • View blog
  • Posts: 9,245
  • Joined: 18-February 07

Re: Infinite Loop somewhere in Fortran Code

Posted 22 November 2007 - 08:50 AM

Well think about this: what is your exit condition?

I only see one way to get out of the outer loop:
	   if (xdata(l) < xmiddle) then
		  if (l == r) then
			 partition_data = l
			 exit !!This will exit the do-loop
		  end if	


course it has been a long time since I last used fortran.
Was This Post Helpful? 0
  • +
  • -

Page 1 of 1