precision_macros.h 23.8 KB
Newer Older
1
2
3
4
#ifdef REALCASE
#undef  MATH_DATATYPE
#define  MATH_DATATYPE real
#undef  PRECISION
5
6
7
8
9
10
11
12
#undef  elpa_transpose_vectors_real_PRECISION
#undef  elpa_reduce_add_vectors_real_PRECISION
#undef  bandred_real_PRECISION
#undef  trans_ev_band_to_full_real_PRECISION
#undef  tridiag_band_real_PRECISION
#undef  trans_ev_tridi_to_band_real_PRECISION
#undef  band_band_real_PRECISION
#undef  tridiag_real_PRECISION
13
#undef  trans_ev_real_PRECISION
14
15
16
17
18
19
#undef  solve_tridi_PRECISION
#undef  solve_tridi_col_PRECISION
#undef  solve_tridi_single_problem_PRECISION
#undef  qr_pdgeqrf_2dcomm_PRECISION
#undef  hh_transform_real_PRECISION
#undef  symm_matrix_allreduce_PRECISION
20
#undef  herm_matrix_allreduce_PRECISION
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#undef  redist_band_real_PRECISION
#undef  unpack_row_real_cpu_PRECISION
#undef  unpack_row_real_cpu_openmp_PRECISION
#undef  unpack_and_prepare_row_group_real_gpu_PRECISION
#undef  extract_hh_tau_real_gpu_PRECISION
#undef  compute_hh_dot_products_real_gpu_PRECISION
#undef  compute_hh_trafo_real_cpu_openmp_PRECISION
#undef  compute_hh_trafo_real_cpu_PRECISION
#undef  pack_row_group_real_gpu_PRECISION
#undef  pack_row_real_cpu_openmp_PRECISION
#undef  pack_row_real_cpu_PRECISION
#undef  wy_gen_PRECISION
#undef  wy_right_PRECISION
#undef  wy_left_PRECISION
#undef  wy_symm_PRECISION
#undef  merge_recursive_PRECISION
#undef  merge_systems_PRECISION
#undef  distribute_global_column_PRECISION
#undef  check_monotony_PRECISION
#undef  global_gather_PRECISION
#undef  resort_ev_PRECISION
#undef  transform_columns_PRECISION
#undef  solve_secular_equation_PRECISION
#undef  global_product_PRECISION
#undef  add_tmp_PRECISION
#undef  v_add_s_PRECISION
47
48
49
50
51
52
#undef  launch_compute_hh_trafo_c_kernel_real_PRECISION
#undef  compute_hh_trafo_real_gpu_PRECISION
#undef  launch_my_pack_c_kernel_real_PRECISION
#undef  launch_my_unpack_c_kernel_real_PRECISION
#undef  launch_compute_hh_dotp_c_kernel_real_PRECISION
#undef  launch_extract_hh_tau_c_kernel_real_PRECISION
53
54
55
56
57
58
59
60
#undef  PRECISION_GEMV
#undef  PRECISION_TRMV
#undef  PRECISION_GEMM
#undef  PRECISION_TRMM
#undef  PRECISION_HERK
#undef  PRECISION_SYRK
#undef  PRECISION_SYMV
#undef  PRECISION_SYMM
61
62
#undef  PRECISION_HEMV
#undef  PRECISION_HER2
63
64
65
66
67
68
69
70
71
72
#undef  PRECISION_SYR2
#undef  PRECISION_SYR2K
#undef  PRECISION_GEQRF
#undef  PRECISION_STEDC
#undef  PRECISION_STEQR
#undef  PRECISION_LAMRG
#undef  PRECISION_LAMCH
#undef  PRECISION_LAPY2
#undef  PRECISION_LAED4
#undef  PRECISION_LAED5
73
74
75
#undef  cublas_PRECISION_GEMM
#undef  cublas_PRECISION_TRMM
#undef  cublas_PRECISION_GEMV
76
77
78
79
80
81
82
83
#undef  PRECISION_SUFFIX
#undef  CONST_0_0
#undef  CONST_0_5
#undef  CONST_1_0
#undef  CONST_2_0
#undef  CONST_8_0
#undef  size_of_PRECISION_real
#undef  MPI_REAL_PRECISION
84
85
#ifdef DOUBLE_PRECISION
#define  PRECISION double
86
87
88
89
90
91
92
93
#define  elpa_transpose_vectors_real_PRECISION elpa_transpose_vectors_real_double
#define  elpa_reduce_add_vectors_real_PRECISION elpa_reduce_add_vectors_real_double
#define  bandred_real_PRECISION bandred_real_double
#define  trans_ev_band_to_full_real_PRECISION trans_ev_band_to_full_real_double
#define  tridiag_band_real_PRECISION tridiag_band_real_double
#define  trans_ev_tridi_to_band_real_PRECISION trans_ev_tridi_to_band_real_double
#define  band_band_real_PRECISION band_band_real_double
#define  tridiag_real_PRECISION tridiag_real_double
94
#define  trans_ev_real_PRECISION trans_ev_real_double
95
96
97
98
99
100
#define  solve_tridi_PRECISION solve_tridi_double
#define  solve_tridi_col_PRECISION solve_tridi_col_double
#define  solve_tridi_single_problem_PRECISION solve_tridi_single_problem_double
#define  qr_pdgeqrf_2dcomm_PRECISION qr_pdgeqrf_2dcomm_double
#define  hh_transform_real_PRECISION hh_transform_real_double
#define  symm_matrix_allreduce_PRECISION symm_matrix_allreduce_double
101
#define  herm_matrix_allreduce_PRECISION herm_matrix_allreduce_double
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#define  redist_band_real_PRECISION redist_band_real_double
#define  unpack_row_real_cpu_PRECISION unpack_row_real_cpu_double
#define  unpack_row_real_cpu_openmp_PRECISION unpack_row_real_cpu_openmp_double
#define  unpack_and_prepare_row_group_real_gpu_PRECISION unpack_and_prepare_row_group_real_gpu_double
#define  extract_hh_tau_real_gpu_PRECISION extract_hh_tau_real_gpu_double
#define  compute_hh_dot_products_real_gpu_PRECISION compute_hh_dot_products_real_gpu_double
#define  compute_hh_trafo_real_cpu_openmp_PRECISION compute_hh_trafo_real_cpu_openmp_double
#define  compute_hh_trafo_real_cpu_PRECISION compute_hh_trafo_real_cpu_double
#define  pack_row_group_real_gpu_PRECISION pack_row_group_real_gpu_double
#define  pack_row_real_cpu_openmp_PRECISION pack_row_real_cpu_openmp_double
#define  pack_row_real_cpu_PRECISION pack_row_real_cpu_double
#define  wy_gen_PRECISION wy_gen_double
#define  wy_right_PRECISION wy_right_double
#define  wy_left_PRECISION wy_left_double
#define  wy_symm_PRECISION wy_symm_double
#define  merge_recursive_PRECISION merge_recursive_double
#define  merge_systems_PRECISION merge_systems_double
#define  distribute_global_column_PRECISION distribute_global_column_double
#define  check_monotony_PRECISION check_monotony_double
#define  global_gather_PRECISION global_gather_double
#define  resort_ev_PRECISION resort_ev_double
#define  transform_columns_PRECISION transform_columns_double
#define  solve_secular_equation_PRECISION solve_secular_equation_double
#define  global_product_PRECISION global_product_double
#define  add_tmp_PRECISION add_tmp_double
#define  v_add_s_PRECISION v_add_s_double
128
129
130
131
132
133
#define  launch_compute_hh_trafo_c_kernel_real_PRECISION launch_compute_hh_trafo_c_kernel_real_double
#define  compute_hh_trafo_real_gpu_PRECISION compute_hh_trafo_real_gpu_double
#define  launch_my_pack_c_kernel_real_PRECISION launch_my_pack_c_kernel_real_double
#define  launch_my_unpack_c_kernel_real_PRECISION launch_my_unpack_c_kernel_real_double
#define  launch_compute_hh_dotp_c_kernel_real_PRECISION launch_compute_hh_dotp_c_kernel_real_double
#define  launch_extract_hh_tau_c_kernel_real_PRECISION launch_extract_hh_tau_c_kernel_real_double
134
135
136
137
138
139
140
141
#define  PRECISION_GEMV DGEMV
#define  PRECISION_TRMV DTRMV
#define  PRECISION_GEMM DGEMM
#define  PRECISION_TRMM DTRMM
#define  PRECISION_HERK DHERK
#define  PRECISION_SYRK DSYRK
#define  PRECISION_SYMV DSYMV
#define  PRECISION_SYMM DSYMM
142
143
#define  PRECISION_HEMV DHEMV
#define  PRECISION_HER2 DHER2
144
145
146
147
148
149
150
151
152
153
#define  PRECISION_SYR2 DSYR2
#define  PRECISION_SYR2K DSYR2K
#define  PRECISION_GEQRF DGEQRF
#define  PRECISION_STEDC DSTEDC
#define  PRECISION_STEQR DSTEQR
#define  PRECISION_LAMRG DLAMRG
#define  PRECISION_LAMCH DLAMCH
#define  PRECISION_LAPY2 DLAPY2
#define  PRECISION_LAED4 DLAED4
#define  PRECISION_LAED5 DLAED5
154
155
156
#define  cublas_PRECISION_GEMM cublas_DGEMM
#define  cublas_PRECISION_TRMM cublas_DTRMM
#define  cublas_PRECISION_GEMV cublas_DGEMV
157
158
159
160
161
162
163
164
#define  PRECISION_SUFFIX "_double"
#define  CONST_0_0 0.0_rk8
#define  CONST_0_5 0.5_rk8
#define  CONST_1_0 1.0_rk8
#define  CONST_2_0 2.0_rk8
#define  CONST_8_0 8.0_rk8
#define  size_of_PRECISION_real size_of_double_real_datatype
#define  MPI_REAL_PRECISION MPI_REAL8
165
166
167
#endif
#ifdef SINGLE_PRECISION
#define  PRECISION single
168
169
170
171
172
173
174
175
#define  elpa_transpose_vectors_real_PRECISION elpa_transpose_vectors_real_single
#define  elpa_reduce_add_vectors_real_PRECISION elpa_reduce_add_vectors_real_single
#define  bandred_real_PRECISION bandred_real_single
#define  trans_ev_band_to_full_real_PRECISION trans_ev_band_to_full_real_single
#define  tridiag_band_real_PRECISION tridiag_band_real_single
#define  trans_ev_tridi_to_band_real_PRECISION trans_ev_tridi_to_band_real_single
#define  band_band_real_PRECISION band_band_real_single
#define  tridiag_real_PRECISION tridiag_real_single
176
#define  trans_ev_real_PRECISION trans_ev_real_single
177
178
179
180
181
182
#define  solve_tridi_PRECISION solve_tridi_single
#define  solve_tridi_col_PRECISION solve_tridi_col_single
#define  solve_tridi_single_problem_PRECISION solve_tridi_single_problem_single
#define  qr_pdgeqrf_2dcomm_PRECISION qr_pdgeqrf_2dcomm_single
#define  hh_transform_real_PRECISION hh_transform_real_single
#define  symm_matrix_allreduce_PRECISION symm_matrix_allreduce_single
183
#define  herm_matrix_allreduce_PRECISION herm_matrix_allreduce_single
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
#define  redist_band_real_PRECISION redist_band_real_single
#define  unpack_row_real_cpu_PRECISION unpack_row_real_cpu_single
#define  unpack_row_real_cpu_openmp_PRECISION unpack_row_real_cpu_openmp_single
#define  unpack_and_prepare_row_group_real_gpu_PRECISION unpack_and_prepare_row_group_real_gpu_single
#define  extract_hh_tau_real_gpu_PRECISION extract_hh_tau_real_gpu_single
#define  compute_hh_dot_products_real_gpu_PRECISION compute_hh_dot_products_real_gpu_single
#define  compute_hh_trafo_real_cpu_openmp_PRECISION compute_hh_trafo_real_cpu_openmp_single
#define  compute_hh_trafo_real_cpu_PRECISION compute_hh_trafo_real_cpu_single
#define  pack_row_group_real_gpu_PRECISION pack_row_group_real_gpu_single
#define  pack_row_real_cpu_openmp_PRECISION pack_row_real_cpu_openmp_single
#define  pack_row_real_cpu_PRECISION pack_row_real_cpu_single
#define  wy_gen_PRECISION wy_gen_single
#define  wy_right_PRECISION wy_right_single
#define  wy_left_PRECISION wy_left_single
#define  wy_symm_PRECISION wy_symm_single
#define  merge_recursive_PRECISION merge_recursive_single
#define  merge_systems_PRECISION merge_systems_single
#define  distribute_global_column_PRECISION distribute_global_column_single
#define  check_monotony_PRECISION check_monotony_single
#define  global_gather_PRECISION global_gather_single
#define  resort_ev_PRECISION resort_ev_single
#define  transform_columns_PRECISION transform_columns_single
#define  solve_secular_equation_PRECISION solve_secular_equation_single
#define  global_product_PRECISION global_product_single
#define  add_tmp_PRECISION add_tmp_single
#define  v_add_s_PRECISION v_add_s_single
210
211
212
213
214
215
#define  launch_compute_hh_trafo_c_kernel_real_PRECISION launch_compute_hh_trafo_c_kernel_real_single
#define  compute_hh_trafo_real_gpu_PRECISION compute_hh_trafo_real_gpu_single
#define  launch_my_pack_c_kernel_real_PRECISION launch_my_pack_c_kernel_real_single
#define  launch_my_unpack_c_kernel_real_PRECISION launch_my_unpack_c_kernel_real_single
#define  launch_compute_hh_dotp_c_kernel_real_PRECISION launch_compute_hh_dotp_c_kernel_real_single
#define  launch_extract_hh_tau_c_kernel_real_PRECISION launch_extract_hh_tau_c_kernel_real_single
216
217
218
219
220
221
222
223
#define  PRECISION_GEMV SGEMV
#define  PRECISION_TRMV STRMV
#define  PRECISION_GEMM SGEMM
#define  PRECISION_TRMM STRMM
#define  PRECISION_HERK SHERK
#define  PRECISION_SYRK SSYRK
#define  PRECISION_SYMV SSYMV
#define  PRECISION_SYMM SSYMM
224
225
#define  PRECISION_HEMV SHEMV
#define  PRECISION_HER2 SHER2
226
227
228
229
230
231
232
233
234
235
#define  PRECISION_SYR2 SSYR2
#define  PRECISION_SYR2K SSYR2K
#define  PRECISION_GEQRF SGEQRF
#define  PRECISION_STEDC SSTEDC
#define  PRECISION_STEQR SSTEQR
#define  PRECISION_LAMRG SLAMRG
#define  PRECISION_LAMCH SLAMCH
#define  PRECISION_LAPY2 SLAPY2
#define  PRECISION_LAED4 SLAED4
#define  PRECISION_LAED5 SLAED5
236
237
238
#define  cublas_PRECISION_GEMM cublas_SGEMM
#define  cublas_PRECISION_TRMM cublas_STRMM
#define  cublas_PRECISION_GEMV cublas_SGEMV
239
240
241
242
243
244
245
246
#define  PRECISION_SUFFIX "_single"
#define  CONST_0_0 0.0_rk4
#define  CONST_0_5 0.5_rk4
#define  CONST_1_0 1.0_rk4
#define  CONST_2_0 2.0_rk4
#define  CONST_8_0 8.0_rk4
#define  size_of_PRECISION_real size_of_single_real_datatype
#define  MPI_REAL_PRECISION MPI_REAL4
247
#endif
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
#endif
#ifdef COMPLEXCASE
#undef  MATH_DATATYPE
#define  MATH_DATATYPE complex
#undef  PRECISION
#undef  elpa_transpose_vectors_complex_PRECISION
#undef  elpa_reduce_add_vectors_complex_PRECISION
#undef  bandred_complex_PRECISION
#undef  trans_ev_band_to_full_complex_PRECISION
#undef  tridiag_band_complex_PRECISION
#undef  trans_ev_tridi_to_band_complex_PRECISION
#undef  band_band_complex_PRECISION
#undef  tridiag_complex_PRECISION
#undef  trans_ev_complex_PRECISION
#undef  solve_tridi_PRECISION
#undef  solve_tridi_col_PRECISION
#undef  solve_tridi_single_problem_PRECISION
#undef  qr_pdgeqrf_2dcomm_PRECISION
#undef  hh_transform_complex_PRECISION
#undef  symm_matrix_allreduce_PRECISION
#undef  herm_matrix_allreduce_PRECISION
#undef  redist_band_complex_PRECISION
#undef  unpack_row_complex_cpu_PRECISION
#undef  unpack_row_complex_cpu_openmp_PRECISION
#undef  unpack_and_prepare_row_group_complex_gpu_PRECISION
#undef  extract_hh_tau_complex_gpu_PRECISION
#undef  compute_hh_dot_products_complex_gpu_PRECISION
#undef  compute_hh_trafo_complex_cpu_openmp_PRECISION
#undef  compute_hh_trafo_complex_cpu_PRECISION
#undef  pack_row_group_complex_gpu_PRECISION
#undef  pack_row_complex_cpu_openmp_PRECISION
#undef  pack_row_complex_cpu_PRECISION
#undef  wy_gen_PRECISION
#undef  wy_right_PRECISION
#undef  wy_left_PRECISION
#undef  wy_symm_PRECISION
#undef  merge_recursive_PRECISION
#undef  merge_systems_PRECISION
#undef  distribute_global_column_PRECISION
#undef  check_monotony_PRECISION
#undef  global_gather_PRECISION
#undef  resort_ev_PRECISION
#undef  transform_columns_PRECISION
#undef  solve_secular_equation_PRECISION
#undef  global_product_PRECISION
#undef  add_tmp_PRECISION
#undef  v_add_s_PRECISION
#undef  launch_compute_hh_trafo_c_kernel_complex_PRECISION
#undef  compute_hh_trafo_complex_gpu_PRECISION
#undef  launch_my_pack_c_kernel_complex_PRECISION
#undef  launch_my_unpack_c_kernel_complex_PRECISION
#undef  launch_compute_hh_dotp_c_kernel_complex_PRECISION
#undef  launch_extract_hh_tau_c_kernel_complex_PRECISION
#undef  PRECISION_GEMV
#undef  PRECISION_TRMV
#undef  PRECISION_GEMM
#undef  PRECISION_TRMM
#undef  PRECISION_HERK
#undef  PRECISION_SYRK
#undef  PRECISION_SYMV
#undef  PRECISION_SYMM
#undef  PRECISION_HEMV
#undef  PRECISION_HER2
#undef  PRECISION_SYR2
#undef  PRECISION_SYR2K
#undef  PRECISION_GEQRF
#undef  PRECISION_STEDC
#undef  PRECISION_STEQR
#undef  PRECISION_LAMRG
#undef  PRECISION_LAMCH
#undef  PRECISION_LAPY2
#undef  PRECISION_LAED4
#undef  PRECISION_LAED5
#undef  cublas_PRECISION_GEMM
#undef  cublas_PRECISION_TRMM
#undef  cublas_PRECISION_GEMV
#undef  PRECISION_SUFFIX
#undef  MPI_COMPLEX_PRECISION
#undef  MPI_COMPLEX_EXPLICIT_PRECISION
#undef  MPI_REAL_PRECISION
#undef  KIND_PRECISION
#undef  PRECISION_CMPLX
#undef  PRECISION_IMAG
#undef  PRECISION_REAL
#undef  CONST_REAL_0_0
#undef  CONST_REAL_1_0
#undef  CONST_REAL_0_5
#undef  CONST_COMPLEX_PAIR_0_0
#undef  CONST_COMPLEX_PAIR_1_0
#undef  CONST_COMPLEX_PAIR_NEGATIVE_1_0
#undef  CONST_COMPLEX_PAIR_NEGATIVE_0_5
#undef  CONST_COMPLEX_0_0
#undef  CONST_COMPLEX_1_0
#undef  size_of_PRECISION_complex
#ifdef DOUBLE_PRECISION
#define  PRECISION double
#define  elpa_transpose_vectors_complex_PRECISION elpa_transpose_vectors_complex_double
#define  elpa_reduce_add_vectors_complex_PRECISION elpa_reduce_add_vectors_complex_double
#define  bandred_complex_PRECISION bandred_complex_double
#define  trans_ev_band_to_full_complex_PRECISION trans_ev_band_to_full_complex_double
#define  tridiag_band_complex_PRECISION tridiag_band_complex_double
#define  trans_ev_tridi_to_band_complex_PRECISION trans_ev_tridi_to_band_complex_double
#define  band_band_complex_PRECISION band_band_complex_double
#define  tridiag_complex_PRECISION tridiag_complex_double
#define  trans_ev_complex_PRECISION trans_ev_complex_double
#define  solve_tridi_PRECISION solve_tridi_double
#define  solve_tridi_col_PRECISION solve_tridi_col_double
#define  solve_tridi_single_problem_PRECISION solve_tridi_single_problem_double
#define  qr_pdgeqrf_2dcomm_PRECISION qr_pdgeqrf_2dcomm_double
#define  hh_transform_complex_PRECISION hh_transform_complex_double
#define  symm_matrix_allreduce_PRECISION symm_matrix_allreduce_double
#define  herm_matrix_allreduce_PRECISION herm_matrix_allreduce_double
#define  redist_band_complex_PRECISION redist_band_complex_double
#define  unpack_row_complex_cpu_PRECISION unpack_row_complex_cpu_double
#define  unpack_row_complex_cpu_openmp_PRECISION unpack_row_complex_cpu_openmp_double
#define  unpack_and_prepare_row_group_complex_gpu_PRECISION unpack_and_prepare_row_group_complex_gpu_double
#define  extract_hh_tau_complex_gpu_PRECISION extract_hh_tau_complex_gpu_double
#define  compute_hh_dot_products_complex_gpu_PRECISION compute_hh_dot_products_complex_gpu_double
#define  compute_hh_trafo_complex_cpu_openmp_PRECISION compute_hh_trafo_complex_cpu_openmp_double
#define  compute_hh_trafo_complex_cpu_PRECISION compute_hh_trafo_complex_cpu_double
#define  pack_row_group_complex_gpu_PRECISION pack_row_group_complex_gpu_double
#define  pack_row_complex_cpu_openmp_PRECISION pack_row_complex_cpu_openmp_double
#define  pack_row_complex_cpu_PRECISION pack_row_complex_cpu_double
#define  wy_gen_PRECISION wy_gen_double
#define  wy_right_PRECISION wy_right_double
#define  wy_left_PRECISION wy_left_double
#define  wy_symm_PRECISION wy_symm_double
#define  merge_recursive_PRECISION merge_recursive_double
#define  merge_systems_PRECISION merge_systems_double
#define  distribute_global_column_PRECISION distribute_global_column_double
#define  check_monotony_PRECISION check_monotony_double
#define  global_gather_PRECISION global_gather_double
#define  resort_ev_PRECISION resort_ev_double
#define  transform_columns_PRECISION transform_columns_double
#define  solve_secular_equation_PRECISION solve_secular_equation_double
#define  global_product_PRECISION global_product_double
#define  add_tmp_PRECISION add_tmp_double
#define  v_add_s_PRECISION v_add_s_double
#define  launch_compute_hh_trafo_c_kernel_complex_PRECISION launch_compute_hh_trafo_c_kernel_complex_double
#define  compute_hh_trafo_complex_gpu_PRECISION compute_hh_trafo_complex_gpu_double
#define  launch_my_pack_c_kernel_complex_PRECISION launch_my_pack_c_kernel_complex_double
#define  launch_my_unpack_c_kernel_complex_PRECISION launch_my_unpack_c_kernel_complex_double
#define  launch_compute_hh_dotp_c_kernel_complex_PRECISION launch_compute_hh_dotp_c_kernel_complex_double
#define  launch_extract_hh_tau_c_kernel_complex_PRECISION launch_extract_hh_tau_c_kernel_complex_double
#define  PRECISION_GEMV ZGEMV
#define  PRECISION_TRMV ZTRMV
#define  PRECISION_GEMM ZGEMM
#define  PRECISION_TRMM ZTRMM
#define  PRECISION_HERK ZHERK
#define  PRECISION_SYRK ZSYRK
#define  PRECISION_SYMV ZSYMV
#define  PRECISION_SYMM ZSYMM
#define  PRECISION_HEMV ZHEMV
#define  PRECISION_HER2 ZHER2
#define  PRECISION_SYR2 ZSYR2
#define  PRECISION_SYR2K ZSYR2K
#define  PRECISION_GEQRF ZGEQRF
#define  PRECISION_STEDC ZSTEDC
#define  PRECISION_STEQR ZSTEQR
#define  PRECISION_LAMRG ZLAMRG
#define  PRECISION_LAMCH ZLAMCH
#define  PRECISION_LAPY2 ZLAPY2
#define  PRECISION_LAED4 ZLAED4
#define  PRECISION_LAED5 ZLAED5
#define  cublas_PRECISION_GEMM cublas_ZGEMM
#define  cublas_PRECISION_TRMM cublas_ZTRMM
#define  cublas_PRECISION_GEMV cublas_ZGEMV
#define  PRECISION_SUFFIX "_double"
#define  MPI_COMPLEX_PRECISION MPI_DOUBLE_COMPLEX
#define  MPI_COMPLEX_EXPLICIT_PRECISION MPI_COMPLEX16
#define  MPI_REAL_PRECISION MPI_REAL8
#define  KIND_PRECISION rk8
#define  PRECISION_CMPLX DCMPLX
#define  PRECISION_IMAG DIMAG
#define  PRECISION_REAL DREAL
#define  CONST_REAL_0_0 0.0_rk8
#define  CONST_REAL_1_0 1.0_rk8
#define  CONST_REAL_0_5 0.5_rk8
#define  CONST_COMPLEX_PAIR_0_0 (0.0_rk8,0.0_rk8)
#define  CONST_COMPLEX_PAIR_1_0 (1.0_rk8,0.0_rk8)
#define  CONST_COMPLEX_PAIR_NEGATIVE_1_0 (-1.0_rk8,0.0_rk8)
#define  CONST_COMPLEX_PAIR_NEGATIVE_0_5 (-0.5_rk8,0.0_rk8)
#define  CONST_COMPLEX_0_0 0.0_ck8
#define  CONST_COMPLEX_1_0 1.0_ck8
#define  size_of_PRECISION_complex size_of_double_complex_datatype
#endif
#ifdef SINGLE_PRECISION
#define  PRECISION single
#define  elpa_transpose_vectors_complex_PRECISION elpa_transpose_vectors_complex_single
#define  elpa_reduce_add_vectors_complex_PRECISION elpa_reduce_add_vectors_complex_single
#define  bandred_complex_PRECISION bandred_complex_single
#define  trans_ev_band_to_full_complex_PRECISION trans_ev_band_to_full_complex_single
#define  tridiag_band_complex_PRECISION tridiag_band_complex_single
#define  trans_ev_tridi_to_band_complex_PRECISION trans_ev_tridi_to_band_complex_single
#define  band_band_complex_PRECISION band_band_complex_single
#define  tridiag_complex_PRECISION tridiag_complex_single
#define  trans_ev_complex_PRECISION trans_ev_complex_single
#define  solve_tridi_PRECISION solve_tridi_single
#define  solve_tridi_col_PRECISION solve_tridi_col_single
#define  solve_tridi_single_problem_PRECISION solve_tridi_single_problem_single
#define  qr_pdgeqrf_2dcomm_PRECISION qr_pdgeqrf_2dcomm_single
#define  hh_transform_complex_PRECISION hh_transform_complex_single
#define  symm_matrix_allreduce_PRECISION symm_matrix_allreduce_single
#define  herm_matrix_allreduce_PRECISION herm_matrix_allreduce_single
#define  redist_band_complex_PRECISION redist_band_complex_single
#define  unpack_row_complex_cpu_PRECISION unpack_row_complex_cpu_single
#define  unpack_row_complex_cpu_openmp_PRECISION unpack_row_complex_cpu_openmp_single
#define  unpack_and_prepare_row_group_complex_gpu_PRECISION unpack_and_prepare_row_group_complex_gpu_single
#define  extract_hh_tau_complex_gpu_PRECISION extract_hh_tau_complex_gpu_single
#define  compute_hh_dot_products_complex_gpu_PRECISION compute_hh_dot_products_complex_gpu_single
#define  compute_hh_trafo_complex_cpu_openmp_PRECISION compute_hh_trafo_complex_cpu_openmp_single
#define  compute_hh_trafo_complex_cpu_PRECISION compute_hh_trafo_complex_cpu_single
#define  pack_row_group_complex_gpu_PRECISION pack_row_group_complex_gpu_single
#define  pack_row_complex_cpu_openmp_PRECISION pack_row_complex_cpu_openmp_single
#define  pack_row_complex_cpu_PRECISION pack_row_complex_cpu_single
#define  wy_gen_PRECISION wy_gen_single
#define  wy_right_PRECISION wy_right_single
#define  wy_left_PRECISION wy_left_single
#define  wy_symm_PRECISION wy_symm_single
#define  merge_recursive_PRECISION merge_recursive_single
#define  merge_systems_PRECISION merge_systems_single
#define  distribute_global_column_PRECISION distribute_global_column_single
#define  check_monotony_PRECISION check_monotony_single
#define  global_gather_PRECISION global_gather_single
#define  resort_ev_PRECISION resort_ev_single
#define  transform_columns_PRECISION transform_columns_single
#define  solve_secular_equation_PRECISION solve_secular_equation_single
#define  global_product_PRECISION global_product_single
#define  add_tmp_PRECISION add_tmp_single
#define  v_add_s_PRECISION v_add_s_single
#define  launch_compute_hh_trafo_c_kernel_complex_PRECISION launch_compute_hh_trafo_c_kernel_complex_single
#define  compute_hh_trafo_complex_gpu_PRECISION compute_hh_trafo_complex_gpu_single
#define  launch_my_pack_c_kernel_complex_PRECISION launch_my_pack_c_kernel_complex_single
#define  launch_my_unpack_c_kernel_complex_PRECISION launch_my_unpack_c_kernel_complex_single
#define  launch_compute_hh_dotp_c_kernel_complex_PRECISION launch_compute_hh_dotp_c_kernel_complex_single
#define  launch_extract_hh_tau_c_kernel_complex_PRECISION launch_extract_hh_tau_c_kernel_complex_single
#define  PRECISION_GEMV CGEMV
#define  PRECISION_TRMV CTRMV
#define  PRECISION_GEMM CGEMM
#define  PRECISION_TRMM CTRMM
#define  PRECISION_HERK CHERK
#define  PRECISION_SYRK CSYRK
#define  PRECISION_SYMV CSYMV
#define  PRECISION_SYMM CSYMM
#define  PRECISION_HEMV CHEMV
#define  PRECISION_HER2 CHER2
#define  PRECISION_SYR2 CSYR2
#define  PRECISION_SYR2K CSYR2K
#define  PRECISION_GEQRF CGEQRF
#define  PRECISION_STEDC CSTEDC
#define  PRECISION_STEQR CSTEQR
#define  PRECISION_LAMRG CLAMRG
#define  PRECISION_LAMCH CLAMCH
#define  PRECISION_LAPY2 CLAPY2
#define  PRECISION_LAED4 CLAED4
#define  PRECISION_LAED5 CLAED5
#define  cublas_PRECISION_GEMM cublas_CGEMM
#define  cublas_PRECISION_TRMM cublas_CTRMM
#define  cublas_PRECISION_GEMV cublas_CGEMV
#define  PRECISION_SUFFIX "_single"
#define  MPI_COMPLEX_PRECISION MPI_COMPLEX
#define  MPI_COMPLEX_EXPLICIT_PRECISION MPI_COMPLEX8
#define  MPI_REAL_PRECISION MPI_REAL4
#define  KIND_PRECISION rk4
#define  PRECISION_CMPLX CMPLX
#define  PRECISION_IMAG AIMAG
#define  PRECISION_REAL REAL
#define  CONST_REAL_0_0 0.0_rk4
#define  CONST_REAL_1_0 1.0_rk4
#define  CONST_REAL_0_5 0.5_rk4
#define  CONST_COMPLEX_PAIR_0_0 (0.0_rk4,0.0_rk4)
#define  CONST_COMPLEX_PAIR_1_0 (1.0_rk4,0.0_rk4)
#define  CONST_COMPLEX_PAIR_NEGATIVE_1_0 (-1.0_rk4,0.0_rk4)
#define  CONST_COMPLEX_PAIR_NEGATIVE_0_5 (-0.5_rk4,0.0_rk4)
#define  CONST_COMPLEX_0_0 0.0_ck4
#define  CONST_COMPLEX_1_0 1.0_ck4
#define  size_of_PRECISION_complex size_of_single_complex_datatype
#endif
#endif