added new options in new_ij as well as new regression tests for the

new 2-stage interpolation operators
This commit is contained in:
ulrikey 2009-08-13 22:46:35 +00:00
parent 81b4a12219
commit e0f7f5eaf1
4 changed files with 291 additions and 0 deletions

69
test/TEST_ij/agg_interp.jobs Executable file
View File

@ -0,0 +1,69 @@
#!/bin/ksh
#BHEADER**********************************************************************
# Copyright (c) 2008, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
# This file is part of HYPRE. See file COPYRIGHT for details.
#
# HYPRE is free software; you can redistribute it and/or modify it under the
# terms of the GNU Lesser General Public License (as published by the Free
# Software Foundation) version 2.1 dated February 1999.
#
# $Revision$
#EHEADER**********************************************************************
#=============================================================================
# new_ij: Test aggressive coarsening interpolation options
# 1: 2s-ei interpolation 1 level (Pmx = 4)
# 2: 2s-std interpolation 1 level (Pmx = 4)
# 3: 2s-ext interpolation 1 level (tr = 0.3)
# 4: multipass interpolation 1 level
# 5: 2s-ei interpolation all levels (Pmx = 4)
# 6: 2s-std interpolation all levels (Pmx = 4)
# 7: 2s-ext interpolation all levels (tr = 0.3 P12_tr = 0.2)
# 8: multipass interpolation all levels
# 9: 2s-ei interpolation all levels (Pmx = 4, P12_mx = 3)
# 8: multipass interpolation all levels for systems problem unknown approach
# 8: 2s-ei interpolation all levels for systems problem unknown approach
# 8: multipass interpolation all levels for systems problem hybrid approach
# 8: 2s-ei interpolation all levels for systems problem hybrid approach
#=============================================================================
mpirun -np 8 ./new_ij -rhsrand -n 30 29 31 -P 2 2 2 -hmis -agg_nl 1 -agg_interp 1 -agg_Pmx 4 -solver 1 -rlx 6 \
> agg_interp.out.1
mpirun -np 8 ./new_ij -rhsrand -n 30 29 31 -P 2 2 2 -hmis -agg_nl 1 -agg_interp 2 -agg_Pmx 4 -solver 1 -rlx 6 \
>> agg_interp.out.2
mpirun -np 8 ./new_ij -rhsrand -n 30 29 31 -P 2 2 2 -hmis -agg_nl 1 -agg_interp 3 -agg_tr 0.3 -solver 1 -rlx 6 \
>> agg_interp.out.3
mpirun -np 8 ./new_ij -rhsrand -n 30 29 31 -P 2 2 2 -hmis -agg_nl 1 -agg_interp 4 -solver 1 -rlx 6 \
>> agg_interp.out.4
mpirun -np 8 ./new_ij -rhsrand -n 30 29 31 -P 2 2 2 -hmis -agg_nl 10 -agg_interp 1 -agg_Pmx 4 -solver 1 -rlx 6 \
> agg_interp.out.5
mpirun -np 8 ./new_ij -rhsrand -n 30 29 31 -P 2 2 2 -hmis -agg_nl 10 -agg_interp 2 -agg_Pmx 4 -solver 1 -rlx 6 \
>> agg_interp.out.6
mpirun -np 8 ./new_ij -rhsrand -n 30 29 31 -P 2 2 2 -hmis -agg_nl 10 -agg_interp 3 -agg_tr 0.3 -agg_P12_tr 0.2 -solver 1 -rlx 6 \
>> agg_interp.out.7
mpirun -np 8 ./new_ij -rhsrand -n 30 29 31 -P 2 2 2 -hmis -agg_nl 10 -agg_interp 4 -solver 1 -rlx 6 \
>> agg_interp.out.8
mpirun -np 8 ./new_ij -rhsrand -n 30 29 31 -P 2 2 2 -hmis -agg_nl 1 -agg_interp 1 -agg_Pmx 4 -agg_P12_mx 3 -solver 1 -rlx 6 \
> agg_interp.out.9
mpirun -np 8 ./new_ij -rhsrand -n 20 19 22 -P 2 2 2 -sysL 3 -nf 3 -hmis -agg_nl 10 -agg_interp 4 -solver 1 -rlx 6 \
>> agg_interp.out.10
mpirun -np 8 ./new_ij -rhsrand -n 20 19 22 -P 2 2 2 -sysL 3 -nf 3 -hmis -agg_nl 10 -agg_interp 1 -agg_Pmx 4 -agg_P12_mx 4 -solver 1 -rlx 6 \
>> agg_interp.out.11
mpirun -np 8 ./new_ij -rhsrand -n 20 19 22 -P 2 2 2 -sysL 3 -nf 3 -hmis -agg_nl 10 -agg_interp 4 -nodal 1 -solver 1 -rlx 6 \
>> agg_interp.out.12
mpirun -np 8 ./new_ij -rhsrand -n 20 19 22 -P 2 2 2 -sysL 3 -nf 3 -hmis -agg_nl 10 -agg_interp 1 -agg_Pmx 4 -agg_P12_mx 4 -nodal 1 -solver 1 -rlx 6 \
>> agg_interp.out.13

