Fortran
Použití a příklad


Příklad kódu ve FORTRANU 77 - Vykreslování rekurzivních struktur
za použití knihovny PGPLOT

     PROGRAM CHAOS01
     IMPLICIT NONE


     INTEGER I,N,BASE
     DOUBLE PRECISION X1(2),X2(2),A(3,2)
     PARAMETER(N=250000)

     A(1,1)=0
     A(1,2)=0
     A(2,1)=1
     A(2,2)=0
     A(3,1)=0.5
     A(3,2)=1.0
     X1(1)=RAND()
     X1(2)=RAND()

     CALL PGOPEN('?')
     CALL PGBOX('BCNTS1',0.0,0,'BCNTSV1',0.0,0)
     CALL PGSCH(0.05)
     DO 10 I = 1, N
        BASE = INT(3*(RAND())+0.9999)
        X2(1) = ((X1(1) + A(BASE,1))/2)
        X2(2) = ((X1(2) + A(BASE,2))/2)
        CALL PGPT(1,REAL(X2(1)),REAL(X2(2)),17)
        X1(1)=X2(1)
        X1(2)=X2(2)
10   CONTINUE

     CALL PGCLOS()
     END

    
      PROGRAM CHAOS02
      IMPLICIT NONE


      INTEGER I,N,BASE
      REAL TEMP,PROB(4)
      DOUBLE PRECISION X1(2),X2(2),A(4,4),B(2,4)
      PARAMETER(N=250000)

C      DATA A/0.5, 0.0, 0.0, 0.5,
C     .       0.5, 0.0, 0.0, 0.5,
C     .       0.5, 0.0, 0.0, 0.5/
C      DATA B/0.0, 0.0,
C     .       0.5, 0.0,
C     .       0.0, 0.5/

      X1(1)=RAND()
      X1(2)=RAND()


      OPEN(UNIT=10,FILE='data.chaos',STATUS='OLD',ERR=901)
      READ(10,*) A(1,1),A(2,1),A(3,1),A(4,1)
      READ(10,*) A(1,2),A(2,2),A(3,2),A(4,2)
      READ(10,*) A(1,3),A(2,3),A(3,3),A(4,3)
      READ(10,*) A(1,4),A(2,4),A(3,4),A(4,4)
      READ(10,*) B(1,1),B(2,1)
      READ(10,*) B(1,2),B(2,2)
      READ(10,*) B(1,3),B(2,3)
      READ(10,*) B(1,4),B(2,4)
      READ(10,*) PROB(1),PROB(2),PROB(3),PROB(4)
      
      PROB(2)=PROB(2)+PROB(1)
      PROB(3)=PROB(3)+PROB(2)
      PROB(4)=PROB(4)+PROB(3)

      CALL PGOPEN('?')
      CALL PGWINDOW(0.0,1.0,0.0,1.1)
      CALL PGBOX('BCNTS1',0.0,0,'BCNTSV1',0.0,0)
      CALL PGSCH(0.05)
      DO 10 I = 1, N
         TEMP = RAND()
         IF ((TEMP.GE.0).AND.(TEMP.LT.PROB(1))) BASE=1
         IF ((TEMP.GE.PROB(1)).AND.(TEMP.LT.PROB(2))) BASE=2
         IF ((TEMP.GE.PROB(2)).AND.(TEMP.LT.PROB(3))) BASE=3
         IF ((TEMP.GE.PROB(3)).AND.(TEMP.LT.PROB(4))) BASE=4
C         BASE = INT(4*(RAND())+0.9999)
         X2(1) = A(1,BASE)*X1(1)+A(2,BASE)*X1(2)+B(1,BASE)
         X2(2) = A(3,BASE)*X1(1)+A(4,BASE)*X1(2)+B(2,BASE)
         CALL PGPT(1,REAL(X2(1)),REAL(X2(2)),17)
         X1(1)=X2(1)
         X1(2)=X2(2)
 10   CONTINUE

      CALL PGCLOS()
      goto 999
 901  write(6,*) 'could not find chaos.data'


 999  END
    
