69 GetOStream(
Runtime1) <<
"starting 'BuildCoarseGrid' routine...\n";
71 RCP<Teuchos::SerialDenseMatrix<GO, GO> > fineElementPDOFs = Get<RCP<Teuchos::SerialDenseMatrix<GO, GO> > >(fineLevel,
"PElementList");
73 GO totalFineElements = fineElementPDOFs->numRows();
76 GO totalCoarseElements = totalFineElements / 4;
77 LO nCoarseElements = (int)sqrt(totalCoarseElements);
80 size_t EdgeCount = (nCoarseElements + 1) * (nCoarseElements + 1);
81 size_t CenterCount = EdgeCount + 2 * nCoarseElements * (nCoarseElements + 1);
84 RCP<Teuchos::SerialDenseMatrix<GO, GO> > coarseElementVDOFs = rcp(
new Teuchos::SerialDenseMatrix<GO, GO>(totalCoarseElements, 18));
85 RCP<Teuchos::SerialDenseMatrix<GO, GO> > coarseElementPDOFs = rcp(
new Teuchos::SerialDenseMatrix<GO, GO>(totalCoarseElements, 4));
86 RCP<Teuchos::SerialDenseMatrix<GO, GO> > coarseElementMDOFs = rcp(
new Teuchos::SerialDenseMatrix<GO, GO>(totalCoarseElements, 9));
88 for (GO coarseElement = 0; coarseElement < totalCoarseElements; coarseElement++) {
97 if (coarseElement < nCoarseElements) {
99 (*coarseElementMDOFs)(coarseElement, 0) = coarseElement;
100 (*coarseElementMDOFs)(coarseElement, 1) = coarseElement + 1;
103 (*coarseElementMDOFs)(coarseElement, 4) = EdgeCount++;
107 (*coarseElementMDOFs)(coarseElement, 0) = (*coarseElementMDOFs)(coarseElement - nCoarseElements, 3);
108 (*coarseElementMDOFs)(coarseElement, 1) = (*coarseElementMDOFs)(coarseElement - nCoarseElements, 2);
111 (*coarseElementMDOFs)(coarseElement, 4) = (*coarseElementMDOFs)(coarseElement - nCoarseElements, 6);
115 (*coarseElementMDOFs)(coarseElement, 5) = EdgeCount++;
116 (*coarseElementMDOFs)(coarseElement, 6) = EdgeCount++;
119 if (coarseElement % nCoarseElements == 0) {
121 (*coarseElementMDOFs)(coarseElement, 3) = (*coarseElementMDOFs)(coarseElement, 0) + nCoarseElements + 1;
124 (*coarseElementMDOFs)(coarseElement, 7) = EdgeCount++;
128 (*coarseElementMDOFs)(coarseElement, 3) = (*coarseElementMDOFs)(coarseElement - 1, 2);
131 (*coarseElementMDOFs)(coarseElement, 7) = (*coarseElementMDOFs)(coarseElement - 1, 5);
135 (*coarseElementMDOFs)(coarseElement, 2) = (*coarseElementMDOFs)(coarseElement, 3) + 1;
138 (*coarseElementMDOFs)(coarseElement, 8) = CenterCount++;
142 (*coarseElementVDOFs)(coarseElement, 0) = 2 * (*coarseElementMDOFs)(coarseElement, 0);
143 (*coarseElementVDOFs)(coarseElement, 1) = 2 * (*coarseElementMDOFs)(coarseElement, 0) + 1;
144 (*coarseElementVDOFs)(coarseElement, 2) = 2 * (*coarseElementMDOFs)(coarseElement, 1);
145 (*coarseElementVDOFs)(coarseElement, 3) = 2 * (*coarseElementMDOFs)(coarseElement, 1) + 1;
146 (*coarseElementVDOFs)(coarseElement, 4) = 2 * (*coarseElementMDOFs)(coarseElement, 2);
147 (*coarseElementVDOFs)(coarseElement, 5) = 2 * (*coarseElementMDOFs)(coarseElement, 2) + 1;
148 (*coarseElementVDOFs)(coarseElement, 6) = 2 * (*coarseElementMDOFs)(coarseElement, 3);
149 (*coarseElementVDOFs)(coarseElement, 7) = 2 * (*coarseElementMDOFs)(coarseElement, 3) + 1;
150 (*coarseElementVDOFs)(coarseElement, 8) = 2 * (*coarseElementMDOFs)(coarseElement, 4);
151 (*coarseElementVDOFs)(coarseElement, 9) = 2 * (*coarseElementMDOFs)(coarseElement, 4) + 1;
152 (*coarseElementVDOFs)(coarseElement, 10) = 2 * (*coarseElementMDOFs)(coarseElement, 5);
153 (*coarseElementVDOFs)(coarseElement, 11) = 2 * (*coarseElementMDOFs)(coarseElement, 5) + 1;
154 (*coarseElementVDOFs)(coarseElement, 12) = 2 * (*coarseElementMDOFs)(coarseElement, 6);
155 (*coarseElementVDOFs)(coarseElement, 13) = 2 * (*coarseElementMDOFs)(coarseElement, 6) + 1;
156 (*coarseElementVDOFs)(coarseElement, 14) = 2 * (*coarseElementMDOFs)(coarseElement, 7);
157 (*coarseElementVDOFs)(coarseElement, 15) = 2 * (*coarseElementMDOFs)(coarseElement, 7) + 1;
158 (*coarseElementVDOFs)(coarseElement, 16) = 2 * (*coarseElementMDOFs)(coarseElement, 8);
159 (*coarseElementVDOFs)(coarseElement, 17) = 2 * (*coarseElementMDOFs)(coarseElement, 8) + 1;
162 (*coarseElementPDOFs)(coarseElement, 0) = (*coarseElementMDOFs)(coarseElement, 0);
163 (*coarseElementPDOFs)(coarseElement, 1) = (*coarseElementMDOFs)(coarseElement, 1);
164 (*coarseElementPDOFs)(coarseElement, 2) = (*coarseElementMDOFs)(coarseElement, 2);
165 (*coarseElementPDOFs)(coarseElement, 3) = (*coarseElementMDOFs)(coarseElement, 3);
169 Set(coarseLevel,
"VElementList", coarseElementVDOFs);
170 Set(coarseLevel,
"PElementList", coarseElementPDOFs);
171 Set(coarseLevel,
"MElementList", coarseElementMDOFs);