Changeset 3128


Ignore:
Timestamp:
02/24/10 15:58:48 (15 years ago)
Author:
Mathieu Morlighem
Message:

Increased InterpFromMeshToMesh2dx speed using Bamg

Location:
issm/trunk/src/mex
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/mex/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.cpp

    r2627 r3128  
    1 /*!\file InterpFromMeshToMesh2d.c
    2  * \brief: data interpolation from a list of (x,y,values) into mesh grids
    3  
    4         InterpFromMeshToMesh2d.c
    5 
    6         usage:
    7         data_mesh=InterpFromMeshToMesh2d(index,x,y,data,x_mesh,y_mesh);
    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.
    14                 x_mesh,y_mesh: coordinates of the mesh grids onto which we interpolate.
    15                
    16                 output:
    17                 data_mesh:  vector of mesh interpolated data.
    18 
    19 */
    20        
     1/*\file InterpFromMeshToMesh2d.c
     2 *\brief: bamg module.
     3 */
    214#include "./InterpFromMeshToMesh2d.h"
    225
    23 void mexFunction( int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]) {
     6void mexFunction( int nlhs, mxArray* plhs[], int nrhs, const mxArray* prhs[]){
    247
    258        /*input: */
    26         double* index_data=NULL;
    27         int     index_data_rows;
     9        double* index=NULL;
    2810
    2911        double* x_data=NULL;
    3012        int     x_data_rows;
    31        
     13
    3214        double* y_data=NULL;
    3315        int     y_data_rows;
     
    3719        int     data_cols;
    3820
    39         double* x_prime=NULL;
    40         double* y_prime=NULL;
    41        
    42         int     x_prime_rows;
    43         int     y_prime_rows;
     21        double* x_interp=NULL;
     22        double* y_interp=NULL;
     23
     24        int     x_interp_rows;
     25        int     y_interp_rows;
    4426
    4527        double default_value;
     
    4830        int nods_data;
    4931        int nels_data;
    50         int nods_prime;
     32        int nods_interp;
     33        int verbose=0;
    5134
    5235        /* output: */
    53         Vec  data_prime=NULL;
     36        double* data_interp=NULL;
    5437
    5538        /*Boot module: */
     
    6043
    6144        /*Input datasets: */
    62         FetchData(&index_data,&index_data_rows,NULL,INDEXHANDLE);
     45        if (verbose) printf("Fetching inputs\n");
     46        FetchData(&index,&nels_data,NULL,INDEXHANDLE);
    6347        FetchData(&x_data,&x_data_rows,NULL,XHANDLE);
    6448        FetchData(&y_data,&y_data_rows,NULL,YHANDLE);
    6549        FetchData(&data,&data_rows,&data_cols,DATAHANDLE);
    66         FetchData(&x_prime,&x_prime_rows,NULL,XPRIMEHANDLE);
    67         FetchData(&y_prime,&y_prime_rows,NULL,YPRIMEHANDLE);
     50        FetchData(&x_interp,&x_interp_rows,NULL,XINTERPHANDLE);
     51        FetchData(&y_interp,&y_interp_rows,NULL,YINTERPHANDLE);
    6852        FetchData(&default_value,DEFAULTHANDLE);
    6953
    7054        /*some checks*/
     55        if (verbose) printf("Checking inputs\n");
    7156        if (x_data_rows!=y_data_rows){
    7257                throw ErrorException(__FUNCT__,"vectors x and y should have the same length!");
    7358        }
    74         if (x_prime_rows!=y_prime_rows){
    75                 throw ErrorException(__FUNCT__,"vectors x_prime and y_prime should have the same length!");
     59        if (x_interp_rows!=y_interp_rows){
     60                throw ErrorException(__FUNCT__,"vectors x_interp and y_interp should have the same length!");
    7661        }
    77        
     62
    7863        /*get number of elements and number of nodes in the data*/
    79         nels_data=index_data_rows;
    8064        nods_data=x_data_rows;
    81         nods_prime=x_prime_rows;
     65        nods_interp=x_interp_rows;
    8266
    8367        /* Run core computations: */
    84         InterpFromMeshToMesh2dx(&data_prime,index_data,x_data,y_data,nods_data,nels_data,data,data_rows,x_prime,y_prime,nods_prime,default_value);
     68        if (verbose) printf("Call core\n");
     69        InterpFromMeshToMesh2dx(&data_interp,index,x_data,y_data,nods_data,nels_data,data,data_rows,data_cols,x_interp,y_interp,nods_interp,default_value);
    8570
    8671        /*Write data: */
    87         WriteData(DATAPRIME,data_prime);
     72        WriteData(DATAINTERP,data_interp,nods_interp,data_cols);
    8873
    8974        /*end module: */
     
    9378void InterpFromMeshToMesh2dUsage(void)
    9479{
    95         _printf_("INTERPFROMMESHTOMESH2D - interpolation from a 2d triangular mesh onto a list of point\n");
     80        _printf_("INTERFROMMESHTOMESH2D - interpolation from a 2d triangular mesh onto a list of point\n");
    9681        _printf_("\n");
    9782        _printf_("   This function is a multi-threaded mex file that interpolates a field\n");
     
    9984        _printf_("\n");
    10085        _printf_("   Usage:\n");
    101         _printf_("      data_prime=InterpFromMeshToMesh2d(index,x,y,data,x_prime,y_prime,default_value);\n");
     86        _printf_("      data_interp=InterpFromMeshToMesh2d(index,x,y,data,x_interp,y_interp,default_value);\n");
    10287        _printf_("\n");
    10388        _printf_("      index: index of the mesh where data is defined\n");
    10489        _printf_("      x,y: coordinates of the nodes where data is defined\n");
    105         _printf_("      data: matrix holding the data to be interpolated onto the mesh.\n");
    106         _printf_("      x_prime,y_prime: coordinates of the points onto which we interpolate.\n");
     90        _printf_("      data: matrix holding the data to be interpolated onto the mesh. (one column per field)\n");
     91        _printf_("      x_interp,y_interp: coordinates of the points onto which we interpolate.\n");
    10792        _printf_("      default_value: default value if no data is found (holes).\n");
    108         _printf_("      data_prime: vector of mesh interpolated data.\n");
     93        _printf_("      data_interp: vector of mesh interpolated data.\n");
    10994        _printf_("\n");
    11095        _printf_("   Example:\n");
  • issm/trunk/src/mex/InterpFromMeshToMesh2d/InterpFromMeshToMesh2d.h

    r2290 r3128  
    33 */
    44
    5 #ifndef _INTERPFROMMESH2D_H
    6 #define _INTERPFROMMESH2D_H
     5#ifndef _INTERPFROMMESHTOMESH2d_H
     6#define _INTERPFROMMESHTOMESH2d_H
    77
    88/* local prototypes: */
     
    1414#define __FUNCT__  "InterpFromMeshToMesh2d"
    1515
    16 #undef CLEANUP
    17 #define CLEANUP InterpFromMeshToMesh2dLocalCleanup();
    18 
    1916
    2017/* serial input macros: */
     
    2320#define YHANDLE prhs[2]
    2421#define DATAHANDLE prhs[3]
    25 #define XPRIMEHANDLE prhs[4]
    26 #define YPRIMEHANDLE prhs[5]
     22#define XINTERPHANDLE prhs[4]
     23#define YINTERPHANDLE prhs[5]
    2724#define DEFAULTHANDLE prhs[6]
    2825
    2926/* serial output macros: */
    30 #define DATAPRIME (mxArray**)&plhs[0]
     27#define DATAINTERP (mxArray**)&plhs[0]
    3128
    3229/* serial arg counts: */
     
    3633#define NRHS  7
    3734
    38 #endif  /* _INTERPFROMMESHTOMESH2D_H */
     35#endif
  • issm/trunk/src/mex/Makefile.am

    r2892 r3128  
    8585
    8686Bamg_SOURCES = Bamg/Bamg.cpp\
    87                            Bamg/Bamg.h
    88 
     87                                        Bamg/Bamg.h
    8988
    9089ComputePressure_SOURCES = ComputePressure/ComputePressure.cpp\
Note: See TracChangeset for help on using the changeset viewer.