Changeset 23642
- Timestamp:
- 01/17/19 12:57:57 (6 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/FemModel.cpp
r23638 r23642 1422 1422 *plocal_vector = local_vector; 1423 1423 }/*}}}*/ 1424 void FemModel::GetLocalVectorWithClonesNodes(IssmDouble** plocal_vector,Vector<IssmDouble> *vector){/*{{{*/ 1425 1426 /*recover my_rank:*/ 1427 ISSM_MPI_Status status; 1428 int my_rank = IssmComm::GetRank(); 1429 int num_procs = IssmComm::GetSize(); 1430 1431 /*retrieve vertex info*/ 1432 int localsize = this->nodes->NumberOfNodesLocalAll(); 1433 int localsize_masters = this->nodes->NumberOfNodesLocal(); 1434 1435 /*Get local vector of vector*/ 1436 int *indices_vector_masters = NULL; 1437 IssmDouble *local_vector_masters = NULL; 1438 vector->GetLocalVector(&local_vector_masters,&indices_vector_masters); 1439 _assert_(localsize_masters==indices_vector_masters[localsize_masters-1] - indices_vector_masters[0]+1); 1440 xDelete<int>(indices_vector_masters); 1441 1442 /*Now, extend vectors to account for clones (make vectors longer, for clones at the end)*/ 1443 IssmDouble *local_vector = xNew<IssmDouble>(localsize); 1444 xMemCpy<IssmDouble>(local_vector,local_vector_masters,localsize_masters); 1445 xDelete<IssmDouble>(local_vector_masters); 1446 1447 /*Now send and receive vector for nodes on partition edge*/ 1448 #ifdef _HAVE_AD_ 1449 IssmDouble* buffer = xNew<IssmDouble>(this->nodes->Size(),"t"); //only one alloc, "t" is required by adolc 1450 #else 1451 IssmDouble* buffer = xNew<IssmDouble>(this->nodes->Size()); 1452 #endif 1453 for(int rank=0;rank<num_procs;rank++){ 1454 if(this->nodes->common_send[rank]){ 1455 int numids = this->nodes->common_send[rank]; 1456 for(int i=0;i<numids;i++){ 1457 int master_lid = this->nodes->common_send_ids[rank][i]; 1458 Node* vertex=xDynamicCast<Node*>(this->nodes->GetObjectByOffset(master_lid)); 1459 _assert_(!vertex->clone); 1460 buffer[i] = local_vector[vertex->lid]; 1461 } 1462 ISSM_MPI_Send(buffer,numids,ISSM_MPI_DOUBLE,rank,0,IssmComm::GetComm()); 1463 } 1464 } 1465 for(int rank=0;rank<num_procs;rank++){ 1466 if(this->nodes->common_recv[rank]){ 1467 int numids = this->nodes->common_recv[rank]; 1468 ISSM_MPI_Recv(buffer,numids,ISSM_MPI_DOUBLE,rank,0,IssmComm::GetComm(),&status); 1469 for(int i=0;i<numids;i++){ 1470 int master_lid = this->nodes->common_recv_ids[rank][i]; 1471 Node* vertex=xDynamicCast<Node*>(this->nodes->GetObjectByOffset(master_lid)); 1472 _assert_(vertex->clone); 1473 local_vector[vertex->lid] = buffer[i]; 1474 } 1475 } 1476 } 1477 xDelete<IssmDouble>(buffer); 1478 1479 /*Assign output pointer*/ 1480 *plocal_vector = local_vector; 1481 }/*}}}*/ 1424 1482 void FemModel::GroundedAreax(IssmDouble* pV, bool scaled){/*{{{*/ 1425 1483 -
issm/trunk-jpl/src/c/classes/FemModel.h
r23638 r23642 98 98 void GetLocalVectorWithClonesGset(IssmDouble** plocal_ug,Vector<IssmDouble> *ug); 99 99 void GetLocalVectorWithClonesVertices(IssmDouble** plocal_vector,Vector<IssmDouble> *vector); 100 void GetLocalVectorWithClonesNodes(IssmDouble** plocal_vector,Vector<IssmDouble> *vector); 100 101 void GroundedAreax(IssmDouble* pV, bool scaled); 101 102 void IceMassx(IssmDouble* pV, bool scaled); -
issm/trunk-jpl/src/c/classes/Node.h
r23641 r23642 34 34 //friend void Nodes::Finalize(); 35 35 friend class Nodes; 36 friend class FemModel; 36 37 37 38 public: -
issm/trunk-jpl/src/c/classes/Nodes.cpp
r23641 r23642 365 365 } 366 366 /*}}}*/ 367 int Nodes::NumberOfNodesLocalAll(void){/*{{{*/ 368 369 return this->numberofnodes_local; 370 } 371 /*}}}*/ 367 372 bool Nodes::RequiresDofReindexing(void){/*{{{*/ 368 373 -
issm/trunk-jpl/src/c/classes/Nodes.h
r23641 r23642 45 45 int NumberOfNodes(void); 46 46 int NumberOfNodesLocal(void); 47 int NumberOfNodesLocalAll(void); 47 48 bool RequiresDofReindexing(void); 48 49 }; -
issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp
r23641 r23642 174 174 int *d_connectivity = xNewZeroInit<int>(localnumnodes); 175 175 int *o_connectivity = xNewZeroInit<int>(localnumnodes); 176 int *all_connectivity_clone = xNewZeroInit<int>(numnodes);177 176 178 177 Vector<IssmDouble> *connectivity_clone= new Vector<IssmDouble>(localmasters,numnodes); … … 243 242 connectivity_clone->Assemble(); 244 243 IssmDouble* serial_connectivity_clone=NULL; 245 femmodel->GetLocalVectorWithClones Vertices(&serial_connectivity_clone,connectivity_clone);244 femmodel->GetLocalVectorWithClonesNodes(&serial_connectivity_clone,connectivity_clone); 246 245 delete connectivity_clone; 247 246
Note:
See TracChangeset
for help on using the changeset viewer.