C       E X A M P L E   1
C
C	Program name:
	CHARACTER*9 MYNAME
	PARAMETER (MYNAME='EXAMPLE_1')
C
C	Problem size:
	INTEGER     N
	PARAMETER  (N = 100)
C
C	Data type = real:
	PARAMETER (IDTYPE = 1)
C
C	Number of RHS vectors:
	PARAMETER (NUMRHS = 1)
C
C	Number of vectors to reduce during factoring:
	PARAMETER (NUMRED = 0)
C
C	Skip operations during solving (no)
	PARAMETER (ISKIP  = 0)
C
C	Matrix and vector:
	COMMON     A(N,N), X(N)
	REAL*8     A, X
C
C	FMS matrix and vector file attributes:
	
	INTEGER    LUA(25)
	INTEGER    LUX(25)
C
C	Local variables:
	REAL*8     EI, ERROR
C
C (1)   Initialize FMS:
	CALL FMSINI
	CALL FMSPSH (MYNAME)
	CALL FMSIST ('IPRF',1026)
C
C       Populate [A] and {X} with test data:
	CALL MATGEN (A, N, N, X)
C
C (2)   Open FMS files:
C	NOTE: The arrays A(N,N) and X(N) are automatically shared on
C	machines using threads.  On machines using separate processes
C	for parallel, they are not automatically shared.  Therefore we
C	will limit the number of processes accessing these arrays to 1
C	for this example.  Example_2 illustrates how to place these
C	arrays in FMS shared memory so they can be operated on by
C	parallel processes on all machines.
	CALL FMSIST ('MAXCPU',1)
 
	CALL RNDANN (A, N, N, LUA)
	CALL FMSOV2 (N, IDTYPE, NUMRHS, X, N, LUX)
C
C (3)   Write data to FMS files: (Not required).
C
C (4)   Perform matrix algebra:
	CALL RNDF (LUA, LUA, LUX, LUX,    NUMRED)
	CALL RNDS (LUA, LUX, LUX, NUMRHS, ISKIP)
C
C (5)   Read data from FMS files: (Not required).
C
C       Check the answer:
	ERROR = 0.0D0
	DO 50 I = 1,N
	   EI = ABS(X(I) - 1.0D0)
	   IF(EI .GT. ERROR) ERROR = EI
   50   CONTINUE
	WRITE(6,*) 'MAXIMUM ERROR =', ERROR
C
C (6)   Close FMS files:
	CALL FMSCM (LUA)
	CALL FMSCV (LUX)
	CALL FMSPOP(MYNAME)
	CALL FMSEND
	END
C=======================================================================
	SUBROUTINE MATGEN (A, LDA, N, B)
C=======================================================================
	INTEGER    LDA, N
	REAL*8     A(LDA,N), B(N), ZERO, ONE
	CHARACTER*6 MYNAME
	PARAMETER  (ZERO=0.D0)
	PARAMETER  (ONE =1.D0)
	PARAMETER  (MYNAME='MATGEN')
C
C       Populate [A] and {B} with test data:
C              [A]        {X}  =  {B}
C       +-            -+ +   +   +   +
C       | N -1 -1 -1 -1| | 1 |   | 1 |
C       |-1  1  0  0  0| | 1 |   | 0 |
C       |-1  0  1  0  0| | 1 | = | 0 |
C       |-1  0  0  1  0| | 1 |   | 0 |
C       |-1  0  0  0  1| | 1 |   | 0 |
C       +-            -+ +   +   +   +
C
	CALL FMSPSH (MYNAME)
	A(1,1) = DCMPLX(N,N)
	B(1)   = ONE
	DO 20 I = 2,N
	   DO 10 J = 2,N
	      A(I,J) = ZERO
   10      CONTINUE
	   A(1,I) =-ONE
	   A(I,1) =-ONE
	   A(I,I) = ONE
	   B(I)   = ZERO
   20   CONTINUE
	CALL FMSPOP(MYNAME)
	RETURN
	END
Copyright © Multipath Corporation