Nektar++
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
utilities/ExtractCriticalLayer.cpp
Go to the documentation of this file.
1 ///////////////////////////////////////////////////////////////////////////////
2 //
3 // File ExtractCriticalLayer.cpp
4 //
5 // For more information, please see: http://www.nektar.info
6 //
7 // The MIT License
8 //
9 // Copyright (c) 2006 Division of Applied Mathematics, Brown University (USA),
10 // Department of Aeronautics, Imperial College London (UK), and Scientific
11 // Computing and Imaging Institute, University of Utah (USA).
12 //
13 // License for the specific language governing rights and limitations under
14 // Permission is hereby granted, free of charge, to any person obtaining a
15 // copy of this software and associated documentation files (the "Software"),
16 // to deal in the Software without restriction, including without limitation
17 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
18 // and/or sell copies of the Software, and to permit persons to whom the
19 // Software is furnished to do so, subject to the following conditions:
20 //
21 // The above copyright notice and this permission notice shall be included
22 // in all copies or substantial portions of the Software.
23 //
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
27 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
29 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
30 // DEALINGS IN THE SOFTWARE.
31 //
32 // Description: Extract location of critical layer from streak file
33 //
34 ///////////////////////////////////////////////////////////////////////////////
35 
36 #include <cstdio>
37 #include <cstdlib>
38 
39 #include <MultiRegions/ExpList.h>
40 #include <MultiRegions/ExpList2D.h>
41 
43 
44 int main(int argc, char *argv[])
45 {
46  int i;
47  NekDouble cr = 0;
48 
49  if(argc !=3)
50  {
51  fprintf(stderr,"Usage: ./ExtractCriticalLayer meshfile fieldfile \n");
52  exit(1);
53  }
54 
55  //------------------------------------------------------------
56  // Create Session file.
58  = LibUtilities::SessionReader::CreateInstance(argc, argv);
59  //-----------------------------------------------------------
60 
61  //-------------------------------------------------------------
62  // Read in mesh from input file
63  SpatialDomains::MeshGraphSharedPtr graphShPt = SpatialDomains::MeshGraph::Read(vSession);
64  //------------------------------------------------------------
65 
66  //-------------------------------------------------------------
67  // Define Streak Expansion
69 
71  ::AllocateSharedPtr(vSession,graphShPt);
72  //---------------------------------------------------------------
73 
74  //----------------------------------------------
75  // Import field file.
76  string fieldfile(argv[argc-1]);
77  vector<LibUtilities::FieldDefinitionsSharedPtr> fielddef;
78  vector<vector<NekDouble> > fielddata;
79  LibUtilities::Import(fieldfile,fielddef,fielddata);
80  //----------------------------------------------
81 
82  //----------------------------------------------
83  // Copy data from field file
84  string streak_field("w");
85  for(unsigned int i = 0; i < fielddata.size(); ++i)
86  {
87  streak->ExtractDataToCoeffs(fielddef [i],
88  fielddata[i],
89  streak_field,
90  streak->UpdateCoeffs());
91  }
92  //----------------------------------------------
93 
94  int npts;
95  vSession->LoadParameter("NumCriticalLayerPts",npts,30);
96  Array<OneD, NekDouble> x_c(npts);
97  Array<OneD, NekDouble> y_c(npts);
98 
99  NekDouble trans;
100  vSession->LoadParameter("WidthOfLayers",trans,0.1);
101 
102  Computestreakpositions(streak,x_c, y_c,cr,trans);
103 
104  cout << "# x_c y_c" << endl;
105  for(i = 0; i < npts; ++i)
106  {
107  fprintf(stdout,"%12.10lf %12.10lf \n",x_c[i],y_c[i]);
108  //cout << x_c[i] << " " << y_c[i] << endl;
109  }
110 
111 }