<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
Many thanks for your reply! Just double check. So when I call MatCreateSeqAIJWithArrays from Fortran, I should define:<br>i(1)=0<br>j(1)=0<br>Correct?<br><br>Thanks again!<br><br>&gt; From: bsmith@mcs.anl.gov<br>&gt; To: petsc-users@mcs.anl.gov<br>&gt; Subject: Re: fortran interface for MatCreateSeqAIJWithArrays<br>&gt; Date: Mon, 24 Aug 2009 16:37:47 -0500<br>&gt; <br>&gt; <br>&gt; On Aug 24, 2009, at 4:19 PM, tsjb00 wrote:<br>&gt; <br>&gt; &gt; Hi, there!<br>&gt; &gt;<br>&gt; &gt; I have a quick question on the Fortran interface of  <br>&gt; &gt; MatCreateSeqAIJWithArrays.<br>&gt; &gt;<br>&gt; &gt; The documentation indicates 'The i and j indices are 0 based'.<br>&gt; <br>&gt;     This means the values in i and j start with zero; it does not mean  <br>&gt; you have to declare them as PetscInt i(0:a big number) you can declare  <br>&gt; them either as<br>&gt; (0:a big number minus 1) or (1:a big number)<br>&gt; <br>&gt; &gt; Is it so when called in Fortran? Should the array be 0 based too?<br>&gt; <br>&gt;     That does not matter.<br>&gt; <br>&gt; &gt; Any precautions to be taken to avoid segmentation error?<br>&gt; <br>&gt;     This routine does NOT copy the values in the arrays. This means  <br>&gt; that the arrays that YOU pass in, i,j,a must exist until you finish  <br>&gt; using the matrix. If you allocate them<br>&gt; then don't deallocate them until you destroy the matrix. If you  <br>&gt; declare them, for example PetscScalar a(somebignumber) then make sure  <br>&gt; this variable does not go out of<br>&gt; scope until the matrix is destroyed.<br>&gt; <br>&gt; &gt;<br>&gt; &gt; Another question is about the storage of vector/arrays when using  <br>&gt; &gt; Fortran. In the PETSc examples, say a vector X_v is created using  <br>&gt; &gt; DACreateXXXVector, then the values are accessed with array X_a using  <br>&gt; &gt; DAVecGetArray. To access individual value, the loop is coded as:<br>&gt; &gt;     for (k=zs; k&lt;zs+zm; k++) {<br>&gt; &gt;       for (j=ys; j&lt;ys+ym; j++) {<br>&gt; &gt;     for (i=xs; i&lt;xs+xm; i++) {<br>&gt; &gt;       for (idof=0;idof&lt;dof;idof++){<br>&gt; &gt;                   X_a[k][j][i][idof]=.............<br>&gt; &gt; ...............................................<br>&gt; &gt; &amp;nb sp;         }<br>&gt; &gt;         }<br>&gt; &gt;      }<br>&gt; &gt;  }<br>&gt; &gt; If in Fortran, how should the loop be structured? Please check if  <br>&gt; &gt; the following is right.<br>&gt; &gt;      do k=zs,zs+zm<br>&gt; &gt;      do j=ys,ys+ym<br>&gt; &gt;      do i=xs,xs+xm<br>&gt; &gt;      do iof=1,dof<br>&gt; &gt;            X_a(iof,i,j,k)=..............<br>&gt; &gt;       enddo<br>&gt; &gt; .............<br>&gt; <br>&gt;     Yes.<br>&gt; <br>&gt;     Barry<br>&gt; <br>&gt; &gt;<br>&gt; &gt;<br>&gt; &gt; Many thanks in advance!<br>&gt; &gt; 使用新一代 Windows Live Messenger 轻松交流和共享! 立刻下载!<br>&gt; <br><br /><hr />搜索本应是快乐的,不是么?  快乐搜索,有问必应!微软隆重推出! <a href='http://bing.com.cn?FORM=M00HCN&Publ=WLHMTAG&Crea=TEXT_Search_Where_You_Are_1X1' target='_new'>立即试用!</a></body>
</html>