170f19b1fSKris Buschelman #include "src/mat/utils/freespace.h" 270f19b1fSKris Buschelman 370f19b1fSKris Buschelman #undef __FUNCT__ 470f19b1fSKris Buschelman #define __FUNCT__ "GetMoreSpace" 5dfbe8321SBarry Smith PetscErrorCode GetMoreSpace(int size,FreeSpaceList *list) { 670f19b1fSKris Buschelman FreeSpaceList a; 7dfbe8321SBarry Smith PetscErrorCode ierr; 870f19b1fSKris Buschelman 970f19b1fSKris Buschelman PetscFunctionBegin; 1070f19b1fSKris Buschelman ierr = PetscMalloc(sizeof(FreeSpace),&a);CHKERRQ(ierr); 1170f19b1fSKris Buschelman ierr = PetscMalloc(size*sizeof(int),&(a->array_head));CHKERRQ(ierr); 1270f19b1fSKris Buschelman a->array = a->array_head; 1370f19b1fSKris Buschelman a->local_remaining = size; 1470f19b1fSKris Buschelman a->local_used = 0; 1570f19b1fSKris Buschelman a->total_array_size = 0; 1670f19b1fSKris Buschelman a->more_space = NULL; 1770f19b1fSKris Buschelman 1870f19b1fSKris Buschelman if (*list) { 1970f19b1fSKris Buschelman (*list)->more_space = a; 2070f19b1fSKris Buschelman a->total_array_size = (*list)->total_array_size; 2170f19b1fSKris Buschelman } 2270f19b1fSKris Buschelman 2370f19b1fSKris Buschelman a->total_array_size += size; 2470f19b1fSKris Buschelman *list = a; 2570f19b1fSKris Buschelman PetscFunctionReturn(0); 2670f19b1fSKris Buschelman } 2770f19b1fSKris Buschelman 2870f19b1fSKris Buschelman #undef __FUNCT__ 2970f19b1fSKris Buschelman #define __FUNCT__ "MakeSpaceContiguous" 30*38baddfdSBarry Smith PetscErrorCode MakeSpaceContiguous(FreeSpaceList *head,int *space) 31*38baddfdSBarry Smith { 3270f19b1fSKris Buschelman FreeSpaceList a; 33dfbe8321SBarry Smith PetscErrorCode ierr; 3470f19b1fSKris Buschelman 3570f19b1fSKris Buschelman PetscFunctionBegin; 3670f19b1fSKris Buschelman while ((*head)!=NULL) { 3770f19b1fSKris Buschelman a = (*head)->more_space; 3870f19b1fSKris Buschelman ierr = PetscMemcpy(space,(*head)->array_head,((*head)->local_used)*sizeof(int));CHKERRQ(ierr); 3970f19b1fSKris Buschelman space += (*head)->local_used; 4070f19b1fSKris Buschelman ierr = PetscFree((*head)->array_head);CHKERRQ(ierr); 4170f19b1fSKris Buschelman ierr = PetscFree(*head);CHKERRQ(ierr); 4270f19b1fSKris Buschelman *head = a; 4370f19b1fSKris Buschelman } 4470f19b1fSKris Buschelman PetscFunctionReturn(0); 4570f19b1fSKris Buschelman } 46