[Fortran] 纯文本查看 复制代码
program main
implicit none
interface
subroutine PMF_unfold(A,ncmpx,ncmpy,nhx,nhy,f,B,B1,B2,B3,B4)
integer::ncmpx,ncmpy,nhx,nhy,f
real*4::A(ncmpx,ncmpy,nhx,nhy)
real*4,pointer::B(:,:)
real*4,target::B1(ncmpx,ncmpy*nhx*nhy),B2(ncmpy,ncmpx*nhx*nhy),B3(nhx,ncmpx*ncmpy*nhy),B4(nhy,ncmpx*ncmpy*nhx)
end subroutine
end interface
!主函数
real*4,allocatable::A1(:,:,:,:)
real*4,allocatable,target::B1(:,:),B2(:,:),B3(:,:),B4(:,:)
real*4,pointer::B(:,:)
integer::ncmpx,ncmpy,nhx,nhy,f
ncmpx=3; ncmpy=4; nhx=5; nhy=6;
allocate(A1(ncmpx,ncmpy,nhx,nhy))
allocate(B1(ncmpx,ncmpy*nhx*nhy),B2(ncmpy,ncmpx*nhx*nhy),B3(nhx,ncmpx*ncmpy*nhy),B4(nhy,ncmpx*ncmpy*nhx))
!调用函数
do f=1,4
call PMF_unfold(A1,ncmpx,ncmpy,nhx,nhy,f,B,B1,B2,B3,B4)
write(*,'(10f4.1)')B
write(*,*)
enddo
deallocate(A1,B1,B2,B3,B4)
end ! program main
!---------------------------------------
!子函数
subroutine PMF_unfold(A,ncmpx,ncmpy,nhx,nhy,f,B,B1,B2,B3,B4)
implicit none
integer::ncmpx,ncmpy,nhx,nhy,f
real*4::A(ncmpx,ncmpy,nhx,nhy)
real*4,pointer::B(:,:)
real*4,target::B1(ncmpx,ncmpy*nhx*nhy),B2(ncmpy,ncmpx*nhx*nhy),B3(nhx,ncmpx*ncmpy*nhy),B4(nhy,ncmpx*ncmpy*nhx)
B1=1; B2=2; B3=3; B4=4; ! 测试数据
if(f==1)then
B=>B1(:,:)
elseif(f==2)then
B=>B2(:,:)
elseif(f==3)then
B=>B3(:,:)
elseif(f==4)then
B=>B4(:,:)
end if
end ! subroutine