1a4963045SJacob Faibussowitsch #pragma once 26497c311SBarry Smith #if defined(__GNUC__) || defined(__clang__) 36497c311SBarry Smith #pragma GCC diagnostic ignored "-Wconversion" 46497c311SBarry Smith #endif 57758a8cdSBarry Smith 6*21789920SBarry Smith /* 77758a8cdSBarry Smith 87758a8cdSBarry Smith Author: Henry M. Tufo III 97758a8cdSBarry Smith 107758a8cdSBarry Smith e-mail: hmt@cs.brown.edu 117758a8cdSBarry Smith 127758a8cdSBarry Smith snail-mail: 137758a8cdSBarry Smith Division of Applied Mathematics 147758a8cdSBarry Smith Brown University 157758a8cdSBarry Smith Providence, RI 02912 167758a8cdSBarry Smith 177758a8cdSBarry Smith Last Modification: 187758a8cdSBarry Smith 6.21.97 197758a8cdSBarry Smith 207758a8cdSBarry Smith File Description: 21*21789920SBarry Smith */ 22c6db04a5SJed Brown #include <petscsys.h> 23c6db04a5SJed Brown #include <petscblaslapack.h> 247758a8cdSBarry Smith 257758a8cdSBarry Smith #define X 0 267758a8cdSBarry Smith #define Y 1 277758a8cdSBarry Smith #define Z 2 287758a8cdSBarry Smith #define XY 3 297758a8cdSBarry Smith #define XZ 4 307758a8cdSBarry Smith #define YZ 5 317758a8cdSBarry Smith 327758a8cdSBarry Smith #define THRESH 0.2 337758a8cdSBarry Smith #define N_HALF 4096 347758a8cdSBarry Smith #define PRIV_BUF_SZ 45 357758a8cdSBarry Smith 367758a8cdSBarry Smith /*4096 8192 32768 65536 1048576 */ 377758a8cdSBarry Smith #define MAX_MSG_BUF 32768 387758a8cdSBarry Smith 397758a8cdSBarry Smith #define FULL 2 407758a8cdSBarry Smith #define PARTIAL 1 417758a8cdSBarry Smith #define NONE 0 427758a8cdSBarry Smith 437758a8cdSBarry Smith #define BYTE 8 447758a8cdSBarry Smith #define BIT_0 0x1 457758a8cdSBarry Smith #define BIT_1 0x2 467758a8cdSBarry Smith #define BIT_2 0x4 477758a8cdSBarry Smith #define BIT_3 0x8 487758a8cdSBarry Smith #define BIT_4 0x10 497758a8cdSBarry Smith #define BIT_5 0x20 507758a8cdSBarry Smith #define BIT_6 0x40 517758a8cdSBarry Smith #define BIT_7 0x80 521690c2aeSBarry Smith #define TOP_BIT PETSC_INT_MIN 537758a8cdSBarry Smith 547758a8cdSBarry Smith #define C 0 557758a8cdSBarry Smith 567758a8cdSBarry Smith #define MAX_VEC 1674 577758a8cdSBarry Smith #define FORMAT 30 587758a8cdSBarry Smith #define MAX_COL_LEN 100 597758a8cdSBarry Smith #define MAX_LINE FORMAT *MAX_COL_LEN 607758a8cdSBarry Smith #define DELIM " \n \t" 617758a8cdSBarry Smith #define LINE 12 627758a8cdSBarry Smith #define C_LINE 80 637758a8cdSBarry Smith 647758a8cdSBarry Smith #define UT 5 /* dump upper 1/2 */ 657758a8cdSBarry Smith #define LT 6 /* dump lower 1/2 */ 667758a8cdSBarry Smith #define SYMM 8 /* we assume symm and dump upper 1/2 */ 677758a8cdSBarry Smith #define NON_SYMM 9 687758a8cdSBarry Smith 697758a8cdSBarry Smith #define ROW 10 707758a8cdSBarry Smith #define COL 11 717758a8cdSBarry Smith 727758a8cdSBarry Smith #define EPS 1.0e-14 737758a8cdSBarry Smith #define EPS2 1.0e-07 747758a8cdSBarry Smith 757758a8cdSBarry Smith #define MPI 1 767758a8cdSBarry Smith #define NX 2 777758a8cdSBarry Smith 789371c9d4SSatish Balay #define SWAP(a, b) \ 79b6555650SPierre Jolivet do { \ 809371c9d4SSatish Balay temp = (a); \ 819371c9d4SSatish Balay (a) = (b); \ 82b6555650SPierre Jolivet (b) = temp; \ 83b6555650SPierre Jolivet } while (0) 849371c9d4SSatish Balay #define P_SWAP(a, b) \ 85b6555650SPierre Jolivet do { \ 869371c9d4SSatish Balay ptr = (a); \ 879371c9d4SSatish Balay (a) = (b); \ 88b6555650SPierre Jolivet (b) = ptr; \ 89b6555650SPierre Jolivet } while (0) 907758a8cdSBarry Smith 918cda6cd7SBarry Smith #define MAX_FABS(x, y) (PetscAbsScalar(x) > PetscAbsScalar(y)) ? ((PetscScalar)x) : ((PetscScalar)y) 928cda6cd7SBarry Smith #define MIN_FABS(x, y) (PetscAbsScalar(x) < PetscAbsScalar(y)) ? ((PetscScalar)x) : ((PetscScalar)y) 937758a8cdSBarry Smith 947758a8cdSBarry Smith /* specer's existence ... can be done w/MAX_ABS */ 957758a8cdSBarry Smith #define EXISTS(x, y) ((x) == 0.0) ? (y) : (x) 967758a8cdSBarry Smith 977758a8cdSBarry Smith #define MULT_NEG_ONE(a) (a) *= -1; 987758a8cdSBarry Smith #define NEG(a) (a) |= BIT_31; 997758a8cdSBarry Smith #define POS(a) (a) &= INT_MAX; 1007758a8cdSBarry Smith 101*21789920SBarry Smith /* 1027758a8cdSBarry Smith Author: Henry M. Tufo III 1037758a8cdSBarry Smith 1047758a8cdSBarry Smith e-mail: hmt@cs.brown.edu 1057758a8cdSBarry Smith 1067758a8cdSBarry Smith snail-mail: 1077758a8cdSBarry Smith Division of Applied Mathematics 1087758a8cdSBarry Smith Brown University 1097758a8cdSBarry Smith Providence, RI 02912 1107758a8cdSBarry Smith 1117758a8cdSBarry Smith Last Modification: 1127758a8cdSBarry Smith 6.21.97 113*21789920SBarry Smith */ 1147758a8cdSBarry Smith 1156e4f4d19SBarry Smith typedef PetscErrorCode (*vfp)(void *, void *, PetscInt, ...); 1166b967228SBarry Smith typedef PetscErrorCode (*rbfp)(PetscScalar *, PetscScalar *, PetscInt); 1176b967228SBarry Smith typedef PetscInt (*bfp)(void *, void *, PetscInt *, MPI_Datatype *); 1187758a8cdSBarry Smith 119*21789920SBarry Smith /* 1207758a8cdSBarry Smith 1217758a8cdSBarry Smith Author: Henry M. Tufo III 1227758a8cdSBarry Smith 1237758a8cdSBarry Smith e-mail: hmt@cs.brown.edu 1247758a8cdSBarry Smith 1257758a8cdSBarry Smith snail-mail: 1267758a8cdSBarry Smith Division of Applied Mathematics 1277758a8cdSBarry Smith Brown University 1287758a8cdSBarry Smith Providence, RI 02912 1297758a8cdSBarry Smith 1307758a8cdSBarry Smith Last Modification: 1317758a8cdSBarry Smith 6.21.97 132*21789920SBarry Smith */ 1335a576424SJed Brown PETSC_INTERN PetscMPIInt PCTFS_my_id; 1345a576424SJed Brown PETSC_INTERN PetscMPIInt PCTFS_num_nodes; 1355a576424SJed Brown PETSC_INTERN PetscMPIInt PCTFS_floor_num_nodes; 1365a576424SJed Brown PETSC_INTERN PetscMPIInt PCTFS_i_log2_num_nodes; 1377758a8cdSBarry Smith 1386b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_giop(PetscInt *, PetscInt *, PetscInt, PetscInt *); 1396b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_grop(PetscScalar *, PetscScalar *, PetscInt, PetscInt *); 1405a576424SJed Brown PETSC_INTERN PetscErrorCode PCTFS_comm_init(void); 1416b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_giop_hc(PetscInt *, PetscInt *, PetscInt, PetscInt *, PetscInt); 1426b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_grop_hc(PetscScalar *, PetscScalar *, PetscInt, PetscInt *, PetscInt); 1436b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_ssgl_radd(PetscScalar *, PetscScalar *, PetscInt, PetscInt *); 1447758a8cdSBarry Smith 1457758a8cdSBarry Smith #define MSGTAG0 101 1467758a8cdSBarry Smith #define MSGTAG1 1001 1477758a8cdSBarry Smith #define MSGTAG2 76207 1487758a8cdSBarry Smith #define MSGTAG3 100001 1497758a8cdSBarry Smith #define MSGTAG4 163841 1507758a8cdSBarry Smith #define MSGTAG5 249439 1517758a8cdSBarry Smith #define MSGTAG6 10000001 1527758a8cdSBarry Smith 1537758a8cdSBarry Smith #define NON_UNIFORM 0 1547758a8cdSBarry Smith #define GL_MAX 1 1557758a8cdSBarry Smith #define GL_MIN 2 1567758a8cdSBarry Smith #define GL_MULT 3 1577758a8cdSBarry Smith #define GL_ADD 4 1587758a8cdSBarry Smith #define GL_B_XOR 5 1597758a8cdSBarry Smith #define GL_B_OR 6 1607758a8cdSBarry Smith #define GL_B_AND 7 1617758a8cdSBarry Smith #define GL_L_XOR 8 1627758a8cdSBarry Smith #define GL_L_OR 9 1637758a8cdSBarry Smith #define GL_L_AND 10 1647758a8cdSBarry Smith #define GL_MAX_ABS 11 1657758a8cdSBarry Smith #define GL_MIN_ABS 12 1667758a8cdSBarry Smith #define GL_EXISTS 13 1677758a8cdSBarry Smith 1686b967228SBarry Smith PETSC_INTERN PetscInt *PCTFS_ivec_copy(PetscInt *, PetscInt *, PetscInt); 1696b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_ivec_zero(PetscInt *, PetscInt); 1706b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_ivec_set(PetscInt *, PetscInt, PetscInt); 1717758a8cdSBarry Smith 1726b967228SBarry Smith PETSC_INTERN PetscInt PCTFS_ivec_lb(PetscInt *, PetscInt); 1736b967228SBarry Smith PETSC_INTERN PetscInt PCTFS_ivec_ub(PetscInt *, PetscInt); 1746b967228SBarry Smith PETSC_INTERN PetscInt PCTFS_ivec_sum(PetscInt *, PetscInt); 1756b967228SBarry Smith PETSC_INTERN vfp PCTFS_ivec_fct_addr(PetscInt); 1767758a8cdSBarry Smith 1776ae68b59SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_ivec_non_uniform(PetscInt *, PetscInt *, PetscInt, ...); 1786b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_ivec_max(PetscInt *, PetscInt *, PetscInt); 1796b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_ivec_min(PetscInt *, PetscInt *, PetscInt); 1806b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_ivec_mult(PetscInt *, PetscInt *, PetscInt); 1816b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_ivec_add(PetscInt *, PetscInt *, PetscInt); 1826b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_ivec_xor(PetscInt *, PetscInt *, PetscInt); 1836b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_ivec_or(PetscInt *, PetscInt *, PetscInt); 1846b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_ivec_and(PetscInt *, PetscInt *, PetscInt); 1856b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_ivec_lxor(PetscInt *, PetscInt *, PetscInt); 1866b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_ivec_lor(PetscInt *, PetscInt *, PetscInt); 1876b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_ivec_land(PetscInt *, PetscInt *, PetscInt); 1886b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_ivec_and3(PetscInt *, PetscInt *, PetscInt *, PetscInt); 1897758a8cdSBarry Smith 1906b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_ivec_sort_companion(PetscInt *, PetscInt *, PetscInt); 1916b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_ivec_sort(PetscInt *, PetscInt); 1926b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_SMI_sort(void *, void *, PetscInt, PetscInt); 1936b967228SBarry Smith PETSC_INTERN PetscInt PCTFS_ivec_binary_search(PetscInt, PetscInt *, PetscInt); 1946b967228SBarry Smith PETSC_INTERN PetscInt PCTFS_ivec_linear_search(PetscInt, PetscInt *, PetscInt); 1957758a8cdSBarry Smith 1966b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_ivec_sort_companion_hack(PetscInt *, PetscInt **, PetscInt); 1977758a8cdSBarry Smith 1986e4f4d19SBarry Smith #define SORT_INTEGER 1 1996e4f4d19SBarry Smith #define SORT_INT_PTR 2 2007758a8cdSBarry Smith 2016b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_rvec_zero(PetscScalar *, PetscInt); 2026b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_rvec_one(PetscScalar *, PetscInt); 2036b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_rvec_set(PetscScalar *, PetscScalar, PetscInt); 2046b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_rvec_copy(PetscScalar *, PetscScalar *, PetscInt); 2056b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_rvec_scale(PetscScalar *, PetscScalar, PetscInt); 2067758a8cdSBarry Smith 2076b967228SBarry Smith PETSC_INTERN vfp PCTFS_rvec_fct_addr(PetscInt); 2086b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_rvec_add(PetscScalar *, PetscScalar *, PetscInt); 2096b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_rvec_mult(PetscScalar *, PetscScalar *, PetscInt); 2106b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_rvec_max(PetscScalar *, PetscScalar *, PetscInt); 2116b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_rvec_max_abs(PetscScalar *, PetscScalar *, PetscInt); 2126b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_rvec_min(PetscScalar *, PetscScalar *, PetscInt); 2136b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_rvec_min_abs(PetscScalar *, PetscScalar *, PetscInt); 2146b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_vec_exists(PetscScalar *, PetscScalar *, PetscInt); 2157758a8cdSBarry Smith 216*21789920SBarry Smith /* 2177758a8cdSBarry Smith Author: Henry M. Tufo III 2187758a8cdSBarry Smith 2197758a8cdSBarry Smith e-mail: hmt@cs.brown.edu 2207758a8cdSBarry Smith 2217758a8cdSBarry Smith snail-mail: 2227758a8cdSBarry Smith Division of Applied Mathematics 2237758a8cdSBarry Smith Brown University 2247758a8cdSBarry Smith Providence, RI 02912 2257758a8cdSBarry Smith 2267758a8cdSBarry Smith Last Modification: 2277758a8cdSBarry Smith 6.21.97 228*21789920SBarry Smith */ 2297758a8cdSBarry Smith 230ca8e9878SJed Brown typedef struct gather_scatter_id *PCTFS_gs_ADT; 2317758a8cdSBarry Smith 2326b967228SBarry Smith PETSC_INTERN PCTFS_gs_ADT PCTFS_gs_init(PetscInt *, PetscInt, PetscInt); 2336b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_gs_gop_vec(PCTFS_gs_ADT, PetscScalar *, const char *, PetscInt); 2346b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_gs_gop_hc(PCTFS_gs_ADT, PetscScalar *, const char *, PetscInt); 2356b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_gs_free(PCTFS_gs_ADT); 2366b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_gs_init_msg_buf_sz(PetscInt); 2376b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_gs_init_vec_sz(PetscInt); 2387758a8cdSBarry Smith 239*21789920SBarry Smith /* 2407758a8cdSBarry Smith Module Name: xxt 2417758a8cdSBarry Smith Module Info: need xxt.{c,h} gs.{c,h} comm.{c,h} ivec.{c,h} error.{c,h} 2427758a8cdSBarry Smith 2437758a8cdSBarry Smith author: Henry M. Tufo III 2447758a8cdSBarry Smith e-mail: hmt@asci.uchicago.edu 2457758a8cdSBarry Smith contact: 2467758a8cdSBarry Smith +--------------------------------+--------------------------------+ 2477758a8cdSBarry Smith |MCS Division - Building 221 |Department of Computer Science | 2487758a8cdSBarry Smith |Argonne National Laboratory |Ryerson 152 | 2497758a8cdSBarry Smith |9700 S. Cass Avenue |The University of Chicago | 2507758a8cdSBarry Smith |Argonne, IL 60439 |Chicago, IL 60637 | 2517758a8cdSBarry Smith |(630) 252-5354/5986 ph/fx |(773) 702-6019/8487 ph/fx | 2527758a8cdSBarry Smith +--------------------------------+--------------------------------+ 2537758a8cdSBarry Smith 2547758a8cdSBarry Smith Last Modification: 3.20.01 255*21789920SBarry Smith */ 2567758a8cdSBarry Smith 2577758a8cdSBarry Smith typedef struct xxt_CDT *xxt_ADT; 2587758a8cdSBarry Smith 259*21789920SBarry Smith /* 2607758a8cdSBarry Smith Function: XXT_new() 2617758a8cdSBarry Smith 2627758a8cdSBarry Smith Return: ADT ptr or NULL upon failure. 2637758a8cdSBarry Smith Description: This function allocates and returns an xxt handle 2647758a8cdSBarry Smith Usage: xxt_handle = xxt_new(); 265*21789920SBarry Smith */ 2665a576424SJed Brown PETSC_INTERN xxt_ADT XXT_new(void); 2677758a8cdSBarry Smith 268*21789920SBarry Smith /* 2697758a8cdSBarry Smith Function: XXT_free() 2707758a8cdSBarry Smith 2717758a8cdSBarry Smith Input : pointer to ADT. 2726e4f4d19SBarry Smith 2737758a8cdSBarry Smith Description: This function frees the storage associated with an xxt handle 2747758a8cdSBarry Smith Usage: XXT_free(xxt_handle); 275*21789920SBarry Smith */ 2763ba16761SJacob Faibussowitsch PETSC_INTERN PetscErrorCode XXT_free(xxt_ADT); 2777758a8cdSBarry Smith 278*21789920SBarry Smith /* 2797758a8cdSBarry Smith Function: XXT_factor 2807758a8cdSBarry Smith 2817758a8cdSBarry Smith Input : ADT ptr, and pointer to object 2827758a8cdSBarry Smith Return: 0 on failure, 1 on success 2837758a8cdSBarry Smith Description: This function sets the xxt solver 2847758a8cdSBarry Smith 2857758a8cdSBarry Smith xxt assumptions: given n rows of global coarse matrix (E_loc) where 2867758a8cdSBarry Smith o global dofs N = sum_p(n), p=0,P-1 2877758a8cdSBarry Smith (i.e. row dist. with no dof replication) 2887758a8cdSBarry Smith (5.21.00 will handle dif replication case) 2897758a8cdSBarry Smith o m is the number of columns in E_loc (m>=n) 2907758a8cdSBarry Smith o local2global holds global number of column i (i=0,...,m-1) 2917758a8cdSBarry Smith o local2global holds global number of row i (i=0,...,n-1) 2927758a8cdSBarry Smith o mylocmatvec performs E_loc . x_loc where x_loc is an vector of 2937758a8cdSBarry Smith length m in 1-1 correspondence with local2global 2947758a8cdSBarry Smith (note that gs package takes care of communication). 2957758a8cdSBarry Smith (note do not zero out upper m-n entries!) 2967758a8cdSBarry Smith o mylocmatvec(void *grid_data, double *in, double *out) 2977758a8cdSBarry Smith 29815229ffcSPierre Jolivet ML beliefs/usage: move this to ML_XXT_factor routine 2997758a8cdSBarry Smith o my_ml holds address of ML struct associated w/E_loc, grid_data, grid_tag 3007758a8cdSBarry Smith o grid_tag, grid_data, my_ml used in 3017758a8cdSBarry Smith ML_Set_CSolve(my_ml, grid_tag, grid_data, ML_Do_CoarseDirect); 3027758a8cdSBarry Smith o grid_data used in 3037758a8cdSBarry Smith A_matvec(grid_data,v,u); 3047758a8cdSBarry Smith 3057758a8cdSBarry Smith Usage: 306*21789920SBarry Smith */ 30738dcbb09SBarry Smith PETSC_INTERN PetscErrorCode XXT_factor(xxt_ADT, /* prev. allocated xxt handle */ 3086b967228SBarry Smith PetscInt *, /* global column mapping */ 3096b967228SBarry Smith PetscInt, /* local num rows */ 3106b967228SBarry Smith PetscInt, /* local num cols */ 3116b967228SBarry Smith PetscErrorCode (*)(void *, PetscScalar *, PetscScalar *), /* b_loc=A_local.x_loc */ 3126b967228SBarry Smith void *); /* grid data for matvec */ 3137758a8cdSBarry Smith 314*21789920SBarry Smith /* 3157758a8cdSBarry Smith Function: XXT_solve 3167758a8cdSBarry Smith 3177758a8cdSBarry Smith Input : ADT ptr, b (rhs) 3187758a8cdSBarry Smith Output: x (soln) 3197758a8cdSBarry Smith Return: 3207758a8cdSBarry Smith Description: This function performs x = E^-1.b 3217758a8cdSBarry Smith Usage: 3227758a8cdSBarry Smith XXT_solve(xxt_handle, double *x, double *b) 3237758a8cdSBarry Smith XXT_solve(xxt_handle, double *x, NULL) 3247758a8cdSBarry Smith assumes x has been initialized to be b 325*21789920SBarry Smith */ 32638dcbb09SBarry Smith PETSC_INTERN PetscErrorCode XXT_solve(xxt_ADT, PetscScalar *, PetscScalar *); 3277758a8cdSBarry Smith 328*21789920SBarry Smith /* 3297758a8cdSBarry Smith Function: XXT_sp_1() 3307758a8cdSBarry Smith 3317758a8cdSBarry Smith Input : pointer to ADT 3327758a8cdSBarry Smith Output: 3337758a8cdSBarry Smith Return: 3347758a8cdSBarry Smith Description: sets xxt parameter 1 in xxt_handle 3357758a8cdSBarry Smith Usage: implement later 3367758a8cdSBarry Smith 3377758a8cdSBarry Smith void XXT_sp_1(xxt_handle,parameter 1 value) 338*21789920SBarry Smith */ 3397758a8cdSBarry Smith 340*21789920SBarry Smith /* 3417758a8cdSBarry Smith Module Name: xyt 3427758a8cdSBarry Smith Module Info: need xyt.{c,h} gs.{c,h} comm.{c,h} ivec.{c,h} error.{c,h} 3437758a8cdSBarry Smith 3447758a8cdSBarry Smith author: Henry M. Tufo III 3457758a8cdSBarry Smith e-mail: hmt@asci.uchicago.edu 3467758a8cdSBarry Smith contact: 3477758a8cdSBarry Smith +--------------------------------+--------------------------------+ 3487758a8cdSBarry Smith |MCS Division - Building 221 |Department of Computer Science | 3497758a8cdSBarry Smith |Argonne National Laboratory |Ryerson 152 | 3507758a8cdSBarry Smith |9700 S. Cass Avenue |The University of Chicago | 3517758a8cdSBarry Smith |Argonne, IL 60439 |Chicago, IL 60637 | 3527758a8cdSBarry Smith |(630) 252-5354/5986 ph/fx |(773) 702-6019/8487 ph/fx | 3537758a8cdSBarry Smith +--------------------------------+--------------------------------+ 3547758a8cdSBarry Smith 3557758a8cdSBarry Smith Last Modification: 3.20.01 356*21789920SBarry Smith */ 3577758a8cdSBarry Smith 3587758a8cdSBarry Smith typedef struct xyt_CDT *xyt_ADT; 3597758a8cdSBarry Smith 360*21789920SBarry Smith /* 3617758a8cdSBarry Smith Function: XYT_new() 3627758a8cdSBarry Smith 3637758a8cdSBarry Smith Return: ADT ptr or NULL upon failure. 3647758a8cdSBarry Smith Description: This function allocates and returns an xyt handle 3657758a8cdSBarry Smith Usage: xyt_handle = xyt_new(); 366*21789920SBarry Smith */ 3675a576424SJed Brown PETSC_INTERN xyt_ADT XYT_new(void); 3687758a8cdSBarry Smith 369*21789920SBarry Smith /* 3707758a8cdSBarry Smith Function: XYT_free() 3717758a8cdSBarry Smith 3727758a8cdSBarry Smith Input : pointer to ADT. 3737758a8cdSBarry Smith Description: This function frees the storage associated with an xyt handle 3747758a8cdSBarry Smith Usage: XYT_free(xyt_handle); 375*21789920SBarry Smith */ 37638dcbb09SBarry Smith PETSC_INTERN PetscErrorCode XYT_free(xyt_ADT); 3777758a8cdSBarry Smith 378*21789920SBarry Smith /* 3797758a8cdSBarry Smith Function: XYT_factor 3807758a8cdSBarry Smith 3817758a8cdSBarry Smith Input : ADT ptr, and pointer to object 3827758a8cdSBarry Smith Output: 3837758a8cdSBarry Smith Return: 0 on failure, 1 on success 3847758a8cdSBarry Smith Description: This function sets the xyt solver 3857758a8cdSBarry Smith 3867758a8cdSBarry Smith xyt assumptions: given n rows of global coarse matrix (E_loc) where 3877758a8cdSBarry Smith o global dofs N = sum_p(n), p=0,P-1 3887758a8cdSBarry Smith (i.e. row dist. with no dof replication) 3897758a8cdSBarry Smith (5.21.00 will handle dif replication case) 3907758a8cdSBarry Smith o m is the number of columns in E_loc (m>=n) 3917758a8cdSBarry Smith o local2global holds global number of column i (i=0,...,m-1) 3927758a8cdSBarry Smith o local2global holds global number of row i (i=0,...,n-1) 3937758a8cdSBarry Smith o mylocmatvec performs E_loc . x_loc where x_loc is an vector of 3947758a8cdSBarry Smith length m in 1-1 correspondence with local2global 3957758a8cdSBarry Smith (note that gs package takes care of communication). 3967758a8cdSBarry Smith (note do not zero out upper m-n entries!) 3977758a8cdSBarry Smith o mylocmatvec(void *grid_data, double *in, double *out) 3987758a8cdSBarry Smith 39915229ffcSPierre Jolivet ML beliefs/usage: move this to ML_XYT_factor routine 4007758a8cdSBarry Smith o my_ml holds address of ML struct associated w/E_loc, grid_data, grid_tag 4017758a8cdSBarry Smith o grid_tag, grid_data, my_ml used in 4027758a8cdSBarry Smith ML_Set_CSolve(my_ml, grid_tag, grid_data, ML_Do_CoarseDirect); 4037758a8cdSBarry Smith o grid_data used in 4047758a8cdSBarry Smith A_matvec(grid_data,v,u); 4057758a8cdSBarry Smith 4067758a8cdSBarry Smith Usage: 407*21789920SBarry Smith */ 40838dcbb09SBarry Smith PETSC_INTERN PetscErrorCode XYT_factor(xyt_ADT, /* prev. allocated xyt handle */ 4096b967228SBarry Smith PetscInt *, /* global column mapping */ 4106b967228SBarry Smith PetscInt, /* local num rows */ 4116b967228SBarry Smith PetscInt, /* local num cols */ 4126b967228SBarry Smith PetscErrorCode (*)(void *, PetscScalar *, PetscScalar *), /* b_loc=A_local.x_loc */ 4136b967228SBarry Smith void *); /* grid data for matvec */ 4147758a8cdSBarry Smith 415*21789920SBarry Smith /* 4167758a8cdSBarry Smith Function: XYT_solve 4177758a8cdSBarry Smith 4187758a8cdSBarry Smith Input : ADT ptr, b (rhs) 4197758a8cdSBarry Smith Output: x (soln) 4207758a8cdSBarry Smith Return: 4217758a8cdSBarry Smith Description: This function performs x = E^-1.b 4227758a8cdSBarry Smith Usage: XYT_solve(xyt_handle, double *x, double *b) 423*21789920SBarry Smith */ 42438dcbb09SBarry Smith PETSC_INTERN PetscErrorCode XYT_solve(xyt_ADT, PetscScalar *, PetscScalar *); 4257758a8cdSBarry Smith 426*21789920SBarry Smith /* 4277758a8cdSBarry Smith Function: XYT_stats 4287758a8cdSBarry Smith 4297758a8cdSBarry Smith Input : handle 430*21789920SBarry Smith */ 43138dcbb09SBarry Smith PETSC_INTERN PetscErrorCode XYT_stats(xyt_ADT); 4327758a8cdSBarry Smith 433*21789920SBarry Smith /* 4347758a8cdSBarry Smith 4357758a8cdSBarry Smith Author: Henry M. Tufo III 4367758a8cdSBarry Smith 4377758a8cdSBarry Smith e-mail: hmt@cs.brown.edu 4387758a8cdSBarry Smith 4397758a8cdSBarry Smith snail-mail: 4407758a8cdSBarry Smith Division of Applied Mathematics 4417758a8cdSBarry Smith Brown University 4427758a8cdSBarry Smith Providence, RI 02912 4437758a8cdSBarry Smith 4447758a8cdSBarry Smith Last Modification: 4457758a8cdSBarry Smith 11.21.97 446*21789920SBarry Smith */ 4476b967228SBarry Smith PETSC_INTERN PetscInt PCTFS_div_ceil(PetscInt, PetscInt); 4486b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_set_bit_mask(PetscInt *, PetscInt, PetscInt); 4496b967228SBarry Smith PETSC_INTERN PetscInt PCTFS_len_bit_mask(PetscInt); 4506b967228SBarry Smith PETSC_INTERN PetscInt PCTFS_ct_bits(char *, PetscInt); 4516b967228SBarry Smith PETSC_INTERN PetscErrorCode PCTFS_bm_to_proc(char *, PetscInt, PetscInt *); 4526b967228SBarry Smith PETSC_INTERN PetscInt PCTFS_len_buf(PetscInt, PetscInt); 453