As matt mentioned - if you are programming in fortran - you need to
learn fortran.

On Fri, 16 Apr 2010, ????Leping Chen? wrote:

>   petsc teams,
>       
>        PetscOffset xx_i
>        Vec         x
>        double precision u(6) 
>        
>         call VecGetArray(x,u,xx_i,ierr)
>         do 30 i=1,n
>           u(i) = 1000.0*i

This is incorrect usage. Check the examples. It should be:

          u(i+xx_i) = 1000.0*i

Or check  VecGetArrayF90 as mentioned before.

Satish

>   30   continue
>        call VecRestoreArray(x,u,xx_i,ierr)
> 
> I don't understand why x cannot be changed when u() has been changed?
> how can I do it?
> the output are as follows,
> x vector:
> 10
> 20
> 30
> 40
> 50
> 60
> u() array
> 1000
> 2000
> 3000
> 4000
> 5000
> 6000
> thanks,
> leping
>   
> 
> 
> 
> ???? Matthew Knepley 
> ????? 2010-04-17  22:15:24 
> ???? chenleping; PETSc users list 
> ??? 
> ??? Re: [petsc-users] about Vecgetarray() 
> 2010/4/16 ????Leping Chen? <chenleping at yahoo.cn>
> 
> petsc teams,
> 
> if I want create the relation between u() [array] and x [Vec] ,I can do it as 
> follows,
> 
> #define u(ib)  xx_v(xx_i + (ib)) 
>        call VecGetArray(x,xx_v,xx_i,ierr)
>        do 30 i=1,n
>           u(i) = 1000.0*i
>   30   continue
>        call VecRestoreArray(x,xx_v,xx_i,ierr)
> 
> However, I don't understand why can not I do it as follows,
> 
>       double precision u(1) or u(6)
>        call VecGetArray(x,u,xx_i,ierr)
>        do 30 i=1,n
>           u(i) = 1000.0*i
>   30   continue
>        call VecRestoreArray(x,u,xx_i,ierr)
> 
>  Why u() must be created by #define, and u() cannot be defined again,for 
> example "double precision u(1)" or u(5).
> 
> 
> 1) It does not have to be #define. This is shown for convenience.
> 
> 
> 2) You must still declare xx_v in your first example, probably exactly as you
>     declare u in your second example.
> 
> 
> These are not PETSc questions. They are basic Fortran programming questions.
> There are many excellent books on this.
> 
> 
>     Matt
> 
> 
> By the way, if u() is a array of common blocks(fortran), how can I create the 
> relation between u() and x?
> 
> thanks,
> 
> Leping 
> 
> 
> 
>  2010-04-16
> 
> 
> 
> 
> 

Reply via email to