home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / prgramer / adaptor / examples / fractal / mandel1.f < prev    next >
Text File  |  1993-06-28  |  2KB  |  73 lines

  1.       program mandel
  2.  
  3.       real xmin, xmax, ymin, ymax
  4.       integer width, height
  5.       integer bild (:,:), hostbild (:,:)
  6. cmf$  layout hostbild (:host)
  7.       logical done
  8.       integer hx1, hx2, hy1, hy2
  9.       integer maxtiefe
  10.       parameter (maxtiefe = 256)
  11.       real valmax
  12.       parameter (valmax = 40.0)
  13.       real xp, yp, x, y, xalt
  14.  
  15.       print *, 'Input Width - Height '
  16.       print *, 'should always be a multiple of 4 '
  17.       read *, width, height
  18.  
  19.       allocate (bild(1:height,1:width))
  20.       allocate (hostbild(1:height,1:width))
  21.  
  22.       call x_display_init (width, height)
  23.  
  24.       xmin = -2.0
  25.       xmax = 1.0
  26.       ymin = -1.0
  27.       ymax = 1.0
  28.       done = .false.
  29.       do while (.not. done )
  30.  
  31. !HPF$   INDEPENDENT, LOCAL_ACCESS
  32.         do j=1,width  
  33. !HPF$     INDEPENDENT, LOCAL_ACCESS
  34.           do i=1,height
  35.               xp = j
  36.               xp = (xmax - xmin) * xp 
  37.               xp = xp /width + xmin
  38.               yp = i
  39.               yp = (ymax - ymin) * yp 
  40.               yp = yp /height + ymin
  41.               x = 0.0
  42.               y = 0.0
  43.               bild(i,j) = 0
  44.               K = 0
  45.               DO WHILE ((K .lt. MAXTIEFE) .and. ((X*X+Y*Y) .lt. VALMAX))
  46.                    XALT = X
  47.                    X = (X*X-Y*Y) + XP
  48.                    Y = (2*XALT*Y) + YP
  49.                    BILD(i,j) = BILD(i,j) + 1
  50.                    K = K + 1
  51.               END DO
  52.           END DO
  53.          END DO
  54.  
  55.          hostbild = bild
  56.          call x_show_bild (hostbild,width,height)
  57.          call x_new_action (hx1,hx2,hy1,hy2)
  58.  
  59.          if ((hx1 .eq. 0) .or. (hx2 .eq. 0)) then
  60.              done = .true.
  61.            else
  62.              diffx = xmax - xmin
  63.              diffy = ymax - ymin
  64.              xmax = (diffx * hx2) / (width - 1) + xmin
  65.              ymax = (diffy * hy2) / (height - 1) + ymin
  66.              xmin = (diffx * hx1) / (width - 1) + xmin
  67.              ymin = (diffy * hy1) / (height - 1) + ymin
  68.          end if
  69.        end do
  70.        call x_display_exit ()
  71.        deallocate (hostbild, bild)
  72.        end
  73.