basically what I want to do is calculate the sum of a matrix, say u, by column and store it in a pre-allocated diagonal matrix, say du, in a more efficient way than

```
vi = sum(u, dims=2)
for i = 1:length(vi)
du[i, i] = vi[i]
end
```

the whole idea is that i need to do an operation:

` usg* A1*u + Deg*A2*u`

A1 and A2 do the first and second derivation. This is a typical operation in the simulation of the convection-diffusion phenomenon. If `usg`

is a diagonal matrix or a constant, the equation can be calculated with inplace operation (with an intermediate vector `du`

)

`mul!( lmul!(usg, mul!( du, A1, u)), A2, u, Deg, true)`

In my case, Deg can be seen as constant. But usg is no constant and calculated from u by

`usg = sum(u, dims=2)*const ./v1`

.

As v1 is a constant vector, first I can make a diagnoal matrix

`rv1 = Diagnoal(1 ./v1)`

so

`usg = sum(u, dims=2)*const ./v1 = rv1*sum(u, dims=2)*const`

and can be calculated using inplace operator

`mul!(usg, rv1, lmul!(const, du)`

(take `du = sum(u, dims=2)`

is the intermediate vector)

But now usg is a vector because `sum(u, dims=2)`

is an vector.

So is there a way to make `sum(u, dims=2)`

to store in a diagonal matrix? or is there a simpler way to realize the whole operation (` usg* A1*u + Deg*A2*u`

) ?

thanks for reading and giving advice.