You can use the following makefile and run script with the sample thermal diffusion and sparse linear algebraic equations programs.
# Makefile to build the diffusion program, sparse solver and utility routines
#
# add rule for making mod files
.SUFFIXES: .mod
#
# Compilers and such
#
CC=mpcc
FORT=mpxlf
LINK=mpxlf
LDFLAGS = -lblacs -lessl -lpessl $(LIB)
FCOPT = -O3 -C -qsource -qxref -qattr $(INCLUDE)
# default for include and lib directories
INCLUDE=
LIB=
## DISTRIBUTED DATA samples
# OBJS list objects module used in the diffusion program
#
OBJS = main.o scalemod.o param.o diffusion.o fourier.o
BASEOBJS = broadcast.o create.o delete.o init.o scatter_gather.o \
pdata.o northsouth.o eastwest.o index.o
UTILOBJS = $(BASEOBJS) cdata.o putilities.o
UTILLIB = libputils.a
LIBOBJS = $(UTILLIB)(broadcast.o) $(UTILLIB)(create.o) \
$(UTILLIB)(delete.o) $(UTILLIB)(init.o) \
$(UTILLIB)(scatter_gather.o) $(UTILLIB)(pdata.o) \
$(UTILLIB)(northsouth.o) $(UTILLIB)(eastwest.o) \
$(UTILLIB)(index.o) $(UTILLIB)(cdata.o) \
$(UTILLIB)(putilities.o)
distribute: diffusion pdgexmp image simple
#
# Rule for building diffusion program
#
diffusion: $(OBJS)
$(LINK) -o diffusion $(OBJS) -lpessl -lblacs -lessl
pdgexmp: pdgexmp.o $(UTILLIB)
$(LINK) -o pdgexmp pdgexmp.o -L . -lputils $(LDFLAGS)
image: image.o $(UTILLIB)
$(LINK) -o image image.o -L . -lputils $(LDFLAGS)
simple: simple.o $(UTILLIB)
$(LINK) -o simple simple.o -L . -lputils $(LDFLAGS)
#rule to create the library
$(UTILLIB): $(LIBOBJS)
ar rv $(UTILLIB) $%
# rules to create library objects
init.o: init.f pdata.o
xlf -c $(FFLAGS) init.f
exchange.o: init.f pdata.o
xlf -c $(FFLAGS) exchange.f
cdata.o: cdata.f pdata.o
xlf -c $(FFLAGS) cdata.f
create.o: create.f pdata.o
xlf -c $(FFLAGS) create.f
broadcast.o: broadcast.f pdata.o
xlf -c $(FFLAGS) broadcast.f
delete.o: delete.f pdata.o
xlf -c $(FFLAGS) delete.f
scatter_gather.o: scatter_gather.f pdata.o
xlf -c $(FFLAGS) scatter_gather.f
putilities.o: putilities.f $(BASEOBJS) cdata.o
xlf -c $(FFLAGS) putilities.f
eastwest.o: eastwest.f pdata.o
xlf -c $(FFLAGS) eastwest.f
northsouth.o: northsouth.f pdata.o
xlf -c $(FFLAGS) northsouth.f
$(UTILLIB)(broadcast.o): broadcast.o
ar rv $(UTILLIB) $%
$(UTILLIB)(create.o): create.o
ar rv $(UTILLIB) $%
$(UTILLIB)(delete.o): delete.o
ar rv $(UTILLIB) $%
$(UTILLIB)(init.o): init.o
ar rv $(UTILLIB) $%
$(UTILLIB)(scatter_gather.o): scatter_gather.o
ar rv $(UTILLIB) $%
$(UTILLIB)(pdata.o): pdata.o
ar rv $(UTILLIB) $%
$(UTILLIB)(northsouth.o): northsouth.o
ar rv $(UTILLIB) $%
$(UTILLIB)(eastwest.o): eastwest.o
ar rv $(UTILLIB) $%
$(UTILLIB)(index.o): index.o
ar rv $(UTILLIB) $%
$(UTILLIB)(cdata.o): cdata.o
ar rv $(UTILLIB) $%
$(UTILLIB)(putilities.o): putilities.o
ar rv $(UTILLIB) $%
#
# List of object module dependencies for distributed data sample.
main.o: main.f scalemod.o param.o diffusion.o fourier.o
diffusion.o: diffusion.f scalemod.o param.o
fourier.o: fourier.f diffusion.o scalemod.o param.o
scalemod.o: scalemod.f param.o
param.o: param.f
pdgexmp.o: pdgexmp.f $(UTILLIB)
simple.o: simple.f $(UTILLIB)
image.o: image.f $(UTILLIB)
## SPARSE MATRIX samples
# HBOBJS and PARTOBJS list objects module used in the SPARSE programs.
#
HBOBJS=read_mat.o mat_dist.o desym.o
PARTOBJS= part_block.o partbcyc.o partrand.o
sparse: hb_sample pde90 pde77
pde90: pde90.o part_block.o
$(LINK) $(LDFLAGS) pde90.o part_block.o -o pde90
pde77: pde77.o part_block.o
$(LINK) $(LDFLAGS) pde77.o part_block.o -o pde77
hb_sample: $(HBOBJS) hb_sample.o $(PARTOBJS)
$(LINK) $(LDFLAGS) hb_sample.o -o hb_sample \
$(HBOBJS) $(PARTOBJS)
#
# List of object module dependencies for sparse matrix sample.
$(HBOBJS) hb_sample.o: read_mat.mod mat_dist.mod part_bcyc.mod partrand.mod
part_bcyc.mod: partbcyc.o
#
# Rule to clean executable and program
cleanall:
rm -f *.lst *.o *.mod diffusion core image pdgexmp simple hb_sample pde90 pde77 libputils.a
# clean: /bin/rm -f *.o *.mod *.lst # # definitions for compiles
.f.mod: $(FORT) $(INCLUDE) $(FCOPT) -c $< .c.o: $(CC) $(INCLUDE) $(CCOPT) -c $< .f.o: $(FORT) $(INCLUDE) $(FCOPT) -c $<
#!/bin/ksh # # USING THE FORTRAN EXAMPLE # Copy the files from /usr/lpp/pessl.rte.common/example/fortran to a directory that # is part of a shared file system (e.g. NFS mounted). You can not run # the program from a private file system. # # You must have the same userid on the home node and each remote node. # # You must have remote execution authority on all the nodes. # # Invoke 'make'. # # In run.script, edit EXAMP_PATH below to point to the working directory # which contains the files. # # Invoke 'run.script'. # # # Script file to execute a sample program. # The first argument is the name of the sample to run # The remaining arguments are any needed to by the sample # # # Set the number of processors to be 8. export MP_PROCS=8 # # Set the program to run in user space. export MP_EUILIB=us # # Use the switch. export MP_EUIDEVICE=css0 # # Use the resource manager. export MP_RESD=yes # # Use the resource pool 0, this may need to be changed # depending on installation defaults used. export MP_RMPOOL=0 # # Do not use a hostfile list. export MP_HOSTFILE=NULL # # Use low information output level. export MP_INFOLEVEL=1 # # export MP_PGMMODEL=spmd # # Standard output is not node ordered. export MP_STDOUTMODE=unordered # # Retry node allocation every 60 seconds. export MP_RETRY=60 # # Retry node allocation five times. export MP_RETRYCOUNT=5 # # export MP_CSS_INTERRUPT=yes # export MP_PULSE=0 # # Label standard I/O by task number. export MP_LABELIO=yes poe $*