On Tue, Oct 4, 2011 at 3:15 PM, Barry Smith <span dir="ltr">&lt;<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
  Are you using the PETSc makefiles to compile it? Or did you make up that compile line yourself? Why not just use the PETSc makefile to compile it?<br>
<br>
  Presumably cusp/thrust has some pattern for what include files need to be included in what order. If you do not know the pattern then why not start by copying what PETSc does, since that compiles? For example<br>
cuspvecimpl.h has<br>
<br>
#include &lt;cublas.h&gt;<br>
#include &lt;cusp/blas.h&gt;<br>
#include &lt;thrust/device_vector.h&gt;<br>
#include &lt;thrust/iterator/constant_iterator.h&gt;<br>
#include &lt;thrust/transform.h&gt;<br>
#include &lt;thrust/iterator/permutation_iterator.h&gt;<br>
<br>
while cuspmatimpl.h has<br>
<br>
#include &lt;../src/vec/vec/impls/seq/seqcusp/cuspvecimpl.h&gt;<br>
#include &lt;cusp/csr_matrix.h&gt;<br>
#include &lt;cusp/multiply.h&gt;<br>
/*for MatCreateSeqAIJCUSPFromTriple*/<br>
#include &lt;cusp/coo_matrix.h&gt;<br>
<br>
so start with at least those.   Generally just picking a couple of random include files from some C++ package (like cusp/thrust)  and including them won&#39;t work.</blockquote><div><br></div><div>I believe that your problem is the clash of VecType between CUSP and PETSc. In <a href="http://aijcusp.cu">aijcusp.cu</a>, we have</div>
<div><br></div><div><div>#undef VecType</div><div>#include &quot;../src/mat/impls/aij/seq/seqcusp/cuspmatimpl.h&quot;</div></div><div><br></div><div>    Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<font color="#888888"><br>
   Barry<br>
</font><div><div></div><div class="h5"><br>
<br>
On Oct 4, 2011, at 2:07 PM, Shiyuan wrote:<br>
<br>
&gt; Hi,<br>
&gt;    I cannot compiling a source file with petsc.h and cusp headers like the following:<br>
&gt;<br>
&gt; #include&quot;petsc.h&quot;<br>
&gt; #include&lt;iostream&gt;<br>
&gt; #include &quot;cusp/csr_matrix.h&quot;<br>
&gt; #include &lt;cusp/krylov/cg.h&gt;<br>
&gt; int main(void){<br>
&gt;     std::cout&lt;&lt;&quot;Hello World!&quot;&lt;&lt;std::endl;<br>
&gt;     return 0;<br>
&gt; }<br>
&gt;<br>
&gt; I use the following  to compile it:<br>
&gt;<br>
&gt; nvcc  -m64 -O -arch=sm_13  -c --compiler-options=&quot;-Wall -Wwrite-strings -Wno-strict-aliasing -Wno-unknown-pragmas -O -I/home/guest/sgu1/softwares/petsc-dev/include -I/home/guest/sgu1/softwares/petsc-dev/helena-cxx-nompi-os64-release/include -I/usr/local/cuda/include -I/home/guest/sgu1/softwares/cusp-library/ -I/home/guest/sgu1/softwares/thrust/ -I/home/guest/sgu1/softwares/petsc-dev/include/mpiuni  -DCUDA=1 -I/home/guest/sgu1/softwares/slepc-dev -I/home/guest/sgu1/softwares/slepc-dev/helena-cxx-nompi-os64-release/include -I/home/guest/sgu1/softwares/slepc-dev/include -I/home/guest/sgu1/softwares/ImageMagick-6.7.2/include/ImageMagick  -D__INSDIR__= -I/home/guest/sgu1/softwares/slepc-dev -I/home/guest/sgu1/softwares/slepc-dev/helena-cxx-nompi-os64-release/include -I/home/guest/sgu1/softwares/slepc-dev/include&quot; MyKspTmp4.cu -o MyKspTmp4.o<br>

&gt;<br>
&gt; and it gives me error:<br>
&gt; /usr/local/cuda/include/thrust/detail/device/cuda/detail/b40c/vector_types.h(37): error: expected an identifier<br>
&gt;<br>
&gt; I think I did not do it in a correct way. I took a a look at some of petsc&#39;s .cu files, they usually include a  long list of headers. Can petsc.h directly included in a source code with cusp headers? What&#39;s the correct way to do it?  Does the makefile system in petsc provide the command or flags to do that? How can I obtain those flags?<br>

&gt;<br>
&gt; And after I compile it and obtain .o files, can I use g++ to link the .o files with petcs libs and other .o files as usual, i.e.,<br>
&gt;     g++ -o $(BIN_DIR)/$@ $(CPPFLAGS) $@.s $(objects) $(PETSC_LIB) $(OTHERS)<br>
&gt; or I need to do some extra steps and some specific linking flags to do that?<br>
&gt; Thanks.<br>
&gt;<br>
&gt; Shiyuan<br>
&gt;<br>
&gt;<br>
&gt;<br>
<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
-- Norbert Wiener<br>