31 const Stencil& symmetric_stencil,
32 Stencil& stencil )
const
35 ArrOfInt offsets( nb_lines + 1 );
38 const int symmetric_stencil_size = symmetric_stencil.
dimension( 0 );
39 for (
int k=0; k<symmetric_stencil_size; ++k )
41 const int line = symmetric_stencil( k, 0 );
42 const int column = symmetric_stencil( k, 1 );
43 offsets[ line + 1 ] += 1;
44 offsets[ column + 1 ] += ( line == column ) ? 0 : 1 ;
47 for (
int i=0; i<nb_lines; ++i )
49 offsets[ i + 1 ] += offsets[ i ];
52 const int stencil_size = offsets[ nb_lines ];
53 stencil.
resize( stencil_size, 2 );
58 for (
int k=0; k<symmetric_stencil_size; ++k )
60 const int line = symmetric_stencil( k, 0 );
61 const int column = symmetric_stencil( k, 1 );
64 index = offsets[ line ];
66 assert( stencil( index, 0 ) < 0 );
67 assert( stencil( index, 1 ) < 0 );
68 assert( index < offsets[ line + 1 ] );
70 stencil( index, 0 ) = line;
71 stencil( index, 1 ) = column;
77 index = offsets[ column ];
79 assert( stencil( index, 0 ) < 0 );
80 assert( stencil( index, 1 ) < 0 );
81 assert( index < offsets[ column + 1 ] );
83 stencil( index, 0 ) = column;
84 stencil( index, 1 ) = line;
86 offsets[ column ] += 1;
92 const Stencil& symmetric_stencil,
93 const StencilCoeffs& symmetric_coefficients,
95 StencilCoeffs& coefficients )
const
97 ArrOfInt offsets( nb_lines + 1 );
100 const int symmetric_stencil_size = symmetric_stencil.
dimension( 0 );
101 assert( symmetric_stencil_size == symmetric_coefficients.
size_array( ) );
102 for (
int k=0; k<symmetric_stencil_size; ++k )
104 const int line = symmetric_stencil( k, 0 );
105 const int column = symmetric_stencil( k, 1 );
106 offsets[ line + 1 ] += 1;
107 offsets[ column + 1 ] += ( line == column ) ? 0 : 1 ;
110 for (
int i=0; i<nb_lines; ++i )
112 offsets[ i + 1 ] += offsets[ i ];
115 const int stencil_size = offsets[ nb_lines ];
116 stencil.
resize( stencil_size, 2 );
122 for (
int k=0; k<symmetric_stencil_size; ++k )
124 const int line = symmetric_stencil( k, 0 );
125 const int column = symmetric_stencil( k, 1 );
126 const double coefficient = symmetric_coefficients[ k ];
128 index = offsets[ line ];
130 assert( stencil( index, 0 ) < 0 );
131 assert( stencil( index, 1 ) < 0 );
132 assert( index < offsets[ line + 1 ] );
134 stencil( index, 0 ) = line;
135 stencil( index, 1 ) = column;
136 coefficients[ index ] = coefficient;
138 offsets[ line ] += 1;
140 if ( line != column )
142 index = offsets[ column ];
144 assert( stencil( index, 0 ) < 0 );
145 assert( stencil( index, 1 ) < 0 );
146 assert( index < offsets[ column + 1 ] );
148 stencil( index, 0 ) = column;
149 stencil( index, 1 ) = line;
150 coefficients[ index ] = coefficient;
152 offsets[ column ] += 1;