Datový soubor pro tento program
 0.849  0.037 -0.037  0.849
 0.197 -0.226  0.226  0.197
-0.150  0.283  0.260  0.237
 0.000  0.000  0.000  0.160
 0.0750  0.1830
 0.4000  0.0490
 0.5750 -0.0840
 0.5000  0.0000
0.85 0.05 0.05 0.05
    

Příklad kódu ve FORTRANU 77 - Určení vzdálenosti bodu od kružnice:

SUBROUTINE MKDCIR(X,Y,N,X0,Y0,R,D,MAKEF,FJAC,LDFJAC,IERROR)
C
C     Fortran 77 implementation of METROS Key Function:
C                                                   Distance to circle
C
C ---------------------------------------------------------------------
C     Parameters
C               (x,y) - points (1-dim array)                      INPUT
C                   N - number of points                          INPUT
C                                             (Implementation specific)
C           (X0,Y0,R) - parameters of circle                      INPUT
C                   D = distances                                OUTPUT
C               MAKEF - If MAKEF > 0 Jacobian computed            INPUT
C                                             (Implementaiton specific)
C               FJAC  - Jacobian                        OPTIONAL  OUPUT
C             LDFJAC  - Leading dimension of FJAC                 INPUT
C                                             (Implementation specific)
C             IERROR  - Indicates errors in parameters           OUTPUT
C                       IERROR = -3: N <= 0
C                       IERROR = -6: R <= 0
C                       IERROR = -10: LDFJAC < N
C
C ---------------------------------------------------------------------
C
C     .. Scalar Arguments ..
      DOUBLE PRECISION R,X0,Y0
      INTEGER IERROR,LDFJAC,MAKEF,N
C     ..
C     .. Array Arguments ..
      DOUBLE PRECISION D(N),FJAC(LDFJAC,*),X(N),Y(N)
C     ..
C     .. Local Scalars ..
      DOUBLE PRECISION DX,DY,ONE,RI,SX,SY,ZERO
      INTEGER I
C     ..
C     .. Intrinsic Functions ..
      INTRINSIC SQRT
C     ..
C     .. Data statements ..
      DATA ONE,ZERO/1.0D0,0.0D0/
C     ..
C
C     Check inputs
      IF (N.LE.0) THEN
         IERROR = -3
      ELSE IF (R.LE.ZERO) THEN
         IERROR = -6
      ELSE IF ((MAKEF.GT.0) .AND. (LDFJAC.LT.N)) THEN
         IERROR = -10
      ELSE
         IERROR = 0
      END IF
      IF (IERROR.GT.0) RETURN
C
C
C     Loop through the points.
C
      DO 20 I = 1,N
          DX = X(I) - X0
          IF (DX.LT.ZERO) THEN
             DX = -DX
             SX = -1.0D0
          ELSE
             SX = 1.0D0
          END IF
          DY = Y(I) - Y0
          IF (DY.LT.ZERO) THEN
             DY = -DY
             SY = -1.0D0
          ELSE
             SY = 1.0D0
          END IF
          IF (DX.EQ.ZERO .AND. DY.EQ.ZERO) THEN
              RI = ZERO
          ELSE IF (DX.GT.DY) THEN
              RI = DY/DX
              RI = DX*SQRT(ONE+RI*RI)
          ELSE
              RI = DX/DY
              RI = DY*SQRT(ONE+RI*RI)
          END IF
          D(I) = RI - R
C
C     Calculate derivatives if required.
C
          IF (MAKEF.GT.0) THEN
              IF (RI.EQ.ZERO) THEN
                  FJAC(I,1) = ZERO
                  FJAC(I,2) = ZERO
              ELSE
                  FJAC(I,1) = -SX*DX/RI
                  FJAC(I,2) = -SY*DY/RI
              END IF
              FJAC(I,3) = -ONE
          END IF
   20 CONTINUE
C -------------------------------------------------------------------
C     End of MKDTOC
C -------------------------------------------------------------------
      END