Based on new build_interpolation.c routine

(element--free interpolation; no coarse element matrices created;)
This commit is contained in:
panayot 2000-08-15 23:12:08 +00:00
parent b5d9d15107
commit b0c449b5e4
2 changed files with 44 additions and 190 deletions

View File

@ -52,6 +52,8 @@ int hypre_AMGeInterpolationSetup(hypre_CSRMatrix ***P_pointer,
/* -------- PDEsystem information -------- */
int system_size,
int num_functions,
int *i_dof_node_0, int *j_dof_node_0,
int *i_node_dof_0, int *j_node_dof_0,
@ -81,9 +83,9 @@ int hypre_AMGeInterpolationSetup(hypre_CSRMatrix ***P_pointer,
int *i_dof_index;
int **dof_function;
int *i_AE_chord, *j_AE_chord;
double *a_AE_chord;
int **i_dof_node, **j_dof_node,
@ -99,10 +101,6 @@ int hypre_AMGeInterpolationSetup(hypre_CSRMatrix ***P_pointer,
int *i_AE_dof, *j_AE_dof;
int *i_dof_AE, *j_dof_AE;
int **i_element_chord, **j_element_chord;
double **a_element_chord;
int **i_chord_dof, **j_chord_dof;
int num_chords = Num_chords[0];
int num_elements = Num_elements[0], num_dofs = Num_dofs[0],
@ -119,24 +117,16 @@ int hypre_AMGeInterpolationSetup(hypre_CSRMatrix ***P_pointer,
for (l=0; l < level+1; l++)
Num_dofs[l] = Num_nodes[l] * system_size;
dof_function = hypre_CTAlloc(int*, level+1);
i_element_chord = hypre_CTAlloc(int*, level+1);
j_element_chord = hypre_CTAlloc(int*, level+1);
a_element_chord = hypre_CTAlloc(double*, level+1);
ierr = hypre_DofFunction(&dof_function[0], Num_dofs[0], num_functions);
if (ierr == -1) printf("WRONG dof_function array ============= !\n");
i_chord_dof = hypre_CTAlloc(int*, level+1);
j_chord_dof = hypre_CTAlloc(int*, level+1);
i_element_chord[0] = i_element_chord_0;
j_element_chord[0] = j_element_chord_0;
a_element_chord[0] = a_element_chord_0;
i_chord_dof[0] = i_chord_dof_0;
j_chord_dof[0] = j_chord_dof_0;
i_dof_node = hypre_CTAlloc(int*, level+1);
j_dof_node = hypre_CTAlloc(int*, level+1);
@ -164,12 +154,12 @@ int hypre_AMGeInterpolationSetup(hypre_CSRMatrix ***P_pointer,
/* assemble initial fine matrix: * ------------------------------------- */
ierr = hypre_AMGeMatrixAssemble(&Matrix[0],
i_element_chord[0],
j_element_chord[0],
a_element_chord[0],
i_element_chord_0,
j_element_chord_0,
a_element_chord_0,
i_chord_dof[0],
j_chord_dof[0],
i_chord_dof_0,
j_chord_dof_0,
Num_elements[0],
Num_chords[0],
@ -325,37 +315,6 @@ interpolation_step:
}
/* assemble AE_matrices: -------------------------------------------- */
ierr = hypre_AMGeDomainElementSparseAssemble(i_AE_element,
j_AE_element,
Num_elements[l+1],
i_element_chord[l],
j_element_chord[l],
a_element_chord[l],
i_chord_dof[l],
j_chord_dof[l],
&i_AE_chord,
&j_AE_chord,
&a_AE_chord,
Num_elements[l],
Num_chords[l],
num_dofs);
if (l > 0)
{
hypre_TFree(i_element_chord[l]);
hypre_TFree(j_element_chord[l]);
hypre_TFree(a_element_chord[l]);
}
hypre_TFree(i_AE_element);
hypre_TFree(j_AE_element);
@ -365,17 +324,9 @@ interpolation_step:
printf("\n\nB U I L D I N G level[%d] I N T E R P O L A T I O N M A T R I X\n", l);
ierr = hypre_AMGeBuildInterpolation(&P[l],
&i_element_chord[l+1],
&j_element_chord[l+1],
&a_element_chord[l+1],
&i_chord_dof[l+1],
&j_chord_dof[l+1],
&Num_chords[l+1],
i_AE_dof, j_AE_dof,
i_dof_AE, j_dof_AE,
@ -385,25 +336,19 @@ interpolation_step:
i_dof_coarsedof[l],
j_dof_coarsedof[l],
i_AE_chord,
j_AE_chord,
a_AE_chord,
Matrix[l],
i_chord_dof[l],
j_chord_dof[l],
dof_function[l],
num_functions,
Num_chords[l],
&dof_function[l+1],
Num_elements[l+1],
num_dofs,
num_coarsedofs);
if (l > 0)
{
hypre_TFree(i_chord_dof[l]);
hypre_TFree(j_chord_dof[l]);
}
hypre_TFree(dof_function[l]);
if (system_size > 1)
{
@ -426,9 +371,7 @@ interpolation_step:
printf("nnz[%d]: %d\n", l+1, hypre_CSRMatrixI(Matrix[l+1])[num_coarsedofs]);
hypre_TFree(i_AE_chord);
hypre_TFree(j_AE_chord);
hypre_TFree(a_AE_chord);
Num_chords[l+1] = hypre_CSRMatrixI(Matrix[l+1])[num_coarsedofs];
hypre_TFree(i_AE_dof);
@ -458,6 +401,7 @@ interpolation_step:
if (l < level && Num_nodes[l+1] > 0) goto interpolation_step;
hypre_TFree(i_dof_index);
hypre_TFree(dof_function[l]);
if (l > 0)
{
@ -466,15 +410,6 @@ interpolation_step:
}
if (l > 0)
{
hypre_TFree(i_chord_dof[l]);
hypre_TFree(j_chord_dof[l]);
hypre_TFree(i_element_chord[l]);
hypre_TFree(j_element_chord[l]);
hypre_TFree(a_element_chord[l]);
}
for (k=l+1; k <level+1; k++)
@ -502,14 +437,6 @@ interpolation_step:
hypre_TFree(i_dof_node);
hypre_TFree(j_dof_node);
hypre_TFree(i_chord_dof);
hypre_TFree(j_chord_dof);
hypre_TFree(i_element_chord);
hypre_TFree(j_element_chord);
hypre_TFree(a_element_chord);
return ierr;

View File

@ -52,6 +52,8 @@ int hypre_AMGeInterpolationSetup(hypre_CSRMatrix ***P_pointer,
/* -------- PDEsystem information -------- */
int system_size,
int num_functions,
int *i_dof_node_0, int *j_dof_node_0,
int *i_node_dof_0, int *j_node_dof_0,
@ -81,9 +83,9 @@ int hypre_AMGeInterpolationSetup(hypre_CSRMatrix ***P_pointer,
int *i_dof_index;
int **dof_function;
int *i_AE_chord, *j_AE_chord;
double *a_AE_chord;
int **i_dof_node, **j_dof_node,
@ -99,10 +101,6 @@ int hypre_AMGeInterpolationSetup(hypre_CSRMatrix ***P_pointer,
int *i_AE_dof, *j_AE_dof;
int *i_dof_AE, *j_dof_AE;
int **i_element_chord, **j_element_chord;
double **a_element_chord;
int **i_chord_dof, **j_chord_dof;
int num_chords = Num_chords[0];
int num_elements = Num_elements[0], num_dofs = Num_dofs[0],
@ -119,24 +117,16 @@ int hypre_AMGeInterpolationSetup(hypre_CSRMatrix ***P_pointer,
for (l=0; l < level+1; l++)
Num_dofs[l] = Num_nodes[l] * system_size;
dof_function = hypre_CTAlloc(int*, level+1);
i_element_chord = hypre_CTAlloc(int*, level+1);
j_element_chord = hypre_CTAlloc(int*, level+1);
a_element_chord = hypre_CTAlloc(double*, level+1);
ierr = hypre_DofFunction(&dof_function[0], Num_dofs[0], num_functions);
if (ierr == -1) printf("WRONG dof_function array ============= !\n");
i_chord_dof = hypre_CTAlloc(int*, level+1);
j_chord_dof = hypre_CTAlloc(int*, level+1);
i_element_chord[0] = i_element_chord_0;
j_element_chord[0] = j_element_chord_0;
a_element_chord[0] = a_element_chord_0;
i_chord_dof[0] = i_chord_dof_0;
j_chord_dof[0] = j_chord_dof_0;
i_dof_node = hypre_CTAlloc(int*, level+1);
j_dof_node = hypre_CTAlloc(int*, level+1);
@ -164,12 +154,12 @@ int hypre_AMGeInterpolationSetup(hypre_CSRMatrix ***P_pointer,
/* assemble initial fine matrix: * ------------------------------------- */
ierr = hypre_AMGeMatrixAssemble(&Matrix[0],
i_element_chord[0],
j_element_chord[0],
a_element_chord[0],
i_element_chord_0,
j_element_chord_0,
a_element_chord_0,
i_chord_dof[0],
j_chord_dof[0],
i_chord_dof_0,
j_chord_dof_0,
Num_elements[0],
Num_chords[0],
@ -325,37 +315,6 @@ interpolation_step:
}
/* assemble AE_matrices: -------------------------------------------- */
ierr = hypre_AMGeDomainElementSparseAssemble(i_AE_element,
j_AE_element,
Num_elements[l+1],
i_element_chord[l],
j_element_chord[l],
a_element_chord[l],
i_chord_dof[l],
j_chord_dof[l],
&i_AE_chord,
&j_AE_chord,
&a_AE_chord,
Num_elements[l],
Num_chords[l],
num_dofs);
if (l > 0)
{
hypre_TFree(i_element_chord[l]);
hypre_TFree(j_element_chord[l]);
hypre_TFree(a_element_chord[l]);
}
hypre_TFree(i_AE_element);
hypre_TFree(j_AE_element);
@ -365,17 +324,9 @@ interpolation_step:
printf("\n\nB U I L D I N G level[%d] I N T E R P O L A T I O N M A T R I X\n", l);
ierr = hypre_AMGeBuildInterpolation(&P[l],
&i_element_chord[l+1],
&j_element_chord[l+1],
&a_element_chord[l+1],
&i_chord_dof[l+1],
&j_chord_dof[l+1],
&Num_chords[l+1],
i_AE_dof, j_AE_dof,
i_dof_AE, j_dof_AE,
@ -385,25 +336,19 @@ interpolation_step:
i_dof_coarsedof[l],
j_dof_coarsedof[l],
i_AE_chord,
j_AE_chord,
a_AE_chord,
Matrix[l],
i_chord_dof[l],
j_chord_dof[l],
dof_function[l],
num_functions,
Num_chords[l],
&dof_function[l+1],
Num_elements[l+1],
num_dofs,
num_coarsedofs);
if (l > 0)
{
hypre_TFree(i_chord_dof[l]);
hypre_TFree(j_chord_dof[l]);
}
hypre_TFree(dof_function[l]);
if (system_size > 1)
{
@ -426,9 +371,7 @@ interpolation_step:
printf("nnz[%d]: %d\n", l+1, hypre_CSRMatrixI(Matrix[l+1])[num_coarsedofs]);
hypre_TFree(i_AE_chord);
hypre_TFree(j_AE_chord);
hypre_TFree(a_AE_chord);
Num_chords[l+1] = hypre_CSRMatrixI(Matrix[l+1])[num_coarsedofs];
hypre_TFree(i_AE_dof);
@ -458,6 +401,7 @@ interpolation_step:
if (l < level && Num_nodes[l+1] > 0) goto interpolation_step;
hypre_TFree(i_dof_index);
hypre_TFree(dof_function[l]);
if (l > 0)
{
@ -466,15 +410,6 @@ interpolation_step:
}
if (l > 0)
{
hypre_TFree(i_chord_dof[l]);
hypre_TFree(j_chord_dof[l]);
hypre_TFree(i_element_chord[l]);
hypre_TFree(j_element_chord[l]);
hypre_TFree(a_element_chord[l]);
}
for (k=l+1; k <level+1; k++)
@ -502,14 +437,6 @@ interpolation_step:
hypre_TFree(i_dof_node);
hypre_TFree(j_dof_node);
hypre_TFree(i_chord_dof);
hypre_TFree(j_chord_dof);
hypre_TFree(i_element_chord);
hypre_TFree(j_element_chord);
hypre_TFree(a_element_chord);
return ierr;