⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memory.c

📁 LU矩阵分解单机版最新版本
💻 C
字号:
/* * -- SuperLU routine (version 2.0) -- * Univ. of California Berkeley, Xerox Palo Alto Research Center, * and Lawrence Berkeley National Lab. * November 15, 1997 * *//** Precision-independent memory-related routines.    (Shared by [sdcz]memory.c) **/#include "slu_ddefs.h"#if ( DEBUGlevel>=1 )           /* Debug malloc/free. */int superlu_malloc_total = 0;#define PAD_FACTOR  2#define DWORD  (sizeof(double)) /* Be sure it's no smaller than double. *//* size_t is usually defined as 'unsigned long' */void *superlu_malloc(size_t size){    char *buf;    buf = (char *) malloc(size + DWORD);    if ( !buf ) {	printf("superlu_malloc fails: malloc_total %.0f MB, size %ld\n",	       superlu_malloc_total*1e-6, size);	ABORT("superlu_malloc: out of memory");    }    ((int_t *) buf)[0] = size;#if 0    superlu_malloc_total += size + DWORD;#else    superlu_malloc_total += size;#endif    return (void *) (buf + DWORD);}void superlu_free(void *addr){    char *p = ((char *) addr) - DWORD;    if ( !addr )	ABORT("superlu_free: tried to free NULL pointer");    if ( !p )	ABORT("superlu_free: tried to free NULL+DWORD pointer");    { 	int_t n = ((int_t *) p)[0];		if ( !n )	    ABORT("superlu_free: tried to free a freed pointer");	*((int_t *) p) = 0; /* Set to zero to detect duplicate free's. */#if 0		superlu_malloc_total -= (n + DWORD);#else	superlu_malloc_total -= n;#endif	if ( superlu_malloc_total < 0 )	    ABORT("superlu_malloc_total went negative!");		/*free (addr);*/	free (p);    }}#else   /* production mode */void *superlu_malloc(size_t size){    void *buf;    buf = (void *) malloc(size);    return (buf);}void superlu_free(void *addr){    free (addr);}#endif/* * Set up pointers for integer working arrays. */voidSetIWork(int m, int n, int panel_size, int *iworkptr, int **segrep,	 int **parent, int **xplore, int **repfnz, int **panel_lsub,	 int **xprune, int **marker){    *segrep = iworkptr;    *parent = iworkptr + m;    *xplore = *parent + m;    *repfnz = *xplore + m;    *panel_lsub = *repfnz + panel_size * m;    *xprune = *panel_lsub + panel_size * m;    *marker = *xprune + n;    ifill (*repfnz, m * panel_size, EMPTY);    ifill (*panel_lsub, m * panel_size, EMPTY);}voidcopy_mem_int(int howmany, void *old, void *new){    register int i;    int *iold = old;    int *inew = new;    for (i = 0; i < howmany; i++) inew[i] = iold[i];}voiduser_bcopy(char *src, char *dest, int bytes){    char *s_ptr, *d_ptr;    s_ptr = src + bytes - 1;    d_ptr = dest + bytes - 1;    for (; d_ptr >= dest; --s_ptr, --d_ptr ) *d_ptr = *s_ptr;}int *intMalloc(int n){    int *buf;    buf = (int *) SUPERLU_MALLOC(n * sizeof(int));    if ( !buf ) {	ABORT("SUPERLU_MALLOC fails for buf in intMalloc()");    }    return (buf);}int *intCalloc(int n){    int *buf;    register int i;    buf = (int *) SUPERLU_MALLOC(n * sizeof(int));    if ( !buf ) {	ABORT("SUPERLU_MALLOC fails for buf in intCalloc()");    }    for (i = 0; i < n; ++i) buf[i] = 0;    return (buf);}#if 0check_expanders(){    int p;    printf("Check expanders:\n");    for (p = 0; p < NO_MEMTYPE; p++) {	printf("type %d, size %d, mem %d\n",	       p, expanders[p].size, (int)expanders[p].mem);    }    return 0;}StackInfo(){    printf("Stack: size %d, used %d, top1 %d, top2 %d\n",	   stack.size, stack.used, stack.top1, stack.top2);    return 0;}PrintStack(char *msg, GlobalLU_t *Glu){    int i;    int *xlsub, *lsub, *xusub, *usub;    xlsub = Glu->xlsub;    lsub  = Glu->lsub;    xusub = Glu->xusub;    usub  = Glu->usub;    printf("%s\n", msg);    /*    printf("\nUCOL: ");    for (i = 0; i < xusub[ndim]; ++i)	printf("%f  ", ucol[i]);    printf("\nLSUB: ");    for (i = 0; i < xlsub[ndim]; ++i)	printf("%d  ", lsub[i]);    printf("\nUSUB: ");    for (i = 0; i < xusub[ndim]; ++i)	printf("%d  ", usub[i]);    printf("\n");*/    return 0;}   #endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -