updated.
authorGengbin Zheng <gzheng@illinois.edu>
Thu, 27 Oct 2005 02:31:50 +0000 (02:31 +0000)
committerGengbin Zheng <gzheng@illinois.edu>
Thu, 27 Oct 2005 02:31:50 +0000 (02:31 +0000)
doc/f90charm/manual.tex

index 925db7e8b91e04b3b7557074979fd34bec072d33..279c5ef7e3ab5fa5946b138467931ec0dd13b8ef 100644 (file)
@@ -74,10 +74,11 @@ As same in C++ charm program, you need to write a .ci interface file
 so that charm translator will generate helper functions. The syntax of .ci files
 are the same as in Charm++, however, for Fortran90 charm, there are certain
 constraints. First, you don't need to declare the main chare as like in Charm++;
-Second, it currently only support 1D Chare array, you cannot define Chare and 
-Group types. Third, there is no message declaration in .ci files, all the entry
-functions must be declared in the parameter marshelling fashion as in Charm++.
-So, what you can do in the .ci files is to define readonly variables and 1D
+Second, it currently only support up to 3D Chare array, you cannot define 
+Chare and Group types. Third, there is no message declaration in .ci files, 
+all the entry functions must be declared in the parameter marshelling 
+fashion as in Charm++.
+So, what you can do in the .ci files is to define readonly variables and 1-3D
 chare arrays with parameter marshelling entry functions.
 
 It is programmer's responsibility to write the implementation of chare's
@@ -90,7 +91,9 @@ for charm++ f90 runtime:
   \verb+SUBROUTINE <ChareName>_allocate(objPtr, aid, index)+
 
   You can think of this function as a constructor for each array element 
-with array index [index]. In this function user must allocate memory for 
+with array index [index]. For 3D array, for example, replace index in the 
+example by 3D arary index [index1, index2, index3]. 
+In this function user must allocate memory for 
 the Chare's user data and perform initialization.
 
   For each chare entry method you declared, you should write the corresponding 
@@ -100,7 +103,7 @@ fortran90 subroutine for it:
 
   Note, the first argument is the Chare pointer as you declared previously, the second argument is the array index which will be passed from charm runtime. 
 The rest of the parameters should be the same as you declare the entry function
-in .ci files.
+in .ci files. For higher dimensional arrays, replace myIndex by "myIndex1, myIndex2" for example.
 
 On the other side, the decl/def files generated by Charm++ translator also
 provide these functions for Chare creation and remote method invocation. 
@@ -109,14 +112,20 @@ for each Chare declared in .ci files, these subroutines are generated for use
 
   \verb+<ChareName>_CkNew(integer n, integer*8 aid)+
 
-  This subroutine creates the chare array of size n.
+  This subroutine creates the chare array of size n. For higher dimensional
+array creation, specify one integer for each dimension. For example, to create
+a 3D array:
 
-And for each entry method, this function is available for use in f90 program:
+  \verb+<ChareName>_CkNew(integer dim1, integer dim2, integer dim3, integer*8 aid)+
+
+And for each entry method, this function is available for use in f90 program
+if it is 1D array:
 
   \verb+SendTo_<ChareName>_<Entry>(charePtr, myIndex, data1, data2 ... )+
 
   This subroutine will send a message to the array element with the index
-as myIndex. 
+as myIndex. Similarly for arrays with higher dimensions, replace myIndex by
+corresponding number of array indices.
 
 There are several others things you need to know.
 
@@ -160,7 +169,7 @@ CkPrintf(...)    // note, the format string must terminated with '$$'
 
 Here is a summary of current constraints to write f90 binding charm++ programs:
 \begin{enumerate}
-\item in .ci files, only 1D Chare array is supported.
+\item in .ci files, only 1-3D Chare array is supported.
 \item readonly variables must be basic types, ie. they have to be integer, 
 float, etc scalar types or array types of these basic scalar types.
 \item instead of program main, your f90 main program starts from subroutine 
@@ -321,6 +330,8 @@ hello.ci and hello.C)
     will link hellof.o, hello.o against Charm's Fortran90 library
     to create your executable program 'hello'.
 
+  There is a 2D array example at charm/examples/charm++/f90charm/hello2D.
+
 \section{Run Program}
 
 To run the program, type: