Ice Sheet System Model  4.18
Code documentation
WriteJavascriptData.cpp
Go to the documentation of this file.
1 /* \file WriteData.c:
2  * \brief: general interface for writing data
3  */
4 
5 #ifdef HAVE_CONFIG_H
6  #include <config.h>
7 #else
8 #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
9 #endif
10 
11 #include "./javascriptio.h"
12 #include "./../../../c/datastructures/datastructures.h"
13 
14 /*Primitive data types*/
15 /*FUNCTION WriteData(IssmPDouble** pmatrix, int* pnel, int* matrix, int M,int N){{{*/
16 void WriteData(IssmPDouble** pmatrix, int* pnel, int* matrix, int M,int N){
17 
18  if(pmatrix && matrix){
19 
20  /*Copy matrix: */
21  IssmPDouble* dmatrix = xNew<IssmPDouble>(M*N);
22  for (int i=0;i<M*N;i++)dmatrix[i]=(IssmPDouble)matrix[i];
23  *pmatrix=dmatrix;
24  *pnel=M;
25  }
26 }
27 /*}}}*/
28 /*FUNCTION WriteData(IssmPDouble** pmatrix, int* pM, int* pN, , int* matrix, int M,int N){{{*/
29 void WriteData(IssmPDouble** pmatrix, int* pM, int* pN, int* matrix, int M, int N){
30 
31  if(pmatrix && matrix){
32 
33  /*Copy matrix: */
34  IssmPDouble* dmatrix = xNew<IssmPDouble>(M*N);
35  for (int i=0;i<M*N;i++) dmatrix[i]=(IssmPDouble)matrix[i];
36  *pmatrix=dmatrix;
37  *pM=M;
38  *pN=N;
39  }
40 }
41 /*}}}*/
42 /*FUNCTION WriteData(IssmPDouble** pmatrix, int* pM, IssmPDouble* pN, , int* matrix, int M,int N){{{*/
43 void WriteData(IssmPDouble** pmatrix, int* pM, int* pN, IssmPDouble* matrix, int M, int N){
44 
45  if(pmatrix && matrix){
46 
47  /*Copy matrix: */
48  IssmPDouble* dmatrix = xNew<IssmPDouble>(M*N);
49  for (int i=0;i<M*N;i++) dmatrix[i]=matrix[i];
50  *pmatrix=dmatrix;
51  *pM=M;
52  *pN=N;
53  }
54 }
55 /*}}}*/
56 /*FUNCTION WriteData(IssmPDouble** pmatrix, int** pSize, IssmPDouble* matrix, int* size){{{*/
57 void WriteData(IssmPDouble** pmatrix, int** pSize, IssmPDouble* matrix, int* size){
58 
59  int M = size[0];
60  int N = size[1];
61  int* imatrix = xNew<int>(2);
62  IssmPDouble* dmatrix = xNew<IssmPDouble>(M*N);
63 
64  /*Copy matrix: */
65  for (int i=0;i<2;i++) imatrix[i]=size[i];
66  for (int i=0;i<M*N;i++) dmatrix[i]=matrix[i];
67  *pmatrix=dmatrix;
68  *pSize=imatrix;
69 }
70 /*}}}*/
71 /*FUNCTION WriteData(IssmPDouble** px, int* pnods, double* vector, int M){{{*/
72 void WriteData(IssmPDouble** px, int* pnods, double* vector, int M){
73 
74  if(px && vector){
75 
76  IssmPDouble* dx=xNew<IssmPDouble>(M);
77  for(int i=0;i<M;i++)dx[i]=vector[i];
78  *px=dx;
79  *pnods=M;
80  }
81 }
82 /*}}}*/
83 /*FUNCTION WriteData(IssmPDouble** px, int* pnods, int* vector, int M){{{*/
84 void WriteData(IssmPDouble** px, int* pnods, int* vector, int M){
85 
86  if(px && vector){
87 
88  IssmPDouble* dx=xNew<IssmPDouble>(M);
89  for(int i=0;i<M;i++)dx[i]=(IssmPDouble)vector[i];
90  *px=dx;
91  *pnods=M;
92  }
93 }
94 /*}}}*/
95 /*FUNCTION WriteData(IssmPDouble* pdouble, IssmSeqVec<double> vector){{{*/
96 void WriteData(IssmPDouble** pdataref, IssmSeqVec<double>* vector){
97 
98  double* dataref=NULL;
99  double* vector_ptr=NULL;
100  int rows;
101 
102  if(vector){
103  /*call toolkit routine: */
104  vector_ptr=vector->ToMPISerial();
105  vector->GetSize(&rows);
106 
107  /*now create the js vector */
108  dataref=xNew<double>(rows);
109  for(int i=0;i<rows;i++) dataref[i]=vector_ptr[i];
110  }
111 
112  /*Clean-up and return*/
113  xDelete<double>(vector_ptr);
114  *pdataref=dataref;
115 }
116 /*}}}*/
117 /*FUNCTION WriteData(IssmPDouble* pdouble, IssmPDouble double){{{*/
118 void WriteData(IssmPDouble* pdouble, IssmPDouble doublein){
119 
120  *pdouble=doublein;
121 }
122 /*}}}*/
123 /*FUNCTION WriteData(IssmPDouble** pdouble, void* nullptr){{{*/
124 void WriteData(IssmPDouble** pdouble, void*){
125  //do nothing
126 }
127 /*}}}*/
128 /*FUNCTION WriteData(char** pstring, char* string){{{*/
129 void WriteData(char** pstring, char* stringin){
130 
131  char* string=xNew<char>(strlen(stringin)+1);
132  xMemCpy<char>(string,stringin,strlen(stringin)+1);
133 
134  *pstring=string;
135 }
136 /*}}}*/
137 
138 /*ISSM objects*/
139 /*FUNCTION WriteData(int** VerticesSize, double** Vertices, int** EdgesSize, double** Edges, int** CornersSize, double** Corners, int** RequiredVerticesSize, double** RequiredVertices, int** RequiredEdgesSize, double** RequiredEdges, int** CrackedEdgesSize, double** CrackedEdges, int** SubDomainsSize, double** SubDomains, BamgGeom* bamggeom){{{*/
140 void WriteData(int** VerticesSize, double** Vertices, int** EdgesSize, double** Edges, int** CornersSize, double** Corners, int** RequiredVerticesSize, double** RequiredVertices, int** RequiredEdgesSize, double** RequiredEdges, int** CrackedEdgesSize, double** CrackedEdges, int** SubDomainsSize, double** SubDomains, BamgGeom* bamggeom){
141 
142  /*Assign each field to output*/
143  WriteData(Vertices, VerticesSize, bamggeom->Vertices, bamggeom->VerticesSize);
144  WriteData(Edges, EdgesSize, bamggeom->Edges, bamggeom->EdgesSize);
145  WriteData(Corners, CornersSize, bamggeom->Corners, bamggeom->CornersSize);
146  WriteData(RequiredVertices, RequiredVerticesSize, bamggeom->RequiredVertices, bamggeom->RequiredVerticesSize);
147  WriteData(RequiredEdges, RequiredEdgesSize, bamggeom->RequiredEdges, bamggeom->RequiredEdgesSize);
148  WriteData(CrackedEdges, CrackedEdgesSize, bamggeom->CrackedEdges, bamggeom->CrackedEdgesSize);
149  WriteData(SubDomains, SubDomainsSize, bamggeom->SubDomains, bamggeom->SubDomainsSize);
150 }
151 /*}}}*/
152 /*FUNCTION WriteData(int** VerticesSize, double** Vertices, int** EdgesSize, double** Edges, int** TrianglesSize, double** Triangles, int** IssmEdgesSize, double** IssmEdges, int** IssmSegmentsSize, double** IssmSegments, int** VerticesOnGeomVertexSize, double** VerticesOnGeomVertex, int** VerticesOnGeomEdgeSize, double** VerticesOnGeomEdge, int** EdgesOnGeomEdgeSize, double** EdgesOnGeomEdge, int** SubDomainsSize, double** SubDomains, int** SubDomainsFromGeomSize, double** SubDomainsFromGeom, int** ElementConnectivitySize, double** ElementConnectivity, int** NodalConnectivitySize, double** NodalConnectivity, int** NodalElementConnectivitySize, double** NodalElementConnectivity, int** CrackedVerticesSize, double** CrackedVertices, int** CrackedEdgesSize, double** CrackedEdges, int** PreviousNumberingSize, double** PreviousNumbering, BamgMesh* bamgmesh){{{*/
153 void WriteData(int** VerticesSize, double** Vertices, int** EdgesSize, double** Edges, int** TrianglesSize, double** Triangles, int** IssmEdgesSize, double** IssmEdges, int** IssmSegmentsSize, double** IssmSegments, int** VerticesOnGeomVertexSize, double** VerticesOnGeomVertex, int** VerticesOnGeomEdgeSize, double** VerticesOnGeomEdge, int** EdgesOnGeomEdgeSize, double** EdgesOnGeomEdge, int** SubDomainsSize, double** SubDomains, int** SubDomainsFromGeomSize, double** SubDomainsFromGeom, int** ElementConnectivitySize, double** ElementConnectivity, int** NodalConnectivitySize, double** NodalConnectivity, int** NodalElementConnectivitySize, double** NodalElementConnectivity, int** CrackedVerticesSize, double** CrackedVertices, int** CrackedEdgesSize, double** CrackedEdges, int** PreviousNumberingSize, double** PreviousNumbering, BamgMesh* bamgmesh){
154 
155  /*Assign each field to output*/
156  WriteData(Vertices, VerticesSize, bamgmesh->Vertices, bamgmesh->VerticesSize);
157  WriteData(Edges, EdgesSize, bamgmesh->Edges, bamgmesh->EdgesSize);
158  WriteData(Triangles, TrianglesSize, bamgmesh->Triangles, bamgmesh->TrianglesSize);
159  WriteData(IssmEdges, IssmEdgesSize, bamgmesh->IssmEdges, bamgmesh->IssmEdgesSize);
160  WriteData(IssmSegments, IssmSegmentsSize, bamgmesh->IssmSegments, bamgmesh->IssmSegmentsSize);
161  WriteData(VerticesOnGeomVertex, VerticesOnGeomVertexSize, bamgmesh->VerticesOnGeomVertex, bamgmesh->VerticesOnGeomVertexSize);
162  WriteData(VerticesOnGeomEdge, VerticesOnGeomEdgeSize, bamgmesh->VerticesOnGeomEdge, bamgmesh->VerticesOnGeomEdgeSize);
163  WriteData(EdgesOnGeomEdge, EdgesOnGeomEdgeSize, bamgmesh->EdgesOnGeomEdge, bamgmesh->EdgesOnGeomEdgeSize);
164  WriteData(SubDomains, SubDomainsSize, bamgmesh->SubDomains, bamgmesh->SubDomainsSize);
165  WriteData(SubDomainsFromGeom, SubDomainsFromGeomSize, bamgmesh->SubDomainsFromGeom, bamgmesh->SubDomainsFromGeomSize);
166  WriteData(ElementConnectivity, ElementConnectivitySize, bamgmesh->ElementConnectivity, bamgmesh->ElementConnectivitySize);
167  WriteData(NodalConnectivity, NodalConnectivitySize, bamgmesh->NodalConnectivity, bamgmesh->NodalConnectivitySize);
168  WriteData(NodalElementConnectivity, NodalElementConnectivitySize, bamgmesh->NodalElementConnectivity, bamgmesh->NodalElementConnectivitySize);
169  WriteData(CrackedVertices, CrackedVerticesSize, bamgmesh->CrackedVertices, bamgmesh->CrackedVerticesSize);
170  WriteData(CrackedEdges, CrackedEdgesSize, bamgmesh->CrackedEdges, bamgmesh->CrackedEdgesSize);
171  WriteData(PreviousNumbering, PreviousNumberingSize, bamgmesh->PreviousNumbering, bamgmesh->VerticesSize); //PreviousNumbering just resuses Vertices' Size
172 }
173 /*}}}*/
BamgGeom::RequiredVertices
double * RequiredVertices
Definition: BamgGeom.h:19
BamgGeom::Edges
double * Edges
Definition: BamgGeom.h:13
Vertices
Declaration of Vertices class.
Definition: Vertices.h:15
BamgGeom::CrackedEdges
double * CrackedEdges
Definition: BamgGeom.h:23
BamgGeom::CornersSize
int CornersSize[2]
Definition: BamgGeom.h:16
IssmSeqVec::ToMPISerial
doubletype * ToMPISerial(void)
Definition: IssmSeqVec.h:207
BamgMesh::VerticesOnGeomVertexSize
int VerticesOnGeomVertexSize[2]
Definition: BamgMesh.h:19
BamgMesh::EdgesOnGeomEdge
double * EdgesOnGeomEdge
Definition: BamgMesh.h:24
BamgMesh::NodalConnectivitySize
int NodalConnectivitySize[2]
Definition: BamgMesh.h:42
BamgMesh::NodalElementConnectivity
double * NodalElementConnectivity
Definition: BamgMesh.h:45
BamgGeom::Corners
double * Corners
Definition: BamgGeom.h:17
BamgMesh::VerticesOnGeomEdgeSize
int VerticesOnGeomEdgeSize[2]
Definition: BamgMesh.h:21
BamgGeom::RequiredEdgesSize
int RequiredEdgesSize[2]
Definition: BamgGeom.h:20
BamgMesh::NodalConnectivity
double * NodalConnectivity
Definition: BamgMesh.h:43
BamgMesh::Vertices
double * Vertices
Definition: BamgMesh.h:12
IssmSeqVec
Definition: IssmSeqVec.h:31
BamgMesh::SubDomainsSize
int SubDomainsSize[2]
Definition: BamgMesh.h:26
BamgMesh
Definition: BamgMesh.h:7
BamgGeom::SubDomainsSize
int SubDomainsSize[2]
Definition: BamgGeom.h:24
BamgMesh::CrackedVertices
double * CrackedVertices
Definition: BamgMesh.h:31
BamgMesh::ElementConnectivity
double * ElementConnectivity
Definition: BamgMesh.h:41
BamgGeom::SubDomains
double * SubDomains
Definition: BamgGeom.h:25
BamgMesh::SubDomains
double * SubDomains
Definition: BamgMesh.h:27
BamgMesh::EdgesOnGeomEdgeSize
int EdgesOnGeomEdgeSize[2]
Definition: BamgMesh.h:23
BamgMesh::VerticesSize
int VerticesSize[2]
Definition: BamgMesh.h:11
BamgMesh::CrackedVerticesSize
int CrackedVerticesSize[2]
Definition: BamgMesh.h:30
BamgGeom::CrackedEdgesSize
int CrackedEdgesSize[2]
Definition: BamgGeom.h:22
BamgMesh::VerticesOnGeomEdge
double * VerticesOnGeomEdge
Definition: BamgMesh.h:22
BamgMesh::EdgesSize
int EdgesSize[2]
Definition: BamgMesh.h:14
BamgMesh::SubDomainsFromGeom
double * SubDomainsFromGeom
Definition: BamgMesh.h:29
BamgGeom::RequiredVerticesSize
int RequiredVerticesSize[2]
Definition: BamgGeom.h:18
BamgMesh::PreviousNumbering
double * PreviousNumbering
Definition: BamgMesh.h:13
IssmSeqVec::GetSize
void GetSize(int *pM)
Definition: IssmSeqVec.h:136
BamgMesh::Edges
double * Edges
Definition: BamgMesh.h:15
BamgMesh::SubDomainsFromGeomSize
int SubDomainsFromGeomSize[2]
Definition: BamgMesh.h:28
BamgMesh::IssmSegmentsSize
int IssmSegmentsSize[2]
Definition: BamgMesh.h:38
BamgGeom::VerticesSize
int VerticesSize[2]
Definition: BamgGeom.h:10
BamgMesh::TrianglesSize
int TrianglesSize[2]
Definition: BamgMesh.h:16
BamgGeom::EdgesSize
int EdgesSize[2]
Definition: BamgGeom.h:12
BamgGeom
Definition: BamgGeom.h:7
BamgMesh::VerticesOnGeomVertex
double * VerticesOnGeomVertex
Definition: BamgMesh.h:20
javascriptio.h
BamgMesh::IssmEdgesSize
int IssmEdgesSize[2]
Definition: BamgMesh.h:36
BamgGeom::Vertices
double * Vertices
Definition: BamgGeom.h:11
BamgMesh::NodalElementConnectivitySize
int NodalElementConnectivitySize[2]
Definition: BamgMesh.h:44
BamgGeom::RequiredEdges
double * RequiredEdges
Definition: BamgGeom.h:21
BamgMesh::IssmSegments
double * IssmSegments
Definition: BamgMesh.h:39
IssmPDouble
IssmDouble IssmPDouble
Definition: types.h:38
WriteData
void WriteData(IssmPDouble **pmatrix, int *pnel, int *matrix, int M, int N)
Definition: WriteJavascriptData.cpp:16
BamgMesh::ElementConnectivitySize
int ElementConnectivitySize[2]
Definition: BamgMesh.h:40
BamgMesh::CrackedEdges
double * CrackedEdges
Definition: BamgMesh.h:33
BamgMesh::Triangles
double * Triangles
Definition: BamgMesh.h:17
BamgMesh::IssmEdges
double * IssmEdges
Definition: BamgMesh.h:37
BamgMesh::CrackedEdgesSize
int CrackedEdgesSize[2]
Definition: BamgMesh.h:32