Changeset 10371


Ignore:
Timestamp:
10/31/11 11:18:22 (13 years ago)
Author:
Mathieu Morlighem
Message:

Cleaner transformation of solution (CS)

Location:
issm/trunk/src/c/objects/Elements
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/objects/Elements/Tria.cpp

    r10368 r10371  
    31773177        int*      doflist=NULL;
    31783178        double    rho_ice,g;
     3179        double    values0[numdof];
    31793180        double    values[numdof];
    31803181        double    vx[NUMVERTICES];
     
    31893190
    31903191        /*Use the dof list to index into the solution vector: */
    3191         for(i=0;i<numdof;i++) values[i]=solution[doflist[i]];
     3192        for(i=0;i<numdof;i++) values0[i]=solution[doflist[i]];
     3193
     3194        /*Transform solution in Cartesian Space*/
     3195        TransformSolutionCoord(&values[0],&values0[0],2);
    31923196
    31933197        /*Ok, we have vx and vy in values, fill in vx and vy arrays: */
    31943198        for(i=0;i<NUMVERTICES;i++){
    3195                 /*TEMP*/
    3196                 vel[0]=values[i*NDOF2+0];
    3197                 vel[1]=values[i*NDOF2+1];
    3198                 TransformSolutionCoord(&vel[0],2,i);
    3199                 vx[i]=vel[0];
    3200                 vy[i]=vel[1];
     3199                vx[i]=values[i*NDOF2+0];
     3200                vy[i]=values[i*NDOF2+1];
    32013201
    32023202                /*Check solution*/
     
    33333333        CoordinateSystemTransform(&transform,nodes,numnodes,dim);
    33343334
    3335         /*Transform matrix: T*pe */
     3335        /*Transform matrix: T^t*pe */
    33363336        MatrixMultiply(transform,numnodes*dim,numnodes*dim,1,
    33373337                                  values,pe->nrows,1,0,
     
    33443344/*}}}*/
    33453345/*FUNCTION Tria::TransformSolutionCoord{{{1*/
    3346 void Tria::TransformSolutionCoord(double* vel,int dim,int node_index){
     3346void Tria::TransformSolutionCoord(double* solution,double* solution0,int dim){
    33473347
    33483348        int     i,j;
     3349        int     numnodes          = NUMVERTICES;
    33493350        double *transform         = NULL;
    3350         double *values            = NULL;
    3351 
    3352         /*Copy current solution vector*/
    3353         values=(double*)xmalloc(dim*sizeof(double));
    3354         for(i=0;i<dim;i++) values[i]=vel[i];
    33553351
    33563352        /*Get Coordinate Systems transform matrix*/
    3357         CoordinateSystemTransform(&transform,&nodes[node_index],1,dim);
    3358 
    3359         /*Transform matrix: T*pe */
    3360         MatrixMultiply(transform,dim,dim,0,
    3361                                 values,dim,1,0,
    3362                                 vel,0);
     3353        CoordinateSystemTransform(&transform,nodes,numnodes,dim);
     3354
     3355        /*Transform matrix: T*U */
     3356        MatrixMultiply(transform,numnodes*dim,numnodes*dim,0,
     3357                                solution0,numnodes*dim,1,0,
     3358                                &solution[0],0);
    33633359
    33643360        /*Free Matrix*/
    33653361        xfree((void**)&transform);
    3366         xfree((void**)&values);
    33673362}
    33683363/*}}}*/
  • issm/trunk/src/c/objects/Elements/Tria.h

    r10368 r10371  
    210210                void    TransformStiffnessMatrixCoord(ElementMatrix* Ke,int dim);
    211211                void    TransformLoadVectorCoord(ElementVector* pe,int dim);
    212                 void    TransformSolutionCoord(double* vel,int dim,int node_index);
     212                void    TransformSolutionCoord(double* solution,double* solution0,int dim);
    213213                #endif
    214214
Note: See TracChangeset for help on using the changeset viewer.