悲催的科学匠人 - 冷水's blog

fortran数组shape和范围的转换

http://chasm-interop.sourceforge.net/

http://software.intel.com/en-us/forums/showthread.php?t=40376&wapkw=%28%2Bfortran...%29

 

 

http://coding.derkeiler.com/Archive/Fortran/comp.lang.fortran/2004-06/0500.html

 

http://publib.boulder.ibm.com/infocenter/cellcomp/v9v111/index.jsp?topic=/com.ibm.xlf111.cell.doc/xlflr/f90pass.htm

gfortran 4.5不行, ifort 12可以

program tt
  use iso_c_binding
  implicit none
  integer,target :: a(100),n,i,j
  integer,pointer,dimension(:) :: ptr
  integer,pointer,dimension(:,:) :: p2d,p2d2
  type(c_ptr) :: cptr

  do n=1,100; a(n)=n;enddo
  ptr(0:29) => a(71:100)
  write(*,*) ptr

  p2d2(0:9,0:9) => a
  do j=0,9;do i=0,9
  write(*,*) i,j,p2d2(i,j)
  enddo;enddo
end

指针类型转换

采用fortran 2003标准iso_c_binding模块完成

program test
  use iso_c_binding
  implicit none
  
  interface getptr
  function fgetptr(string,ilen,ni,nj)
  use iso_c_binding
  implicit none
  real,pointer,dimension(:,:) :: fgetptr
  integer :: ilen,ni,nj
  character ::string(ilen)
  end function
  function ggetptr(string,ilen,irank,ishape)
  use iso_c_binding
  implicit none
  real,pointer,dimension(:,:) :: ggetptr
  integer :: ilen,irank
  integer :: ishape(irank)
  character ::string(ilen)
  end function

  function hgetptr(string,ilen,ishape)
  use iso_c_binding
  implicit none
  real,pointer,dimension(:,:) :: hgetptr
  integer :: ilen
  integer,dimension(:) :: ishape
  character ::string(ilen)
  end function    
  end interface   
  
  interface
    function getchar(string)
    character,pointer,dimension(:) :: getchar,string
    end function
  end interface
  
  type(c_ptr) :: p
  !character,target :: string(400)
  character,pointer,dimension(:) :: string,pp
  real,pointer,dimension(:,:) :: idata
  integer :: ishape(2)
  ishape(1) = 25
  ishape(2) = 4

  allocate(string(400))
  
  call convt1(string, 25,4,idata)
  
  write(*,*) '============================='
  idata => fgetptr(string,400,25,4)
  write(*,*) idata
  
  write(*,*) '============================='
  idata => ggetptr(string,400,2,ishape)
  write(*,*) idata
  
  write(*,*) '============================='
  idata => getptr(getchar(string),400,ishape)
  write(*,*) idata
  
end

function getchar(string)
   character,pointer,dimension(:) :: getchar,string
   
   getchar => string
   
end function


function fgetptr(string,ilen,ni,nj)
  use iso_c_binding
  implicit none
  real,pointer,dimension(:,:) :: fgetptr
  integer :: ilen,ni,nj
  character ::string(ilen)
  !
  type(c_ptr) :: p
  
  write(*,*) size(string)
  p = c_loc(string)
  CALL c_f_pointer(p,fgetptr,(/ni,nj/))
  
end function



function ggetptr(string,ilen,irank,ishape)
  use iso_c_binding
  implicit none
  real,pointer,dimension(:,:) :: ggetptr
  integer :: ilen,irank
  integer :: ishape(irank)
  character ::string(ilen)
  !
  type(c_ptr) :: p
  
  write(*,*) size(string)
  p = c_loc(string)
  CALL c_f_pointer(p,ggetptr,ishape)
  
end function



function hgetptr(string,ilen,ishape)
  use iso_c_binding
  implicit none
  real,pointer,dimension(:,:) :: hgetptr
  integer :: ilen
  integer,dimension(:) :: ishape
  character ::string(ilen)
  !
  type(c_ptr) :: p
  integer :: irank 
  irank = size(shape(hgetptr)) 
  
  write(*,*) size(string),irank
  p = c_loc(string)
  CALL c_f_pointer(p,hgetptr,ishape(1:irank))
  
end function


subroutine convt1(odata, ni,nj,tdata)
  implicit none
  integer :: ni,nj
  real,target :: odata(ni,nj)
  real,pointer,dimension(:,:) :: tdata
  
  integer :: i,j
  real :: n
  n=1.
  do j=1,nj
  do i=1,ni
    odata(i,j) = n
    n=n+1. 
  enddo
  enddo
  
  return
end subroutine

101-Loci框架的编译

需要安装如下的库
1 petsc-2.3.3-p13-02
2 openmpi
3 sundials-2.3.0
 

 
export PETSC_DIR=/opt/petsc-2.3.3-p13-02
export PETSC_ARCH=linux-gnu-c-opt
export PATH=/opt/Loci/Loci-Linux-x86_64-mpic++-rel-3-2-beta-12:$PATH
export LD_LIBRARY_PATH=/opt/sundials-2.3.0/lib:/opt/Loci/Loci-Linux-x86_64-mpic++-rel-3-2-beta-12/lib:$LD_LIBRARY_PATH
 

Bird-Meertens Formalism

设计与实现分离

自动化实现

设计规则,不考虑实现效率

规则是局部的,不必定义全局的执行规则

规则是相互依赖的,隐式的构成一个全局执行规则

相互依赖的规则被BFM自动连接成为规则图

规则图可进行变形和优化,而具有各种不同的执行效率,但是基础规则相同

 

设计人员的关注点从错综复杂的全局设计中解放

搞定局部则全局搞定!

 




Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee