You have to pass PETSC_NULL_OBJECT instead of PETSC_NULL in Fortran.
>From the man pages: "This macro does not exist in Fortran; you must use PETSC_NULL_INTEGER, PETSC_NULL_DOUBLE_PRECISION, PETSC_NULL_FUNCTION, PETSC_NULL_OBJECT etc " http://www.mcs.anl.gov/petsc/petsc-dev/docs/manualpages/Sys/PETSC_NULL.html#PETSC_NULL John On Fri, May 4, 2012 at 2:01 PM, TAY wee-beng <zonexo at gmail.com> wrote: > > On 4/5/2012 5:17 PM, Matthew Knepley wrote: > > On Fri, May 4, 2012 at 11:05 AM, TAY wee-beng <zonexo at gmail.com> wrote: > >> >> On 4/5/2012 3:05 PM, Matthew Knepley wrote: >> >> On Fri, May 4, 2012 at 8:59 AM, TAY wee-beng <zonexo at gmail.com> wrote: >> >>> >>> Hi, >>> >>> Is there anything else I can try to get it working right? >>> >> >> The MatGetNullSpaceRemove() is missing. >> >> Where should I add MatGetNullSpaceRemove and what are its syntax? I >> googled but there's no results. >> > > Fixed in p;etsc-dev: > > > http://www.mcs.anl.gov/petsc/petsc-dev/docs/manualpages/Mat/MatNullSpaceRemove.html > > > I just compiled the updated petsc-dev but I got the same error msg when I > use: > > call MatNullSpaceRemove(nullspace,b,PETSC_NULL,ierr) > > error LNK2019: unresolved external symbol MATNULLSPACEREMOVE referenced in > function COMPUTERHS > 1>c:\obj_tmp\ex29f\Debug\ex29f.exe : fatal error LNK1120: 1 unresolved > externals > > > > Matt > > >> Thanks. >> >> >> Matt >> >> >>> Thanks? >>> >>> >>> On 2/5/2012 10:11 PM, Matthew Knepley wrote: >>> >>> On Wed, May 2, 2012 at 1:55 PM, TAY wee-beng <zonexo at gmail.com> wrote: >>> >>>> Hi, >>>> >>>> I did a MatView and VecView on both C and Fortran, right after Mat and >>>> Vec assembly. I have attached the printout below. They are exactly the >>>> same, but yet the result is different in Neumann condition. However, the >>>> dirichlet condition gives the correct ans. Is there anything else that >>>> could be wrong even if the Mat and Vec are the same? >>>> >>> >>> Did you set the null space for the matrix when you have Neumann >>> conditions? >>> >>> Yes, for the matrix, I set as: >>> >>> call >>> MatNullSpaceCreate(PETSC_COMM_WORLD,PETSC_TRUE,0,PETSC_NULL_OBJECT,nullspace,ierr) >>> >>> call MatSetNullSpace(jac,nullspace,ierr) >>> >>> call MatNullSpaceDestroy(nullspace,ierr) >>> >>> for the Vec, >>> >>> call >>> MatNullSpaceCreate(PETSC_COMM_WORLD,PETSC_TRUE,0,PETSC_NULL_OBJECT,nullspace,ierr) >>> >>> *!call MatNullSpaceRemove(nullspace,b,PETSC_NULL,ierr)* >>> >>> call MatNullSpaceDestroy(nullspace,ierr) >>> >>> MatNullSpaceRemove was comment out because there's error during linking >>> >>> >>> >>> Matt >>> >>> >>>> Thanks! >>>> >>>> Fortran: >>>> >>>> Matrix Object: 1 MPI processes >>>> type: seqaij >>>> row 0: (0, 2) (1, -1) (3, -1) >>>> row 1: (0, -1) (1, 3) (2, -1) (4, -1) >>>> row 2: (1, -1) (2, 2) (5, -1) >>>> row 3: (0, -1) (3, 3) (4, -1) (6, -1) >>>> row 4: (1, -1) (3, -1) (4, 4) (5, -1) (7, -1) >>>> row 5: (2, -1) (4, -1) (5, 3) (8, -1) >>>> row 6: (3, -1) (6, 2) (7, -1) >>>> row 7: (4, -1) (6, -1) (7, 3) (8, -1) >>>> row 8: (5, -1) (7, -1) (8, 2) >>>> Vector Object:Vec_0000000084000000_0 1 MPI processes >>>> type: mpi >>>> Process [0] >>>> 0.25 >>>> 0.0205213 >>>> 1.135e-005 >>>> 0.0205213 >>>> 0.00168449 >>>> 9.31663e-007 >>>> 1.135e-005 >>>> 9.31663e-007 >>>> 5.15289e-010 >>>> Vector Object:Vec_0000000084000000_1 1 MPI processes >>>> type: mpi >>>> Process [0] >>>> 0.14924 >>>> 0.0242397 >>>> -0.0260347 >>>> 0.0242397 >>>> -0.0256192 >>>> -0.0400102 >>>> -0.0260347 >>>> -0.0400102 >>>> -0.0400102 >>>> Press any key to continue . . . >>>> >>>> C: >>>> >>>> Matrix Object: 1 MPI processes >>>> type: seqaij >>>> row 0: (0, 2) (1, -1) (3, -1) >>>> row 1: (0, -1) (1, 3) (2, -1) (4, -1) >>>> row 2: (1, -1) (2, 2) (5, -1) >>>> row 3: (0, -1) (3, 3) (4, -1) (6, -1) >>>> row 4: (1, -1) (3, -1) (4, 4) (5, -1) (7, -1) >>>> row 5: (2, -1) (4, -1) (5, 3) (8, -1) >>>> row 6: (3, -1) (6, 2) (7, -1) >>>> row 7: (4, -1) (6, -1) (7, 3) (8, -1) >>>> row 8: (5, -1) (7, -1) (8, 2) >>>> Vector Object:Vec_0x1d3b000_0 1 MPI processes >>>> type: mpi >>>> Process [0] >>>> 0.25 >>>> 0.0205212 >>>> 1.135e-05 >>>> 0.0205212 >>>> 0.00168449 >>>> 9.31663e-07 >>>> 1.135e-05 >>>> 9.31663e-07 >>>> 5.15288e-10 >>>> Vector Object:Vec_0x1d3b000_1 1 MPI processes >>>> type: mpi >>>> Process [0] >>>> 0.139311 >>>> 0.0305751 >>>> -0.0220633 >>>> 0.0305751 >>>> -0.0135158 >>>> -0.042185 >>>> -0.0220633 >>>> -0.042185 >>>> -0.058449 >>>> >>>> >>>> >>>> Yours sincerely, >>>> >>>> TAY wee-beng >>>> >>>> >>>> On 1/5/2012 11:54 PM, Matthew Knepley wrote: >>>> >>>> On Tue, May 1, 2012 at 5:48 PM, TAY wee-beng <zonexo at gmail.com> wrote: >>>> >>>>> Hi, >>>>> >>>>> Do you mean my method is wrong? >>>>> >>>>> I am following the template of ex22f, >>>>> >>>>> where the variables are declared as : >>>>> >>>>> PetscScalar v(5) >>>>> >>>>> MatStencil row(4),col(4,5) >>>>> >>>>> Hence, >>>>> >>>>> for the neumann BC >>>>> >>>>> num = 1 >>>>> >>>>> if (j/=0) then >>>>> >>>>> v(num) = -rho*HxdHy >>>>> >>>>> col(MatStencil_i,num) = i >>>>> >>>>> col(MatStencil_j,num) = j-1 >>>>> >>>>> num = num + 1 >>>>> >>>>> end if >>>>> >>>>> if (i/=0) then >>>>> >>>>> v(num) = -rho*HydHx >>>>> >>>>> col(MatStencil_i,num) = i-1 >>>>> >>>>> col(MatStencil_j,num) = j >>>>> >>>>> num = num + 1 >>>>> >>>>> end if >>>>> >>>>> if (i/=mx-1) then >>>>> >>>>> v(num) = -rho*HydHx >>>>> >>>>> col(MatStencil_i,num) = i+1 >>>>> >>>>> col(MatStencil_j,num) = j >>>>> >>>>> num = num + 1 >>>>> >>>>> end if >>>>> >>>>> if (j/=my-1) then >>>>> >>>>> v(num) = -rho*HxdHy >>>>> >>>>> col(MatStencil_i,num) = i >>>>> >>>>> col(MatStencil_j,num) = j+1 >>>>> >>>>> num = num + 1 >>>>> >>>>> end if >>>>> >>>>> v(num) = ((num-1)/2.0)*rho*(HxdHy + HydHx) >>>>> >>>>> print *, v >>>>> >>>>> col(MatStencil_i,num) = i >>>>> >>>>> col(MatStencil_j,num) = j >>>>> >>>>> !num = num + 1 >>>>> >>>>> call >>>>> MatSetValuesStencil(jac,i1,row,num,col,v,INSERT_VALUES,ierr) >>>>> >>>>> I do not get any more out of range error. However,my ans is still >>>>> different from that of ex29 in C. >>>>> >>>> >>>> This is very simple. You have an error in your code. Checking it is >>>> very simple: run the code and >>>> break in MatSetValues(). Make sure ex29 makes calls with exactly the >>>> same indices as your ex29f. >>>> >>>> Matt >>>> >>>> >>>>> Yours sincerely, >>>>> >>>>> TAY wee-beng >>>>> >>>> >>>> -- >>>> What most experimenters take for granted before they begin their >>>> experiments is infinitely more interesting than any results to which their >>>> experiments lead. >>>> -- Norbert Wiener >>>> >>>> >>> >>> >>> -- >>> What most experimenters take for granted before they begin their >>> experiments is infinitely more interesting than any results to which their >>> experiments lead. >>> -- Norbert Wiener >>> >>> >> >> >> -- >> What most experimenters take for granted before they begin their >> experiments is infinitely more interesting than any results to which their >> experiments lead. >> -- Norbert Wiener >> >> > > > -- > What most experimenters take for granted before they begin their > experiments is infinitely more interesting than any results to which their > experiments lead. > -- Norbert Wiener > > -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20120504/a2bebe2b/attachment-0001.htm>
