<html>
<body>
At 03:16 PM 6/28/2005, Stephen Scott wrote:<br>
<blockquote type=cite class=cite cite="">Dear list again, <br><br>
I may have found the problem.&nbsp; If I change 'USE mpi' to 'INCLUDE
'mpif.h' the program appears to run and compile without errors.&nbsp;
Does anyone have an explanation for this? </blockquote><br>
The problem is that it is very difficult to write Fortran 90 modules that
allow arbitrary number of dimensions and types; in MPICH-1, we handle up
to 3 dimensional arrays for the standard, predefined types.&nbsp; As it
is, this creates a Fortran90 module file, independent of the code that
implements MPI, that is already larger than the entire MPI library.&nbsp;
This is a limitation in the implementation of the Fortran 90 module, but
it is one that is very difficult to overcome, given the design of Fortran
90.&nbsp; <br><br>
Bill<br><br>
<br>
<blockquote type=cite class=cite cite="">Cheers, <br><br>
Steve <br><br>
On 28 Jun 2005, at 19:52, Stephen Scott wrote: <br><br>
<blockquote type=cite class=cite cite="">Dear list, <br><br>
I have a question/problem related to the use of MPI_FILE_WRITE_ALL from
the ROMIO package.&nbsp; I want to write a distributed 4D fortran array
to file using the ROMIO library.&nbsp; The array is divided along the
third dimension.&nbsp;&nbsp; A section of the code is listed below.&nbsp;
<br><br>
The purpose of the subroutine is to write the 4D fluid_uk(:,:,:,:)
distributed array to file on node 0.&nbsp; However, I get a compile time
error for the call to MPI_FILE_WRITE_ALL&nbsp; - 'There is no matching
specific subroutine for this generic subroutine call.&nbsp;
[MPI_FILE_WRITE_ALL]' <br><br>
I presumed that MPI_FILE_WRITE_ALL would accept an array of any dimension
but it appears I am wrong.&nbsp; I would be most grateful for any
feedback or suggestions for the list! <br><br>
Thanks in advance! <br><br>
Steve <br><br>
mpich-1.2.6 <br>
intel compilers 8.0 <br>
Red Hat Enterprise Linux WS release 3 (Taroon Update 1) <br><br>
<br>
<font face="Courier, Courier">SUBROUTINE fluid_restart_write(time,ierr)
<br><br>
&nbsp;&nbsp; USE precision <br>
&nbsp;&nbsp; USE fluid_arrays,&nbsp;&nbsp;&nbsp; ONLY : fluid_uk <br>
&nbsp;&nbsp; USE domain_params,&nbsp;&nbsp; ONLY : ni,nj,nk <br>
&nbsp;&nbsp; USE mpi <br><br>
&nbsp;&nbsp; IMPLICIT NONE <br><br>
&nbsp;&nbsp;
INTEGER,INTENT(INOUT)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:: ierr <br>
&nbsp;&nbsp;
INTEGER,INTENT(IN)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:: time <br>
&nbsp;&nbsp;
INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:: myrank <br>
&nbsp;&nbsp;
INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:: nprocs <br>
&nbsp;&nbsp;
INTEGER*8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:: disp=0 <br>
&nbsp;&nbsp;
CHARACTER(len=100)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:: tstep&nbsp;&nbsp; <br>
&nbsp;&nbsp;
CHARACTER(len=10)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:: execute_date <br>
&nbsp;&nbsp;
CHARACTER(len=10)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:: execute_time <br>
&nbsp;&nbsp;
INTEGER,PARAMETER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:: MASTER = 0 <br><br>
&nbsp;&nbsp;
INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:: gsizes(4) <br>
&nbsp;&nbsp;
INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:: distribs(4) <br>
&nbsp;&nbsp;
INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:: dargs(4) <br>
&nbsp;&nbsp;
INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:: psizes(4) <br>
&nbsp;&nbsp;
INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:: local_size <br>
&nbsp;&nbsp;
INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:: PANDORA_RESTART_TYPE <br>
&nbsp;&nbsp;
INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:: PANDORA_RESTART_FILE <br>
&nbsp;&nbsp;
INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:: PANDORA_COMM <br>
&nbsp;&nbsp;
INTEGER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:: status(MPI_STATUS_SIZE) <br><br>
&nbsp;&nbsp; CALL MPI_COMM_RANK(MPI_COMM_WORLD,myrank,ierr) <br>
&nbsp;&nbsp; CALL MPI_COMM_SIZE(MPI_COMM_WORLD,nprocs,ierr) <br><br>
&nbsp;&nbsp; gsizes&nbsp;&nbsp; = (/ni,nj,nk,3/) <br>
&nbsp;&nbsp; distribs = MPI_DISTRIBUTE_BLOCK <br>
&nbsp;&nbsp; dargs&nbsp;&nbsp;&nbsp; = MPI_DISTRIBUTE_DFLT_DARG <br>
&nbsp;&nbsp; psizes&nbsp;&nbsp; = (/1,1,nprocs,1/) <br><br>
&nbsp;&nbsp; CALL
MPI_TYPE_CREATE_DARRAY(nprocs,myrank,4,gsizes,distribs,dargs,psizes,
&amp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
MPI_ORDER_FORTRAN,MPI_DOUBLE_COMPLEX,PANDORA_RESTART_TYPE,ierr) <br><br>
&nbsp;&nbsp; CALL MPI_TYPE_COMMIT(PANDORA_RESTART_TYPE,ierr) <br><br>
&nbsp;&nbsp; ! fname_frestart defined earlier in module <br><br>
&nbsp;&nbsp; CALL
MPI_FILE_OPEN(MPI_COMM_WORLD,fname_frestart,MPI_MODE_WRONLY+MPI_MODE_CREATE,
&amp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
MPI_INFO_NULL,PANDORA_RESTART_FILE,ierr) <br><br>
&nbsp;&nbsp; CALL
MPI_FILE_SET_VIEW(PANDORA_RESTART_FILE,disp,MPI_DOUBLE_COMPLEX,PANDORA_RESTART_TYPE,
&amp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&quot;native&quot;,MPI_INFO_NULL,ierr) <br><br>
&nbsp;&nbsp; ! fluid_uk(ni,nj,nk/nprocs,3) <br>
&nbsp;&nbsp; local_size = ni*nj*(nk/nprocs)*3 <br>
<br>
&nbsp;&nbsp; CALL
MPI_FILE_WRITE_ALL(PANDORA_RESTART_FILE,fluid_uk,local_size,MPI_DOUBLE_COMPLEX,status,ierr)
<br><br>
&nbsp;&nbsp; CALL MPI_FILE_CLOSE(PANDORA_RESTART_FILE,ierr) <br><br>
END SUBROUTINE </font></blockquote>&lt;/blockquote&gt;&lt;/x-html&gt;
</blockquote>
<x-sigsep><p></x-sigsep>
William Gropp<br>
<a href="http://www.mcs.anl.gov/~gropp" eudora="autourl">
http://www.mcs.anl.gov/~gropp</a></body>
</html>