Setting options on matrices obtained from a DM
Lisandro Dalcin
dalcinl at gmail.com
Wed Jul 22 12:01:41 CDT 2009
On Wed, Jul 22, 2009 at 12:19 PM, Barry Smith<bsmith at mcs.anl.gov> wrote:
>
> On Jul 22, 2009, at 9:56 AM, Lisandro Dalcin wrote:
>
>> On Wed, Jul 22, 2009 at 12:20 AM, Barry Smith<bsmith at mcs.anl.gov> wrote:
>>>
>>> On Jul 21, 2009, at 7:47 PM, Jed Brown wrote:
>>>
>>>> Barry Smith wrote:
>>>>
>>> This is just a limitation of the current implementation due to the way
>>> the design evolved over time.
>>> There is nothing intrinsic to the abstract design of PETSc that prevents
>>> the
>>> type from being
>>> properly processed before the sizes are set.
>>>
>>
>> I agree 100% with you.. the only issue are tons of code to review and fix
>> :-(
>>
>>>
>>> This is really yucky API you propose here; that no sane person would
>>> propose except to work
>>> around a shortfall in the current implementation.
>>>
>>
>> We could start fixing Vec,
>
> Ok. VecCreate_Seq()/VecCreate_Seq_Private() and VecCreate_MPI_Private() do
> the following
>
> 1) create the Vec_xxx struct and copy over the function tables (setting the
> methods)
> 2) use PetscMapSetUp() to determine the local/global sizes
> 3) allocate space for the array if needed.
>
> What we want is if the sizes are not yet set then it should still copy over
> the function table (1), but delay (2) and (3) until the sizes
> are set. This could be done by removing the following from VecSetType()
> if (vec->map->n < 0 && vec->map->N < 0) {
> vec->ops->create = r;
> } else {
> ierr = (*r)(vec);CHKERRQ(ierr);
> }
> and instead have each individual VecCreate_xxx() do the method setup and
> then
> if sizes set) do the PetscMapSetUp() and allocate space
> else) set the vec->ops->create pointer to a new function that does the
> PetscMapSetUp() and allocate space
>
> In other words split the VecCreate_xxx() into two functions and call the
> second when the sizes are available.
>
Something in such direction should work... However...
>
> Something similar for Matrices?
>
If you do MatSetType(A, MATAIJ), you end-up having a MATSEQAIJ or a
MPIMPIAIJ... Vec does not have such "aliasing" on type names ...
I'll try to give look at Vec to figure out what to do in a way that
can be ported to Mat taking into account my previous comment.
--
Lisandro Dalcín
---------------
Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC)
Instituto de Desarrollo Tecnológico para la Industria Química (INTEC)
Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET)
PTLC - Güemes 3450, (3000) Santa Fe, Argentina
Tel/Fax: +54-(0)342-451.1594
More information about the petsc-dev
mailing list