Changeset 16936


Ignore:
Timestamp:
11/25/13 14:38:24 (11 years ago)
Author:
seroussi
Message:

CHG: KMatric coupling HO viscous

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

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp

    r16932 r16936  
    828828                case SSAHOApproximationEnum:
    829829                        return CreateKMatrixSSAHO(element);
     830                case HOFSApproximationEnum:
     831                        return CreateKMatrixHOFS(element);
    830832                case NoneApproximationEnum:
    831833                        return NULL;
     
    30653067
    30663068/*Coupling (Tiling)*/
     3069ElementMatrix* StressbalanceAnalysis::CreateKMatrixHOFS(Element* element){/*{{{*/
     3070
     3071        /*compute all stiffness matrices for this element*/
     3072        ElementMatrix* Ke1=CreateKMatrixFS(element);
     3073        int indices[3]={18,19,20};
     3074        Ke1->StaticCondensation(3,&indices[0]);
     3075        int init = element->FiniteElement();
     3076        element->SetTemporaryElementType(P1Enum); // P1 needed for HO
     3077        ElementMatrix* Ke2=CreateKMatrixHO(element);
     3078        element->SetTemporaryElementType(init); // P1 needed for HO
     3079        ElementMatrix* Ke3=CreateKMatrixCouplingHOFS(element);
     3080        ElementMatrix* Ke =new ElementMatrix(Ke1,Ke2,Ke3);
     3081
     3082        /*clean-up and return*/
     3083        delete Ke1;
     3084        delete Ke2;
     3085        delete Ke3;
     3086        return Ke;
     3087}/*}}}*/
    30673088ElementMatrix* StressbalanceAnalysis::CreateKMatrixSSAHO(Element* element){/*{{{*/
    30683089
     
    30773098        delete Ke2;
    30783099        delete Ke3;
     3100        return Ke;
     3101}/*}}}*/
     3102ElementMatrix* StressbalanceAnalysis::CreateKMatrixCouplingHOFS(Element* element){/*{{{*/
     3103
     3104        /*Constants*/
     3105        int numnodes       = 3*6+1;
     3106        int numdofp        = 2*6;
     3107        int numdofs        = 4*6 + 3;
     3108        int numdoftotal    = (2+4)*6+ 3;
     3109
     3110        /*Intermediaries*/
     3111        int   i,j,init;
     3112        int*   cs_list   = xNew<int>(6*3+1);
     3113        int*   cs_list2  = xNew<int>(6*2+1);
     3114        Node  **node_list = xNew<Node*>(6*3+1);
     3115
     3116        /*Some parameters needed*/
     3117        init = element->FiniteElement();
     3118
     3119        /*prepare node list*/
     3120        for(i=0;i<6+1;i++){
     3121                node_list[i+6] = element->GetNode(i);
     3122                cs_list[i+6]   = XYZEnum;
     3123                cs_list2[i]    = XYZEnum;
     3124        }
     3125        for(i=0;i<6;i++){
     3126                node_list[i]       = element->GetNode(i);
     3127                node_list[i+2*6+1] = element->GetNode(i+6*1);
     3128                cs_list[i]         = XYEnum;
     3129                cs_list[i+2*6+1]   = PressureEnum;
     3130                cs_list2[i+6+1]    = PressureEnum;
     3131        }
     3132
     3133        /*compute all stiffness matrices for this element*/
     3134        ElementMatrix* Ke1=element->NewElementMatrix(FSvelocityEnum);
     3135        ElementMatrix* Ke2=element->NewElementMatrix(HOApproximationEnum);
     3136        ElementMatrix* Ke=new ElementMatrix(Ke1,Ke2);
     3137        delete Ke1; delete Ke2;
     3138
     3139        /*Compute HO Matrix with P1 element type\n");*/
     3140        Ke1=CreateKMatrixFS(element); element->TransformInvStiffnessMatrixCoord(Ke1,node_list,2*6+1,cs_list2);
     3141        int indices[3]={18,19,20};
     3142        Ke1->StaticCondensation(3,&indices[0]);
     3143        element->SetTemporaryElementType(P1Enum); // P1 needed for HO
     3144        Ke2=CreateKMatrixHO(element); element->TransformInvStiffnessMatrixCoord(Ke2,XYEnum);
     3145        element->SetTemporaryElementType(init); // P1 needed for HO
     3146        /*Compute FS Matrix and condense it \n");*/
     3147
     3148        for(i=0;i<numdofs;i++) for(j=0;j<6;j++){
     3149                Ke->values[i*numdoftotal+numdofs+2*j+0]+=Ke1->values[i*numdofs+3*j+0];
     3150                Ke->values[i*numdoftotal+numdofs+2*j+1]+=Ke1->values[i*numdofs+3*j+1];
     3151        }
     3152        for(i=0;i<numdofp;i++) for(j=0;j<6;j++){
     3153                Ke->values[(i+numdofs)*numdoftotal+3*j+0]+=Ke2->values[i*numdofp+2*j+0];
     3154                Ke->values[(i+numdofs)*numdoftotal+3*j+1]+=Ke2->values[i*numdofp+2*j+1];
     3155        }
     3156
     3157        /*Transform Coordinate System*/ //Do not transform, already done in the matrices
     3158        element->TransformStiffnessMatrixCoord(Ke,node_list,numnodes,cs_list);
     3159
     3160        /*clean-up and return*/
     3161        xDelete<int>(cs_list);
     3162        xDelete<int>(cs_list2);
     3163        xDelete<Node*>(node_list);
     3164        delete Ke1;
     3165        delete Ke2;
    30793166        return Ke;
    30803167}/*}}}*/
  • issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.h

    r16926 r16936  
    7171                void InputUpdateFromSolutionFS(IssmDouble* solution,Element* element);
    7272                /*Coupling*/
     73                ElementMatrix* CreateKMatrixHOFS(Element* element);
    7374                ElementMatrix* CreateKMatrixSSAHO(Element* element);
     75                ElementMatrix* CreateKMatrixCouplingHOFS(Element* element);
    7476                ElementMatrix* CreateKMatrixCouplingSSAHO(Element* element);
    7577                ElementMatrix* CreateKMatrixCouplingSSAHOFriction(Element* element);
  • issm/trunk-jpl/src/c/classes/Elements/Element.cpp

    r16926 r16936  
    296296        for(i=0;i<3;i++) epsilon[i]=epsilonvx[i]+epsilonvy[i];
    297297}/*}}}*/
     298void Element::TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,int transformenum){/*{{{*/
     299        ::TransformInvStiffnessMatrixCoord(Ke,this->nodes,this->GetNumberOfNodes(),transformenum);
     300}/*}}}*/
     301void Element::TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes_list,int numnodes,int* transformenum_list){/*{{{*/
     302        ::TransformInvStiffnessMatrixCoord(Ke,nodes_list,numnodes,transformenum_list);
     303}/*}}}*/
    298304void Element::TransformLoadVectorCoord(ElementVector* pe,int transformenum){/*{{{*/
    299305        ::TransformLoadVectorCoord(pe,this->nodes,this->GetNumberOfNodes(),transformenum);
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r16926 r16936  
    7373                void       ViscosityHODerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon);
    7474                void       ViscosityFSDerivativeEpsSquare(IssmDouble* pmu_prime,IssmDouble* epsilon);
     75                void       TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,int transformenum);
     76                void       TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes_list,int numnodes,int* transformenum_list);
    7577                void       TransformLoadVectorCoord(ElementVector* pe,int transformenum);
    7678                void       TransformLoadVectorCoord(ElementVector* pe,int* transformenum_list);
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r16932 r16936  
    70547054        /*Compute HO Matrix with P1 element type\n");*/
    70557055        this->element_type=P1Enum;
    7056         Ke1=CreateKMatrixStressbalanceHO(); TransformInvStiffnessMatrixCoord(Ke1,this->nodes,NUMVERTICES,XYEnum);
     7056        Ke1=CreateKMatrixStressbalanceHO(); TransformInvStiffnessMatrixCoord(Ke1,XYEnum);
    70577057        this->element_type=init;
    70587058        /*Compute FS Matrix and condense it \n");*/
    7059         Ke2=CreateKMatrixStressbalanceFS(); TransformInvStiffnessMatrixCoord(Ke2,this->nodes,2*NUMVERTICES+1,cs_list2);
     7059        Ke2=CreateKMatrixStressbalanceFS(); TransformInvStiffnessMatrixCoord(Ke2,node_list,2*NUMVERTICES+1,cs_list2);
    70607060        int indices[3]={18,19,20};
    70617061        Ke2->StaticCondensation(3,&indices[0]);
Note: See TracChangeset for help on using the changeset viewer.