Changeset 25740
- Timestamp:
- 11/08/20 18:04:57 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/branches/trunk-larour-SLPS2020/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp
r25305 r25740 201 201 femmodel->inputs2->SetTransientInput(DummyEnum,times,N); 202 202 transientinput2 = femmodel->inputs2->GetTransientInput(DummyEnum); 203 204 for (int i=0;i<femmodel->elements->Size();i++){ 205 206 Tria* element=xDynamicCast<Tria*>(femmodel->elements->GetObjectByOffset(i)); 207 208 if((int)variable_partition[element->Sid()]==-1)id=0; //grab background field 209 else id=distributed_values[(int)variable_partition[element->Sid()]]-1; //grab partition field 210 211 /*recover the right field from the mme: */ 212 transientinput = datasetinput->GetTransientInputByOffset(id); _assert_(transientinput); 213 214 /*copy values from the transientinput to the final transientinput2: */ 215 for (int j=0;j<N;j++){ 216 TriaInput2* tria_input=transientinput->GetTriaInput(j); 217 element->InputServe(tria_input); 218 if(interpolationenum==P0Enum){ 219 value=tria_input->element_values[0]; 220 transientinput2->AddTriaTimeInput( j,1,&(element->lid),&value,P0Enum); 221 } 222 else if(interpolationenum==P1Enum){ 223 224 /*Get values and lid list*/ 225 const int numvertices = element->GetNumberOfVertices(); 226 int *vertexlids = xNew<int>(numvertices); 227 int *vertexsids = xNew<int>(numvertices); 228 229 /*Recover vertices ids needed to initialize inputs*/ 230 element->GetVerticesLidList(&vertexlids[0]); 231 element->GetVerticesSidList(&vertexsids[0]); 232 values=tria_input->element_values; 233 transientinput2->AddTriaTimeInput( j,numvertices,vertexlids,values,P1Enum); 203 204 for (int p=npart;p>=0;p--){ 205 int pp=p; 206 if (p==npart)pp=-1; /*so, the logic is, we want to do the -1 partition first, then 207 go from npart-1 to 0 in reverse order:*/ 208 209 for (int i=0;i<femmodel->elements->Size();i++){ 210 int element_partition; 211 212 Tria* element=xDynamicCast<Tria*>(femmodel->elements->GetObjectByOffset(i)); 213 214 element_partition= (int)variable_partition[element->Sid()]; 215 if(element_partition!=pp)continue; 216 217 if(element_partition==-1)id=0; //grab background field 218 else id=distributed_values[element_partition]-1; //grab partition field 219 220 /*recover the right field from the mme: */ 221 transientinput = datasetinput->GetTransientInputByOffset(id); _assert_(transientinput); 222 223 /*copy values from the transientinput to the final transientinput2: */ 224 for (int j=0;j<N;j++){ 225 TriaInput2* tria_input=transientinput->GetTriaInput(j); 226 element->InputServe(tria_input); 227 if(interpolationenum==P0Enum){ 228 value=tria_input->element_values[0]; 229 transientinput2->AddTriaTimeInput( j,1,&(element->lid),&value,P0Enum); 230 } 231 else if(interpolationenum==P1Enum){ 232 233 /*Get values and lid list*/ 234 const int numvertices = element->GetNumberOfVertices(); 235 int *vertexlids = xNew<int>(numvertices); 236 int *vertexsids = xNew<int>(numvertices); 237 238 /*Recover vertices ids needed to initialize inputs*/ 239 element->GetVerticesLidList(&vertexlids[0]); 240 element->GetVerticesSidList(&vertexsids[0]); 241 values=tria_input->element_values; 242 transientinput2->AddTriaTimeInput( j,numvertices,vertexlids,values,P1Enum); 243 } 234 244 } 235 245 }
Note:
See TracChangeset
for help on using the changeset viewer.