Changeset 5724


Ignore:
Timestamp:
09/09/10 14:31:37 (15 years ago)
Author:
Mathieu Morlighem
Message:

Added GaussPenta for segments

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

Legend:

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

    r5723 r5724  
    38623862
    38633863        /*Free ressources:*/
    3864         delete gauss;
    38653864        xfree((void**)&doflist);
    38663865
  • issm/trunk/src/c/objects/Gauss/GaussPenta.cpp

    r5722 r5724  
    8080}
    8181/*}}}*/
    82 /*FUNCTION GaussPenta::GaussPenta{{{1*/
     82/*FUNCTION GaussPenta::GaussPenta(int index1, int index2, int order){{{1*/
     83GaussPenta::GaussPenta(int index1, int index2,int order){
     84
     85        /*Intermediaties*/
     86        double *seg_coords  = NULL;
     87        double *seg_weights = NULL;
     88        int     i;
     89
     90        /*Get Segment gauss points*/
     91        numgauss=order;
     92        GaussLegendreLinear(&seg_coords,&seg_weights,numgauss);
     93
     94        /*Allocate GaussTria fields*/
     95        coords1=(double*)xmalloc(numgauss*sizeof(double));
     96        coords2=(double*)xmalloc(numgauss*sizeof(double));
     97        coords3=(double*)xmalloc(numgauss*sizeof(double));
     98        coords4=(double*)xmalloc(numgauss*sizeof(double));
     99        weights=(double*)xmalloc(numgauss*sizeof(double));
     100
     101        if(index1==0 && index2==3){
     102                for(i=0;i<numgauss;i++) coords1[i]=1.0;
     103                for(i=0;i<numgauss;i++) coords2[i]=0.0;
     104                for(i=0;i<numgauss;i++) coords3[i]=0.0;
     105                for(i=0;i<numgauss;i++) coords4[i]=seg_coords[i];
     106                for(i=0;i<numgauss;i++) weights[i]=seg_weights[i];
     107        }
     108        else if (index1==1 && index2==4){
     109                for(i=0;i<numgauss;i++) coords1[i]=0.0;
     110                for(i=0;i<numgauss;i++) coords2[i]=1.0;
     111                for(i=0;i<numgauss;i++) coords3[i]=0.0;
     112                for(i=0;i<numgauss;i++) coords4[i]=seg_coords[i];
     113                for(i=0;i<numgauss;i++) weights[i]=seg_weights[i];
     114        }
     115        else if (index1==2 && index2==5){
     116                for(i=0;i<numgauss;i++) coords1[i]=0.0;
     117                for(i=0;i<numgauss;i++) coords2[i]=0.0;
     118                for(i=0;i<numgauss;i++) coords3[i]=1.0;
     119                for(i=0;i<numgauss;i++) coords4[i]=seg_coords[i];
     120                for(i=0;i<numgauss;i++) weights[i]=seg_weights[i];
     121        }
     122        else{
     123                ISSMERROR("Tria not supported yet");
     124        }
     125
     126        /*Initialize static fields as undefined*/
     127        weight=UNDEF;
     128        coord1=UNDEF;
     129        coord2=UNDEF;
     130        coord3=UNDEF;
     131        coord4=UNDEF;
     132
     133        /*clean up*/
     134        xfree((void**)&seg_coords);
     135        xfree((void**)&seg_weights);
     136
     137}
     138/*}}}*/
     139/*FUNCTION GaussPenta::GaussPenta(int index1, int index2, int index3, int order){{{1*/
    83140GaussPenta::GaussPenta(int index1, int index2, int index3, int order){
    84141
  • issm/trunk/src/c/objects/Gauss/GaussPenta.h

    r5722 r5724  
    3434                GaussPenta();
    3535                GaussPenta(int order_horiz,int order_vert);
     36                GaussPenta(int index1, int index2,int order);
    3637                GaussPenta(int index1, int index2, int index3, int order);
    3738                ~GaussPenta();
Note: See TracChangeset for help on using the changeset viewer.