source:
issm/oecreview/Archive/24684-25833/ISSM-25485-25486.diff@
25834
Last change on this file since 25834 was 25834, checked in by , 4 years ago | |
---|---|
File size: 6.3 KB |
-
../trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp
35 35 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(); 41 41 … … 117 117 int numnodesperelement = femmodel->elements->MaxNumNodes(); 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: 122 124 * for(int i=head[id];i!=-1;i=next[i]) … … 123 125 * will loop over all the elements that are connected to the node number 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(); 133 135 lidlist = xNew<int>(elementnumnodes); … … 148 150 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(); 157 159 lidlist = xNew<int>(loadnumnodes); … … 176 178 int *d_connectivity = xNewZeroInit<int>(localnumnodes); 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*/ 184 188 for(i = 0;i<localnumnodes;i++) flags[i] = false; … … 189 193 Node* node=xDynamicCast<Node*>(femmodel->nodes->GetObjectByOffset(i)); 190 194 int lid = node->Lid(); 191 195 int pid = node->Pid(); 192 193 196 /*Reinitialize flags to false*/ 194 197 j=0; 195 198 while(j<localnumnodes){ … … 207 210 for(j=head_e[lid];j!=-1;j=next_e[j]){ 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); 213 216 } -
../trunk-jpl/src/c/classes/Elements/Element.cpp
736 736 737 737 Gauss* gauss=this->NewGauss(5); 738 738 while(gauss->next()){ 739 739 740 this->JacobianDeterminant(&Jdet,xyz_list,gauss); 740 741 741 742 /*Get strain rate assuming that epsilon has been allocated*/ … … 3393 3394 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*/ 3399 3400 const int numnodes = this->GetNumberOfNodes(); … … 3404 3405 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; 3413 3412 … … 3447 3446 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); 3454 3452 if(approximation==SSAHOApproximationEnum || approximation==SSAFSApproximationEnum){ -
../trunk-jpl/src/c/classes/Elements/Element.h
163 163 void ResultToPatch(IssmDouble* values,int nodesperelement,int output_enum); 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 169 169 void SetIntInput(Inputs* inputs,int enum_in,int value);
Note:
See TracBrowser
for help on using the repository browser.