View File

@ -0,0 +1,78 @@
# Output file: agg_interp.out.1
Iterations = 10
Final Relative Residual Norm = 2.324107e-09
# Output file: agg_interp.out.2
Iterations = 9
Final Relative Residual Norm = 7.299631e-09
# Output file: agg_interp.out.3
Iterations = 11
Final Relative Residual Norm = 4.394947e-09
# Output file: agg_interp.out.4
Iterations = 13
Final Relative Residual Norm = 4.604995e-09
# Output file: agg_interp.out.5
Iterations = 10
Final Relative Residual Norm = 9.560624e-09
# Output file: agg_interp.out.6
Iterations = 10
Final Relative Residual Norm = 6.016343e-09
# Output file: agg_interp.out.7
Iterations = 12
Final Relative Residual Norm = 7.742892e-09
# Output file: agg_interp.out.8
Iterations = 15
Final Relative Residual Norm = 9.503769e-09
# Output file: agg_interp.out.9
Iterations = 11
Final Relative Residual Norm = 2.452371e-09
# Output file: agg_interp.out.10
Iterations = 23
Final Relative Residual Norm = 6.103183e-09
# Output file: agg_interp.out.11
Iterations = 18
Final Relative Residual Norm = 4.471484e-09
# Output file: agg_interp.out.12
Iterations = 20
Final Relative Residual Norm = 5.905785e-09
# Output file: agg_interp.out.13
Iterations = 16
Final Relative Residual Norm = 5.103180e-09

62
test/TEST_ij/agg_interp.sh Executable file
View File

@ -0,0 +1,62 @@
#!/bin/ksh
#BHEADER**********************************************************************
# Copyright (c) 2008, Lawrence Livermore National Security, LLC.
# Produced at the Lawrence Livermore National Laboratory.
# This file is part of HYPRE. See file COPYRIGHT for details.
#
# HYPRE is free software; you can redistribute it and/or modify it under the
# terms of the GNU Lesser General Public License (as published by the Free
# Software Foundation) version 2.1 dated February 1999.
#
# $Revision$
#EHEADER**********************************************************************
TNAME=`basename $0 .sh`
#=============================================================================
# compare with baseline case
#=============================================================================
FILES="\
${TNAME}.out.1\
${TNAME}.out.2\
${TNAME}.out.3\
${TNAME}.out.4\
${TNAME}.out.5\
${TNAME}.out.6\
${TNAME}.out.7\
${TNAME}.out.8\
${TNAME}.out.9\
${TNAME}.out.10\
${TNAME}.out.11\
${TNAME}.out.12\
${TNAME}.out.13\
"
for i in $FILES
do
echo "# Output file: $i"
tail -5 $i
done > ${TNAME}.out
# Make sure that the output files are reasonable
CHECK_LINE="Complexity"
OUT_COUNT=`grep "$CHECK_LINE" ${TNAME}.out | wc -l`
SAVED_COUNT=`grep "$CHECK_LINE" ${TNAME}.saved | wc -l`
if [ "$OUT_COUNT" != "$SAVED_COUNT" ]; then
echo "Incorrect number of \"$CHECK_LINE\" lines in ${TNAME}.out" >&2
fi
if [ -z $HYPRE_NO_SAVED ]; then
diff -U3 -bI"time" ${TNAME}.saved ${TNAME}.out >&2
fi
#=============================================================================
# remove temporary files
#=============================================================================
rm -f ${TNAME}.testdata*

View File

