1: #include "src/mat/utils/freespace.h" 5: int GetMoreSpace(int size,FreeSpaceList *list) { 6: FreeSpaceList a; 10: PetscMalloc(sizeof(FreeSpace),&a); 11: PetscMalloc(size*sizeof(int),&(a->array_head)); 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; 18: if (*list) { 19: (*list)->more_space = a; 20: a->total_array_size = (*list)->total_array_size; 21: } 23: a->total_array_size += size; 24: *list = a; 25: return(0); 26: } 30: int MakeSpaceContiguous(FreeSpaceList *head,int *space) { 31: FreeSpaceList a; 32: int ierr; 35: while ((*head)!=NULL) { 36: a = (*head)->more_space; 37: PetscMemcpy(space,(*head)->array_head,((*head)->local_used)*sizeof(int)); 38: space += (*head)->local_used; 39: PetscFree((*head)->array_head); 40: PetscFree(*head); 41: *head = a; 42: } 43: return(0); 44: }