Changeset 2360


Ignore:
Timestamp:
10/02/09 10:17:11 (16 years ago)
Author:
Mathieu Morlighem
Message:

improved interpolation time

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/InterpFromMeshToMesh2dx/InterpFromMeshToMesh2dx.cpp

    r2292 r2360  
    2121        double area_1,area_2,area_3;
    2222        double data_value;
    23         double xmin,xmax;
    24         double ymin,ymax;
     23        double x_prime_min,x_prime_max;
     24        double y_prime_min,y_prime_max;
     25        double x_tria_min,y_tria_min;
     26        double x_tria_max,y_tria_max;
    2527
    2628        /*some checks*/
     
    4446
    4547        /*Get prime mesh extrema coordinates*/
    46         xmin=x_prime[0]; xmax=x_prime[0];ymin=y_prime[0]; ymax=y_prime[0];
     48        x_prime_min=x_prime[0]; x_prime_max=x_prime[0];y_prime_min=y_prime[0]; y_prime_max=y_prime[0];
    4749        for (i=1;i<nods_prime;i++){
    48                 if (x_prime[i]<xmin) xmin=x_prime[i];
    49                 if (x_prime[i]>xmax) xmax=x_prime[i];
    50                 if (y_prime[i]<ymin) ymin=y_prime[i];
    51                 if (y_prime[i]>ymax) ymax=y_prime[i];
     50                if (x_prime[i]<x_prime_min) x_prime_min=x_prime[i];
     51                if (x_prime[i]>x_prime_max) x_prime_max=x_prime[i];
     52                if (y_prime[i]<y_prime_min) y_prime_min=y_prime[i];
     53                if (y_prime[i]>y_prime_max) y_prime_max=y_prime[i];
    5254        }
    5355
     
    6466
    6567                /*if there is no point inside the domain, go to next iteration*/
    66                 if ( (x_data[(int)index_data[3*i+0]-1]<xmin) && (x_data[(int)index_data[3*i+1]-1]<xmin) && (x_data[(int)index_data[3*i+2]-1]<xmin)) continue;
    67                 if ( (x_data[(int)index_data[3*i+0]-1]>xmax) && (x_data[(int)index_data[3*i+1]-1]>xmax) && (x_data[(int)index_data[3*i+2]-1]>xmax)) continue;
    68                 if ( (y_data[(int)index_data[3*i+0]-1]<ymin) && (y_data[(int)index_data[3*i+1]-1]<ymin) && (y_data[(int)index_data[3*i+2]-1]<ymin)) continue;
    69                 if ( (y_data[(int)index_data[3*i+0]-1]>ymax) && (y_data[(int)index_data[3*i+1]-1]>ymax) && (y_data[(int)index_data[3*i+2]-1]>ymax)) continue;
     68                if ( (x_data[(int)index_data[3*i+0]-1]<x_prime_min) && (x_data[(int)index_data[3*i+1]-1]<x_prime_min) && (x_data[(int)index_data[3*i+2]-1]<x_prime_min)) continue;
     69                if ( (x_data[(int)index_data[3*i+0]-1]>x_prime_max) && (x_data[(int)index_data[3*i+1]-1]>x_prime_max) && (x_data[(int)index_data[3*i+2]-1]>x_prime_max)) continue;
     70                if ( (y_data[(int)index_data[3*i+0]-1]<y_prime_min) && (y_data[(int)index_data[3*i+1]-1]<y_prime_min) && (y_data[(int)index_data[3*i+2]-1]<y_prime_min)) continue;
     71                if ( (y_data[(int)index_data[3*i+0]-1]>y_prime_max) && (y_data[(int)index_data[3*i+1]-1]>y_prime_max) && (y_data[(int)index_data[3*i+2]-1]>y_prime_max)) continue;
     72
     73                /*Get extrema coordinates of current elements*/
     74                x_tria_min=x_data[(int)index_data[3*i+0]-1]; x_tria_max=x_tria_min;
     75                y_tria_min=y_data[(int)index_data[3*i+0]-1]; y_tria_max=y_tria_min;
     76                for (j=1;j<3;j++){
     77                        if(x_data[(int)index_data[3*i+j]-1]<x_tria_min) x_tria_min=x_data[(int)index_data[3*i+j]-1];
     78                        if(x_data[(int)index_data[3*i+j]-1]>x_tria_max) x_tria_max=x_data[(int)index_data[3*i+j]-1];
     79                        if(y_data[(int)index_data[3*i+j]-1]<y_tria_min) y_tria_min=y_data[(int)index_data[3*i+j]-1];
     80                        if(y_data[(int)index_data[3*i+j]-1]>y_tria_max) y_tria_max=y_data[(int)index_data[3*i+j]-1];
     81                }
    7082
    7183                /*get area of the current element (Jacobian = 2 * area)*/
     
    7789                /*loop over the prime nodes*/
    7890                for (j=0;j<nods_prime;j++){
     91
     92                        /*if the current point is not in the triangle, continue*/
     93                        if ( (x_tria_min>x_prime[j]) || (x_tria_max<x_prime[j]) || (y_tria_min>y_prime[j]) || (y_tria_max<y_prime[j]) ) continue;
    7994
    8095                        /*Get first area coordinate = det(x-x3  x2-x3 ; y-y3   y2-y3)/area*/
Note: See TracChangeset for help on using the changeset viewer.