Changeset 10375


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

extended local CS to MacAyeal3d

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

Legend:

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

    r10373 r10375  
    48064806}
    48074807/*}}}*/
    4808 
    48094808#endif
    48104809
     
    70767075        int     i;
    70777076        double  rho_ice,g;
     7077        double  values0[numdof];
    70787078        double  values[numdof];
    70797079        double  vx[NUMVERTICES];
     
    70917091
    70927092        /*Use the dof list to index into the solution vector: */
    7093         for(i=0;i<numdof;i++) values[i]=solution[doflist[i]];
     7093        for(i=0;i<numdof;i++) values0[i]=solution[doflist[i]];
     7094
     7095        /*Transform solution in Cartesian Space*/
     7096        TransformSolutionCoord(&values[0],&values0[0],2,true);
    70947097
    70957098        /*Ok, we have vx and vy in values, fill in vx and vy arrays and extrude */
     
    77097712}
    77107713/*}}}*/
     7714/*FUNCTION Penta::TransformStiffnessMatrixCoord{{{1*/
     7715void Penta::TransformStiffnessMatrixCoord(ElementMatrix* Ke,int dim){
     7716
     7717        int     i,j;
     7718        int     numnodes          = NUMVERTICES;
     7719        double *transform         = NULL;
     7720        double *values            = NULL;
     7721
     7722        /*Copy current stiffness matrix*/
     7723        values=(double*)xmalloc(Ke->nrows*Ke->ncols*sizeof(double));
     7724        for(i=0;i<Ke->nrows;i++) for(j=0;j<Ke->ncols;j++) values[i*Ke->ncols+j]=Ke->values[i*Ke->ncols+j];
     7725
     7726        /*Get Coordinate Systems transform matrix*/
     7727        CoordinateSystemTransform(&transform,nodes,numnodes,dim);
     7728
     7729        /*Transform matrix: T*Ke*T^t */
     7730        TripleMultiply(transform,numnodes*dim,numnodes*dim,1,
     7731                                values,Ke->nrows,Ke->ncols,0,
     7732                                transform,numnodes*dim,numnodes*dim,0,
     7733                                &Ke->values[0],0);
     7734
     7735        /*Free Matrix*/
     7736        xfree((void**)&transform);
     7737        xfree((void**)&values);
     7738}
     7739/*}}}*/
     7740/*FUNCTION Penta::TransformLoadVectorCoord{{{1*/
     7741void Penta::TransformLoadVectorCoord(ElementVector* pe,int dim){
     7742
     7743        int     i,j;
     7744        int     numnodes          = NUMVERTICES;
     7745        double *transform         = NULL;
     7746        double *values            = NULL;
     7747
     7748        /*Copy current load vector*/
     7749        values=(double*)xmalloc(pe->nrows*sizeof(double));
     7750        for(i=0;i<pe->nrows;i++) values[i]=pe->values[i];
     7751
     7752        /*Get Coordinate Systems transform matrix*/
     7753        CoordinateSystemTransform(&transform,nodes,numnodes,dim);
     7754
     7755        /*Transform matrix: T^t*pe */
     7756        MatrixMultiply(transform,numnodes*dim,numnodes*dim,1,
     7757                                values,pe->nrows,1,0,
     7758                                &pe->values[0],0);
     7759
     7760        /*Free Matrix*/
     7761        xfree((void**)&transform);
     7762        xfree((void**)&values);
     7763}
     7764/*}}}*/
     7765/*FUNCTION Penta::TransformSolutionCoord{{{1*/
     7766void Penta::TransformSolutionCoord(double* solution,double* solution0,int dim,bool is2d){
     7767
     7768        int     i,j;
     7769        int     numnodes;
     7770        double *transform         = NULL;
     7771
     7772        /*Get Coordinate Systems transform matrix*/
     7773        if(is2d) numnodes=NUMVERTICES;
     7774        else     numnodes=NUMVERTICES2D;
     7775        CoordinateSystemTransform(&transform,nodes,numnodes,dim);
     7776
     7777        /*Transform matrix: T*U */
     7778        MatrixMultiply(transform,numnodes*dim,numnodes*dim,0,
     7779                                solution0,numnodes*dim,1,0,
     7780                                &solution[0],0);
     7781
     7782        /*Free Matrix*/
     7783        xfree((void**)&transform);
     7784}
     7785/*}}}*/
    77117786#endif
    77127787
  • issm/trunk/src/c/objects/Elements/Penta.h

    r10373 r10375  
    235235                void           InputUpdateFromSolutionDiagnosticVert( double* solutiong);
    236236                void           InputUpdateFromSolutionDiagnosticStokes( double* solutiong);
    237                 void           GetSolutionFromInputsDiagnosticHoriz(Vec solutiong);
    238                 void           GetSolutionFromInputsDiagnosticHutter(Vec solutiong);
    239                 void           GetSolutionFromInputsDiagnosticStokes(Vec solutiong);
    240                 void           GetSolutionFromInputsDiagnosticVert(Vec solutiong);
     237                void             GetSolutionFromInputsDiagnosticHoriz(Vec solutiong);
     238                void             GetSolutionFromInputsDiagnosticHutter(Vec solutiong);
     239                void             GetSolutionFromInputsDiagnosticStokes(Vec solutiong);
     240                void             GetSolutionFromInputsDiagnosticVert(Vec solutiong);
    241241                ElementVector* CreatePVectorCouplingMacAyealStokes(void);
    242242                ElementVector* CreatePVectorCouplingMacAyealStokesViscous(void);
     
    258258                ElementVector* CreatePVectorDiagnosticVertVolume(void);
    259259                ElementVector* CreatePVectorDiagnosticVertBase(void);
     260                void           TransformStiffnessMatrixCoord(ElementMatrix* Ke,int dim);
     261                void           TransformLoadVectorCoord(ElementVector* pe,int dim);
     262                void           TransformSolutionCoord(double* solution,double* solution0,int dim,bool is2d=false);
    260263                #endif
    261264
  • issm/trunk/src/c/objects/Elements/Tria.h

    r10373 r10375  
    192192                void             SetClone(int* minranks);
    193193                void             SurfaceNormal(double* surface_normal, double xyz_list[3][3]);
    194 
    195194               
    196195                #ifdef _HAVE_DIAGNOSTIC_
Note: See TracChangeset for help on using the changeset viewer.