Changeset 23642


Ignore:
Timestamp:
01/17/19 12:57:57 (6 years ago)
Author:
Mathieu Morlighem
Message:

BUG: vector clone_connectivity is on nodes, not vertices

Location:
issm/trunk-jpl/src/c
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/FemModel.cpp

    r23638 r23642  
    14221422        *plocal_vector = local_vector;
    14231423}/*}}}*/
     1424void 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}/*}}}*/
    14241482void FemModel::GroundedAreax(IssmDouble* pV, bool scaled){/*{{{*/
    14251483
  • issm/trunk-jpl/src/c/classes/FemModel.h

    r23638 r23642  
    9898                void GetLocalVectorWithClonesGset(IssmDouble** plocal_ug,Vector<IssmDouble> *ug);
    9999                void GetLocalVectorWithClonesVertices(IssmDouble** plocal_vector,Vector<IssmDouble> *vector);
     100                void GetLocalVectorWithClonesNodes(IssmDouble** plocal_vector,Vector<IssmDouble> *vector);
    100101                void GroundedAreax(IssmDouble* pV, bool scaled);
    101102                void IceMassx(IssmDouble* pV, bool scaled);
  • issm/trunk-jpl/src/c/classes/Node.h

    r23641 r23642  
    3434                //friend void Nodes::Finalize();
    3535                friend class Nodes;
     36                friend class FemModel;
    3637
    3738        public:
  • issm/trunk-jpl/src/c/classes/Nodes.cpp

    r23641 r23642  
    365365}
    366366/*}}}*/
     367int   Nodes::NumberOfNodesLocalAll(void){/*{{{*/
     368
     369        return this->numberofnodes_local;
     370}
     371/*}}}*/
    367372bool  Nodes::RequiresDofReindexing(void){/*{{{*/
    368373
  • issm/trunk-jpl/src/c/classes/Nodes.h

    r23641 r23642  
    4545                int   NumberOfNodes(void);
    4646                int   NumberOfNodesLocal(void);
     47                int   NumberOfNodesLocalAll(void);
    4748                bool  RequiresDofReindexing(void);
    4849};
  • issm/trunk-jpl/src/c/modules/AllocateSystemMatricesx/AllocateSystemMatricesx.cpp

    r23641 r23642  
    174174        int  *d_connectivity         = xNewZeroInit<int>(localnumnodes);
    175175        int  *o_connectivity         = xNewZeroInit<int>(localnumnodes);
    176         int  *all_connectivity_clone = xNewZeroInit<int>(numnodes);
    177176
    178177        Vector<IssmDouble> *connectivity_clone= new Vector<IssmDouble>(localmasters,numnodes);
     
    243242        connectivity_clone->Assemble();
    244243        IssmDouble* serial_connectivity_clone=NULL;
    245         femmodel->GetLocalVectorWithClonesVertices(&serial_connectivity_clone,connectivity_clone);
     244        femmodel->GetLocalVectorWithClonesNodes(&serial_connectivity_clone,connectivity_clone);
    246245        delete connectivity_clone;
    247246
Note: See TracChangeset for help on using the changeset viewer.