[22755] | 1 | Index: ../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
|
---|