Fri Apr 16 09:38:33 CDT 2010

```  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
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

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

--
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/20100416/59b02657/attachment.htm>
```