source: issm/oecreview/Archive/21724-22754/ISSM-22659-22660.diff@ 22755

Last change on this file since 22755 was 22755, checked in by Mathieu Morlighem, 7 years ago

CHG: added 21724-22754

File size: 4.2 KB
RevLine 
[22755]1Index: ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js
2===================================================================
3--- ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js (nonexistent)
4+++ ../trunk-jpl/src/wrappers/InterpFromGridToMesh/InterpFromGridToMesh.js (revision 22660)
5@@ -0,0 +1,174 @@
6+/**
7+ * INTERPFROMGRIDTOMESH - interpolation from a grid onto a list of points
8+ *
9+ * This function interpolates a field defined on a grid to a list of points based on a bilinear interpolation.
10+ *
11+ * Usage:
12+ * var data_mesh=InterpFromGridToMesh(xIn,yIn,dataIn,xMeshIn,yMeshIn,defaultValue);\
13+ *
14+ * xIn,yIn : coordinates of matrix data. (x and y must be in increasing order)
15+ * dataIn : matrix holding the data to be interpolated onto the mesh
16+ * xMeshIn,yMeshIn : coordinates of the points onto which we interpolate
17+ * defaultValue (optional) : default value if no data is found (holes)
18+ * dataMesh : array of mesh interpolated data
19+ */
20+function InterpFromGridToMesh(xIn,yIn,dataIn,xMeshIn,yMeshIn,defaultValue) {
21+ /*
22+ Variables
23+ */
24+ //{{{
25+ var data = {};
26+ var dataMesh = {};
27+ var dataMeshPtr = {};
28+ var ddata = {};
29+ var ddataHeap = {};
30+ var ddataPtr = {};
31+ var defaultValue = 0; // Default value for defaultValue :)
32+ var dx = {};
33+ var dxHeap = {};
34+ var dxMesh = {};
35+ var dxMeshHeap = {};
36+ var dxMeshPtr = {};
37+ var dxPtr = {};
38+ var dy = {};
39+ var dyHeap = {};
40+ var dyMesh = {};
41+ var dyMeshHeap = {};
42+ var dyMeshPtr = {};
43+ var dyPtr = {};
44+ var ndata = {};
45+ var nods = 0;
46+ var nx = {};
47+ var nxMesh = {};
48+ var ny = {};
49+ var nyMesh = {};
50+ var pdataMesh = {};
51+ var x = {};
52+ var xMesh = {};
53+ var y = {};
54+ var yMesh = {};
55+ //}}}
56+
57+
58+ /*
59+ Retrieve default value
60+ */
61+ //{{{
62+ if (arguments.length === 6) {
63+ var defaultValue = arguments[5];
64+ }
65+ //}}}
66+
67+
68+ /*
69+ Dynamic allocations
70+ */
71+ //{{{
72+
73+ /*
74+ Input
75+ */
76+ //{{{
77+ dx = new Float64Array(xIn);
78+ nx = dx.length * dx.BYTES_PER_ELEMENT;
79+ dxPtr = Module._malloc(nx);
80+ dxHeap = new Uint8Array(Module.HEAPU8.buffer, dxPtr, nx);
81+ dxHeap.set(new Uint8Array(dx.buffer));
82+ x = dxHeap.byteOffset;
83+
84+ dy = new Float64Array(yIn);
85+ ny = dy.length * dy.BYTES_PER_ELEMENT;
86+ dyPtr = Module._malloc(ny);
87+ dyHeap = new Uint8Array(Module.HEAPU8.buffer, dyPtr, ny);
88+ dyHeap.set(new Uint8Array(dy.buffer));
89+ y = dyHeap.byteOffset;
90+
91+ ddata = new Float64Array(dataIn);
92+ ndata = ddata.length * ddata.BYTES_PER_ELEMENT;
93+ ddataPtr = Module._malloc(ndata);
94+ ddataHeap = new Uint8Array(Module.HEAPU8.buffer, ddataPtr, ndata);
95+ ddataHeap.set(new Uint8Array(ddata.buffer));
96+ data = ddataHeap.byteOffset;
97+
98+ dxMesh = new Float64Array(xMeshIn);
99+ nxMesh = dxMesh.length * dxMesh.BYTES_PER_ELEMENT;
100+ dxMeshPtr = Module._malloc(nxMesh);
101+ dxMeshHeap = new Uint8Array(Module.HEAPU8.buffer, dxMeshPtr, nxMesh);
102+ dxMeshHeap.set(new Uint8Array(dxMesh.buffer));
103+ xMesh = dxMeshHeap.byteOffset;
104+
105+ dyMesh = new Float64Array(yMeshIn);
106+ nyMesh = dyMesh.length * dyMesh.BYTES_PER_ELEMENT;
107+ dyMeshPtr = Module._malloc(nyMesh);
108+ dyMeshHeap = new Uint8Array(Module.HEAPU8.buffer, dyMeshPtr, nyMesh);
109+ dyMeshHeap.set(new Uint8Array(dyMesh.buffer));
110+ yMesh = dyMeshHeap.byteOffset;
111+
112+ nods = xIn.length;
113+
114+
115+ /*
116+ Output
117+ */
118+ dataMeshPtr = Module._malloc(4);
119+ //}}}
120+
121+ //}}}
122+
123+
124+ /*
125+ Declare InterpFromGridToMesh module
126+ */
127+ //{{{
128+ InterpFromGridToMeshModule = Module.cwrap(
129+ 'InterpFromGridToMeshModule',
130+ 'number',
131+ [
132+ 'number',
133+ 'number',
134+ 'number',
135+ 'number',
136+ 'number',
137+ 'number',
138+ 'number'
139+ ]
140+ );
141+ //}}}
142+
143+
144+ /*
145+ Call InterpFromGridToMesh module
146+ */
147+ //{{{
148+ InterpFromGrid2MeshModule(
149+ dataMeshPtr,
150+ x,
151+ y,
152+ data,
153+ xMesh,
154+ yMesh,
155+ nods,
156+ defaultValue
157+ );
158+ //}}}
159+
160+
161+ /*
162+ Dynamic copying from heap
163+ */
164+ //{{{
165+ dataMeshPtr = Module.getValue(pdataMesh, 'i32');
166+ dataMesh = Module.HEAP64.slice(dataMeshPtr / 8, dataMeshPtr / 8 + nods);
167+ //}}}
168+
169+
170+ /*
171+ Free resources
172+ */
173+ //{{{
174+ Module._free(pdataMesh);
175+ //}}}
176+
177+
178+ return dataMesh;
179+}
180\ No newline at end of file
Note: See TracBrowser for help on using the repository browser.