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

CHG: KMatric coupling HO viscous

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified 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}/*}}}*/
Note: See TracChangeset for help on using the changeset viewer.