Ñîäåðæàíèå Íàçàä

Ïðîãðàììà íà ÿçûêå Ôîðòðàí-PVM, ïîëó÷åííàÿ èç ïðîãðàììû Summa â ðåçóëüòàòå ðàáîòû Íîðìà òðàíñëÿòîðà:

Ôàéë summa.f

C $DIR ÈÍÔÎÐÌÀÖÈß ÊÎÍÔÈÃÓÐÀÒÎÐÀ
C $DIR ÃËÀÂÍÛÉ ÐÀÇÄÅË
C $DIR ÌÎÄÓËÜ SUMMA
C $DIR proc:
C $DIR SUMV
C $DIR send:
C $DIR ÊÎÍÅÖ ÈÍÔÎÐÌÀÖÈÈ ÊÎÍÔÈÃÓÐÀÒÎÐÀ
PROGRAM SUMMA
C +++++ ÏÐÎÃÐÀÌÌÀ SUMMA ÄËß ÃËÀÂÍÎÃÎ ÏÝ
DOUBLE PRECISION V(30,40),Vsum(30),Contr(30)
DOUBLE PRECISION RF0,RF1
C +++ OÏEPATOP 5 +++
DO 2 i=1,30
DO 2 j=1,40
V(i,j)=j+(i-1)*40
2 CONTINUE
C +++ OÏEPATOP 6 +++
CALL SUMV(V,Vsum)
C +++ OÏEPATOP 7 +++
DO 4 i=1,30
RF1 = 0.0
DO 3 j=1,40
RF1 = RF1+(V(i,j))
3 CONTINUE
Contr(i)=RF1
4 CONTINUE
C +++ OÏEPATOP 8 +++
OPEN(UNIT=8,FILE='summa.out')
WRITE(8,40001)
WRITE(8,40002) (Vsum(i),i=1,30)
C +++ OÏEPATOP 9 +++
WRITE(8,40003)
WRITE(8,40004) (Contr(i),i=1,30)
40001 FORMAT (1X,'Vsum=')
40002 FORMAT ((7(1X,4D20.10/),1X,2D20.10))
40003 FORMAT (1X,'Contr=')
40004 FORMAT ((7(1X,4D20.10/),1X,2D20.10))
CLOSE(8)
END
C $DIR ÈÍÔÎÐÌÀÖÈß ÊÎÍÔÈÃÓÐÀÒÎÐÀ
C $DIR ÌÎÄÓËÜ SUMV
C $DIR proc: 2+0,1+0
C $DIR send:
C $DIR ÊÎÍÅÖ ÈÍÔÎÐÌÀÖÈÈ ÊÎÍÔÈÃÓÐÀÒÎÐÀ
SUBROUTINE SUMV(V,Vsum)
C ----- ÑÒÀÐÒ-ÏÐÎÃÐÀÌÌÀ SUMV
INCLUDE "/usr/include/fpvm3.h"
DOUBLE PRECISION V(30,40),Vsum(30)
DOUBLE PRECISION RM1(15,40),RM2(15)
INTEGER ITASKJ(2)
COMMON /ALARM0/IWAIT0
DATA IWAIT0 /0/
IF (IWAIT0.EQ.0) THEN
C ----- ÎÒÑÛËÊÀ ÌÀÒÐÈÖÛ ÈÌÅÍ ÏÐÎÃÐÀÌÌ
CALL pvmfmytid(IHOSTTID)
CALL pvmfspawn('ZZSUMV',0,'anywhere',2,ITASKJ,IERRR1)
DO 9 IPRWWW=1,2
DO 9 JPRWWW=1,1
CALL pvmfinitsend(PvmDataRaw,IERRR2)
CALL pvmfpack(INTEGER4,ITASKJ(1),2,1,IERRR3)
CALL pvmfsend(ITASKJ(JPRWWW+(IPRWWW-1)),32*(IPRWWW-1)+
!JPRWWW,IERRR1)
9 CONTINUE
END IF
C ÎÒÑÛËÊÀ ÔÀÊÒÈ×ÅÑÊÈÕ ÏÀÐÀÌÅÒÐΠÐÀÇÄÅËÀ
C Îòñûëêà èñõîäíûõ ïàðàìåòðîâ â ëèíåéêó ÏÝ ïî i (j=1)
DO 10 IPRWWW=1,2
DO 11 IZzWWW=1,15
IIzWWW=IZzWWW+(IPRWWW-1)*15
IF (IIzWWW.LE.30) THEN
DO 12 j=1,40
RM1(IZzWWW,j)=V(IIzWWW,j)
12 CONTINUE
END IF
11 CONTINUE
CALL pvmfinitsend(PvmDataRaw,IERRR2)
CALL pvmfpack(REAL8,RM1(1,1),600,1,IERRR3)
CALL pvmfsend(ITASKJ(IPRWWW),32*(IPRWWW-1)+1,IERRR1)
10 CONTINUE
C ÏÐÈÅÌ ÐÅÇÓËÜÒÀÒÎÂ
C Ïðèåì ðåçóëüòàòîâ îò ëèíåéêè ÏÝ ïî i (j=1)
DO 13 IPRWWW=1,2
CALL pvmfrecv(ITASKJ(IPRWWW),32*(IPRWWW-1)+1,IERRR1)
CALL pvmfunpack(REAL8,RM2(1),15,1,IERRR3)
DO 14 IZzWWW=1,15
IIzWWW=IZzWWW+(IPRWWW-1)*15
IF (IIzWWW.LE.30) THEN
Vsum(IIzWWW)=RM2(IZzWWW)
END IF
14 CONTINUE
13 CONTINUE
IWAIT0=1
RETURN
END

