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