home *** CD-ROM | disk | FTP | other *** search
- PROGRAM LAPLACE
- REAL F(:,:), DF(:,:)
- REAL HF(:,:)
- INTEGER BILD (:,:), HOSTBILD(:,:)
- cmf$ layout hostbild (:host)
- LOGICAL CMASK (:,:)
- INTEGER MAXX, MAXY
- REAL FMAX
- INTEGER ITER, K
- c
- c read in sizes
- c
- PRINT *,'MAXX = (z.B. 64) '
- READ *,MAXX
- PRINT *,'MAXY = (z.B. 64) '
- READ *,MAXY
- ALLOCATE (F(MAXX,MAXY), DF(1:MAXX,MAXY))
- ALLOCATE (HF(MAXX,1:MAXY))
- ALLOCATE (CMASK(MAXX,1:MAXY))
- allocate (bild(maxx,maxy), hostbild(maxx,maxy))
- call x_display_init (maxx, maxy)
- C
- CMASK = .FALSE.
- CMASK (2:MAXX-1,2:MAXY-1) = .TRUE.
- F = 2.
- F(:,MAXY) = 1.
- WHERE (CMASK)
- F = 0.0
- ENDWHERE
- ITER = 0
- FMAX = 1
- DO WHILE (FMAX .gt. 0.001)
- do k = 1, 10
- ITER = ITER + 1
- HF = CSHIFT (F,1,1)
- DF = CSHIFT (F,1,-1)
- HF = HF + DF
- DF = CSHIFT (F,2,1)
- HF = HF + DF
- DF = CSHIFT (F,2,-1)
- HF = (HF + DF) * 0.25
- DF = 0
- WHERE (CMASK)
- DF = HF - F
- F = F + DF
- ENDWHERE
- end do
- bild = f * 128.0
- hostbild = bild
- call x_show_bild (hostbild)
- DF = ABS(DF)
- FMAX = MAXVAL (DF)
- PRINT *,'Iteration ',ITER,' Max = ',FMAX
- END DO
- PRINT *, ITER, ' Iterationen benoetigt'
- read *, iter
- call x_display_exit ()
- deallocate (hostbild, bild)
- deallocate (cmask, hf, df, f)
- END
-
-