Ôàéë zzsumv.f

PROGRAM ZZSUMV
C +++++ ÏÐÎÃÐÀÌÌÀ ÄËß ÏÝ Ñ ÍÎÌÅÐÀÌÈ i = 1..2 j = 1..1
INCLUDE "/usr/include/fpvm3.h"
DOUBLE PRECISION RFC
DOUBLE PRECISION V(15,40),Vsum(15),RABM0(15),PRABM0(15)
INTEGER ITASKJ(2)
INTEGER IVVVVJ,IWWWWJ
C ----- ÏÐÈÅÌ ÌÀÒÐÈÖÛ ÈÌÅÍ ÏÐÎÃÐÀÌÌ
CALL pvmfparent(IWWWWJ)
CALL pvmfrecv(IWWWWJ,32*(IPRWWW-1)+JPRWWW,IERRR1)
CALL pvmfunpack(INTEGER4,ITASKJ(1),2,1,IERRR2)
C ----- ÎÏÐÅÄÅËÅÍÈÅ ÊÎÎÐÄÈÍÀÒ ÑÂÎÅÉ ÇÀÄÀ×È
CALL pvmfmytid(IVVVVJ)
DO 16 IPRWWW=1,2
DO 16 JPRWWW=1,1
IF(IVVVVJ.EQ.ITASKJ(JPRWWW+(IPRWWW-1))) GOTO 17
16 CONTINUE
17 CONTINUE
15 CONTINUE
C ÏÐÈÅÌ ÔÀÊÒÈ×ÅÑÊÈÕ ÏÀÐÀÌÅÒÐΠÐÀÇÄÅËÀ
C Ïðèåì ðàñïðåäåëåííûõ ôàêòè÷åñêèõ ïàðàìåòðîâ ðàçäåëà
CALL pvmfrecv(IWWWWJ,32*(IPRWWW-1)+JPRWWW,IERRR2)
CALL pvmfunpack(REAL8,V(1,1),600,1,IERRR3)
C +++ OÏEPATOP 7 +++
IN0WWW=1
IK0WWW=15
JN0WWW=1
JK0WWW=40
DO 3 i=IN0WWW,IK0WWW
RABM0(i)=0.0
DO 3 j=JN0WWW,JK0WWW
RFC=V(i,j)
RABM0(i)=RABM0(i)+RFC
3 CONTINUE
C -----ÂÎËÍÀ-----
IF(JPRWWW.NE.1) GOTO 4
4 CONTINUE
2 CONTINUE
C +++ OÏEPATOP 6 +++
IN0WWW=1
IK0WWW=15
IF(JPRWWW.NE.1) GOTO 5
C ----ÏÐÈÅÌ ÐÅÇÓËÜÒÀÒÀ ÌÀÒÔÓÍÊÖÈÈ----
DO 6 i=IN0WWW,IK0WWW
Vsum(i)=RABM0(i)
6 CONTINUE
5 CONTINUE

 


Ñîäåðæàíèå Íàçàä