4 FILE *
open (
char path[],
int d) {
7 out=fopen(path,
"w") ;
if (out==NULL) {printf(
"Cannot open out file\n") ;
return nullptr;}
8 if (
d>3 && warn==
false) {
9 printf(
"WARN: writevtk might misbehave with dimension higher than 3. The 3d projection is always centered in all other dimensions\n") ;
12 fprintf(out,
"# vtk DataFile Version 2.0\nMost Useless DEM (tm) output file\nASCII\nDATASET POLYDATA\n") ;
18 fprintf(out,
"POINTS %ld float\n", X.size()) ;
19 for (
uint i=0 ; i<X.size() ; i++) fprintf(out,
"%g %g %g\n", X[i][0], X[i][1],
d<3?0:X[i][2]) ;
20 fprintf(out,
"VERTICES %ld %ld\n", X.size(), 2*X.size()) ;
21 for (
uint i=0 ; i<X.size() ; i++) fprintf(out,
"1 %d\n", i) ;
28 fprintf(out,
"LINES %ld %ld\n", ids.size(), ids.size()*3) ;
29 for (
uint i=0 ; i<ids.size() ; i++) fprintf(out,
"2 %g %g\n", ids[i][0], ids[i][1]) ;
36 fprintf(out,
"\nPOINT_DATA %ld", X.size()) ;
42 fprintf(out,
"\nCELL_DATA %d\n",
N+Ncf) ;
49 vector <float> projectioncenter ;
51 for (
int i=3 ; i<
d ; i++) projectioncenter.push_back((boundaries[0].center[i])/2) ;
53 for (
int i=3 ; i<
d ; i++) projectioncenter.push_back((boundaries[i].xmax+boundaries[i].xmin)/2) ;
55 for (
uint j=3 ; j<X[0].size() ; j++)
57 fprintf(out,
"\nSCALARS Dimension%d float 1 \nLOOKUP_TABLE default \n", j) ;
58 for (
uint i=0 ; i<X.size() ; i++)
59 fprintf(out,
"%g ", X[i][j]) ;
62 fprintf(out,
"\n\nSCALARS RadiusProjected float 1 \nLOOKUP_TABLE default\n");
63 for (
uint i=0 ; i<X.size() ; i++)
65 float value = r[i]*r[i] ;
66 for (
int j=3 ; j<
d ; j++)
value-=(X[i][j]-projectioncenter[j-3])*(X[i][j]-projectioncenter[j-3]) ;
67 if (
value<0) fprintf(out,
"%g ", 0.0) ;
68 else fprintf(out,
"%g ", sqrt(
value)) ;
77 for (
uint i=0 ; i<(*v.
data)[0].size() ; i++)
78 fprintf(out,
"%g ", (*v.
data)[0][i]) ;
81 for (
auto i : (*v.
data))
82 fprintf(out,
"%g %g %g\n", i[0], i[1],
d<3?0:i[2]) ;
85 for (
auto i : (*v.
data))
86 fprintf(out,
"%g %g %g %g %g %g %g %g %g\n", i[0], i[1], i[2], i[
d], i[
d+1], i[
d+2], i[2*
d], i[2*
d+1], i[2*
d+2]) ;
89 for (
auto i : (*v.
data))
90 fprintf(out,
"%g %g %g %g %g %g %g %g %g\n", i[0], i[1], i[2], i[1], i[
d], i[
d+1], i[2], i[
d+1], i[2*
d-1]) ;
94 fprintf(out,
"%g %g %g %g %g %g %g %g %g\n", 0.0, i[0], i[1], -i[0], 0.0, i[
d-1], -i[1], -i[
d-1], 0.0) ;
107 for (
int i=0 ; i<
N ; i++) fprintf(out,
"0 0 0\n") ;
109 fprintf(out,
"%g %g %g\n", i[idx], i[idx+1],
d<3?0:i[idx+2]) ;
111 case TensorType::SCALARMASK: fprintf(out,
"\nSCALARS %s long 1 \nLOOKUP_TABLE default \n", name.c_str()) ;
112 for (
int i=0 ; i<
N ; i++) {fprintf(out,
"0 ") ; } fprintf(out,
"\n") ;
114 fprintf(out,
"%ld \n",
static_cast<long int>(i[idx])) ;
123 void close(FILE *out ) { fclose(out) ;}
Definition: Boundaries.h:8
Limited use: used to transfer data to the VTK writer.
Definition: Tools.h:50
TensorType order
Definition: Tools.h:53
string name
Definition: Tools.h:52
v2d * data
Definition: Tools.h:54
TensorType
Definition: Tools.h:46
unsigned int uint
Definition: Typedefs.h:8
const vector< double > cv1d
Definition: Typedefs.h:13
const vector< vector< double > > cv2d
Definition: Typedefs.h:14
vector< double > v1d
Definition: Typedefs.h:9
int write_data(FILE *out, TensorInfos v, int d)
Definition: Vtk.h:73
FILE * open(char path[], int d)
Definition: Vtk.h:4
int write_points(FILE *out, cv2d &X, int d)
Definition: Vtk.h:16
int write_contactlines(FILE *out, cv2d &ids)
Definition: Vtk.h:25
int write_celldata(FILE *out, std::string name, cv2d &v, TensorType order, int idx, int N, int d)
Definition: Vtk.h:103
int write_dimension_data(FILE *out, cv2d &X, cv1d &r, int d, vector< Boundary< dd > > boundaries)
Definition: Vtk.h:47
void close(FILE *out)
Definition: Vtk.h:123
int start_celldata(FILE *out, int N, int Ncf)
Definition: Vtk.h:40
int start_pointdata(FILE *out, cv2d &X)
Definition: Vtk.h:34
const GenericPointer< typename T::ValueType > T2 value
Definition: pointer.h:1282
Type
Type of JSON value.
Definition: rapidjson.h:644