On Jun 22, 2010, at 6:36 PM, Barry Smith wrote:

> 
> On Jun 22, 2010, at 6:32 PM, Jed Brown wrote:
> 
>> On Tue, 22 Jun 2010 23:21:11 +0000, Matthew Knepley <knepley at gmail.com> 
>> wrote:
>>> That should work.
>> 
>> I thought *GetArrayF90 requires you have to call a "local function" for
>> multidimensional arrays, as in snes ex5f90.F.
> 
>    VecGetArrayF90 requires 1d array (since Vec has no concept of 
> multi-dimension)
> 
>> If you declare the
>> pointer as multi-dimensional, you get errors about shape-matching rules,
>> if you try to use a usual pointer (1D) you get errors about incorrect
>> subscripting.  Is there a workaround, or do you always need to call the
>> local version to get it to type-check?
> 
>   In theory someone could take the energy to finish the DAVecGetArrayF90() 
> for 2 and 3 dimensions and get what is needed. In practice the only people 
> who know enough to finish it despise Fortran so much you need to bash them on 
> the head to get it done (and that includes me). See my other email for 
> directions.
> 

   Looking at this more closely and trying to do it, I think it may not be 
possible in F90. You don't seem to be able to set the range of indices in the 
ptr array (it seems it must always be 1:somevalue) so we can't do the trick we 
do in C and F77 of embedding a smaller 2d array inside an imaginary larger 
array and accessing values out of the smaller array by using indices of the 
larger array.

   Barry

>   Barry
> 
>> 
>> Jed
> 

Reply via email to