Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/ElmerGUI/netgen/libsrc/interface/importsolution.cpp
3206 views
1
//
2
// Read solution file
3
//
4
5
6
#include <mystdlib.h>
7
8
9
#include <myadt.hpp>
10
#include <linalg.hpp>
11
#include <csg.hpp>
12
#include <meshing.hpp>
13
14
#include "nginterface.h"
15
16
namespace netgen
17
{
18
#include "writeuser.hpp"
19
20
21
void ImportSolution (const char * filename)
22
{
23
ifstream inf (filename);
24
char buf[100], name[1000];
25
int i, size, comps, order;
26
bool iscomplex;
27
const char * type;
28
Flags flags;
29
30
while (1)
31
{
32
buf[0] = 0;
33
inf >> buf;
34
if (strcmp (buf, "solution") == 0)
35
{
36
inf >> name;
37
38
inf >> buf[0];
39
flags.DeleteFlags ();
40
while (buf[0] == '-')
41
{
42
inf >> buf[1];
43
inf.putback (buf[1]);
44
if (!isalpha (buf[1]))
45
{
46
break;
47
}
48
inf >> (buf+1);
49
flags.SetCommandLineFlag (buf);
50
buf[0] = 0;
51
inf >> buf[0];
52
}
53
inf.putback (buf[0]);
54
55
(*testout) << "Flags: " << endl;
56
flags.PrintFlags (*testout);
57
(*testout) << "done" << endl;
58
59
size = int(flags.GetNumFlag ("size", Ng_GetNP()));
60
comps = int(flags.GetNumFlag ("components", 1));
61
type = flags.GetStringFlag ("type", "nodal");
62
order = int(flags.GetNumFlag ("order", 1));
63
iscomplex = flags.GetDefineFlag ("complex");
64
65
double * sol = new double[size*comps];
66
67
(*testout) << "import solution " << name << " size = " << size << " comps = " << comps << " order = " << order << endl;
68
69
for (i = 0; i < size*comps; i++)
70
{
71
inf >> sol[i];
72
// (*testout) << "sol: " << sol[i] << endl;
73
}
74
75
Ng_SolutionData soldata;
76
Ng_InitSolutionData (&soldata);
77
soldata.name = name;
78
soldata.data = sol;
79
soldata.dist = comps;
80
soldata.components = comps;
81
soldata.order = order;
82
soldata.iscomplex = iscomplex;
83
soldata.soltype = NG_SOLUTION_NODAL;
84
soldata.draw_surface = 1;
85
soldata.draw_volume = 1;
86
if (strcmp (type, "element") == 0)
87
{
88
soldata.soltype = NG_SOLUTION_ELEMENT;
89
soldata.draw_surface = 0;
90
}
91
if (strcmp (type, "surfaceelement") == 0)
92
{
93
soldata.soltype = NG_SOLUTION_SURFACE_ELEMENT;
94
soldata.draw_volume = 0;
95
}
96
if (strcmp (type, "noncontinuous") == 0)
97
soldata.soltype = NG_SOLUTION_NONCONTINUOUS;
98
if (strcmp (type, "surfacenoncontinuous") == 0)
99
soldata.soltype = NG_SOLUTION_SURFACE_NONCONTINUOUS;
100
101
Ng_SetSolutionData (&soldata);
102
}
103
else
104
{
105
// cout << "kw = (" << buf << ")" << endl;
106
(*testout) << "kw = (" << buf << ")" << endl;
107
break;
108
}
109
}
110
/*
111
struct Ng_SolutionData
112
{
113
char * name; // name of gridfunction
114
double * data; // solution values
115
int components; // used components in solution vector
116
int dist; // num of doubles per entry (alignment!)
117
Ng_SolutionType soltype; // type of solution function
118
};
119
120
// initialize solution data with default arguments
121
void Ng_InitSolutionData (Ng_SolutionData * soldata);
122
// set solution data
123
void Ng_SetSolutionData (Ng_SolutionData * soldata);
124
*/
125
}
126
127
128
129
}
130
131