232 |
|
|
233 |
stringstream msg; |
stringstream msg; |
234 |
msg << "borrowSampleReferenceIDs() not implemented for function space type " |
msg << "borrowSampleReferenceIDs() not implemented for function space type " |
235 |
<< fsType; |
<< functionSpaceTypeAsString(fsType); |
236 |
throw RipleyException(msg.str()); |
throw RipleyException(msg.str()); |
237 |
} |
} |
238 |
|
|
250 |
#endif |
#endif |
251 |
} |
} |
252 |
|
|
253 |
void Rectangle::interpolateOnDomain(escript::Data& target, |
void Rectangle::interpolateNodesOnElements(escript::Data& out, escript::Data& in) const |
|
const escript::Data& in) const |
|
254 |
{ |
{ |
255 |
const Rectangle& inDomain=dynamic_cast<const Rectangle&>(*(in.getFunctionSpace().getDomain())); |
const dim_t numComp = in.getDataPointSize(); |
256 |
const Rectangle& targetDomain=dynamic_cast<const Rectangle&>(*(target.getFunctionSpace().getDomain())); |
/* GENERATOR SNIP_INTERPOLATE_ELEMENTS TOP */ |
257 |
if (inDomain != *this) |
const double tmp0_2 = 0.62200846792814621559; |
258 |
throw RipleyException("Illegal domain of interpolant"); |
const double tmp0_1 = 0.044658198738520451079; |
259 |
if (targetDomain != *this) |
const double tmp0_0 = 0.16666666666666666667; |
|
throw RipleyException("Illegal domain of interpolation target"); |
|
|
|
|
|
stringstream msg; |
|
|
msg << "interpolateOnDomain() not implemented for function space " |
|
|
<< in.getFunctionSpace().getTypeCode() << " -> " |
|
|
<< target.getFunctionSpace().getTypeCode(); |
|
|
|
|
|
switch (in.getFunctionSpace().getTypeCode()) { |
|
|
case Nodes: |
|
|
case DegreesOfFreedom: |
|
|
switch (target.getFunctionSpace().getTypeCode()) { |
|
|
case DegreesOfFreedom: |
|
|
target=in; |
|
|
break; |
|
|
|
|
|
case Elements: |
|
|
{ |
|
|
const double tmp0_2 = 0.62200846792814621559; |
|
|
const double tmp0_1 = 0.044658198738520451079; |
|
|
const double tmp0_0 = 0.16666666666666666667; |
|
|
const dim_t numComp = in.getDataPointSize(); |
|
|
escript::Data* inn=const_cast<escript::Data*>(&in); |
|
260 |
#pragma omp parallel for |
#pragma omp parallel for |
261 |
for (index_t k1=0; k1 < m_NE1; ++k1) { |
for (index_t k1=0; k1 < m_NE1; ++k1) { |
262 |
for (index_t k0=0; k0 < m_NE0; ++k0) { |
for (index_t k0=0; k0 < m_NE0; ++k0) { |
263 |
const register double* f_10 = inn->getSampleDataRO(INDEX2(k0+1,k1, m_N0)); |
const register double* f_10 = in.getSampleDataRO(INDEX2(k0+1,k1, m_N0)); |
264 |
const register double* f_11 = inn->getSampleDataRO(INDEX2(k0+1,k1+1, m_N0)); |
const register double* f_11 = in.getSampleDataRO(INDEX2(k0+1,k1+1, m_N0)); |
265 |
const register double* f_01 = inn->getSampleDataRO(INDEX2(k0,k1+1, m_N0)); |
const register double* f_01 = in.getSampleDataRO(INDEX2(k0,k1+1, m_N0)); |
266 |
const register double* f_00 = inn->getSampleDataRO(INDEX2(k0,k1, m_N0)); |
const register double* f_00 = in.getSampleDataRO(INDEX2(k0,k1, m_N0)); |
267 |
double* o = target.getSampleDataRW(INDEX2(k0,k1,m_NE0)); |
double* o = out.getSampleDataRW(INDEX2(k0,k1,m_NE0)); |
268 |
for (index_t i=0; i < numComp; ++i) { |
for (index_t i=0; i < numComp; ++i) { |
269 |
o[INDEX2(i,numComp,0)] = f_00[i]*tmp0_2 + f_11[i]*tmp0_1 + tmp0_0*(f_01[i] + f_10[i]); |
o[INDEX2(i,numComp,0)] = f_00[i]*tmp0_2 + f_11[i]*tmp0_1 + tmp0_0*(f_01[i] + f_10[i]); |
270 |
o[INDEX2(i,numComp,1)] = f_01[i]*tmp0_1 + f_10[i]*tmp0_2 + tmp0_0*(f_00[i] + f_11[i]); |
o[INDEX2(i,numComp,1)] = f_01[i]*tmp0_1 + f_10[i]*tmp0_2 + tmp0_0*(f_00[i] + f_11[i]); |
271 |
o[INDEX2(i,numComp,2)] = f_01[i]*tmp0_2 + f_10[i]*tmp0_1 + tmp0_0*(f_00[i] + f_11[i]); |
o[INDEX2(i,numComp,2)] = f_01[i]*tmp0_2 + f_10[i]*tmp0_1 + tmp0_0*(f_00[i] + f_11[i]); |
272 |
o[INDEX2(i,numComp,3)] = f_00[i]*tmp0_1 + f_11[i]*tmp0_2 + tmp0_0*(f_01[i] + f_10[i]); |
o[INDEX2(i,numComp,3)] = f_00[i]*tmp0_1 + f_11[i]*tmp0_2 + tmp0_0*(f_01[i] + f_10[i]); |
273 |
} // close component loop i |
} /* end of component loop i */ |
274 |
} // close k0 loop |
} /* end of k0 loop */ |
275 |
} // close k1 loop |
} /* end of k1 loop */ |
276 |
break; |
/* GENERATOR SNIP_INTERPOLATE_ELEMENTS BOTTOM */ |
277 |
} |
} |
278 |
|
|
279 |
default: |
void Rectangle::interpolateNodesOnFaces(escript::Data& out, escript::Data& in) const |
280 |
throw RipleyException(msg.str()); |
{ |
281 |
} |
throw RipleyException("interpolateNodesOnFaces() not implemented"); |
282 |
break; |
} |
283 |
default: |
|
284 |
throw RipleyException(msg.str()); |
void Rectangle::addPDEToSystem(escript::AbstractSystemMatrix& mat, |
285 |
} |
escript::Data& rhs, const escript::Data& A, const escript::Data& B, |
286 |
|
const escript::Data& C, const escript::Data& D, |
287 |
|
const escript::Data& X, const escript::Data& Y, |
288 |
|
const escript::Data& d, const escript::Data& y, |
289 |
|
const escript::Data& d_contact, const escript::Data& y_contact, |
290 |
|
const escript::Data& d_dirac, const escript::Data& y_dirac) const |
291 |
|
{ |
292 |
|
throw RipleyException("addPDEToSystem() not implemented"); |
293 |
} |
} |
294 |
|
|
295 |
Paso_SystemMatrixPattern* Rectangle::getPattern(bool reducedRowOrder, |
Paso_SystemMatrixPattern* Rectangle::getPattern(bool reducedRowOrder, |