# [Trilinos-Users] Epetra_FEVector multiplication

Roger Pawlowski rppawlo at sandia.gov
Mon Jan 10 09:27:10 MST 2011

```Hi Cristiano,

The NOX package in Trilinos solves nonlinear problems.  It does
implement a limited memory Broyden method.  Look at

http://trilinos.sandia.gov/packages/docs/r10.6/packages/nox/doc/html/classNOX_1_1Direction_1_1Broyden.html

for information on the Broyden calculation.  The implementation is in
the class:

Trilinos/packages/nox/src/NOX_Direction_Broyden.C

Roger

On 01/10/2011 09:09 AM, Cristiano Malossi wrote:
> Dear Michael,
>
> thank you for the support! Actually, I am implementing a Broyden method
> to solve a nonlinear problem. In particular I have a matrix J that is a
> distributed (and sparse) Epetra_FECrsMatrix which approximate the
> Jacobian of my problem. Following the Broyden scheme, the full
> computation that I need to perform (at each subiteration) is:
>
> J = J + A * B^T,
>
> where A and B are two distributed Epetra_FEVector. Therefore, I don't
> need matrix C (with C = A * B^T) if it is possible to update directly J.
> Otherwise, creating matrix C I can later use the Multiply method of
> EpetraExt for the final sum.
>
> The result of A * B^T is not a sparse matrix however, for the type of
> applications I am working on, the size of the two vectors is never
> bigger than about 200 elements. Therefore, if in Trilinos there is a
> single function call to do the job I would really like to use it, even
> if it is not the most efficient approach. I can use it to perform some
> preliminary test to understand how Broyden behaves for my applications
> and later decide to optimize the code if necessary.
>
> Thank you!
> Best regards,
>       Cristiano Malossi
>
> On 01/10/2011 04:25 PM, Heroux, Michael A wrote:
>
>> Cristiano,
>>
>> Do A and B have special properties that would make C sparse?  Might it be
>> better for you to instead use A and B as-is?
>>
>> Specifically, suppose you want to compute y = Cx.  You could do it in two
>> steps: z = B^Tx, y = Az.  There are kernels in the Epetra_Vector class to do
>> these operations.
>>
>> Just checking to make sure.
>>
>> If indeed you need to form C, there is specific functionality to do so in
>> one function call, but it would be very straight forward to build the matrix
>> row-by-row.
>>
>> Mike
>>
>>
>> On 1/10/11 3:32 AM, "Cristiano Malossi"<cristiano.malossi at epfl.ch>   wrote:
>>
>>
>>> Hello,
>>>
>>> I need some help to perform a vector by vector multiplication in Trilinos.
>>>
>>> I have two distributed Epetra_FEVector, with the same map (and size),
>>> say A and B.
>>> I need to perform the following operation: C = A * B^T, where C is a
>>> square Epetra_FECrsMatrix. The resulting matrix will then be used for
>>> other matrix by matrix operations.
>>>
>>> Unfortunately I was not able to find an easy way to do that with Epetra
>>> and/or EpetraExt packages. Therefore, I suppose that I should somehow
>>> convert the vectors A and B to two Epetra_FECrsMatrix objects (of size
>>> Nx1, with N the length of the vectors), and then use the
>>> EpetraExt::MatrixMatrix::Multiply method for the computation of matrix
>>> C. However I do not know if there is a smart way to do the conversion
>>> from an Epetra_FEVector to an Epetra_FECrsMatrix (using a view for
>>> instance?). Any suggestion is welcome!
>>>
>>> Thank you for your help.
>>> Best regards,
>>>
>>>       Cristiano Malossi
>>>
>>
> _______________________________________________
> Trilinos-Users mailing list
> Trilinos-Users at software.sandia.gov
> http://software.sandia.gov/mailman/listinfo/trilinos-users
>

```