Changeset 17490


Ignore:
Timestamp:
03/20/14 05:24:19 (11 years ago)
Author:
Mathieu Morlighem
Message:

NEW: P1bubble implemented for tetras

Location:
issm/trunk-jpl/src/c
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/Tetra.cpp

    r17484 r17490  
    738738                        tetra_node_ids[3]=iomodel->nodecounter+iomodel->elements[4*index+3];
    739739                        break;
     740                case P1bubbleEnum: case P1bubblecondensedEnum:
     741                        numnodes         = 5;
     742                        tetra_node_ids   = xNew<int>(numnodes);
     743                        tetra_node_ids[0]=iomodel->nodecounter+iomodel->elements[4*index+0];
     744                        tetra_node_ids[1]=iomodel->nodecounter+iomodel->elements[4*index+1];
     745                        tetra_node_ids[2]=iomodel->nodecounter+iomodel->elements[4*index+2];
     746                        tetra_node_ids[3]=iomodel->nodecounter+iomodel->elements[4*index+3];
     747                        tetra_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+index+1;
     748                        break;
     749                case P2Enum:
     750                        numnodes        = 10;
     751                        tetra_node_ids   = xNew<int>(numnodes);
     752                        tetra_node_ids[0]=iomodel->nodecounter+iomodel->elements[4*index+0];
     753                        tetra_node_ids[1]=iomodel->nodecounter+iomodel->elements[4*index+1];
     754                        tetra_node_ids[2]=iomodel->nodecounter+iomodel->elements[4*index+2];
     755                        tetra_node_ids[3]=iomodel->nodecounter+iomodel->elements[4*index+3];
     756                        tetra_node_ids[4]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+0]+1;
     757                        tetra_node_ids[5]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+1]+1;
     758                        tetra_node_ids[6]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+2]+1;
     759                        tetra_node_ids[7]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+3]+1;
     760                        tetra_node_ids[8]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+4]+1;
     761                        tetra_node_ids[9]=iomodel->nodecounter+iomodel->numberofvertices+iomodel->elementtoedgeconnectivity[6*index+5]+1;
     762                        break;
    740763                default:
    741764                        _error_("Finite element "<<EnumToStringx(finiteelement_type)<<" not supported yet");
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/TetraRef.cpp

    r17486 r17490  
    1818#define NUMNODESP0  1
    1919#define NUMNODESP1  4
     20#define NUMNODESP1b 5
    2021#define NUMNODESP2  10
    2122
     
    7273                        basis[2]=gauss->coord3;
    7374                        basis[3]=gauss->coord4;
     75                        return;
     76                case P1bubbleEnum: case P1bubblecondensedEnum:
     77                        /*Corner nodes*/
     78                        basis[0]=gauss->coord1;
     79                        basis[1]=gauss->coord2;
     80                        basis[2]=gauss->coord3;
     81                        basis[3]=gauss->coord4;
     82                        /*bubble*/
     83                        basis[4]=256.*gauss->coord1*gauss->coord2*gauss->coord3*gauss->coord4;
    7484                        return;
    7585                case P2Enum:
     
    171181                        dbasis[NUMNODESP1*2+3] = 1.;
    172182                        return;
     183                case P1bubbleEnum: case P1bubblecondensedEnum:
     184                        dbasis[NUMNODESP1b*0+0] = -1.;
     185                        dbasis[NUMNODESP1b*1+0] = -1.;
     186                        dbasis[NUMNODESP1b*2+0] = -1.;
     187
     188                        dbasis[NUMNODESP1b*0+1] = 1.;
     189                        dbasis[NUMNODESP1b*1+1] = 0.;
     190                        dbasis[NUMNODESP1b*2+1] = 0.;
     191
     192                        dbasis[NUMNODESP1b*0+2] = 0.;
     193                        dbasis[NUMNODESP1b*1+2] = 1.;
     194                        dbasis[NUMNODESP1b*2+2] = 0.;
     195
     196                        dbasis[NUMNODESP1b*0+3] = 0.;
     197                        dbasis[NUMNODESP1b*1+3] = 0.;
     198                        dbasis[NUMNODESP1b*2+3] = 1.;
     199
     200                        dbasis[NUMNODESP1b*0+4] = 256.*(-gauss->coord2*gauss->coord3*gauss->coord4+gauss->coord1*gauss->coord3*gauss->coord4);
     201                        dbasis[NUMNODESP1b*1+4] = 256.*(-gauss->coord2*gauss->coord3*gauss->coord4+gauss->coord1*gauss->coord2*gauss->coord4);
     202                        dbasis[NUMNODESP1b*2+4] = 256.*(-gauss->coord2*gauss->coord3*gauss->coord4+gauss->coord1*gauss->coord2*gauss->coord3);
     203                        return;
    173204                case P2Enum:
    174205                        dbasis[NUMNODESP2*0+0] = -4.*gauss->coord1+1.;
     
    372403
    373404        switch(finiteelement){
    374                 case P0Enum:   return NUMNODESP0;
    375                 case P1Enum:   return NUMNODESP1;
    376                 case P1DGEnum: return NUMNODESP1;
    377                 case P2Enum:   return NUMNODESP2;
     405                case P0Enum:                return NUMNODESP0;
     406                case P1Enum:                return NUMNODESP1;
     407                case P1DGEnum:              return NUMNODESP1;
     408                case P1bubbleEnum:          return NUMNODESP1b;
     409                case P1bubblecondensedEnum: return NUMNODESP1b;
     410                case P2Enum:                return NUMNODESP2;
    378411                default: _error_("Element type "<<EnumToStringx(this->element_type)<<" not supported yet");
    379412        }
  • TabularUnified issm/trunk-jpl/src/c/classes/gauss/GaussTetra.cpp

    r17485 r17490  
    184184                        }
    185185                        break;
     186                case P1bubbleEnum: case P1bubblecondensedEnum:
     187                        switch(iv){
     188                                case 0: coord1=1.; coord2=0.; coord3=0.; coord4=0.; break;
     189                                case 1: coord1=0.; coord2=1.; coord3=0.; coord4=0.; break;
     190                                case 2: coord1=0.; coord2=0.; coord3=1.; coord4=0.; break;
     191                                case 3: coord1=0.; coord2=0.; coord3=0.; coord4=1.; break;
     192                                case 4: coord1=1./4.; coord2=1./4.; coord3=1./4.; coord4=1./4.; break;
     193                                default: _error_("node index should be in [0 4]");
     194                        }
     195                        break;
     196                case P2Enum:
     197                        switch(iv){
     198                                case 0: coord1=1.; coord2=0.; coord3=0.; coord4=0.; break;
     199                                case 1: coord1=0.; coord2=1.; coord3=0.; coord4=0.; break;
     200                                case 2: coord1=0.; coord2=0.; coord3=1.; coord4=0.; break;
     201                                case 3: coord1=0.; coord2=0.; coord3=0.; coord4=1.; break;
     202
     203                                case 4: coord1=0.; coord2=.5; coord3=.5; coord4=0.; break;
     204                                case 5: coord1=.5; coord2=0.; coord3=.5; coord4=0.; break;
     205                                case 6: coord1=.5; coord2=.5; coord3=0.; coord4=0.; break;
     206                                case 7: coord1=.5; coord2=0.; coord3=0.; coord4=.5; break;
     207                                case 8: coord1=0.; coord2=.5; coord3=0.; coord4=.5; break;
     208                                case 9: coord1=0.; coord2=0.; coord3=.5; coord4=.5; break;
     209                                default: _error_("node index should be in [0 9]");
     210                        }
     211                        break;
    186212                default: _error_("Finite element "<<EnumToStringx(finiteelement)<<" not supported");
    187213        }
  • TabularUnified issm/trunk-jpl/src/c/modules/IoModelToConstraintsx/IoModelToConstraintsx.cpp

    r17384 r17490  
    5454                                case Mesh2DhorizontalEnum: elementnbv = 3; break;
    5555                                case Mesh2DverticalEnum:   elementnbv = 3; break;
     56                                case Mesh3DtetrasEnum:     elementnbv = 4; break;
    5657                                case Mesh3DEnum:           elementnbv = 6; break;
    5758                                default: _error_("mesh type not supported yet");
  • TabularUnified issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateEdges.cpp

    r17135 r17490  
    4040                elementedges[2*1+0] = 2; elementedges[2*1+1] = 0; elementedges_markers[1] = 1;
    4141                elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = 1;
     42        }
     43        else if(iomodel->meshtype==Mesh3DtetrasEnum){
     44                elementnbv = 4;
     45                elementnbe = 6;
     46                elementedges         = xNew<int>(elementnbe*2);
     47                elementedges_markers = xNew<int>(elementnbe);
     48                elementedges[2*0+0] = 1; elementedges[2*0+1] = 2; elementedges_markers[0] = 1;
     49                elementedges[2*1+0] = 2; elementedges[2*1+1] = 0; elementedges_markers[1] = 1;
     50                elementedges[2*2+0] = 0; elementedges[2*2+1] = 1; elementedges_markers[2] = 1;
     51                elementedges[2*3+0] = 0; elementedges[2*3+1] = 3; elementedges_markers[3] = 1;
     52                elementedges[2*4+0] = 1; elementedges[2*4+1] = 3; elementedges_markers[4] = 1;
     53                elementedges[2*5+0] = 2; elementedges[2*5+1] = 3; elementedges_markers[5] = 1;
    4254        }
    4355        else if(iomodel->meshtype==Mesh3DEnum){
  • TabularUnified issm/trunk-jpl/src/c/modules/ModelProcessorx/EdgesPartitioning.cpp

    r16354 r17490  
    2424                elementnbe = 3;
    2525        }
     26        else if(iomodel->meshtype==Mesh3DtetrasEnum){
     27                elementnbe = 6;
     28        }
    2629        else if(iomodel->meshtype==Mesh3DEnum){
    2730                elementnbe = 9;
  • TabularUnified issm/trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp

    r17489 r17490  
    6464
    6565        /*Display size*/
     66        Kff->GetSize(&M,&N);
    6667        if(VerboseModule()){
    67                 Kff->GetSize(&M,&N);
    6868                _printf0_(" (Kff stiffness matrix size: "<<M<<" x "<<N<<")\n");
    6969        }
     
    120120        //Kff->AllocationInfo();
    121121        //Kfs->AllocationInfo();
     122        //IssmDouble* k = Kff->ToSerial();
     123        //printarray(k,N,N);
    122124
    123125        /*cleanu up and assign output pointers: */
Note: See TracChangeset for help on using the changeset viewer.