| 2080 | |
| 2081 | template<typename typ> |
| 2082 | static inline int |
| 2083 | init_geev(GEEV_PARAMS_t<typ> *params, char jobvl, char jobvr, fortran_int n, |
| 2084 | scalar_trait) |
| 2085 | { |
| 2086 | npy_uint8 *mem_buff = NULL; |
| 2087 | npy_uint8 *mem_buff2 = NULL; |
| 2088 | npy_uint8 *a, *wr, *wi, *vlr, *vrr, *work, *w, *vl, *vr; |
| 2089 | size_t safe_n = n; |
| 2090 | size_t a_size = safe_n * safe_n * sizeof(typ); |
| 2091 | size_t wr_size = safe_n * sizeof(typ); |
| 2092 | size_t wi_size = safe_n * sizeof(typ); |
| 2093 | size_t vlr_size = jobvl=='V' ? safe_n * safe_n * sizeof(typ) : 0; |
| 2094 | size_t vrr_size = jobvr=='V' ? safe_n * safe_n * sizeof(typ) : 0; |
| 2095 | size_t w_size = wr_size*2; |
| 2096 | size_t vl_size = vlr_size*2; |
| 2097 | size_t vr_size = vrr_size*2; |
| 2098 | size_t work_count = 0; |
| 2099 | fortran_int ld = fortran_int_max(n, 1); |
| 2100 | |
| 2101 | /* allocate data for known sizes (all but work) */ |
| 2102 | mem_buff = (npy_uint8 *)malloc(a_size + wr_size + wi_size + |
| 2103 | vlr_size + vrr_size + |
| 2104 | w_size + vl_size + vr_size); |
| 2105 | if (!mem_buff) { |
| 2106 | goto error; |
| 2107 | } |
| 2108 | |
| 2109 | a = mem_buff; |
| 2110 | wr = a + a_size; |
| 2111 | wi = wr + wr_size; |
| 2112 | vlr = wi + wi_size; |
| 2113 | vrr = vlr + vlr_size; |
| 2114 | w = vrr + vrr_size; |
| 2115 | vl = w + w_size; |
| 2116 | vr = vl + vl_size; |
| 2117 | |
| 2118 | params->A = (typ*)a; |
| 2119 | params->WR = (typ*)wr; |
| 2120 | params->WI = (typ*)wi; |
| 2121 | params->VLR = (typ*)vlr; |
| 2122 | params->VRR = (typ*)vrr; |
| 2123 | params->W = (typ*)w; |
| 2124 | params->VL = (typ*)vl; |
| 2125 | params->VR = (typ*)vr; |
| 2126 | params->N = n; |
| 2127 | params->LDA = ld; |
| 2128 | params->LDVL = ld; |
| 2129 | params->LDVR = ld; |
| 2130 | params->JOBVL = jobvl; |
| 2131 | params->JOBVR = jobvr; |
| 2132 | |
| 2133 | /* Work size query */ |
| 2134 | { |
| 2135 | typ work_size_query; |
| 2136 | |
| 2137 | params->LWORK = -1; |
| 2138 | params->WORK = &work_size_query; |
| 2139 |
no test coverage detected