On 05/17/2014 08:01 PM, ian-r-rose wrote:
> In source/simulator/assembly.cc:
>
>> @@ -1035,8 +1039,12 @@ namespace aspect
>>  #endif
>>
>>      Mp_preconditioner->initialize (system_preconditioner_matrix.block(1,1));
>> -    Amg_preconditioner->initialize (system_preconditioner_matrix.block(0,0),
>> +    if (parameters.free_surface_enabled)
>> +      Amg_preconditioner->initialize (system_matrix.block(0,0),
>
> Yes, will comment in code. For sure, we will not need to build the other
> matrix when doing this. The reason is that the stabilization term adjusts the
> system matrix for the boundary DOFs, and if similar changes are not made to
> the ''preconditioner matrix'', then the preconditioner is not very good.
> Rather than doing that, I just use the system matrix .

OK. Is this efficient? (I.e., if you compare the speed of execution of one of 
the current cookbooks, preferably one of the larger ones, where you use the 
preconditioner_matrix or the system_matrix for the AMG, how much slower does 
it get?)

In any case, I probably missed it but there should be code at the top of the 
function that assembles the system_preconditioner_matrix that simply returns 
when you're using the free surface stuff. Maybe also in setup_dofs so that we 
don't even allocate memory for the preconditioner matrix.

W.


-- 
------------------------------------------------------------------------
Wolfgang Bangerth               email:            bangerth@math.tamu.edu
                                 www: http://www.math.tamu.edu/~bangerth/