12 using namespace Nektar;
 
   14 int main(
int argc, 
char *argv[])
 
   20         Array<OneD,MultiRegions::ExpListSharedPtr> &Exp,
int nvariables);
 
   26         fprintf(stderr,
"Usage: SplitFld  meshfile fieldfile\n");
 
   37     string meshfile(argv[argc-2]);
 
   50     string fieldfile(argv[argc-1]);
 
   51     vector<LibUtilities::FieldDefinitionsSharedPtr> fielddef;
 
   52     vector<vector<NekDouble> > fielddata;
 
   58     nfields = fielddef[0]->m_fields.size(); 
 
   59     Array<OneD, MultiRegions::ExpListSharedPtr> Exp; 
 
   60     Exp = Array<OneD, MultiRegions::ExpListSharedPtr>(nfields);    
 
   62     std::string solvtype = vSession->GetSolverInfo(
"SOLVERTYPE");
 
   63     if(solvtype == 
"CoupledLinearisedNS" && vSession->DefinesSolverInfo(
"HOMOGENEOUS") )
 
   66          SetFields(graphShPt,boundaryConditions,vSession,Exp,nfields-1);
 
   70          int lastfield = nfields-1;
 
   71          cout<<
"Set pressure: "<<lastfield<<endl;           
 
   72          int nplanes = fielddef[0]->m_numModes[2];
 
   75          NekDouble lz = fielddef[0]->m_homogeneousLengths[0];
 
   78          Exp[lastfield] = Exp3DH1;        
 
   84          SetFields(graphShPt,boundaryConditions,vSession,Exp,nfields);
 
   90     for(
int j = 0; j < nfields; ++j)
 
   92         for(
int i = 0; i < fielddef.size(); ++i)
 
   94             Exp[j]->ExtractDataToCoeffs(fielddef [i],
 
   96                                         fielddef [i]->m_fields[j],
 
   97                                         Exp[j]->UpdateCoeffs());
 
   99         Exp[j]->BwdTrans_IterPerExp(Exp[j]->GetCoeffs(),Exp[j]->UpdatePhys());
 
  106     string   fldfilename(argv[2]);
 
  107     string   out = fldfilename.substr(0, fldfilename.find_last_of(
"."));
 
  108     string   endfile(
"split.fld");
 
  117     Array<OneD, Array<OneD, NekDouble> > fieldcoeffs(Exp.num_elements());
 
  120     for(
int i = 0; i < Exp.num_elements(); ++i)
 
  122         fieldcoeffs[i] = Exp[i]->UpdateCoeffs();
 
  134      for(
int j =0; j<nfields; j++)
 
  137           std::vector<LibUtilities::FieldDefinitionsSharedPtr> FieldDef
 
  138               = Exp[j]->GetFieldDefinitions(); 
 
  139           std::vector<std::vector<NekDouble> > FieldData(FieldDef.size());
 
  141           for(
int i = 0; i < FieldDef.size(); ++i)
 
  143                var = fielddef[i]->m_fields[j];
 
  145                FieldDef[i]->m_fields.push_back(var);         
 
  146                Exp[j]->AppendFieldData(FieldDef[i], FieldData[i],fieldcoeffs[j]);
 
  149           outfile += 
"_"+var+
"_"+endfile;  
 
  166         Array<OneD,MultiRegions::ExpListSharedPtr> &Exp,
int nvariables)
 
  173         bool DeclareCoeffPhysArrays = 
true;     
 
  188         enum HomogeneousType HomogeneousType = eNotHomogeneous;
 
  190         if(session->DefinesSolverInfo(
"HOMOGENEOUS"))
 
  192             std::string HomoStr = session->GetSolverInfo(
"HOMOGENEOUS");
 
  195             if((HomoStr == 
"HOMOGENEOUS1D")||(HomoStr == 
"Homogeneous1D")||
 
  196                (HomoStr == 
"1D")||(HomoStr == 
"Homo1D"))
 
  198                 HomogeneousType = eHomogeneous1D;
 
  199                 npointsZ        = session->GetParameter(
"HomModesZ");
 
  200                 LhomZ           = session->GetParameter(
"LZ");
 
  203             if((HomoStr == 
"HOMOGENEOUS2D")||(HomoStr == 
"Homogeneous2D")||
 
  204                (HomoStr == 
"2D")||(HomoStr == 
"Homo2D"))
 
  206                 HomogeneousType = eHomogeneous2D;
 
  207                 npointsY        = session->GetParameter(
"HomModesY");
 
  208                 LhomY           = session->GetParameter(
"LY");
 
  209                 npointsZ        = session->GetParameter(
"HomModesZ");
 
  210                 LhomZ           = session->GetParameter(
"LZ");
 
  213             if((HomoStr == 
"HOMOGENEOUS3D")||(HomoStr == 
"Homogeneous3D")||
 
  214                (HomoStr == 
"3D")||(HomoStr == 
"Homo3D"))
 
  216                 HomogeneousType = eHomogeneous3D;
 
  219                 npointsY        = session->GetParameter(
"HomModesY");
 
  220                 LhomY           = session->GetParameter(
"LY");
 
  221                 npointsZ        = session->GetParameter(
"HomModesZ");
 
  222                 LhomZ           = session->GetParameter(
"LZ");
 
  225             if(session->DefinesSolverInfo(
"USEFFT"))
 
  232         int expdim   = mesh->GetMeshDimension();
 
  241                     if(HomogeneousType == eHomogeneous2D)
 
  248                         for(i = 0 ; i < nvariables; i++)
 
  251                                 ::AllocateSharedPtr(session,BkeyY,BkeyZ,LhomY,LhomZ,useFFT,deal,mesh,session->GetVariable(i));
 
  256                         for(i = 0 ; i < nvariables; i++)
 
  267                     if(HomogeneousType == eHomogeneous1D)
 
  271                         for(i = 0 ; i < nvariables; i++)
 
  285                         for(i = 1 ; i < nvariables; i++)
 
  296                         if(HomogeneousType == eHomogeneous3D)
 
  298                             ASSERTL0(
false,
"3D fully periodic problems not implemented yet");
 
  308                             for(i = 1 ; i < nvariables; i++)
 
  317                 ASSERTL0(
false,
"Expansion dimension not recognised");