source: issm/trunk-jpl/src/modules/InterpFromGridToMesh/InterpFromGridToMesh.cpp@ 13216

Last change on this file since 13216 was 13216, checked in by Eric.Larour, 13 years ago

NEW: large change to the code, to adapt to ADOLC requirements.

This change relates to the introduction of template classes and functions for the
Option.h abstract class. This is needed, because we want to make the Matlab
API independent from the libCore objects, which are dependent on the IssmDouble*
ADOLC type (adouble), when the Matlab API is dependent on the IssmPDouble* type (double).

To make them independent, we need to be able to specify at run time Options, Matrix and
Vector objects that hold either IssmDouble or IssmPDouble objects. The only way to do
that is through the use of templated classes for Option.h, Matrix and Vector.

The change gets rid of a lot of useless code (especially in the classes/objects/Options
directory), by introducing template versions of the same code.

The bulk of the changes to src/modules and src/mex modules is to adapt to this
new runtime declaration of templated Matrix, Vector and Option objects.

File size: 3.0 KB
RevLine 
[2290]1/*!\file InterpFromGridToMesh.c
[8306]2 * \brief: data interpolation from a list of (x,y,values) into mesh vertices
[1172]3
[2290]4 InterpFromGridToMesh.c
[1172]5
6 usage:
[2290]7 data_mesh=InterpFromGridToMesh(x,y,data,x_mesh,y_mesh);
[1172]8
9 where:
10
11 input:
12 x,y: coordinates of matrix data
13 data - matrix holding the data to be interpolated onto the mesh.
[8306]14 x_mesh,y_mesh: coordinates of the mesh vertices onto which we interpolate.
[1172]15
16 output:
17 data_mesh: vector of mesh interpolated data.
18*/
19
[2290]20#include "./InterpFromGridToMesh.h"
[1172]21
22void mexFunction( int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]) {
23
24 int i,j;
25
26 /*input: */
27 double* x=NULL;
[1174]28 double* y=NULL;
[7519]29 int x_rows,y_rows;
[1172]30 double* data=NULL;
31 int data_rows,data_cols;
32 double* x_mesh=NULL;
33 double* y_mesh=NULL;
[7519]34 int x_mesh_rows,y_mesh_rows;
35 double default_value;
36 int interpolationenum;
[1172]37
38 /* output: */
[13216]39 Vector<double>* data_mesh=NULL;
[1172]40
41 /*Boot module: */
42 MODULEBOOT();
43
44 /*checks on arguments on the matlab side: */
[7519]45 //CheckNumMatlabArguments(nlhs,NLHS,nrhs,NRHS,__FUNCT__,&InterpFromGridToMeshUsage);
46 if((nlhs!=NLHS) || (nrhs!=6 && nrhs!=7)){
47 InterpFromGridToMeshUsage();
[13036]48 _error_("usage. See above");
[7519]49 }
[1172]50
51 /*Input datasets: */
[11933]52 FetchData(&x,&x_rows,NULL,XHANDLE);
53 FetchData(&y,&y_rows,NULL,YHANDLE);
54 FetchData(&data,&data_rows,&data_cols,DATAHANDLE);
55 FetchData(&x_mesh,&x_mesh_rows,NULL,XMESHHANDLE);
56 FetchData(&y_mesh,&y_mesh_rows,NULL,YMESHHANDLE);
57 FetchData(&default_value,DEFAULTHANDLE);
[1172]58
59 /* Run core computations: */
[7519]60 if(nrhs==7){
[11933]61 FetchData(&interpolationenum,INTERPENUM);
[7519]62 InterpFromGridToMeshx(&data_mesh, x, x_rows, y, y_rows, data, data_rows,data_cols, x_mesh, y_mesh, x_mesh_rows,default_value,interpolationenum);
63 }
64 else{
65 InterpFromGridToMeshx(&data_mesh, x, x_rows, y, y_rows, data, data_rows,data_cols, x_mesh, y_mesh, x_mesh_rows,default_value);
66 }
[1172]67
68 /*Write data: */
[11933]69 WriteData(DATAMESH,data_mesh);
[1172]70
71 /*end module: */
72 MODULEEND();
73}
74
[2290]75void InterpFromGridToMeshUsage(void)
[1172]76{
[12518]77 _pprintLine_("INTERPFROMGRIDTOMESH - interpolation from a grid onto a list of points");
78 _pprintLine_("");
79 _pprintLine_(" This function is a multi-threaded mex file that interpolates a field");
80 _pprintLine_(" defined on a grid onto a list of points");
81 _pprintLine_("");
82 _pprintLine_(" Usage:");
83 _pprintLine_(" data_mesh=InterpFromGridToMesh(x,y,data,x_mesh,y_mesh,default_value);");
84 _pprintLine_("");
85 _pprintLine_(" data: matrix holding the data to be interpolated onto the mesh.");
86 _pprintLine_(" x,y: coordinates of matrix data. (x and y must be in increasing order)");
87 _pprintLine_(" x_mesh,y_mesh: coordinates of the points onto which we interpolate.");
88 _pprintLine_(" default_value: default value if no data is found (holes).");
89 _pprintLine_(" data_mesh: vector of mesh interpolated data.");
90 _pprintLine_("");
91 _pprintLine_(" Example:");
92 _pprintLine_(" load('velocities.mat');");
93 _pprintLine_(" md.inversion.vx_obs=InterpFromGridToMesh(x_n,y_m,vx,md.mesh.x,md.mesh.y,0);");
94 _pprintLine_("");
[1172]95}
Note: See TracBrowser for help on using the repository browser.