call AZ_READ_UPDATE(N_update,update,proc_config,nrow,1,0)
inode_N_update(0)=N_update
do i=1,mycpu-1
if (proc_config(AZ_node).eq.i)then
call MPI_SEND(N_update,1,MPI_INTEGER,0,100+i,
& MPI_COMM_WORLD,ierror)
c write(*,*)N_update,proc_config(AZ_node)
endif
enddo
if(proc_config(AZ_node).eq.0)then
do i=1,mycpu-1
call MPI_RECV(it,1,MPI_INTEGER,i,i+100,MPI_COMM_WORLD,
& status,ierror)
inode_N_update(i)=it
enddo
endif
do i=0,N_update-1
NC(update(i))=0
do j=0,20
if(A1(update(i),j).ne.0.and.A2(update(i),j).ne.update(i))then
NC(update(i))=NC(update(i))+1
IJ(update(i),NC(update(i))-1)=A2(update(i),j)
endif
enddo
c if(proc_config(AZ_node).eq.1)then
c write(15,*)NC(update(i)),update(i),n_update,i
c endif
enddo
c close(15)
bindx(0)=N_update+1
do i=0,N_update-1,1
bindx(i+1)=NC(update(i))+bindx(i)
ks=bindx(i)
ke=bindx(i+1)-1
do k=ks,ke
bindx(k)=IJ(update(i),k-ks)
enddo
do j=0,20
if(A2(update(i),j)==update(i))then
val(i)=A1(update(i),0)
endif
enddo
do k=ks,ke
val(k)=A1(update(i),k-ks+1)
enddo
enddo
c A(2*ns*nfai+(i-1)*n+j,2*ns*nfai+(i-1)*n+j)=
c & Pr/E+dt*(2/(s*dfai)**2+2/ds**2)
A1(2*ns*n+(i-1)*n+j,0)=Pr/E+dt*(2/((si+i*ds)*dfai)**2+2/ds**2)
A2(2*ns*n+(i-1)*n+j,0)=2*ns*n+(i-1)*n+j
end
另一个文件farg.f
integer function mpir_iargc()
mpir_iargc = iargc()
return
end
subroutine mpir_getarg( i, s )
integer i
character*(*) s
call getarg(i,s)
return
end
makefile文件
# TOP LEVEL MAKEFILE FOR LIB SAMPLE PROBLEMS
#====================================================================
# ------------------------
# | CVS File Information |
# ------------------------
#
# $RCSfile: Makefile_dist_app,v $
#
# $Author: tuminaro $
#
# $Date: 2000/06/02 16:49:21 $
#
# $Revision: 1.36 $
#
# $Name: $
#====================================================================
COMM = SERIAL
MACHINE = GENERIC
MPI_INCLUDE_DIR = -I/opt/mpich-1.2.5/gm_gcc/include
MPI_LIB = -L/opt/mpich-1.2.5/gm_gcc/lib -lg2c
#
# ANSI C compiler
#
CC_GENERIC = cc
CC_SUN4 = acc
CC_SOLARIS = cc
CC_SGI = cc
CC_SGIM4 = cc
CC_SGI10K = cc
CC_DEC = cc
CC_I860 = icc
CC_HP = cc
CC_SUNMOS = sicc
CC_NCUBE = ncc
CC_SP2 = mpcc
CC_T3E = cc
CC_LINUX = /opt/mpich-1.2.5/gm_gcc/bin/mpicc -lg2c
CC_TFLOP = pgcc -cougar
# Choose the application you want to run:
#
# 1) Standard MSR/VBR application
#OBJ = az_main.o az_examples.o az_app_utils.o
#
# 2) Tutorial application
# Choose one of the 3 depending on whether you want to see a "C"
# application, a Fortran application using MPI, or a Fortran
# application without MPI.
# NOTE: You can only use 'az_tutorial_with_MPI.f' if you have MPI
# and you can not use 'az_tutorial_without_MPI.f' with MPI.
#
#OBJ = az_tutorial.o
#OBJ = az_tutorial_with_MPI.o
#OBJ = az_tutorial_without_MPI.o
#
# 3) Matrix free application
#
#OBJ = az_mat_free_main.o az_mat_free_example.o az_mat_free_com.o
OBJ = abc.o
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#
# No need to change the rest of this file when adding
# a new machine to the makefile
#
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
LDFLAGS = $(LDFLAGS2) $(GEN_LIBS) $(LIB_MACH_DEP)
CFLAGS = $(CFLAGS2) $(CFORT) $(GEN_CFLAGS) -DAZ_MPI $(MPI_INCLUDE_DIR)
FFLAGS = $(FFLAGS2) $(MPI_INCLUDE_DIR) $(GEN_CFLAGS)
# -DMPI is used so that MPI_Init defined in
# az_main.c gets compiled and so that MPI_Request
# is defined properly.