Added code (commented out by default) to print AMG coarsening information, and
added a matlab file to visualize the coarse grids. This currently assumes a structured 2D nxn grid, but could easily be extended to unstructured 2D grids.
This commit is contained in:
parent
002d7badf8
commit
48948a1b8c
@ -1535,6 +1535,48 @@ hypre_BoomerAMGSetup( void *amg_vdata,
|
||||
if (amg_print_level == 1 || amg_print_level == 3)
|
||||
hypre_BoomerAMGSetupStats(amg_data,A);
|
||||
|
||||
/* print out CF info to plot grids in matlab (see 'tools/AMGgrids.m') */
|
||||
#if 0
|
||||
{
|
||||
int *CF, *CFc, *itemp;
|
||||
FILE* fp;
|
||||
|
||||
local_size = hypre_CSRMatrixNumRows(hypre_ParCSRMatrixDiag(A));
|
||||
CF = hypre_CTAlloc(int, local_size);
|
||||
CFc = hypre_CTAlloc(int, local_size);
|
||||
|
||||
for (level = (num_levels - 2); level >= 0; level--)
|
||||
{
|
||||
/* swap pointers */
|
||||
itemp = CFc;
|
||||
CFc = CF;
|
||||
CF = itemp;
|
||||
|
||||
local_size = hypre_CSRMatrixNumRows(hypre_ParCSRMatrixDiag(A_array[level]));
|
||||
for (i = 0, j = 0; i < local_size; i++)
|
||||
{
|
||||
/* if a C-point */
|
||||
CF[i] = 0;
|
||||
if (CF_marker_array[level][i] > -1)
|
||||
{
|
||||
CF[i] = CFc[j] + 1;
|
||||
j++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
local_size = hypre_CSRMatrixNumRows(hypre_ParCSRMatrixDiag(A));
|
||||
fp = fopen("AMGgrids.CF.dat", "w");
|
||||
for (i = 0; i < local_size; i++)
|
||||
{
|
||||
fprintf(fp, "%d\n", CF[i]);
|
||||
}
|
||||
fclose(fp);
|
||||
|
||||
hypre_TFree(CF);
|
||||
hypre_TFree(CFc);
|
||||
}
|
||||
#endif
|
||||
|
||||
return(Setup_err_flag);
|
||||
}
|
||||
|
||||
67
tools/AMGgrids.m
Normal file
67
tools/AMGgrids.m
Normal file
@ -0,0 +1,67 @@
|
||||
function [] = AMGgrids(file)
|
||||
%-------------------------------------------------------------------------
|
||||
% AMGgrids(fileprefix)
|
||||
%
|
||||
% 'fileprefix' - string prefix for input file '<fileprefix>.CF.dat'
|
||||
%-------------------------------------------------------------------------
|
||||
|
||||
% delete all figures
|
||||
delete(get(0, 'Children'));
|
||||
|
||||
%------------------------------------------------------------
|
||||
% Load CF and grid data
|
||||
%------------------------------------------------------------
|
||||
|
||||
file_CF = strcat(file, '.CF.dat');
|
||||
CF = load(file_CF);
|
||||
|
||||
n = size(CF,1);
|
||||
|
||||
% This should also be read from file for generality
|
||||
m = sqrt(n);
|
||||
grid = zeros(n,2);
|
||||
k = 1;
|
||||
for j = 1:m
|
||||
for i = 1:m
|
||||
grid(k,:) = [i,j];
|
||||
k = k + 1;
|
||||
end
|
||||
end
|
||||
h = 1;
|
||||
|
||||
figure;
|
||||
hold on;
|
||||
axis image;
|
||||
box on;
|
||||
xlabel('');
|
||||
ylabel('');
|
||||
set(gca, 'Visible', 'off');
|
||||
|
||||
% set the colormap
|
||||
cmap = hot;
|
||||
colormap(cmap);
|
||||
caxis([0.0, 1.2]);
|
||||
% handle = colorbar('vert');
|
||||
% %set(handle, 'Ylim', [0, 1]);
|
||||
|
||||
lmax = max(CF);
|
||||
for l = 0:lmax
|
||||
ind = find(CF == l);
|
||||
sz = size(ind, 1);
|
||||
x = zeros(4,sz);
|
||||
y = zeros(4,sz);
|
||||
c = zeros(4,sz);
|
||||
ll = l / lmax;
|
||||
hh = (l+1)*(0.1)*h;
|
||||
|
||||
% plot the CM values
|
||||
for k = 1:sz
|
||||
xx = grid(ind(k),1);
|
||||
yy = grid(ind(k),2);
|
||||
x(:,k) = [xx-hh, xx+hh, xx+hh, xx-hh]';
|
||||
y(:,k) = [yy-hh, yy-hh, yy+hh, yy+hh]';
|
||||
c(:,k) = [ll, ll, ll, ll]';
|
||||
end
|
||||
patch(x, y, c);
|
||||
end
|
||||
shg;
|
||||
Loading…
Reference in New Issue
Block a user