1 #include "src/mat/utils/freespace.h" 2 3 #undef __FUNCT__ 4 #define __FUNCT__ "GetMoreSpace" 5 int GetMoreSpace(int size,FreeSpaceList *list) { 6 FreeSpaceList a; 7 int ierr; 8 9 PetscFunctionBegin; 10 ierr = PetscMalloc(sizeof(FreeSpace),&a);CHKERRQ(ierr); 11 ierr = PetscMalloc(size*sizeof(int),&(a->array_head));CHKERRQ(ierr); 12 a->array = a->array_head; 13 a->local_remaining = size; 14 a->local_used = 0; 15 a->total_array_size = 0; 16 a->more_space = NULL; 17 18 if (*list) { 19 (*list)->more_space = a; 20 a->total_array_size = (*list)->total_array_size; 21 } 22 23 a->total_array_size += size; 24 *list = a; 25 PetscFunctionReturn(0); 26 } 27 28 #undef __FUNCT__ 29 #define __FUNCT__ "MakeSpaceContiguous" 30 int MakeSpaceContiguous(FreeSpaceList *head,int *space) { 31 FreeSpaceList a; 32 int ierr; 33 34 PetscFunctionBegin; 35 while ((*head)!=NULL) { 36 a = (*head)->more_space; 37 ierr = PetscMemcpy(space,(*head)->array_head,((*head)->local_used)*sizeof(int));CHKERRQ(ierr); 38 space += (*head)->local_used; 39 ierr = PetscFree((*head)->array_head);CHKERRQ(ierr); 40 ierr = PetscFree(*head);CHKERRQ(ierr); 41 *head = a; 42 } 43 PetscFunctionReturn(0); 44 } 45