Changeset 13860


Ignore:
Timestamp:
10/31/12 10:38:04 (12 years ago)
Author:
Mathieu Morlighem
Message:

NEW: added SetwiseConnectivity for stiffness matrix preallocation

Location:
issm/trunk-jpl/src/c/classes/objects/Elements
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/objects/Elements/Element.h

    r13623 r13860  
    2929                virtual void   Configure(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters)=0;
    3030                virtual void   SetCurrentConfiguration(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters)=0;
     31                virtual void   SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum)=0;
    3132                virtual void   CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>*  Kfs,Vector<IssmDouble>* df)=0;
    3233                virtual void   CreatePVector(Vector<IssmDouble>* pf)=0;
  • issm/trunk-jpl/src/c/classes/objects/Elements/Penta.h

    r13623 r13860  
    8080                void   Configure(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters);
    8181                void   SetCurrentConfiguration(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters);
     82                void   SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum){_error_("not implemented yet");};
    8283                void   CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs,Vector<IssmDouble>* df);
    8384                void   CreatePVector(Vector<IssmDouble>* pf);
  • issm/trunk-jpl/src/c/classes/objects/Elements/Tria.cpp

    r13813 r13860  
    160160                };
    161161        }
     162}
     163/*}}}*/
     164/*FUNCTION Tria::GetDofList {{{*/
     165void Tria::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int set1_enum,int set2_enum){
     166
     167        int index;
     168        int set_enum;
     169
     170        /*Find node index*/
     171        index = this->GetNodeIndex(node);
     172
     173        /*Output */
     174        int d_nz = 0;
     175        int o_nz = 0;
     176
     177        /*Loop over all nodes*/
     178        for(int i=0;i<3;i++){
     179
     180                if(!flags[this->nodes[i]->Sid()]){
     181
     182                        /*flag current node so that no other element processes it*/
     183                        flags[this->nodes[i]->Sid()]=true;
     184
     185                        /*What set are we interested in?*/
     186                        if(i!=index)
     187                         set_enum=set2_enum;
     188                        else
     189                         set_enum=set1_enum;
     190
     191                        /*if node is clone, we have an off-diagonal non-zero, else it is a diagonal non-zero*/
     192                        switch(set2_enum){
     193                                case FsetEnum:
     194                                        if(nodes[i]->indexing.fsize){
     195                                                if(this->nodes[i]->IsClone())
     196                                                 o_nz += 1;
     197                                                else
     198                                                 d_nz += 1;
     199                                        }
     200                                        break;
     201                                case GsetEnum:
     202                                        if(nodes[i]->indexing.gsize){
     203                                                if(this->nodes[i]->IsClone())
     204                                                 o_nz += 1;
     205                                                else
     206                                                 d_nz += 1;
     207                                        }
     208                                        break;
     209                                case SsetEnum:
     210                                        if(nodes[i]->indexing.ssize){
     211                                                if(this->nodes[i]->IsClone())
     212                                                 o_nz += 1;
     213                                                else
     214                                                 d_nz += 1;
     215                                        }
     216                                        break;
     217                                default: _error_("not supported");
     218                        }
     219                }
     220        }
     221
     222        /*Assign output pointers: */
     223        *pd_nz=d_nz;
     224        *po_nz=o_nz;
    162225}
    163226/*}}}*/
  • issm/trunk-jpl/src/c/classes/objects/Elements/Tria.h

    r13623 r13860  
    7676                void   Configure(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters);
    7777                void   SetCurrentConfiguration(Elements* elements,Loads* loads,DataSet* nodes,Materials* materials,Parameters* parameters);
     78                void   SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int set1_enum,int set2_enum);
    7879                void   CreateKMatrix(Matrix<IssmDouble>* Kff, Matrix<IssmDouble>* Kfs,Vector<IssmDouble>* df);
    7980                void   CreatePVector(Vector<IssmDouble>* pf);
Note: See TracChangeset for help on using the changeset viewer.