@ -205,8 +205,15 @@ main( int argc,
int aug_dim;
/* parameters for GSMG */
int gsmg_samples = 5;
/* interpolation */
int interp_type = 0; /* default value */
int post_interp_type = 0; /* default value */
/* aggressive coarsening */
int agg_interp_type = 4; /* default value */
int agg_P_max_elmts = 0; /* default value */
int agg_P12_max_elmts = 0; /* default value */
double agg_trunc_factor = 0; /* default value */
double agg_P12_trunc_factor = 0; /* default value */
int print_system = 0;
@ -880,6 +887,31 @@ main( int argc,
arg_index++;
interp_type = atoi(argv[arg_index++]);
}
else if ( strcmp(argv[arg_index], "-agg_interp") == 0 )
{
arg_index++;
agg_interp_type = atoi(argv[arg_index++]);
}
else if ( strcmp(argv[arg_index], "-agg_Pmx") == 0 )
{
arg_index++;
agg_P_max_elmts = atoi(argv[arg_index++]);
}
else if ( strcmp(argv[arg_index], "-agg_P12_mx") == 0 )
{
arg_index++;
agg_P12_max_elmts = atoi(argv[arg_index++]);
}
else if ( strcmp(argv[arg_index], "-agg_tr") == 0 )
{
arg_index++;
agg_trunc_factor = atof(argv[arg_index++]);
}
else if ( strcmp(argv[arg_index], "-agg_P12_tr") == 0 )
{
arg_index++;
agg_P12_trunc_factor = atof(argv[arg_index++]);
}
else if ( strcmp(argv[arg_index], "-postinterptype") == 0 )
{
arg_index++;
@ -2020,6 +2052,11 @@ main( int argc,
HYPRE_BoomerAMGSetEuSparseA(amg_solver, eu_sparse_A);
HYPRE_BoomerAMGSetNumFunctions(amg_solver, num_functions);
HYPRE_BoomerAMGSetAggNumLevels(amg_solver, agg_num_levels);
HYPRE_BoomerAMGSetAggInterpType(amg_solver, agg_interp_type);
HYPRE_BoomerAMGSetAggTruncFactor(amg_solver, agg_trunc_factor);
HYPRE_BoomerAMGSetAggP12TruncFactor(amg_solver, agg_P12_trunc_factor);
HYPRE_BoomerAMGSetAggPMaxElmts(amg_solver, agg_P_max_elmts);
HYPRE_BoomerAMGSetAggP12MaxElmts(amg_solver, agg_P12_max_elmts);
HYPRE_BoomerAMGSetNumPaths(amg_solver, num_paths);
HYPRE_BoomerAMGSetNodal(amg_solver, nodal);
HYPRE_BoomerAMGSetNodalDiag(amg_solver, nodal_diag);
@ -2129,6 +2166,11 @@ main( int argc,
HYPRE_BoomerAMGSetEuSparseA(amg_solver, eu_sparse_A);
HYPRE_BoomerAMGSetNumFunctions(amg_solver, num_functions);
HYPRE_BoomerAMGSetAggNumLevels(amg_solver, agg_num_levels);
HYPRE_BoomerAMGSetAggInterpType(amg_solver, agg_interp_type);
HYPRE_BoomerAMGSetAggTruncFactor(amg_solver, agg_trunc_factor);
HYPRE_BoomerAMGSetAggP12TruncFactor(amg_solver, agg_P12_trunc_factor);
HYPRE_BoomerAMGSetAggPMaxElmts(amg_solver, agg_P_max_elmts);
HYPRE_BoomerAMGSetAggP12MaxElmts(amg_solver, agg_P12_max_elmts);
HYPRE_BoomerAMGSetNumPaths(amg_solver, num_paths);
HYPRE_BoomerAMGSetNodal(amg_solver, nodal);
HYPRE_BoomerAMGSetNodalDiag(amg_solver, nodal_diag);
@ -2255,6 +2297,11 @@ main( int argc,
HYPRE_BoomerAMGSetMaxRowSum(pcg_precond, max_row_sum);
HYPRE_BoomerAMGSetNumFunctions(pcg_precond, num_functions);
HYPRE_BoomerAMGSetAggNumLevels(pcg_precond, agg_num_levels);
HYPRE_BoomerAMGSetAggInterpType(pcg_precond, agg_interp_type);
HYPRE_BoomerAMGSetAggTruncFactor(pcg_precond, agg_trunc_factor);
HYPRE_BoomerAMGSetAggP12TruncFactor(pcg_precond, agg_P12_trunc_factor);
HYPRE_BoomerAMGSetAggPMaxElmts(pcg_precond, agg_P_max_elmts);
HYPRE_BoomerAMGSetAggP12MaxElmts(pcg_precond, agg_P12_max_elmts);
HYPRE_BoomerAMGSetNumPaths(pcg_precond, num_paths);
HYPRE_BoomerAMGSetNodal(pcg_precond, nodal);
HYPRE_BoomerAMGSetNodalDiag(pcg_precond, nodal_diag);
@ -2382,6 +2429,11 @@ main( int argc,
HYPRE_BoomerAMGSetMaxRowSum(pcg_precond, max_row_sum);
HYPRE_BoomerAMGSetNumFunctions(pcg_precond, num_functions);
HYPRE_BoomerAMGSetAggNumLevels(pcg_precond, agg_num_levels);
HYPRE_BoomerAMGSetAggInterpType(pcg_precond, agg_interp_type);
HYPRE_BoomerAMGSetAggTruncFactor(pcg_precond, agg_trunc_factor);
HYPRE_BoomerAMGSetAggP12TruncFactor(pcg_precond, agg_P12_trunc_factor);
HYPRE_BoomerAMGSetAggPMaxElmts(pcg_precond, agg_P_max_elmts);
HYPRE_BoomerAMGSetAggP12MaxElmts(pcg_precond, agg_P12_max_elmts);
HYPRE_BoomerAMGSetNumPaths(pcg_precond, num_paths);
HYPRE_BoomerAMGSetNodal(pcg_precond, nodal);
HYPRE_BoomerAMGSetNodalDiag(pcg_precond, nodal_diag);
@ -2563,6 +2615,11 @@ main( int argc,
HYPRE_BoomerAMGSetMaxRowSum(pcg_precond, max_row_sum);
HYPRE_BoomerAMGSetNumFunctions(pcg_precond, num_functions);
HYPRE_BoomerAMGSetAggNumLevels(pcg_precond, agg_num_levels);
HYPRE_BoomerAMGSetAggInterpType(pcg_precond, agg_interp_type);
HYPRE_BoomerAMGSetAggTruncFactor(pcg_precond, agg_trunc_factor);
HYPRE_BoomerAMGSetAggP12TruncFactor(pcg_precond, agg_P12_trunc_factor);
HYPRE_BoomerAMGSetAggPMaxElmts(pcg_precond, agg_P_max_elmts);
HYPRE_BoomerAMGSetAggP12MaxElmts(pcg_precond, agg_P12_max_elmts);
HYPRE_BoomerAMGSetNumPaths(pcg_precond, num_paths);
HYPRE_BoomerAMGSetNodal(pcg_precond, nodal);
HYPRE_BoomerAMGSetNodalDiag(pcg_precond, nodal_diag);
@ -2680,6 +2737,11 @@ main( int argc,
HYPRE_BoomerAMGSetMaxRowSum(pcg_precond, max_row_sum);
HYPRE_BoomerAMGSetNumFunctions(pcg_precond, num_functions);
HYPRE_BoomerAMGSetAggNumLevels(pcg_precond, agg_num_levels);
HYPRE_BoomerAMGSetAggInterpType(pcg_precond, agg_interp_type);
HYPRE_BoomerAMGSetAggTruncFactor(pcg_precond, agg_trunc_factor);
HYPRE_BoomerAMGSetAggP12TruncFactor(pcg_precond, agg_P12_trunc_factor);
HYPRE_BoomerAMGSetAggPMaxElmts(pcg_precond, agg_P_max_elmts);
HYPRE_BoomerAMGSetAggP12MaxElmts(pcg_precond, agg_P12_max_elmts);
HYPRE_BoomerAMGSetNumPaths(pcg_precond, num_paths);
HYPRE_BoomerAMGSetNodal(pcg_precond, nodal);
HYPRE_BoomerAMGSetNodalDiag(pcg_precond, nodal_diag);
@ -2863,6 +2925,11 @@ main( int argc,
HYPRE_BoomerAMGSetMaxRowSum(pcg_precond, max_row_sum);
HYPRE_BoomerAMGSetNumFunctions(pcg_precond, num_functions);
HYPRE_BoomerAMGSetAggNumLevels(pcg_precond, agg_num_levels);
HYPRE_BoomerAMGSetAggInterpType(pcg_precond, agg_interp_type);
HYPRE_BoomerAMGSetAggTruncFactor(pcg_precond, agg_trunc_factor);
HYPRE_BoomerAMGSetAggP12TruncFactor(pcg_precond, agg_P12_trunc_factor);
HYPRE_BoomerAMGSetAggPMaxElmts(pcg_precond, agg_P_max_elmts);
HYPRE_BoomerAMGSetAggP12MaxElmts(pcg_precond, agg_P12_max_elmts);
HYPRE_BoomerAMGSetNumPaths(pcg_precond, num_paths);
HYPRE_BoomerAMGSetNodal(pcg_precond, nodal);
HYPRE_BoomerAMGSetNodalDiag(pcg_precond, nodal_diag);
@ -3007,6 +3074,11 @@ main( int argc,
HYPRE_BoomerAMGSetMaxRowSum(pcg_precond, max_row_sum);
HYPRE_BoomerAMGSetNumFunctions(pcg_precond, num_functions);
HYPRE_BoomerAMGSetAggNumLevels(pcg_precond, agg_num_levels);
HYPRE_BoomerAMGSetAggInterpType(pcg_precond, agg_interp_type);
HYPRE_BoomerAMGSetAggTruncFactor(pcg_precond, agg_trunc_factor);
HYPRE_BoomerAMGSetAggP12TruncFactor(pcg_precond, agg_P12_trunc_factor);
HYPRE_BoomerAMGSetAggPMaxElmts(pcg_precond, agg_P_max_elmts);
HYPRE_BoomerAMGSetAggP12MaxElmts(pcg_precond, agg_P12_max_elmts);
HYPRE_BoomerAMGSetNumPaths(pcg_precond, num_paths);
HYPRE_BoomerAMGSetNodal(pcg_precond, nodal);
HYPRE_BoomerAMGSetNodalDiag(pcg_precond, nodal_diag);
@ -3157,6 +3229,11 @@ main( int argc,
HYPRE_BoomerAMGSetMaxRowSum(pcg_precond, max_row_sum);
HYPRE_BoomerAMGSetNumFunctions(pcg_precond, num_functions);
HYPRE_BoomerAMGSetAggNumLevels(pcg_precond, agg_num_levels);
HYPRE_BoomerAMGSetAggInterpType(pcg_precond, agg_interp_type);
HYPRE_BoomerAMGSetAggTruncFactor(pcg_precond, agg_trunc_factor);
HYPRE_BoomerAMGSetAggP12TruncFactor(pcg_precond, agg_P12_trunc_factor);
HYPRE_BoomerAMGSetAggPMaxElmts(pcg_precond, agg_P_max_elmts);
HYPRE_BoomerAMGSetAggP12MaxElmts(pcg_precond, agg_P12_max_elmts);
HYPRE_BoomerAMGSetNumPaths(pcg_precond, num_paths);
HYPRE_BoomerAMGSetNodal(pcg_precond, nodal);
HYPRE_BoomerAMGSetNodalDiag(pcg_precond, nodal_diag);
@ -3351,6 +3428,11 @@ main( int argc,
HYPRE_BoomerAMGSetMaxRowSum(pcg_precond, max_row_sum);
HYPRE_BoomerAMGSetNumFunctions(pcg_precond, num_functions);
HYPRE_BoomerAMGSetAggNumLevels(pcg_precond, agg_num_levels);
HYPRE_BoomerAMGSetAggInterpType(pcg_precond, agg_interp_type);
HYPRE_BoomerAMGSetAggTruncFactor(pcg_precond, agg_trunc_factor);
HYPRE_BoomerAMGSetAggP12TruncFactor(pcg_precond, agg_P12_trunc_factor);
HYPRE_BoomerAMGSetAggPMaxElmts(pcg_precond, agg_P_max_elmts);
HYPRE_BoomerAMGSetAggP12MaxElmts(pcg_precond, agg_P12_max_elmts);
HYPRE_BoomerAMGSetNumPaths(pcg_precond, num_paths);
HYPRE_BoomerAMGSetNodal(pcg_precond, nodal);
HYPRE_BoomerAMGSetNodalDiag(pcg_precond, nodal_diag);