Changeset 27377
- Timestamp:
- 11/10/22 09:55:05 (2 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/FemModel.cpp
r27376 r27377 1445 1445 1446 1446 /*Now send and receive vector for vertices on partition edge*/ 1447 IssmDouble **send_buffers = xNew<IssmDouble*>(num_procs); 1447 IssmDouble **send_buffers = xNewZeroInit<IssmDouble*>(num_procs); 1448 IssmDouble *recv_buffer = xNewZeroInit<IssmDouble>(this->vertices->Size()); 1448 1449 ISSM_MPI_Request *send_requests = xNew<ISSM_MPI_Request>(num_procs); 1449 for (int rank = 0;rank<num_procs;rank++){ 1450 #ifdef _HAVE_AD_ 1451 send_buffers[rank] = xNew<IssmDouble>(this->vertices->Size(),"t"); //only one alloc, "t" is required by adolc 1452 #else 1453 send_buffers[rank] = xNew<IssmDouble>(this->vertices->Size()); 1454 #endif 1455 send_requests[rank] = ISSM_MPI_REQUEST_NULL; 1456 } 1457 IssmDouble* recv_buffer = xNew<IssmDouble>(this->vertices->Size()); 1450 for (int rank = 0;rank<num_procs;rank++) send_requests[rank] = ISSM_MPI_REQUEST_NULL; 1451 1458 1452 for(int rank=0;rank<num_procs;rank++){ 1459 1453 if(this->vertices->common_send[rank]){ 1460 1454 int numids = this->vertices->common_send[rank]; 1455 send_buffers[rank] = xNew<IssmDouble>(numids,"t"); //only one alloc, "t" is required by adolc 1461 1456 for(int i=0;i<numids;i++){ 1462 1457 int master_lid = this->vertices->common_send_ids[rank][i]; … … 1496 1491 1497 1492 /*Now send and receive vector for vertices on partition edge*/ 1498 IssmDouble **send_buffers = xNew<IssmDouble*>(num_procs); 1493 IssmDouble **send_buffers = xNewZeroInit<IssmDouble*>(num_procs); 1494 IssmDouble *recv_buffer = xNewZeroInit<IssmDouble>(this->vertices->Size()); 1499 1495 ISSM_MPI_Request *send_requests = xNew<ISSM_MPI_Request>(num_procs); 1500 for (int rank = 0;rank<num_procs;rank++){ 1501 #ifdef _HAVE_AD_ 1502 send_buffers[rank] = xNew<IssmDouble>(this->vertices->Size(),"t"); //only one alloc, "t" is required by adolc 1503 #else 1504 send_buffers[rank] = xNew<IssmDouble>(this->vertices->Size()); 1505 #endif 1506 send_requests[rank] = ISSM_MPI_REQUEST_NULL; 1507 } 1508 IssmDouble* recv_buffer = xNew<IssmDouble>(this->vertices->Size()); 1496 for (int rank = 0;rank<num_procs;rank++) send_requests[rank] = ISSM_MPI_REQUEST_NULL; 1509 1497 1510 1498 /*1st: add slaves to master values (reverse of what we usually do)*/ … … 1512 1500 if(this->vertices->common_recv[rank]){ 1513 1501 int numids = this->vertices->common_recv[rank]; 1502 send_buffers[rank] = xNew<IssmDouble>(numids,"t"); //only one alloc, "t" is required by adolc 1514 1503 for(int i=0;i<numids;i++){ 1515 1504 int master_lid = this->vertices->common_recv_ids[rank][i]; … … 1595 1584 1596 1585 /*Now send and receive vector for nodes on partition edge*/ 1597 IssmDouble **send_buffers = xNew<IssmDouble*>(num_procs); 1586 IssmDouble **send_buffers = xNewZeroInit<IssmDouble*>(num_procs); 1587 IssmDouble *recv_buffer = xNewZeroInit<IssmDouble>(this->nodes->Size()); 1598 1588 ISSM_MPI_Request *send_requests = xNew<ISSM_MPI_Request>(num_procs); 1599 for (int rank = 0;rank<num_procs;rank++){ 1600 #ifdef _HAVE_AD_ 1601 send_buffers[rank] = xNew<IssmDouble>(this->nodes->Size(),"t"); //only one alloc, "t" is required by adolc 1602 #else 1603 send_buffers[rank] = xNew<IssmDouble>(this->nodes->Size()); 1604 #endif 1605 send_requests[rank] = ISSM_MPI_REQUEST_NULL; 1606 } 1607 IssmDouble* recv_buffer = xNew<IssmDouble>(this->nodes->Size()); 1589 for (int rank = 0;rank<num_procs;rank++) send_requests[rank] = ISSM_MPI_REQUEST_NULL; 1608 1590 1609 1591 for(int rank=0;rank<num_procs;rank++){ 1610 1592 if(this->nodes->common_send[rank]){ 1611 1593 int numids = this->nodes->common_send[rank]; 1594 send_buffers[rank] = xNew<IssmDouble>(numids,"t"); //only one alloc, "t" is required by adolc 1612 1595 for(int i=0;i<numids;i++){ 1613 1596 int master_lid = this->nodes->common_send_ids[rank][i]; -
issm/trunk-jpl/src/c/shared/MemOps/MemOps.h
r26788 r27377 20 20 21 21 /* AD (mostly ADOLC) is sensitive to calls to ensurecontiguous. These changes limit its use.*/ 22 #ifdef _HAVE_AD_23 22 template <class T> T* xNew(unsigned int size, const char* const contig = &DEFCONTIG){ 24 #else25 template <class T> T* xNew(unsigned int size){26 #endif27 23 #ifdef USE_CXX_MEMORY_MANAGMENT_FOR_NON_POD_TYPES 28 24 T* aT_p=new T[size]; … … 58 54 }/*}}}*/ 59 55 // AD (mostly ADOLC) is sensitive to calls to ensurecontiguous. These changes limit its use. 60 #ifdef _HAVE_AD_61 56 template <class T> T* xNewZeroInit(unsigned int size,const char* const contig = &DEFCONTIG){ 62 #else63 template <class T> T* xNewZeroInit(unsigned int size){64 #endif65 57 #ifdef USE_CXX_MEMORY_MANAGMENT_FOR_NON_POD_TYPES 66 58 #ifdef _HAVE_AD_
Note:
See TracChangeset
for help on using the changeset viewer.