@@ -81,6 +81,7 @@ void PEVSL_FORT(pevsl_setamv)(uintptr_t *pevslf90, void *func, void *data) {
81
81
pEVSL_SetAMatvec (pevsl , (MVFunc ) func , data );
82
82
}
83
83
84
+
84
85
/** @brief Fortran interface for pEVSL_SetBMatvec
85
86
* @param[in] pevslf90 pevsl pointer
86
87
* @param[in] func function pointer
@@ -103,6 +104,46 @@ void PEVSL_FORT(pevsl_setbsol)(uintptr_t *pevslf90, void *func, void *data) {
103
104
pEVSL_SetBSol (pevsl , (SVFunc ) func , data );
104
105
}
105
106
107
+
108
+ /**JS 01/20/19 for complex Hermitian Av
109
+ * @brief Fortran interface for pEVSL_SetAMatvec
110
+ * @param[in] pevslf90 pevsl pointer
111
+ * @param[in] func function pointer
112
+ * @param[in] data associated data
113
+ */
114
+ void PEVSL_FORT (pevsl_setzamv )(uintptr_t * pevslf90 , void * func , void * data ) {
115
+
116
+ /* cast pointer */
117
+ pevsl_Data * pevsl = (pevsl_Data * ) (* pevslf90 );
118
+
119
+ pEVSL_SetZAMatvec (pevsl , (ZMVFunc ) func , data );
120
+ }
121
+
122
+ /** @brief Fortran interface for pEVSL_SetBMatvec
123
+ * @param[in] pevslf90 pevsl pointer
124
+ * @param[in] func function pointer
125
+ * @param[in] data associated data
126
+ */
127
+ void PEVSL_FORT (pevsl_setzbmv )(uintptr_t * pevslf90 , void * func , void * data ) {
128
+
129
+ /* cast pointer */
130
+ pevsl_Data * pevsl = (pevsl_Data * ) (* pevslf90 );
131
+
132
+ pEVSL_SetZBMatvec (pevsl , (ZMVFunc ) func , data );
133
+ }
134
+
135
+ /** @brief Fortran interface for SetBsol */
136
+ void PEVSL_FORT (pevsl_setzbsol )(uintptr_t * pevslf90 , void * func , void * data ) {
137
+
138
+ /* cast pointer */
139
+ pevsl_Data * pevsl = (pevsl_Data * ) (* pevslf90 );
140
+
141
+ pEVSL_SetZBSol (pevsl , (ZSVFunc ) func , data );
142
+ }
143
+
144
+
145
+
146
+
106
147
/** @brief Fortran interface for SetStdEig */
107
148
void PEVSL_FORT (pevsl_set_stdeig )(uintptr_t * pevslf90 ) {
108
149
@@ -182,6 +223,8 @@ void PEVSL_FORT(pevsl_bsv)(uintptr_t *pevslf90, double *b, double *x) {
182
223
}
183
224
184
225
226
+
227
+
185
228
/** @brief Fortran interface for evsl_lanbounds
186
229
* @param[in] pevslf90 pEVSL pointer
187
230
* @param[in] mlan Krylov dimension
@@ -211,6 +254,41 @@ void PEVSL_FORT(pevsl_lanbounds)(uintptr_t *pevslf90, int *mlan, int *nsteps, do
211
254
pEVSL_ParvecFree (& vinit );
212
255
}
213
256
257
+
258
+ /** JS 01/20/19
259
+ * @brief Fortran interface for evsl_lanbounds
260
+ * @param[in] pevslf90 pEVSL pointer
261
+ * @param[in] mlan Krylov dimension
262
+ * @param[in] nsteps number of steps
263
+ * @param[in] tol stopping tol
264
+ * @param[out] lmin lower bound
265
+ * @param[out] lmax upper bound
266
+ * */
267
+ void PEVSL_FORT (pevsl_zlanbounds )(uintptr_t * pevslf90 , int * mlan , int * nsteps , double * tol ,
268
+ double * lmin , double * lmax ) {
269
+ int N , n , nfirst ;
270
+ pevsl_Parvec vrinit , viinit ;
271
+
272
+ /* cast pointer */
273
+ pevsl_Data * pevsl = (pevsl_Data * ) (* pevslf90 );
274
+
275
+ N = pevsl -> N ;
276
+ n = pevsl -> n ;
277
+ nfirst = pevsl -> nfirst ;
278
+
279
+ /*------------------- Create parallel vector: random initial guess */
280
+ pEVSL_ParvecCreate (N , n , nfirst , pevsl -> comm , & vrinit );
281
+ pEVSL_ParvecRand (& vrinit );
282
+ pEVSL_ParvecCreate (N , n , nfirst , pevsl -> comm , & viinit );
283
+ pEVSL_ParvecRand (& viinit );
284
+ /*------------------- Lanczos Bounds */
285
+ pEVSL_ZLanTrbounds (pevsl , * mlan , * nsteps , 1e-8 , & vrinit , & viinit , 1 , lmin , lmax , NULL );
286
+
287
+ pEVSL_ParvecFree (& vrinit );
288
+ pEVSL_ParvecFree (& viinit );
289
+ }
290
+
291
+
214
292
/** @brief Fortran interface for find_pol
215
293
* @param[in] xintv Interval of interest
216
294
* @param[in] thresh_int Interior threshold
0 commit comments