62 #include <Collections/CollectionOptimisation.h>
63 #include <Collections/Operator.h>
67 namespace MultiRegions
103 ::AllocateSharedPtr()),
121 m_comm(pSession->GetComm()),
130 ::AllocateSharedPtr()),
149 m_comm(pSession->GetComm()),
158 ::AllocateSharedPtr()),
175 m_session(in.m_session),
177 m_ncoeffs(in.m_ncoeffs),
178 m_npoints(in.m_npoints),
181 m_collections(in.m_collections),
182 m_coll_coeff_offset(in.m_coll_coeff_offset),
183 m_coll_phys_offset(in.m_coll_phys_offset),
184 m_coeff_offset(in.m_coeff_offset),
185 m_phys_offset(in.m_phys_offset),
186 m_offset_elmt_id(in.m_offset_elmt_id),
187 m_globalOptParam(in.m_globalOptParam),
188 m_blockMat(in.m_blockMat),
193 if(DeclareCoeffPhysArrays)
239 "local physical space is not true ");
267 for(i = 0; i < (*m_exp).size(); ++i)
291 int nrows = blockmat->GetRows();
292 int ncols = blockmat->GetColumns();
299 out = (*blockmat)*in;
349 for(i = 0; i < (*m_exp).size(); ++i)
351 (*m_exp)[i]->IProductWRTDerivBase(dir,inarray+
m_phys_offset[i],
375 ASSERTL1(inarray.num_elements() >= dim,
"inarray is not of sufficient dimension");
410 ASSERTL0(
false,
"Dimension of inarray not correct");
459 e_out_d0 = out_d0 + offset;
460 e_out_d1 = out_d1 + offset;
461 e_out_d2 = out_d2 + offset;
465 e_out_d0,e_out_d1, e_out_d2);
485 for(i=0; i<(*m_exp).size(); ++i)
488 (*m_exp)[i]->PhysDeriv_s(inarray+m_phys_offset[i],e_out_ds);
494 for(i=0; i<(*m_exp).size(); i++)
497 (*m_exp)[i]->PhysDeriv_n(inarray+m_phys_offset[i],e_out_dn);
503 int intdir= (int)edir;
505 for(i= 0; i < (*m_exp).size(); ++i)
508 (*m_exp)[i]->PhysDeriv(intdir, inarray+m_phys_offset[i], e_out_d);
532 if(inarray.get() == outarray.get())
580 for(i= 0; i < (*m_exp).size(); ++i)
582 (*m_exp)[i]->FwdTrans_BndConstrained(inarray+
m_phys_offset[i],
608 (*
m_exp)[0]->GetBasisType(0)
610 "Smoothing is currently not allowed unless you are using "
611 "a nodal base for efficiency reasons. The implemented "
612 "smoothing technique requires the mass matrix inversion "
613 "which is trivial just for GLL_LAGRANGE_SEM and "
614 "GAUSS_LAGRANGE_SEMexpansions.");
643 map<int,int> elmt_id;
648 for(i = 0 ; i < (*m_exp).size(); ++i)
659 n_exp = (*m_exp).size();
660 for(i = 0; i < n_exp; ++i)
674 for(i = 0; i < n_exp; ++i)
676 nrows[i] = (*m_exp)[elmt_id.find(i)->second]->GetTotPoints();
677 ncols[i] = (*m_exp)[elmt_id.find(i)->second]->GetNcoeffs();
684 for(i = 0; i < n_exp; ++i)
686 nrows[i] = (*m_exp)[elmt_id.find(i)->second]->GetNcoeffs();
687 ncols[i] = (*m_exp)[elmt_id.find(i)->second]->GetTotPoints();
698 for(i = 0; i < n_exp; ++i)
700 nrows[i] = (*m_exp)[elmt_id.find(i)->second]->GetNcoeffs();
701 ncols[i] = (*m_exp)[elmt_id.find(i)->second]->GetNcoeffs();
709 for(i = 0; i < n_exp; ++i)
711 nrows[i] = (*m_exp)[elmt_id.find(i)->second]->GetNcoeffs();
712 ncols[i] = (*m_exp)[elmt_id.find(i)->second]->NumDGBndryCoeffs();
720 for(i = 0; i < n_exp; ++i)
722 nrows[i] = (*m_exp)[elmt_id.find(i)->second]->NumDGBndryCoeffs();
723 ncols[i] = (*m_exp)[elmt_id.find(i)->second]->NumDGBndryCoeffs();
731 "Global Matrix creation not defined for this type "
744 for(i = cnt1 = 0; i < n_exp; ++i)
752 StdRegions::VarCoeffMap::const_iterator x;
760 (*m_exp)[eid]->DetShapeType(),
765 loc_mat = boost::dynamic_pointer_cast<
LocalRegions::Expansion>((*m_exp)[elmt_id.find(i)->second])->GetLocMatrix(matkey);
766 BlkMatrix->SetBlock(i,i,loc_mat);
783 return matrixIter->second;
800 for(
int n = 0; n < num_elmts.num_elements(); ++n)
820 for(i= 0; i < num_elmts[n]; ++i)
828 StdRegions::VarCoeffMap::const_iterator x;
836 (*m_exp)[eid]->DetShapeType(),
859 int i,j,n,gid1,gid2,cntdim1,cntdim2;
863 unsigned int glob_rows;
864 unsigned int glob_cols;
865 unsigned int loc_rows;
866 unsigned int loc_cols;
868 bool assembleFirstDim;
869 bool assembleSecondDim;
876 glob_cols = locToGloMap->GetNumGlobalCoeffs();
878 assembleFirstDim =
false;
879 assembleSecondDim =
true;
884 glob_rows = locToGloMap->GetNumGlobalCoeffs();
887 assembleFirstDim =
true;
888 assembleSecondDim =
false;
896 glob_rows = locToGloMap->GetNumGlobalCoeffs();
897 glob_cols = locToGloMap->GetNumGlobalCoeffs();
899 assembleFirstDim =
true;
900 assembleSecondDim =
true;
906 "Global Matrix creation not defined for this type "
918 for(n = cntdim1 = cntdim2 = 0; n < (*m_exp).size(); ++n)
926 StdRegions::VarCoeffMap::const_iterator x;
934 (*m_exp)[eid]->DetShapeType(),
940 loc_rows = loc_mat->GetRows();
941 loc_cols = loc_mat->GetColumns();
943 for(i = 0; i < loc_rows; ++i)
947 gid1 = locToGloMap->GetLocalToGlobalMap (cntdim1 + i);
948 sign1 = locToGloMap->GetLocalToGlobalSign(cntdim1 + i);
956 for(j = 0; j < loc_cols; ++j)
958 if(assembleSecondDim)
961 ->GetLocalToGlobalMap(cntdim2 + j);
963 ->GetLocalToGlobalSign(cntdim2 + j);
972 coord = make_pair(gid1,gid2);
973 if( spcoomat.count(coord) == 0 )
975 spcoomat[coord] = sign1*sign2*(*loc_mat)(i,j);
979 spcoomat[coord] += sign1*sign2*(*loc_mat)(i,j);
994 int i,j,n,gid1,gid2,loc_lda,eid;
998 int totDofs = locToGloMap->GetNumGlobalCoeffs();
999 int NumDirBCs = locToGloMap->GetNumGlobalDirBndCoeffs();
1001 unsigned int rows = totDofs - NumDirBCs;
1002 unsigned int cols = totDofs - NumDirBCs;
1006 int bwidth = locToGloMap->GetFullSystemBandWidth();
1018 if( (2*(bwidth+1)) < rows)
1038 for(n = 0; n < (*m_exp).size(); ++n)
1046 StdRegions::VarCoeffMap::const_iterator x;
1054 (*m_exp)[eid]->DetShapeType(),
1061 if(RobinBCInfo.count(n) != 0)
1066 int rows = loc_mat->GetRows();
1067 int cols = loc_mat->GetColumns();
1068 const NekDouble *dat = loc_mat->GetRawPtr();
1070 Blas::Dscal(rows*cols,loc_mat->Scale(),new_mat->GetRawPtr(),1);
1073 for(rBC = RobinBCInfo.find(n)->second;rBC; rBC = rBC->next)
1075 (*m_exp)[n]->AddRobinMassMatrix(rBC->m_robinID,rBC->m_robinPrimitiveCoeffs,new_mat);
1083 loc_lda = loc_mat->GetColumns();
1085 for(i = 0; i < loc_lda; ++i)
1087 gid1 = locToGloMap->GetLocalToGlobalMap(
m_coeff_offset[n] + i) - NumDirBCs;
1088 sign1 = locToGloMap->GetLocalToGlobalSign(
m_coeff_offset[n] + i);
1091 for(j = 0; j < loc_lda; ++j)
1093 gid2 = locToGloMap->GetLocalToGlobalMap(
m_coeff_offset[n] + j) - NumDirBCs;
1094 sign2 = locToGloMap->GetLocalToGlobalSign(
m_coeff_offset[n] + j);
1101 if((matStorage ==
eFULL)||(gid2 >= gid1))
1103 value = Gmat->GetValue(gid1,gid2) + sign1*sign2*(*loc_mat)(i,j);
1104 Gmat->SetValue(gid1,gid2,value);
1144 ASSERTL0(
false,
"Matrix solution type not defined");
1149 vExpList, locToGloMap);
1157 const map<int,RobinBCInfoSharedPtr> vRobinBCInfo =
GetRobinBCInfo();
1163 ASSERTL0(
false,
"Matrix solution type not defined");
1168 vExpList,locToGloMap);
1205 for (
int i = 0; i < (*m_exp).size(); ++i)
1207 if ((*
m_exp)[i]->GetGeom()->ContainsPoint(gloCoord))
1212 ASSERTL0(
false,
"Cannot find element for this point.");
1225 bool returnNearestElmt)
1229 return GetExpIndex(gloCoord,Lcoords,tol,returnNearestElmt);
1236 bool returnNearestElmt)
1244 std::vector<std::pair<int,NekDouble> > elmtIdDist;
1254 for (
int i = 0; i < (*m_exp).size(); ++i)
1256 if ((*
m_exp)[i]->GetGeom()->ContainsPoint(gloCoords,
1260 w.
SetX(gloCoords[0]);
1261 w.
SetY(gloCoords[1]);
1262 w.
SetZ(gloCoords[2]);
1265 for (
int j = 0; j < (*m_exp)[i]->GetNverts(); ++j) {
1267 (*
m_exp)[i]->GetGeom()->GetVid(j));
1268 if (j == 0 || dist > v->dist(w))
1273 elmtIdDist.push_back(
1274 std::pair<int, NekDouble>(i, dist));
1279 if (!elmtIdDist.empty())
1281 int min_id = elmtIdDist[0].first;
1284 for (
int i = 1; i < elmtIdDist.size(); ++i)
1286 if (elmtIdDist[i].second < min_d) {
1287 min_id = elmtIdDist[i].first;
1288 min_d = elmtIdDist[i].second;
1293 (*m_exp)[min_id]->GetGeom()->GetLocCoords(gloCoords,
1305 static int start = 0;
1311 for (
int i = start; i < (*m_exp).size(); ++i)
1313 if ((*
m_exp)[i]->GetGeom()->ContainsPoint(gloCoords,
1322 if(nearpt < nearpt_min)
1325 nearpt_min = nearpt;
1326 Vmath::Vcopy(locCoords.num_elements(),locCoords,1,savLocCoords,1);
1331 for (
int i = 0; i < start; ++i)
1333 if ((*
m_exp)[i]->GetGeom()->ContainsPoint(gloCoords,
1342 if(nearpt < nearpt_min)
1345 nearpt_min = nearpt;
1347 locCoords,1,savLocCoords,1);
1352 std::string msg =
"Failed to find point within element to tolerance of "
1353 + boost::lexical_cast<std::string>(tol)
1354 +
" using local point ("
1355 + boost::lexical_cast<std::string>(locCoords[0]) +
","
1356 + boost::lexical_cast<std::string>(locCoords[1]) +
","
1357 + boost::lexical_cast<std::string>(locCoords[1])
1359 + boost::lexical_cast<std::string>(min_id);
1362 if(returnNearestElmt)
1364 Vmath::Vcopy(locCoords.num_elements(),savLocCoords,1,locCoords,1);
1403 for (
int i = 0; i <
m_exp->size(); ++i)
1405 (*m_exp)[i]->GetGeom()->Reset(
m_graph->GetCurvedEdges(),
1410 for (
int i = 0; i <
m_exp->size(); ++i)
1412 (*m_exp)[i]->Reset();
1429 int coordim =
GetExp(0)->GetCoordim();
1430 char vars[3] = {
'x',
'y',
'z' };
1441 outfile <<
"Variables = x";
1442 for (
int i = 1; i < coordim; ++i)
1444 outfile <<
", " << vars[i];
1449 outfile <<
", " << var;
1452 outfile << std::endl << std::endl;
1465 int nBases = (*m_exp)[0]->GetNumBases();
1470 if (expansion == -1)
1478 GetCoords(coords[0], coords[1], coords[2]);
1480 for (i = 0; i <
m_exp->size(); ++i)
1484 for (j = 0; j < nBases; ++j)
1486 numInt *= (*m_exp)[i]->GetNumPoints(j)-1;
1489 numBlocks += numInt;
1494 nPoints = (*m_exp)[expansion]->GetTotPoints();
1500 (*m_exp)[expansion]->GetCoords(coords[0], coords[1], coords[2]);
1503 for (j = 0; j < nBases; ++j)
1505 numBlocks *= (*m_exp)[expansion]->GetNumPoints(j)-1;
1513 int nPlanes =
GetZIDs().num_elements();
1514 NekDouble tmp = numBlocks * (nPlanes-1.0) / nPlanes;
1515 numBlocks = (int)tmp;
1523 outfile <<
"Zone, N=" << nPoints <<
", E="
1524 << numBlocks <<
", F=FEBlock" ;
1529 outfile <<
", ET=QUADRILATERAL" << std::endl;
1532 outfile <<
", ET=BRICK" << std::endl;
1535 ASSERTL0(
false,
"Not set up for this type of output");
1540 for (j = 0; j < coordim; ++j)
1542 for (i = 0; i < nPoints; ++i)
1544 outfile << coords[j][i] <<
" ";
1545 if (i % 1000 == 0 && i)
1547 outfile << std::endl;
1550 outfile << std::endl;
1558 int nbase = (*m_exp)[0]->GetNumBases();
1561 boost::shared_ptr<LocalRegions::ExpansionVector> exp =
m_exp;
1563 if (expansion != -1)
1565 exp = boost::shared_ptr<LocalRegions::ExpansionVector>(
1567 (*exp)[0] = (*m_exp)[expansion];
1572 for(i = 0; i < (*exp).size(); ++i)
1574 const int np0 = (*exp)[i]->GetNumPoints(0);
1575 const int np1 = (*exp)[i]->GetNumPoints(1);
1577 for(j = 1; j < np1; ++j)
1579 for(k = 1; k < np0; ++k)
1581 outfile << cnt + (j-1)*np0 + k <<
" ";
1582 outfile << cnt + (j-1)*np0 + k+1 <<
" ";
1583 outfile << cnt + j *np0 + k+1 <<
" ";
1584 outfile << cnt + j *np0 + k << endl;
1591 else if (nbase == 3)
1593 for(i = 0; i < (*exp).size(); ++i)
1595 const int np0 = (*exp)[i]->GetNumPoints(0);
1596 const int np1 = (*exp)[i]->GetNumPoints(1);
1597 const int np2 = (*exp)[i]->GetNumPoints(2);
1598 const int np01 = np0*np1;
1600 for(j = 1; j < np2; ++j)
1602 for(k = 1; k < np1; ++k)
1604 for(l = 1; l < np0; ++l)
1606 outfile << cnt + (j-1)*np01 + (k-1)*np0 + l <<
" ";
1607 outfile << cnt + (j-1)*np01 + (k-1)*np0 + l+1 <<
" ";
1608 outfile << cnt + (j-1)*np01 + k *np0 + l+1 <<
" ";
1609 outfile << cnt + (j-1)*np01 + k *np0 + l <<
" ";
1610 outfile << cnt + j *np01 + (k-1)*np0 + l <<
" ";
1611 outfile << cnt + j *np01 + (k-1)*np0 + l+1 <<
" ";
1612 outfile << cnt + j *np01 + k *np0 + l+1 <<
" ";
1613 outfile << cnt + j *np01 + k *np0 + l << endl;
1622 ASSERTL0(
false,
"Not set up for this dimension");
1633 if (expansion == -1)
1641 for(
int i = 0; i < totpoints; ++i)
1643 outfile <<
m_phys[i] <<
" ";
1644 if(i % 1000 == 0 && i)
1646 outfile << std::endl;
1649 outfile << std::endl;
1654 int nPoints = (*m_exp)[expansion]->GetTotPoints();
1656 for (
int i = 0; i < nPoints; ++i)
1661 outfile << std::endl;
1667 outfile <<
"<?xml version=\"1.0\"?>" << endl;
1668 outfile <<
"<VTKFile type=\"UnstructuredGrid\" version=\"0.1\" "
1669 <<
"byte_order=\"LittleEndian\">" << endl;
1670 outfile <<
" <UnstructuredGrid>" << endl;
1675 outfile <<
" </UnstructuredGrid>" << endl;
1676 outfile <<
"</VTKFile>" << endl;
1681 ASSERTL0(
false,
"Routine not implemented for this expansion.");
1686 outfile <<
" </PointData>" << endl;
1687 outfile <<
" </Piece>" << endl;
1694 int nq = (*m_exp)[expansion]->GetTotPoints();
1697 outfile <<
" <DataArray type=\"Float64\" Name=\""
1698 << var <<
"\">" << endl;
1701 for(i = 0; i < nq; ++i)
1706 outfile <<
" </DataArray>" << endl;
1741 err = max(err, abs(inarray[i] - soln[i]));
1775 for (i = 0; i < (*m_exp).size(); ++i)
1783 for (i = 0; i < (*m_exp).size(); ++i)
1801 for (i = 0; i < (*m_exp).size(); ++i)
1813 "This method is not defined or valid for this class type");
1821 "This method is not defined or valid for this class type");
1829 "This method is not defined or valid for this class type");
1837 "This method is not defined or valid for this class type");
1845 "This method is not defined or valid for this class type");
1854 "This method is not defined or valid for this class type");
1859 "This method is not defined or valid for this class type");
1863 const std::string &fileName,
1864 const std::string &varName,
1865 const boost::shared_ptr<ExpList> locExpList)
1867 string varString = fileName.substr(0, fileName.find_last_of(
"."));
1868 int j, k, len = varString.length();
1869 varString = varString.substr(len-1, len);
1871 std::vector<LibUtilities::FieldDefinitionsSharedPtr> FieldDef;
1872 std::vector<std::vector<NekDouble> > FieldData;
1875 f.
Import(fileName, FieldDef, FieldData);
1878 for (j = 0; j < FieldDef.size(); ++j)
1880 for (k = 0; k < FieldDef[j]->m_fields.size(); ++k)
1882 if (FieldDef[j]->m_fields[k] == varName)
1885 locExpList->ExtractDataToCoeffs(
1886 FieldDef[j], FieldData[j],
1887 FieldDef[j]->m_fields[k],
1888 locExpList->UpdateCoeffs());
1894 ASSERTL0(found,
"Could not find variable '"+varName+
1895 "' in file boundary condition "+fileName);
1896 locExpList->BwdTrans_IterPerExp(
1897 locExpList->GetCoeffs(),
1898 locExpList->UpdatePhys());
1925 for (i = 0; i < (*m_exp).size(); ++i)
1941 std::vector<NekDouble> &HomoLen,
1942 std::vector<unsigned int> &HomoZIDs,
1943 std::vector<unsigned int> &HomoYIDs)
1950 ASSERTL1(NumHomoDir == HomoBasis.num_elements(),
"Homogeneous basis is not the same length as NumHomoDir");
1951 ASSERTL1(NumHomoDir == HomoLen.size(),
"Homogeneous length vector is not the same length as NumHomDir");
1954 switch((*
m_exp)[0]->GetShapeDimension())
1970 for(s = startenum; s <= endenum; ++s)
1972 std::vector<unsigned int> elementIDs;
1973 std::vector<LibUtilities::BasisType> basis;
1974 std::vector<unsigned int> numModes;
1975 std::vector<std::string> fields;
1978 bool UniOrder =
true;
1983 for(
int i = 0; i < (*m_exp).size(); ++i)
1985 if((*
m_exp)[i]->GetGeom()->GetShapeType() == shape)
1987 elementIDs.push_back((*
m_exp)[i]->GetGeom()->GetGlobalID());
1990 for(
int j = 0; j < (*m_exp)[i]->GetNumBases(); ++j)
1992 basis.push_back((*
m_exp)[i]->GetBasis(j)->GetBasisType());
1993 numModes.push_back((*
m_exp)[i]->GetBasis(j)->GetNumModes());
1997 for(n = 0 ; n < NumHomoDir; ++n)
1999 basis.push_back(HomoBasis[n]->GetBasisType());
2000 numModes.push_back(HomoBasis[n]->GetNumModes());
2007 ASSERTL0((*
m_exp)[i]->GetBasis(0)->GetBasisType() == basis[0],
"Routine is not set up for multiple bases definitions");
2009 for(
int j = 0; j < (*m_exp)[i]->GetNumBases(); ++j)
2011 numModes.push_back((*
m_exp)[i]->GetBasis(j)->GetNumModes());
2012 if(numModes[j] != (*
m_exp)[i]->GetBasis(j)->GetNumModes())
2018 for(n = 0 ; n < NumHomoDir; ++n)
2020 numModes.push_back(HomoBasis[n]->GetNumModes());
2027 if(elementIDs.size() > 0)
2029 for(
int i = 0; i < NumHomoStrip; ++i)
2034 UniOrder, numModes,fields,
2035 NumHomoDir, HomoLen, HomoZIDs,
2037 fielddef.push_back(fdef);
2049 std::vector<LibUtilities::FieldDefinitionsSharedPtr> returnval;
2073 map<int, int> ElmtID_to_ExpID;
2074 for(i = 0; i < (*m_exp).size(); ++i)
2076 ElmtID_to_ExpID[(*m_exp)[i]->GetGeom()->GetGlobalID()] = i;
2079 for(i = 0; i < fielddef->m_elementIDs.size(); ++i)
2081 int eid = ElmtID_to_ExpID[fielddef->m_elementIDs[i]];
2082 int datalen = (*m_exp)[eid]->GetNcoeffs();
2083 fielddata.insert(fielddata.end(),&coeffs[
m_coeff_offset[eid]],&coeffs[m_coeff_offset[eid]]+datalen);
2091 std::vector<NekDouble> &fielddata,
2113 std::vector<NekDouble> &fielddata,
2119 int modes_offset = 0;
2120 int datalen = fielddata.size()/fielddef->m_fields.size();
2123 for(i = 0; i < fielddef->m_fields.size(); ++i)
2125 if(fielddef->m_fields[i] == field)
2132 ASSERTL0(i != fielddef->m_fields.size(),
2133 "Field (" + field +
") not found in file.");
2136 map<int, int> elmtToExpId;
2141 for(i = (*m_exp).size()-1; i >= 0; --i)
2143 elmtToExpId[(*m_exp)[i]->GetGeom()->GetGlobalID()] = i;
2146 for (i = 0; i < fielddef->m_elementIDs.size(); ++i)
2150 if (fielddef->m_uniOrder ==
true)
2156 fielddef->m_numModes, modes_offset);
2158 const int elmtId = fielddef->m_elementIDs[i];
2159 if (elmtToExpId.count(elmtId) == 0)
2165 expId = elmtToExpId[elmtId];
2167 if (datalen == (*
m_exp)[expId]->GetNcoeffs())
2174 (*m_exp)[expId]->ExtractDataToCoeffs(
2175 &fielddata[offset], fielddef->m_numModes,
2180 modes_offset += (*m_exp)[0]->GetNumBases();
2192 if(fromExpList->GetNcoeffs() ==
m_ncoeffs)
2198 std::vector<unsigned int> nummodes;
2199 for(i = 0; i < (*m_exp).size(); ++i)
2202 for(
int j= 0; j < fromExpList->GetExp(eid)->GetNumBases(); ++j)
2204 nummodes.push_back(fromExpList->GetExp(eid)->GetBasisNumModes(j));
2207 (*m_exp)[eid]->ExtractDataToCoeffs(&fromCoeffs[offset], nummodes,0,
2210 offset += fromExpList->GetExp(eid)->GetNcoeffs();
2220 "This method is not defined or valid for this class type");
2228 "This method is not defined or valid for this class type");
2229 static boost::shared_ptr<ExpList> result;
2240 "This method is not defined or valid for this class type");
2250 "This method is not defined or valid for this class type");
2256 "This method is not defined or valid for this class type");
2257 static boost::shared_ptr<ExpList> returnVal;
2264 "This method is not defined or valid for this class type");
2265 static boost::shared_ptr<AssemblyMapDG> result;
2271 return GetTraceMap()->GetBndCondTraceToGlobalTraceMap();
2278 "This method is not defined or valid for this class type");
2287 "This method is not defined or valid for this class type");
2295 "This method is not defined or valid for this class type");
2304 "This method is not defined or valid for this class type");
2311 "This method is not defined or valid for this class type");
2320 "This method is not defined or valid for this class type");
2326 "This method is not defined or valid for this class type");
2334 "This method is not defined or valid for this class type");
2343 "This method is not defined or valid for this class type");
2354 ASSERTL0(
false,
"HelmSolve not implemented.");
2366 "This method is not defined or valid for this class type");
2378 "This method is not defined or valid for this class type");
2388 "This method is not defined or valid for this class type");
2398 "This method is not defined or valid for this class type");
2404 "This method is not defined or valid for this class type");
2412 "This method is not defined or valid for this class type");
2421 "This method is not defined or valid for this class type");
2427 "This method is not defined or valid for this class type");
2435 "This method is not defined or valid for this class type");
2441 "This method is not defined or valid for this class type");
2447 "This method is not defined or valid for this class type");
2517 for(i= 0; i < (*m_exp).size(); ++i)
2520 (*m_exp)[i]->GetCoords(e_coord_0);
2524 ASSERTL0(coord_1.num_elements() != 0,
2525 "output coord_1 is not defined");
2527 for(i= 0; i < (*m_exp).size(); ++i)
2530 e_coord_1 = coord_1 + m_phys_offset[i];
2531 (*m_exp)[i]->GetCoords(e_coord_0,e_coord_1);
2535 ASSERTL0(coord_1.num_elements() != 0,
2536 "output coord_1 is not defined");
2537 ASSERTL0(coord_2.num_elements() != 0,
2538 "output coord_2 is not defined");
2540 for(i= 0; i < (*m_exp).size(); ++i)
2543 e_coord_1 = coord_1 + m_phys_offset[i];
2544 e_coord_2 = coord_2 + m_phys_offset[i];
2545 (*m_exp)[i]->GetCoords(e_coord_0,e_coord_1,e_coord_2);
2556 "This method is not defined or valid for this class type");
2565 "This method is not defined or valid for this class type");
2573 "This method is not defined or valid for this class type");
2582 "This method is not defined or valid for this class type");
2593 "This method is not defined or valid for this class type");
2602 const std::string varName,
2607 "This method is not defined or valid for this class type");
2615 "This method is not defined or valid for this class type");
2616 static map<int,RobinBCInfoSharedPtr> result;
2628 "This method is not defined or valid for this class type");
2633 unsigned int regionId,
2634 const std::string& variable)
2636 SpatialDomains::BoundaryConditionCollection::const_iterator collectionIter = collection.find(regionId);
2637 ASSERTL1(collectionIter != collection.end(),
"Unable to locate collection "+boost::lexical_cast<
string>(regionId));
2639 SpatialDomains::BoundaryConditionMap::const_iterator conditionMapIter = boundaryConditionMap->find(variable);
2640 ASSERTL1(conditionMapIter != boundaryConditionMap->end(),
"Unable to locate condition map.");
2642 return boundaryCondition;
2648 "This method is not defined or valid for this class type");
2658 switch(exp->DetShapeType())
2671 exp->GetBasis(1)->GetBasisKey(),
2672 nexp->GetNodalPointsKey().GetPointsType());
2678 exp->GetBasis(1)->GetBasisKey());
2685 exp->GetBasis(1)->GetBasisKey());
2690 exp->GetBasis(1)->GetBasisKey(),
2691 exp->GetBasis(2)->GetBasisKey());
2696 exp->GetBasis(1)->GetBasisKey(),
2697 exp->GetBasis(2)->GetBasisKey());
2702 exp->GetBasis(1)->GetBasisKey(),
2703 exp->GetBasis(2)->GetBasisKey());
2708 exp->GetBasis(1)->GetBasisKey(),
2709 exp->GetBasis(2)->GetBasisKey());
2712 ASSERTL0(
false,
"Shape type not setup");
2726 vector<std::pair<LocalRegions::ExpansionSharedPtr,int> > > collections;
2728 vector<std::pair<LocalRegions::ExpansionSharedPtr,int> > >
::iterator it;
2732 Collections::CollectionOptimisation colOpt(
m_session, ImpType);
2733 ImpType = colOpt.GetDefaultImplementationType();
2735 bool autotuning = colOpt.IsUsingAutotuning();
2736 bool verbose = (
m_session->DefinesCmdLineArgument(
"verbose")) &&
2737 (
m_comm->GetRank() == 0);
2738 int collmax = (colOpt.GetMaxCollectionSize() > 0
2739 ? colOpt.GetMaxCollectionSize()
2748 for (
int i = 0; i <
m_exp->size(); ++i)
2750 collections[(*m_exp)[i]->DetShapeType()].push_back(
2751 std::pair<LocalRegions::ExpansionSharedPtr,int> ((*
m_exp)[i],i));
2754 for (it = collections.begin(); it != collections.end(); ++it)
2758 Collections::OperatorImpMap impTypes = colOpt.GetOperatorImpMap(exp);
2759 vector<StdRegions::StdExpansionSharedPtr> collExp;
2768 if(it->second.size() == 1)
2770 collExp.push_back(it->second[0].first);
2776 impTypes = colOpt.SetWithTimings(collExp,
2780 Collections::Collection tmp(collExp, impTypes);
2786 collExp.push_back(it->second[0].first);
2787 int prevnCoeff = it->second[0].first->GetNcoeffs();
2788 int prevnPhys = it->second[0].first->GetTotPoints();
2791 for (
int i = 1; i < it->second.size(); ++i)
2793 int nCoeffs = it->second[i].first->GetNcoeffs();
2794 int nPhys = it->second[i].first->GetTotPoints();
2801 if(prevCoeffOffset + nCoeffs != coeffOffset ||
2802 prevnCoeff != nCoeffs ||
2803 prevPhysOffset + nPhys != physOffset ||
2804 prevnPhys != nPhys || collcnt >= collmax)
2812 impTypes = colOpt.SetWithTimings(collExp,
2817 Collections::Collection tmp(collExp, impTypes);
2826 collExp.push_back(it->second[i].first);
2831 collExp.push_back(it->second[i].first);
2836 if (i == it->second.size() - 1)
2842 impTypes = colOpt.SetWithTimings(collExp,
2846 Collections::Collection tmp(collExp, impTypes);
2853 prevCoeffOffset = coeffOffset;
2854 prevPhysOffset = physOffset;
2855 prevnCoeff = nCoeffs;
virtual NekDouble v_L2(const Array< OneD, const NekDouble > &phys, const Array< OneD, const NekDouble > &soln=NullNekDouble1DArray)
virtual void v_GlobalToLocal(void)
virtual void v_AddFwdBwdTraceIntegral(const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &outarray)
virtual void v_SmoothField(Array< OneD, NekDouble > &field)
virtual void v_PhysDeriv(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &out_d0, Array< OneD, NekDouble > &out_d1, Array< OneD, NekDouble > &out_d2)
virtual void v_GeneralMatrixOp(const GlobalMatrixKey &gkey, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate)
const StdRegions::VarCoeffMap & GetVarCoeffs() const
GlobalSysSolnType GetGlobalSysSolnType() const
Return the associated solution type.
const DNekScalBlkMatSharedPtr & GetBlockMatrix(const GlobalMatrixKey &gkey)
virtual void v_ExtractDataToCoeffs(LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, std::string &field, Array< OneD, NekDouble > &coeffs)
Extract data from raw field data into expansion list.
void SetY(typename boost::call_traits< DataType >::const_reference val)
int GetExpIndex(const Array< OneD, const NekDouble > &gloCoord, NekDouble tol=0.0, bool returnNearestElmt=false)
#define ASSERTL0(condition, msg)
virtual void v_Reset()
Reset geometry information, metrics, matrix managers and geometry information.
boost::shared_ptr< GlobalMatrix > GenGlobalMatrix(const GlobalMatrixKey &mkey, const boost::shared_ptr< AssemblyMapCG > &locToGloMap)
Generates a global matrix from the given key and map.
#define NEKERROR(type, msg)
Assert Level 0 – Fundamental assert which is used whether in FULLDEBUG, DEBUG or OPT compilation mod...
void GeneralMatrixOp_IterPerExp(const GlobalMatrixKey &gkey, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual const Array< OneD, const boost::shared_ptr< ExpList > > & v_GetBndCondExpansions(void)
boost::shared_ptr< Transposition > TranspositionSharedPtr
ExpList()
The default constructor.
static ExpListSharedPtr NullExpListSharedPtr
tBaseSharedPtr CreateInstance(tKey idKey BOOST_PP_COMMA_IF(MAX_PARAM) BOOST_PP_ENUM_BINARY_PARAMS(MAX_PARAM, tParam, x))
Create an instance of the class referred to by idKey.
static Array< OneD, NekDouble > NullNekDouble1DArray
static boost::shared_ptr< DataType > AllocateSharedPtr()
Allocate a shared pointer from the memory pool.
std::map< int, vector< PeriodicEntity > > PeriodicMap
NekOptimize::GlobalOptParamSharedPtr m_globalOptParam
boost::shared_ptr< AssemblyMap > AssemblyMapSharedPtr
std::map< CoordType, NekDouble > COOMatType
virtual boost::shared_ptr< AssemblyMapDG > & v_GetTraceMap()
T Vmax(int n, const T *x, const int incx)
Return the maximum element in x – called vmax to avoid conflict with max.
General purpose memory allocation routines with the ability to allocate from thread specific memory p...
virtual void v_FillBndCondFromField()
void ExtractFileBCs(const std::string &fileName, const std::string &varName, const boost::shared_ptr< ExpList > locExpList)
boost::shared_ptr< RobinBCInfo > RobinBCInfoSharedPtr
boost::shared_ptr< DNekMat > GenGlobalMatrixFull(const GlobalLinSysKey &mkey, const boost::shared_ptr< AssemblyMapCG > &locToGloMap)
NekDouble PhysIntegral(void)
This function integrates a function over the domain consisting of all the elements of the expansion...
virtual void v_WriteTecplotZone(std::ostream &outfile, int expansion)
void Import(const std::string &infilename, std::vector< FieldDefinitionsSharedPtr > &fielddefs, std::vector< std::vector< NekDouble > > &fielddata=NullVectorNekDoubleVector, FieldMetaDataMap &fieldinfomap=NullFieldMetaDataMap, const Array< OneD, int > ElementiDs=NullInt1DArray)
Imports an FLD file.
ExpansionType GetExpType(void)
Returns the type of the expansion.
boost::shared_ptr< FieldDefinitions > FieldDefinitionsSharedPtr
virtual void v_IProductWRTBase(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate)
const boost::shared_ptr< LocalRegions::ExpansionVector > GetExp() const
This function returns the vector of elements in the expansion.
virtual void v_BwdTrans_IterPerExp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
StdRegions::StdExpansionSharedPtr GetStdExp(StdRegions::StdExpansionSharedPtr exp)
Lagrange Polynomials using the Gauss points .
void BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal)
virtual void v_GetNormals(Array< OneD, Array< OneD, NekDouble > > &normals)
Array< OneD, const unsigned int > GetZIDs(void)
This function returns a vector containing the wave numbers in z-direction associated with the 3D homo...
map< int, RobinBCInfoSharedPtr > GetRobinBCInfo()
std::map< ConstFactorType, NekDouble > ConstFactorMap
void GeneralGetFieldDefinitions(std::vector< LibUtilities::FieldDefinitionsSharedPtr > &fielddef, int NumHomoDir=0, int NumHomoStrip=1, Array< OneD, LibUtilities::BasisSharedPtr > &HomoBasis=LibUtilities::NullBasisSharedPtr1DArray, std::vector< NekDouble > &HomoLen=LibUtilities::NullNekDoubleVector, std::vector< unsigned int > &HomoZIDs=LibUtilities::NullUnsignedIntVector, std::vector< unsigned int > &HomoYIDs=LibUtilities::NullUnsignedIntVector)
BlockMatrixMapShPtr m_blockMat
Array< OneD, NekDouble > m_phys
The global expansion evaluated at the quadrature points.
void ApplyGeomInfo()
Apply geometry information to each expansion.
const StdRegions::ConstFactorMap & GetConstFactors() const
Returns all the constants.
Array< OneD, NekDouble > m_coeffs
Concatenation of all local expansion coefficients.
virtual void v_WriteVtkPieceHeader(std::ostream &outfile, int expansion, int istrip)
virtual void v_NormVectorIProductWRTBase(Array< OneD, const NekDouble > &V1, Array< OneD, const NekDouble > &V2, Array< OneD, NekDouble > &outarray, int BndID)
virtual LibUtilities::TranspositionSharedPtr v_GetTransposition(void)
boost::shared_ptr< DNekMat > DNekMatSharedPtr
boost::shared_ptr< GlobalMatrix > GlobalMatrixSharedPtr
Shared pointer to a GlobalMatrix object.
boost::shared_ptr< SessionReader > SessionReaderSharedPtr
boost::shared_ptr< StdNodalTriExp > StdNodalTriExpSharedPtr
virtual boost::shared_ptr< ExpList > & v_UpdateBndCondExpansion(int i)
boost::shared_ptr< GlobalLinSys > GenGlobalBndLinSys(const GlobalLinSysKey &mkey, const AssemblyMapSharedPtr &locToGloMap)
Generate a GlobalLinSys from information provided by the key "mkey" and the mapping provided in LocTo...
std::vector< ExpansionSharedPtr > ExpansionVector
boost::shared_ptr< DNekScalMat > DNekScalMatSharedPtr
void MultiplyByElmtInvMass(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function elementally mulplies the coefficient space of Sin my the elemental inverse of the mass ...
virtual void v_WriteTecplotHeader(std::ostream &outfile, std::string var="")
virtual NekDouble v_GetHomoLen(void)
void WriteVtkFooter(std::ostream &outfile)
virtual void v_GetCoords(Array< OneD, NekDouble > &coord_0, Array< OneD, NekDouble > &coord_1, Array< OneD, NekDouble > &coord_2=NullNekDouble1DArray)
int GetNumberOfCoefficients(ShapeType shape, std::vector< unsigned int > &modes, int offset)
map< GlobalMatrixKey, DNekScalBlkMatSharedPtr > BlockMatrixMap
A map between global matrix keys and their associated block matrices.
boost::shared_ptr< ExpList > GetSharedThisPtr()
Returns a shared pointer to the current object.
virtual Array< OneD, const NekDouble > v_HomogeneousEnergy(void)
virtual const Array< OneD, const int > & v_GetTraceBndMap()
virtual void v_WriteVtkPieceData(std::ostream &outfile, int expansion, std::string var)
const char *const GlobalSysSolnTypeMap[]
virtual void v_GetBCValues(Array< OneD, NekDouble > &BndVals, const Array< OneD, NekDouble > &TotField, int BndID)
Array< OneD, int > m_coeff_offset
Offset of elemental data into the array m_coeffs.
int GetNumElmts(void)
This function returns the number of elements in the expansion which may be different for a homogeoeno...
void SetZ(typename boost::call_traits< DataType >::const_reference val)
Base class for all multi-elemental spectral/hp expansions.
static const NekDouble kNekZeroTol
void GetCoords(Array< OneD, NekDouble > &coord_0, Array< OneD, NekDouble > &coord_1=NullNekDouble1DArray, Array< OneD, NekDouble > &coord_2=NullNekDouble1DArray)
This function calculates the coordinates of all the elemental quadrature points . ...
virtual void v_ImposeDirichletConditions(Array< OneD, NekDouble > &outarray)
int GetNVarCoeffs() const
virtual void v_Upwind(const Array< OneD, const Array< OneD, NekDouble > > &Vec, const Array< OneD, const NekDouble > &Fwd, const Array< OneD, const NekDouble > &Bwd, Array< OneD, NekDouble > &Upwind)
NekDouble Linf(const Array< OneD, const NekDouble > &inarray, const Array< OneD, const NekDouble > &soln=NullNekDouble1DArray)
This function calculates the error of the global spectral/hp element approximation.
boost::shared_ptr< LocalRegions::ExpansionVector > m_exp
The list of local expansions.
int GetTotPoints(void) const
Returns the total number of quadrature points m_npoints .
NekMatrix< NekMatrix< NekMatrix< NekDouble, StandardMatrixTag >, ScaledMatrixTag >, BlockMatrixTag > DNekScalBlkMat
virtual void v_FwdTrans_IterPerExp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual ~ExpList()
The default destructor.
void IProductWRTDerivBase(const int dir, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function calculates the inner product of a function with respect to the derivative (in directio...
std::map< StdRegions::VarCoeffType, Array< OneD, NekDouble > > VarCoeffMap
boost::shared_ptr< GlobalLinSys > GenGlobalLinSys(const GlobalLinSysKey &mkey, const boost::shared_ptr< AssemblyMapCG > &locToGloMap)
This operation constructs the global linear system of type mkey.
Array< OneD, int > m_phys_offset
Offset of elemental data into the array m_phys.
boost::shared_ptr< ExpList > ExpListSharedPtr
Shared pointer to an ExpList object.
void IProductWRTBase_IterPerExp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
This function calculates the inner product of a function with respect to all {local} expansion modes...
virtual NekDouble v_Integral(const Array< OneD, const NekDouble > &inarray)
virtual std::vector< LibUtilities::FieldDefinitionsSharedPtr > v_GetFieldDefinitions(void)
bool m_physState
The state of the array m_phys.
virtual void v_WriteTecplotConnectivity(std::ostream &outfile, int expansion)
int m_ncoeffs
The total number of local degrees of freedom. m_ncoeffs .
Array< OneD, int > m_offset_elmt_id
Array containing the element id m_offset_elmt_id[n] that the n^th consecutive block of data in m_coef...
boost::shared_ptr< DNekScalBlkMat > DNekScalBlkMatSharedPtr
virtual void v_HomogeneousFwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
virtual void v_LocalToGlobal(void)
LibUtilities::ShapeType GetShapeType() const
Return the expansion type associated with key.
SpatialDomains::MeshGraphSharedPtr m_graph
Mesh associated with this expansion list.
virtual void v_EvaluateBoundaryConditions(const NekDouble time=0.0, const std::string varName="", const NekDouble x2_in=NekConstants::kNekUnsetDouble, const NekDouble x3_in=NekConstants::kNekUnsetDouble)
LibUtilities::SessionReaderSharedPtr m_session
Session.
const DNekScalBlkMatSharedPtr GenBlockMatrix(const GlobalMatrixKey &gkey)
This function assembles the block diagonal matrix of local matrices of the type mtype.
std::map< int, BoundaryConditionMapShPtr > BoundaryConditionCollection
virtual Array< OneD, SpatialDomains::BoundaryConditionShPtr > & v_UpdateBndConditions()
Describe a linear system.
void FwdTrans_BndConstrained(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual boost::shared_ptr< ExpList > & v_GetTrace()
virtual void v_DealiasedProd(const Array< OneD, NekDouble > &inarray1, const Array< OneD, NekDouble > &inarray2, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal)
virtual void v_ExtractCoeffsToCoeffs(const boost::shared_ptr< ExpList > &fromExpList, const Array< OneD, const NekDouble > &fromCoeffs, Array< OneD, NekDouble > &toCoeffs)
virtual boost::shared_ptr< ExpList > & v_GetPlane(int n)
StdRegions::MatrixType GetMatrixType() const
Return the matrix type.
Describes a matrix with ordering defined by a local to global map.
virtual void v_GetPeriodicEntities(PeriodicMap &periodicVerts, PeriodicMap &periodicEdges, PeriodicMap &periodicFaces)
virtual void v_PhysInterp1DScaled(const NekDouble scale, const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
MultiRegions::Direction const DirCartesianMap[]
StandardMatrixTag boost::call_traits< LhsDataType >::const_reference rhs typedef NekMatrix< LhsDataType, StandardMatrixTag >::iterator iterator
LibUtilities::CommSharedPtr m_comm
Communicator.
virtual void v_AddTraceIntegral(const Array< OneD, const NekDouble > &Fx, const Array< OneD, const NekDouble > &Fy, Array< OneD, NekDouble > &outarray)
void ExtractCoeffsToCoeffs(const boost::shared_ptr< ExpList > &fromExpList, const Array< OneD, const NekDouble > &fromCoeffs, Array< OneD, NekDouble > &toCoeffs)
Extract the data from fromField using fromExpList the coeffs using the basic ExpList Elemental expans...
boost::shared_ptr< BoundaryConditionMap > BoundaryConditionMapShPtr
virtual void v_LinearAdvectionReactionSolve(const Array< OneD, Array< OneD, NekDouble > > &velocity, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const NekDouble lambda, CoeffState coeffstate=eLocal, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray)
virtual Array< OneD, const unsigned int > v_GetZIDs(void)
virtual map< int, RobinBCInfoSharedPtr > v_GetRobinBCInfo(void)
#define WARNINGL1(condition, msg)
void SetX(typename boost::call_traits< DataType >::const_reference val)
NekDouble H1(const Array< OneD, const NekDouble > &inarray, const Array< OneD, const NekDouble > &soln=NullNekDouble1DArray)
Calculates the error of the global spectral/hp element approximation.
virtual void v_IProductWRTBase_IterPerExp(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
boost::shared_ptr< Expansion > ExpansionSharedPtr
void WriteVtkPieceFooter(std::ostream &outfile, int expansion)
virtual void v_LinearAdvectionDiffusionReactionSolve(const Array< OneD, Array< OneD, NekDouble > > &velocity, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const NekDouble lambda, CoeffState coeffstate=eLocal, const Array< OneD, const NekDouble > &dirForcing=NullNekDouble1DArray)
virtual void v_HelmSolve(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, const FlagList &flags, const StdRegions::ConstFactorMap &factors, const StdRegions::VarCoeffMap &varcoeff, const Array< OneD, const NekDouble > &dirForcing)
std::vector< int > m_coll_phys_offset
Offset of elemental data into the array m_phys.
virtual void v_AppendFieldData(LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata)
Class for operating on FLD files.
static SpatialDomains::BoundaryConditionShPtr GetBoundaryCondition(const SpatialDomains::BoundaryConditionCollection &collection, unsigned int index, const std::string &variable)
boost::shared_ptr< GlobalLinSys > GlobalLinSysSharedPtr
Pointer to a GlobalLinSys object.
boost::shared_ptr< AssemblyMapDG > & GetTraceMap(void)
void CreateCollections(Collections::ImplementationType ImpType=Collections::eNoImpType)
Construct collections of elements containing a single element type and polynomial order from the list...
void MultiplyByBlockMatrix(const GlobalMatrixKey &gkey, const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
virtual void v_MultiplyByInvMassMatrix(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate)
virtual void v_GetBoundaryToElmtMap(Array< OneD, int > &ElmtID, Array< OneD, int > &EdgeID)
virtual Array< OneD, const unsigned int > v_GetYIDs(void)
Used to lookup the create function in NekManager.
virtual void v_SetUpPhysNormals()
int GetCoordim(int eid)
This function returns the dimension of the coordinates of the element eid.
boost::shared_ptr< BoundaryConditionBase > BoundaryConditionShPtr
virtual const Array< OneD, const SpatialDomains::BoundaryConditionShPtr > & v_GetBndConditions()
void SetExpType(ExpansionType Type)
Returns the type of the expansion.
boost::shared_ptr< AssemblyMapCG > AssemblyMapCGSharedPtr
GlobalLinSysFactory & GetGlobalLinSysFactory()
boost::shared_ptr< StdExpansion > StdExpansionSharedPtr
std::vector< int > m_coll_coeff_offset
Offset of elemental data into the array m_coeffs.
void WriteVtkHeader(std::ostream &outfile)
std::pair< IndexType, IndexType > CoordType
virtual void v_ExtractTracePhys(Array< OneD, NekDouble > &outarray)
virtual void v_PhysGalerkinProjection1DScaled(const NekDouble scale, const Array< OneD, NekDouble > &inarray, Array< OneD, NekDouble > &outarray)
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
boost::shared_ptr< MeshGraph > MeshGraphSharedPtr
virtual void v_BwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate)
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
NekMatrix< NekMatrix< NekDouble, StandardMatrixTag >, ScaledMatrixTag > DNekScalMat
virtual void v_GetFwdBwdTracePhys(Array< OneD, NekDouble > &Fwd, Array< OneD, NekDouble > &Bwd)
void ExtractDataToCoeffs(LibUtilities::FieldDefinitionsSharedPtr &fielddef, std::vector< NekDouble > &fielddata, std::string &field, Array< OneD, NekDouble > &coeffs)
Extract the data in fielddata into the coeffs.
virtual void v_WriteTecplotField(std::ostream &outfile, int expansion)
boost::shared_ptr< PointGeom > PointGeomSharedPtr
Collections::CollectionVector m_collections
virtual void v_ReadGlobalOptimizationParameters()
virtual void v_HomogeneousBwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate=eLocal, bool Shuff=true, bool UnShuff=true)
virtual void v_FwdTrans(const Array< OneD, const NekDouble > &inarray, Array< OneD, NekDouble > &outarray, CoeffState coeffstate)