Changeset 25486
- Timestamp:
- 08/27/20 05:21:45 (5 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r25447 r25486 737 737 Gauss* gauss=this->NewGauss(5); 738 738 while(gauss->next()){ 739 739 740 this->JacobianDeterminant(&Jdet,xyz_list,gauss); 740 741 … … 3394 3395 } 3395 3396 /*}}}*/ 3396 void Element::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int* flagsindices,int* flagsindices_counter,int set1_enum,int set2_enum ){/*{{{*/3397 void Element::SetwiseNodeConnectivity(int* pd_nz,int* po_nz,Node* node,bool* flags,int* flagsindices,int* flagsindices_counter,int set1_enum,int set2_enum, int analysis_type){/*{{{*/ 3397 3398 3398 3399 /*Intermediaries*/ … … 3405 3406 /*Loop over all nodes*/ 3406 3407 for(int i=0;i<numnodes;i++){ 3407 3408 3408 int nodelid = this->nodes[i]->Lid(); 3409 3409 if(!flags[nodelid]){ 3410 3411 3410 /*flag current node so that no other element processes it*/ 3412 3411 flags[nodelid]=true; … … 3448 3447 /*Special case: 2d/3d coupling, the node of this element might be connected 3449 3448 *to the basal element*/ 3450 int analysis_type,approximation,numlayers; 3451 parameters->FindParam(&analysis_type,AnalysisTypeEnum); 3449 int approximation,numlayers; 3452 3450 if(analysis_type==StressbalanceAnalysisEnum){ 3453 3451 this->GetInputValue(&approximation,ApproximationEnum); -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r25442 r25486 164 164 void ResultToMatrix(IssmDouble* values,int ncols,int output_enum); 165 165 void ResultToVector(Vector<IssmDouble>* vector,int output_enum); 166 void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int* flagsindices_counter,int set1_enum,int set2_enum );166 void SetwiseNodeConnectivity(int* d_nz,int* o_nz,Node* node,bool* flags,int* flagsindices,int* flagsindices_counter,int set1_enum,int set2_enum, int analysis_type); 167 167 void SetBoolInput(Inputs* inputs,int enum_in,bool value); 168 168 -
issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp
r25447 r25486 36 36 numberofdofspernode=femmodel->nodes->MaxNumDofs(GsetEnum); 37 37 38 /*if our matrices are coming from issm, we don't do dynamic allocation like Petsc 38 /*if our matrices are coming from issm, we don't do dynamic allocation like Petsc 39 39 * does, and this routine is essentially useless. Force standard alloc in this case: */ 40 40 toolkittype=ToolkitOptions::GetToolkitType(); … … 118 118 int numnodesperload = femmodel->loads->MaxNumNodes(); 119 119 120 int elementssize = femmodel->elements->Size(); 121 int loadssize = femmodel->loads->Size(); 120 122 /*First, we are building chaining vectors so that we know what nodes are 121 123 * connected to what elements. These vectors are such that: … … 124 126 * id*/ 125 127 head_e = xNew<int>(localnumnodes); for(i=0;i<localnumnodes;i++) head_e[i]=-1; 126 next_e = xNew<int>( femmodel->elements->Size()*numnodesperelement);127 count2offset_e = xNew<int>( femmodel->elements->Size()*numnodesperelement);128 next_e = xNew<int>(elementssize*numnodesperelement); 129 count2offset_e = xNew<int>(elementssize*numnodesperelement); 128 130 129 131 k=0; 130 for(i=0;i< femmodel->elements->Size();i++){132 for(i=0;i<elementssize;i++){ 131 133 element = xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i)); 132 134 int elementnumnodes = element->GetNumberOfNodes(); … … 149 151 /*Chain for loads*/ 150 152 head_l = xNew<int>(localnumnodes); for(i=0;i<localnumnodes;i++) head_l[i]=-1; 151 next_l = xNew<int>( femmodel->loads->Size()*numnodesperload);152 count2offset_l = xNew<int>( femmodel->loads->Size()*numnodesperload);153 next_l = xNew<int>(loadssize*numnodesperload); 154 count2offset_l = xNew<int>(loadssize*numnodesperload); 153 155 k=0; 154 for(i=0;i< femmodel->loads->Size();i++){156 for(i=0;i<loadssize;i++){ 155 157 load = xDynamicCast<Load*>(femmodel->loads->GetObjectByOffset(i)); 156 158 int loadnumnodes = load->GetNumberOfNodes(); … … 177 179 int *o_connectivity = xNewZeroInit<int>(localnumnodes); 178 180 int flagsindices_counter; 181 int analysis_type; 179 182 180 183 Vector<IssmDouble> *connectivity_clone= new Vector<IssmDouble>(localmasters,numnodes); 181 184 185 femmodel->parameters->FindParam(&analysis_type,AnalysisTypeEnum); 182 186 /*Resetting flags to false at each iteration takes a lot of time, so we keep track of the flags 183 187 * to reset in flagsindices, initialized with -1*/ … … 190 194 int lid = node->Lid(); 191 195 int pid = node->Pid(); 192 193 196 /*Reinitialize flags to false*/ 194 197 j=0; … … 208 211 offset=count2offset_e[j]; 209 212 element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(offset)); 210 element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,flagsindices,&flagsindices_counter,set1enum,set2enum );213 element->SetwiseNodeConnectivity(&d_nz,&o_nz,node,flags,flagsindices,&flagsindices_counter,set1enum,set2enum,analysis_type); 211 214 if(node->IsClone()){ 212 215 connectivity_clone->SetValue(pid,d_nz+o_nz,ADD_VAL);
Note:
See TracChangeset
for help on using the changeset viewer.