int IDADlsSetBandJacFnBS(void *ida_mem, int which, IDADlsBandJacFnBS jacBS) { IDAMem IDA_mem; IDAadjMem IDAADJ_mem; IDABMem IDAB_mem; IDADlsMemB idadlsB_mem; void *ida_memB; int flag; /* Is ida_mem allright? */ if (ida_mem == NULL) { IDAProcessError(NULL, IDADLS_MEM_NULL, "IDASDLS", "IDADlsSetBandJacFnBS", MSGD_CAMEM_NULL); return(IDADLS_MEM_NULL); } IDA_mem = (IDAMem) ida_mem; /* Is ASA initialized? */ if (IDA_mem->ida_adjMallocDone == FALSE) { IDAProcessError(IDA_mem, IDADLS_NO_ADJ, "IDASDLS", "IDADlsSetBandJacFnBS", MSGD_NO_ADJ); return(IDADLS_NO_ADJ); } IDAADJ_mem = IDA_mem->ida_adj_mem; /* Check the value of which */ if ( which >= IDAADJ_mem->ia_nbckpbs ) { IDAProcessError(IDA_mem, IDADLS_ILL_INPUT, "IDASDLS", "IDADlsSetBandJacFnBS", MSGD_BAD_WHICH); return(IDADLS_ILL_INPUT); } /* Find the IDABMem entry in the linked list corresponding to 'which'. */ IDAB_mem = IDAADJ_mem->IDAB_mem; while (IDAB_mem != NULL) { if( which == IDAB_mem->ida_index ) break; /* advance */ IDAB_mem = IDAB_mem->ida_next; } /* Get the IDAMem corresponding to this backward problem. */ ida_memB = (void*) IDAB_mem->IDA_mem; if (IDAB_mem->ida_lmem == NULL) { IDAProcessError(IDAB_mem->IDA_mem, IDADLS_LMEMB_NULL, "IDASDLS", "IDADlsSetBandJacFnBS", MSGD_LMEMB_NULL); return(IDADLS_LMEMB_NULL); } idadlsB_mem = (IDADlsMemB) IDAB_mem->ida_lmem; idadlsB_mem->d_bjacBS = jacBS; if (jacBS != NULL) { flag = IDADlsSetBandJacFn(ida_memB, idaDlsBandJacBSWrapper); } else { flag = IDADlsSetBandJacFn(ida_memB, NULL); } return(flag); }
void FIDA_BANDSETJAC(int *flag, int *ier) { *ier = 0; if (*flag == 0) { *ier = IDADlsSetBandJacFn(IDA_idamem, NULL); } else { if (F2C_IDA_ewtvec == NULL) { F2C_IDA_ewtvec = N_VClone(F2C_IDA_vec); if (F2C_IDA_ewtvec == NULL) { *ier = -1; return; } } *ier = IDADlsSetBandJacFn(IDA_idamem, FIDABandJac); } return; }