- 论坛徽章:
- 0
|
编译一个程序,给出下面的提示:
/opt/mpich-1.2.5/gm_gcc/bin/mpicc abc.o farg.o -O -L/home/user/shaolxh/aztec64-gm/lib -laztec -lm -L/opt/mpich-1.2.5/gm_gcc/lib /usr/lib/gcc-lib/x86_64-pc-linux/3.2.2/libg2c.a -o abc.gm
/usr/lib/gcc-lib/x86_64-pc-linux/3.2.2/../../../../lib64/crt1.o(.text+0x21): In function `_start':
: undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [abc] Error 1
该如何解决?
程序abc.f
program abc
implicit none
include "az_aztecf.h"
include "mpif.h"
integer ierror,mycpu,i,j,k,it
integer proc_config(0:AZ_PROC_SIZE),N_update,update(0:40000)
integer ks,ke,NC(0:40000),IJ(0:20000,0:2000),A2(0:20000,0:10),
& options(0:AZ_OPTIONS_SIZE),extern_index(0:40000)
integer nrow,inode_N_update(0:47),bindx(0:40000),external(0:40000)
integer update_index(0:40000),data_org(0:40000)
double precision A1(0:20000,0:10),xs(0:20000),xtemp(0:20000),
& b(0:20000),val(0:20000),x(0:20000),f(0:20000),
& params(0:AZ_PARAMS_SIZE),status(0:AZ_STATUS_SIZE),
& pusi(0:400,0:400),theta(0:400,0:400),kesi(0:400,0:400),ss,
& starttime,endtime,si,so,d,ds,dt,dfai,pi,w,error1,error2,Pr,E,
& R,lpusi(0:400,0:400),ltheta(0:400,0:400),lkesi(0:400,0:400)
integer ns,nfai,time,times,n
parameter( pi=3.1415926535897932385d0)
common ds,dt,dfai,si,so,d,E,Pr,R
call MPI_INIT(ierror)
call MPI_COMM_SIZE(MPI_COMM_WORLD,mycpu,ierror)
starttime=MPI_WTIME(ierror)
R=13d0
E=0.00132d0
Pr=0.23d0
si=0.35d0
so=0.98d0
d=so-si
ss=2*pi*d
ns=25
ds=d/ns
dt=0.0001d0
times=anint(3/dt)
c dfai改的话200要改,subroutine readdata中的200也要改
dfai=pi/60
nfai=anint(2*pi/dfai )
w=pi
error1=0.0d0
error2=0.0d0
200 format(120(e20.10,4x))
call xishujuzhen(A1,A2,nfai,ns)
do i=0,ns
do j=0,nfai-1
pusi(i,j)=(dsin(pi*i*ds/d))**2*dcos(j*dfai)
lpusi(i,j)=pusi(i,j)
theta(i,j)=(dsin(pi*i*ds/d))**2*dcos(j*dfai)
ltheta(i,j)=theta(i,j)
kesi(i,j)=dcos(j*dfai)*(2*(pi/d)**2*dcos(2*pi*i*ds/d)
& +pi/((si+i*ds)*d)*dsin(2*pi*i*ds/d)
& -1/(si+i*ds)**2*(dsin(pi*i*ds/d))**2 )
lkesi(i,j)=kesi(i,j)
enddo
enddo
do 20 time=0,times
call rightf(F,ns,nfai,time,pusi,kesi,theta,
& lpusi,ltheta,lkesi)
do i=0,ns
do j=0,nfai-1
lpusi(i,j)=pusi(i,j)
ltheta(i,j)=theta(i,j)
lkesi(i,j)=kesi(i,j)
enddo
enddo
call AZ_SET_PROC_CONFIG(proc_config,MPI_COMM_WORLD)
nrow=(3*ns-1)*nfai
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
call MPI_BARRIER(MPI_COMM_WORLD,ierror)
call AZ_transform(proc_config,external,bindx,val,update,
& update_index,extern_index,data_org,
& N_update,0,0,0,0,AZ_MSR_MATRIX)
call AZ_defaults(options,params)
do i=0,N_update-1
x(update_index(i))=0.0
b(update_index(i))=F(update(i))
enddo
c options(AZ_solver)=AZ_bicgstab
options(AZ_solver)=AZ_gmres
c options(AZ_solver)=AZ_tfqmr
options(AZ_max_iter)=1000
options(AZ_output)=AZ_last
options(AZ_precond)=AZ_ls
options(AZ_poly_ord)=6
options(AZ_scaling)=AZ_row_sum
params(AZ_tol)=1.0d-12
call AZ_solve(x,b,options,params,0,bindx,0,0,
& 0,val,data_org,status,proc_config)
call AZ_invorder_vec(x,data_org,update_index,0,xtemp)
do i=0,mycpu-1
call MPI_gather(xtemp,N_update,MPI_DOUBLE_PRECISION,
& x,N_update,MPI_DOUBLE_PRECISION,
& i,MPI_COMM_WORLD,ierror)
enddo
c把方程的解转换成pusi函数
do i=0,ns
do j=0,nfai-1
kesi(i,j)=x(i*nfai+j)
enddo
enddo
do i=1,ns-1
do j=0,nfai-1
pusi(i,j)=x((ns+1)*nfai+(i-1)*nfai+j)
theta(i,j)=x(2*ns*nfai+(i-1)*nfai+j)
enddo
enddo
do j=0,nfai-1
pusi(0,j)=0
pusi(ns,j)=0
theta(0,j)=0
theta(ns,j)=0
enddo
c计算误差
if(proc_config(AZ_node)==0)then
open(11,file='pusi.dat')
open(13,file='theta.dat')
open(12,file='pusierror.dat')
open(14,file='thetaerror.dat')
do i=1,ns-1
do j=0,nfai-1
error1=error1+ds*dfai*dt/(ss*(time+1)*dt)*(pusi(i,j)-
& (dsin(pi*i*ds/d))**2*dcos(j*dfai)*dcos(w*(time+1)*dt))**2
error2=error2+ds*dfai*dt/(ss*(time+1)*dt)*(theta(i,j)-
& (dsin(pi*i*ds/d))**2*dcos(j*dfai)*dcos(w*(time+1)*dt))**2
enddo
enddo
if(mod(time,10)==0)then
write(12,*)dsqrt(error1),(time+1)*dt
write(14,*)dsqrt(error2),(time+1)*dt
endif
if(mod(time,1000)==0)then
write(11,*)'time= ',(time+1)*dt
write(13,*)'time= ',(time+1)*dt
do i=1,ns-1
write(11,200)(pusi(i,j),j=0,nfai-1)
write(13,200)(theta(i,j),j=0,nfai-1)
enddo
write(11,*)'=========================================='
write(13,*)'=========================================='
do i=1,ns-1
write(11,200)((dsin(pi*i*ds/d))**2*dcos(j*dfai)
& *dcos(w*(time+1)*dt),j=0,nfai-1)
write(13,200)((dsin(pi*i*ds/d))**2*dcos(j*dfai)
& *dcos(w*(time+1)*dt),j=0,nfai-1)
enddo
write(11,*)'-----------------------error--------------------'
write(13,*)'---------------------------------------------'
write(11,*)'error= ',dsqrt(error1)
write(13,*)'error= ',dsqrt(error2)
endif
endif
20 continue
endtime=MPI_WTIME(ierror)
write(11,*)endtime-starttime
call MPI_FINALIZE(ierror)
end
ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc1
subroutine xishujuzhen(A1,A2,nfai,ns)
implicit none
double precision si,s,ds,dfai,dt,pi,A1(0:20000,0:20),
& E,so,d,Pr,R
common ds,dt,dfai,si,so,d,E,Pr,R
parameter( pi=3.1415926535897932385d0)
integer i,j,n,nfai,ns,A2(0:20000,0:20)
do i=0,20000
do j=0,20
A1(i,j)=0
A2(i,j)=0
enddo
enddo
n=nfai
i=0
do j=0,nfai-1
A1(j,0)=1
A2(j,0)=j
A1(j,1)=-2/ds**2
A2(j,1)=(ns+1)*n+j
enddo
do i=1,ns-1
do j=0,nfai-1
A1(i*n+j,0)=1+dt*E*(2/((si+i*ds)*dfai)**2+2/ds**2)
A2(i*n+j,0)=i*n+j
A1(i*n+j,1)=-dt*E/((si+i*ds)*dfai)**2
A1(i*n+j,2)=-dt*E/((si+i*ds)*dfai)**2
A1(i*n+j,3)=dt/(1-(si+i*ds)**2)/dfai
A1(i*n+j,4)=-dt/(1-(si+i*ds)**2)/dfai
A1(i*n+j,5)=dt*R/(2*dfai)
A1(i*n+j,6)=-dt*R/(2*dfai)
if(j==0)then
A2(i*n+j,1)=i*n+n-1
A2(i*n+j,2)=i*n+j+1
A2(i*n+j,3)=(ns+1)*n+(i-1)*n+n-1
A2(i*n+j,4)=(ns+1)*n+(i-1)*n+j+1
A2(i*n+j,5)=2*ns*n+(i-1)*n+n-1
A2(i*n+j,6)=2*ns*n+(i-1)*n+j+1
elseif(j==nfai-1)then
A2(i*n+j,1)=i*n+j-1
A2(i*n+j,2)=i*n
A2(i*n+j,3)=(ns+1)*n+(i-1)*n+j-1
A2(i*n+j,4)=(ns+1)*n+(i-1)*n
A2(i*n+j,5)=2*ns*n+(i-1)*n+j-1
A2(i*n+j,6)=2*ns*n+(i-1)*n
else
A2(i*n+j,1)=i*n+j-1
A2(i*n+j,2)=i*n+j+1
A2(i*n+j,3)=(ns+1)*n+(i-1)*n+j-1
A2(i*n+j,4)=(ns+1)*n+(i-1)*n+j+1
A2(i*n+j,5)=2*ns*n+(i-1)*n+j-1
A2(i*n+j,6)=2*ns*n+(i-1)*n+j+1
endif
A1(i*n+j,7)=-dt*E/(ds**2)+dt*E/((si+i*ds)*2*ds)
A2(i*n+j,7)=(i-1)*n+j
A1(i*n+j, =-dt*E/(ds**2)-dt*E/((si+i*ds)*2*ds)
A2(i*n+j, =(i+1)*n+j
enddo
enddo
i=ns
do j=0,n-1
A1(ns*n+j,0)=1
A2(ns*n+j,0)=ns*n+j
A1(ns*n+j,1)=-2/ds**2
A2(ns*n+j,1)=(ns+1)*n+(ns-2)*n+j
enddo
cc 第二个方程
do i=1,ns-1
do j=0,nfai-1
A1((ns+1)*n+(i-1)*n+j,0)=-2/ds**2-2/((si+i*ds)*dfai)**2
A2((ns+1)*n+(i-1)*n+j,0)=(ns+1)*n+(i-1)*n+j
A1((ns+1)*n+(i-1)*n+j,1)=-1
A2((ns+1)*n+(i-1)*n+j,1)=i*n+j
A1((ns+1)*n+(i-1)*n+j,2)=1/((si+i*ds)*dfai)**2
A1((ns+1)*n+(i-1)*n+j,3)=1/((si+i*ds)*dfai)**2
if(j==0)then
A2((ns+1)*n+(i-1)*n+j,2)=(ns+1)*n+(i-1)*n+n-1
A2((ns+1)*n+(i-1)*n+j,3)=(ns+1)*n+(i-1)*n+j+1
elseif(j==nfai-1)then
A2((ns+1)*n+(i-1)*n+j,2)=(ns+1)*n+(i-1)*n+j-1
A2((ns+1)*n+(i-1)*n+j,3)=(ns+1)*n+(i-1)*n
else
A2((ns+1)*n+(i-1)*n+j,2)=(ns+1)*n+(i-1)*n+j-1
A2((ns+1)*n+(i-1)*n+j,3)=(ns+1)*n+(i-1)*n+j+1
endif
if(i==1)then
A1((ns+1)*n+(i-1)*n+j,4)=1/ds**2+1/((si+i*ds)*ds*2)
A2((ns+1)*n+(i-1)*n+j,4)=(ns+1)*n+i*n+j
elseif(i==ns-1)then
A1((ns+1)*n+(i-1)*n+j,4)=1/ds**2-1/((si+i*ds)*ds*2)
A2((ns+1)*n+(i-1)*n+j,4)=(ns+1)*n+(i-2)*n+j
else
A1((ns+1)*n+(i-1)*n+j,4)=1/ds**2-1/((si+i*ds)*2*ds)
A2((ns+1)*n+(i-1)*n+j,4)=(ns+1)*n+(i-2)*n+j
A1((ns+1)*n+(i-1)*n+j,5)=1/ds**2+1/((si+i*ds)*2*ds)
A2((ns+1)*n+(i-1)*n+j,5)=(ns+1)*n+i*n+j
endif
enddo
enddo
c第三个方程
do i=1,ns-1
do j=0,nfai-1
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
A1(2*ns*n+(i-1)*n+j,1)=dt/(2*dfai)
A1(2*ns*n+(i-1)*n+j,2)=-dt/(2*dfai)
A1(2*ns*n+(i-1)*n+j,3)=-dt/((si+i*ds)*dfai)**2
A1(2*ns*n+(i-1)*n+j,4)=-dt/((si+i*ds)*dfai)**2
if(j==0) then
A2(2*ns*n+(i-1)*n+j,1)=(ns+1)*n+(i-1)*n+n-1
A2(2*ns*n+(i-1)*n+j,2)=(ns+1)*n+(i-1)*n+j+1
A2(2*ns*n+(i-1)*n+j,3)=2*ns*n+(i-1)*n+n-1
A2(2*ns*n+(i-1)*n+j,4)=2*ns*n+(i-1)*n+j+1
elseif(j==nfai-1)then
A2(2*ns*n+(i-1)*n+j,1)=(ns+1)*n+(i-1)*n+j-1
A2(2*ns*n+(i-1)*n+j,2)=(ns+1)*n+(i-1)*n
A2(2*ns*n+(i-1)*n+j,3)=2*ns*n+(i-1)*n+j-1
A2(2*ns*n+(i-1)*n+j,4)=2*ns*n+(i-1)*n
else
A2(2*ns*n+(i-1)*n+j,1)=(ns+1)*n+(i-1)*n+j-1
A2(2*ns*n+(i-1)*n+j,2)=(ns+1)*n+(i-1)*n+j+1
A2(2*ns*n+(i-1)*n+j,3)=2*ns*n+(i-1)*n+j-1
A2(2*ns*n+(i-1)*n+j,4)=2*ns*n+(i-1)*n+j+1
endif
if(i==1)then
A1(2*ns*nfai+(i-1)*n+j,5)=-dt/(ds**2)-dt/((si+i*ds)*2*ds)
A2(2*ns*nfai+(i-1)*n+j,5)=2*ns*n+i*n+j
elseif(i==ns-1)then
A1(2*ns*nfai+(i-1)*n+j,5)=-dt/(ds**2)+dt/((si+i*ds)*2*ds)
A2(2*ns*nfai+(i-1)*n+j,5)=2*ns*n+(i-2)*n+j
else
A1(2*ns*nfai+(i-1)*n+j,5)=-dt/(ds**2)+dt/((si+i*ds)*2*ds)
A2(2*ns*nfai+(i-1)*n+j,5)=2*ns*n+(i-2)*n+j
A1(2*ns*nfai+(i-1)*n+j,6)=-dt/(ds**2)-dt/((si+i*ds)*2*ds)
A2(2*ns*nfai+(i-1)*n+j,6)=2*ns*n+i*n+j
endif
enddo
enddo
end
cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc2
subroutine rightf(F,ns,nfai,time,pusi,kesi,theta,
& lpusi,ltheta,lkesi)
implicit none
integer ns,nfai,time,i,j,n
double precision si,ds,dt,dfai,pi,F(0:20000),pusi(0:400,0:400),R
& ,kesi(0:400,0:400),theta(0:400,0:400),s,E,so,d,Pr,t,w
& ,lpusi(0:400,0:400),ltheta(0:400,0:400),lkesi(0:400,0:400)
parameter( pi=3.1415926535897932385d0 )
common ds,dt,dfai,si,so,d,E,Pr,R
do j=0,20000
F(j)=0
enddo
w=pi
n=nfai
do j=0,nfai-1
pusi(0,j)=0
pusi(ns,j)=0
enddo
t=time*dt
i=0
do j=0,nfai-1
F(j)=-kesi(0,j)+2/ds**2*pusi(1,j)
enddo
do i=1,ns-1
s=si+i*ds
do j=0,nfai-1
if(j==0)then
F(i*nfai+j)=kesi(i,j)+dt*3/2*(-1/s)*(
* (pusi(i,j+1)-pusi(i,nfai-1))/(2*dfai)*
* (kesi(i+1,j)-kesi(i-1,j))/(2*ds)
* -(pusi(i+1,j)-pusi(i-1,j))/(2*ds)*
* (kesi(i,j+1)-kesi(i,nfai-1))/(2*dfai)
* )
* -dt/2*(-1/s)*(
* (lpusi(i,j+1)-lpusi(i,nfai-1))/(2*dfai)*
* (lkesi(i+1,j)-lkesi(i-1,j))/(2*ds)
* -(lpusi(i+1,j)-lpusi(i-1,j))/(2*ds)*
* (lkesi(i,j+1)-lkesi(i,nfai-1))/(2*dfai)
* )
elseif(j==nfai-1)then
F(i*nfai+j)=kesi(i,j)+dt*3/2*(-1/s)*(
* (pusi(i,0)-pusi(i,j-1))/(2*dfai)*
* (kesi(i+1,j)-kesi(i-1,j))/(2*ds)
* -(pusi(i+1,j)-pusi(i-1,j))/(2*ds)*
* (kesi(i,0)-kesi(i,j-1))/(2*dfai)
* )
* -dt/2*(-1/s)*(
* (lpusi(i,0)-lpusi(i,j-1))/(2*dfai)*
* (lkesi(i+1,j)-lkesi(i-1,j))/(2*ds)
* -(lpusi(i+1,j)-lpusi(i-1,j))/(2*ds)*
* (lkesi(i,0)-lkesi(i,j-1))/(2*dfai)
* )
else
F(i*nfai+j)=kesi(i,j)+dt*3/2*(-1/s)*(
* (pusi(i,j+1)-pusi(i,j-1))/(2*dfai)*
* (kesi(i+1,j)-kesi(i-1,j))/(2*ds)
* -(pusi(i+1,j)-pusi(i-1,j))/(2*ds)*
* (kesi(i,j+1)-kesi(i,j-1))/(2*dfai)
* )
* -dt/2*(-1/s)*(
* (lpusi(i,j+1)-lpusi(i,j-1))/(2*dfai)*
* (lkesi(i+1,j)-lkesi(i-1,j))/(2*ds)
* -(lpusi(i+1,j)-lpusi(i-1,j))/(2*ds)*
* (lkesi(i,j+1)-lkesi(i,j-1))/(2*dfai)
* )
endif
F(I*nfai+j)=F(I*nfai+j)
- +dt*dcos(j*dfai)*(
& -w*(1.5*dsin(w*(time+1)*dt)-0.5*dsin(w*time*dt))*(
& 2*(pi/d)**2*dcos(2*pi*i*ds/d)
& +pi/((si+i*ds)*d)*dsin(2*pi*i*ds/d)
& -1/(si+i*ds)**2*(dsin(pi*i*ds/d))**2
& )
& -E*(1.5*dcos(w*(time+1)*dt)-0.5*dcos(w*time*dt))*(
& (3*pi/(d*(si+i*ds)**3)-8*(pi/d)**3/(si+i*ds))
& *dsin(2*pi*i*ds/d)
& -(6*(pi/(d*(si+i*ds)))**2+8*(pi/d)**4)*dcos(2*pi*i*ds/d)
& -3/(si+i*ds)**4*(sin(pi*i*ds/d))**2
& ) )
& +dt*(R+2/(1-(si+i*ds)**2))
& *(dsin(pi*i*ds/d))**2*dsin(j*dfai)
& *(1.5*dcos(w*(time+1)*dt)-0.5*dcos(w*time*dt))
- +dt*((1.5*(Cos((time+1)*dt*w)**2-0.5*(cos(time*dt*w))**2)
- *Sin((Pi*(s - si))/d)*
- (Pi*s*(d**2 + 8*Pi**2*s**2)*
- Cos((Pi*(s - si))/d) +
- d*(-(d*Pi*s*Cos((3*Pi*(s - si))/d)) +
- 2*(-d**2 + 2*Pi**2*s**2 +
- d**2*Cos((2*Pi*(s - si))/d))*
- Sin((Pi*(s - si))/d)))*Sin(2*j*dfai))/
- (4*d**3*s**4) )
enddo
enddo
i=ns
do j=0,nfai-1
F(i*nfai+j)=-kesi(i,j)+2/ds**2*pusi(i-1,j)
enddo
c 第三个方程
do i=1,ns-1
s=si+i*ds
do j=0,nfai-1
if(j==0)then
F(2*ns*n+(i-1)*nfai+j)=Pr/E*theta(i,j)
* +dt*3/2*(-1/s)*(
* (pusi(i,j+1)-pusi(i,nfai-1))/(2*dfai)*
* (theta(i+1,j)-theta(i-1,j))/(2*ds)
* -(pusi(i+1,j)-pusi(i-1,j))/(2*ds)*
* (theta(i,j+1)-theta(i,nfai-1))/(2*dfai)
* )
* -dt/2*(-1/s)*(
* (lpusi(i,j+1)-lpusi(i,nfai-1))/(2*dfai)*
* (ltheta(i+1,j)-ltheta(i-1,j))/(2*ds)
* -(lpusi(i+1,j)-lpusi(i-1,j))/(2*ds)*
* (ltheta(i,j+1)-ltheta(i,nfai-1))/(2*dfai)
* )
elseif(j==nfai-1)then
F(2*n*ns+(i-1)*nfai+j)=Pr/E*theta(i,j)
* +dt*3/2*(-1/s)*(
* (pusi(i,0)-pusi(i,j-1))/(2*dfai)*
* (theta(i+1,j)-theta(i-1,j))/(2*ds)
* -(pusi(i+1,j)-pusi(i-1,j))/(2*ds)*
* (theta(i,0)-theta(i,j-1))/(2*dfai)
* )
* -dt/2*(-1/s)*(
* (lpusi(i,0)-lpusi(i,j-1))/(2*dfai)*
* (ltheta(i+1,j)-ltheta(i-1,j))/(2*ds)
* -(lpusi(i+1,j)-lpusi(i-1,j))/(2*ds)*
* (ltheta(i,0)-ltheta(i,j-1))/(2*dfai)
* )
else
F(2*ns*n+(i-1)*nfai+j)=Pr/E*theta(i,j)
* +dt*3/2*(-1/s)*(
* (pusi(i,j+1)-pusi(i,j-1))/(2*dfai)*
* (theta(i+1,j)-theta(i-1,j))/(2*ds)
* -(pusi(i+1,j)-pusi(i-1,j))/(2*ds)*
* (theta(i,j+1)-theta(i,j-1))/(2*dfai)
* )
* -dt/2*(-1/s)*(
* (lpusi(i,j+1)-lpusi(i,j-1))/(2*dfai)*
* (ltheta(i+1,j)-ltheta(i-1,j))/(2*ds)
* -(lpusi(i+1,j)-lpusi(i-1,j))/(2*ds)*
* (ltheta(i,j+1)-ltheta(i,j-1))/(2*dfai)
* )
endif
F(2*ns*n+(i-1)*nfai+j)=F(2*ns*n+(i-1)*nfai+j)
& +dt*dcos(j*dfai)*(
& -Pr/E*w*(dsin(pi*i*ds/d))**2
& *(1.5*dsin(w*(time+1)*dt)-0.5*dsin(w*time*dt))
& -(1.5*dcos(w*(time+1)*dt)-0.5*dcos(w*time*dt))*
& ( 2*(pi/d)**2*dcos(2*pi*i*ds/d)
& +pi/(d*(si+i*ds))*dsin(2*pi*i*ds/d)
& -(dsin(pi*i*ds/d)/(si+i*ds))**2 )
& )
& +dt*(dsin(pi*i*ds/d))**2*dsin(j*dfai)
& *(1.5*dcos(w*(time+1)*dt)-0.5*dcos(w*time*dt))
enddo
enddo
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
#
# Fortran compiler
#
FC_GENERIC = f77
FC_SUN4 = f77
FC_SOLARIS = f77
FC_SGI = f77
FC_SGIM4 = f77
FC_SGI10K = f77
FC_DEC = f77
FC_I860 = if77
FC_HP = cc
FC_SUNMOS = sif77
FC_NCUBE = ncc
FC_SP2 = mpxlf
FC_T3E = f90
FC_LINUX = /opt/mpich-1.2.5/gm_gcc/bin/mpif77
FC_TFLOP = pgf77 -cougar
#
# USE C or Fortran compiler to link
#
LD_GENERIC = $(CC_GENERIC)
LD_SUN4 = $(FC_SUN4)
LD_SOLARIS = $(FC_SOLARIS)
LD_SGI = $(FC_SGI)
LD_SGIM4 = $(FC_SGIM4)
LD_SGI10K = $(FC_SGI10K)
LD_DEC = $(CC_DEC)
LD_I860 = $(CC_I860)
LD_HP = $(CC_HP)
LD_SUNMOS = $(CC_SUNMOS)
LD_NCUBE = $(CC_NCUBE)
LD_SP2 = $(CC_SP2)
LD_T3E = $(CC_T3E)
LD_LINUX = $(CC_LINUX)
LD_TFLOP = $(CC_TFLOP)
#
# Machine dependent fortran/C interface
#
CFORT_GENERIC = -Dappend_
CFORT_SUN4 = -Dappend_
CFORT_SOLARIS = -Dappend_
CFORT_SGI = -Dappend_
CFORT_SGIM4 = -Dappend_
CFORT_SGI10K = -Dappend_
CFORT_DEC = -Dappend_
CFORT_I860 = -Dappend_
CFORT_HP = -Dmatched
CFORT_SUNMOS = -Dappend_
CFORT_NCUBE = -Dcaps
CFORT_SP2 = -Dmatched
CFORT_T3E = -Dcaps
CFORT_LINUX = -Dappend_
CFORT_TFLOP = -Dappend_
#
# Compilation flags
#
CFLAGS_GENERIC = -O
CFLAGS_SUN4 = -O2 -vc -Xc
CFLAGS_SOLARIS = -O -vc
CFLAGS_SGI = -O -n32
CFLAGS_SGIM4 = -O -n32
CFLAGS_SGI10K = -O -64 -r10000
CFLAGS_DEC = -O2
CFLAGS_NCUBE = -O
CFLAGS_HP = -O4
CFLAGS_I860 = -O4
CFLAGS_SUNMOS = -O4
CFLAGS_SP2 = -O2
CFLAGS_T3E = -O3 -DT3E
CFLAGS_LINUX = -O3
CFLAGS_TFLOP = -O3
FFLAGS_GENERIC = -O
FFLAGS_SUN4 = -O2
FFLAGS_SOLARIS = -O2
FFLAGS_SGI = $(CFLAGS_SGI)
FFLAGS_SGIM4 = $(CFLAGS_SGIM4)
FFLAGS_SGI10K = $(CFLAGS_SGI10K)
FFLAGS_DEC = $(CFLAGS_DEC)
FFLAGS_I860 = $(CFLAGS_I860)
FFLAGS_HP = -O
FFLAGS_SUNMOS = $(CFLAGS_SUNMOS)
FFLAGS_NCUBE = $(CFLAGS_NCUBE)
FFLAGS_SP2 = $(CFLAGS_SP2)
FFLAGS_T3E = -O3 -dp
FFLAGS_LINUX = $(CFLAGS_LINUX)
FFLAGS_TFLOP = $(CFLAGS_TFLOP)
LDFLAGS_GENERIC = -O
LDFLAGS_SUN4 = -O2
LDFLAGS_SOLARIS = -O2
LDFLAGS_SGI = -O2 -n32
LDFLAGS_SGIM4 = -O -n32
LDFLAGS_SGI10K = -O -64 -r10000
LDFLAGS_DEC = -O2
LDFLAGS_I860 = -O4
LDFLAGS_HP = -O4
LDFLAGS_SUNMOS = -O4
LDFLAGS_NCUBE = -O -Nstack 40000 -Nheap 2800000 -Ncomm 200000
LDFLAGS_SP2 = -O
LDFLAGS_T3E = -O -Wl"-D equiv(DCOPY)=SCOPY;equiv(DDOT)=SDOT;equiv(DSQRT)=SQRT;equiv(DNRM2)=SNRM2;equiv(DSCAL)=SSCAL;equiv(DAXPY)=SAXPY;equiv(DASUM)=SASUM;equiv(IDAMAX)=ISAMAX;equiv(DSWAP)=SSWAP;equiv(DGEMV)=SGEMV;equiv(DGEMM)=SGEMM;equiv(DTRSM)=STRSM;equiv(DGER)=SGER;equiv(DTRMM)=STRMM;equiv(DTRMV)=STRMV;equiv(DSYRK)=SSYRK"
LDFLAGS_LINUX = -O
LDFLAGS_TFLOP = -O
#
# Communication Libraries to link
#
CLIB_SERIAL =
CLIB_I860 =
CLIB_SUNMOS =
CLIB_HP =
CLIB_NCUBE =
CLIB_MPI = $(MPI_LIB)
LIB_SUN4 = -cg89
LIB_SOLARIS = -L/opt/SUNWspro/lib -lnsl -lsocket -lgen -lnsl \
-lsocket -lgen -lM77 -lF77 -lsunmath -lm
LIB_SGI = -lI77 -lF77 -lisam
LIB_SGIM4 = -lI77 -lF77 -lisam
LIB_SGI10K =
LIB_DEC = -lots -lfor
LIB_I860 = -lkmath -lf -nx
LIB_SUNMOS = -lkmath -lf
LIB_NCUBE = -lblas -lf
LIB_SP2 = -lxlf90
LIB_T3E =
#LIB_LINUX = /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/libg2c.a
#LIB_LINUX = /public/images/tc4000a/usr/lib/gcc-lib/x86_64-pc-linux/3.2.2/32/libg2c.a
LIB_LINUX =/usr/lib/gcc-lib/x86_64-pc-linux/3.2.2/libg2c.a -lg2c -lm
LIB_TFLOP = -lkmath -lf
# 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
#
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
CC = $(CC_LINUX)
FC = $(FC_LINUX)
CFORT = $(CFORT_LINUX)
CFLAGS2 = $(CFLAGS_LINUX)
FFLAGS2 = $(FFLAGS_LINUX)
LDFLAGS2 = $(LDFLAGS_LINUX)
LIB_MACH_DEP = $(CLIB_MPI) $(LIB_LINUX)
LD_COMPILER = $(LD_LINUX)
MAX_MEM = 16731136
GEN_CFLAGS = -I/home/user/shaolxh/aztec64-gm/lib -DMAX_MEM_SIZE=$(MAX_MEM) -DCOMM_BUFF_SIZE=200000 \
-DMAX_CHUNK_SIZE=200000
GEN_LIBS = -L/home/user/shaolxh/aztec64-gm/lib -laztec -lm -lg2c
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.
#####################################
# Define implicit compilation rules #
#####################################
all: abc
# application code
abc: $(OBJ)
$(LD_COMPILER) $(OBJ) $(LDFLAGS) -o abc.gm
clean:
@echo "cleaning ..."
/bin/rm -f $(OBJ) |
|