ROCK 1.9.1
Relativistic Oscillator Calculation Kit
Loading...
Searching...
No Matches
crock.h
Go to the documentation of this file.
1
6#ifndef ROCK_CROCK_H
7#define ROCK_CROCK_H
8
9#include "types.h"
10
11#ifdef __cplusplus
12extern "C" {
13#endif
14
15#include <stddef.h>
16#include <stdint.h>
17
18#if defined(_MSC_VER)
19#ifdef BUILD_CROCK_DLL
20#define CROCK_API __declspec(dllexport)
21#else
22#define CROCK_API __declspec(dllimport)
23#endif
24#elif defined(__GNUC__)
25#define CROCK_API __attribute__((__visibility__("default")))
26#endif
27
28#ifdef CROCK_SUPPRESS_API
29#undef CROCK_API
30#endif
31
32#ifndef CROCK_API
33#define CROCK_API
34#endif
35#ifdef __GNUC__
36#define ROCK_MALLOC __attribute__((__malloc__))
37#define ROCK_PURE __attribute__((__pure__))
38#define ROCK_CONST __attribute__((__const__))
39#define ROCK_NODISCARD __attribute__((__warn_unused_result__))
40#define ROCK_UNUSED __attribute__((__unused__))
41#else
42#define ROCK_MALLOC
43#define ROCK_PURE
44#define ROCK_CONST
45#define ROCK_NODISCARD
46#define ROCK_UNUSED
47#endif
48
50#define ROCK_MASK_BLT_VAR_UZ 0x00000001
52#define ROCK_MASK_BLT_TAYLOR 0x00000002
55#define ROCK_MASK_BLT_CALI_CYC_PHASE 0x00000004
59#define ROCK_MASK_BLT_CALI_GC_AZI 0x00000008
62#define ROCK_MASK_BLT_CALI_GC_R 0x00000010
65#define ROCK_MASK_BLT_DOPPLER 0x00000020
71#define ROCK_MASK_BLT_SRC_MONOHARM 0x40000000
74#define ROCK_MASK_BLT_MONOGC 0x80000000
77#define ROCK_MASK_BLT_DEBUG ROCK_MASK_BLT_MONOGC
78
80#define ROCK_MASK_BLT_ALL_FEATURES \
81 (ROCK_MASK_BLT_VAR_UZ | ROCK_MASK_BLT_TAYLOR \
82 | ROCK_MASK_BLT_CALI_CYC_PHASE | ROCK_MASK_BLT_CALI_GC_AZI \
83 | ROCK_MASK_BLT_CALI_GC_R | ROCK_MASK_BLT_DOPPLER)
84
93#define ROCK_FOREACH(X) for (size_t i##X = 0; i##X < (dim_##X); ++i##X)
94
96#define ROCK_FOREACH_1(X) for (size_t i##X = 1; i##X < (dim_##X); ++i##X)
97
99#define ROCK_IF_RETURN(IF_VAL, RET_VAL) \
100 do { \
101 if (IF_VAL) \
102 return RET_VAL; \
103 } while (0)
104
113 void *restrict buf,
114 size_t sizeof_type,
115 size_t dim_shape,
116 const size_t *restrict shape
117);
118
120#define CR_NUMA_BLESS(type, buf, ...) \
121 cr_numa_bless( \
122 (buf), (size_t)sizeof(type), \
123 (size_t)(sizeof((size_t[]){__VA_ARGS__}) / sizeof(size_t)), \
124 (size_t[]){__VA_ARGS__} \
125 )
126
167struct cr_cache {
168 void (*free)(struct cr_cache *self);
169};
170
175
180
185
190const char *cr_errmsg(int err);
191
198size_t cr_stride_real(size_t dim);
199
206size_t cr_stride_cplx(size_t dim);
207
213 size_t dim_m,
214 const int16_t *restrict vm_num,
215 size_t dim_z,
216 const real *restrict vn_geo_rout,
217 real *restrict mvn_mod
218);
219
228 size_t dim_m,
229 const int16_t *restrict vm_num,
230 size_t dim_z,
231 const real *restrict vn_geo_rout,
232 const real *restrict vn_geo_rin,
233 real *restrict mvn_mod
234);
235
244 size_t dim_m,
245 const int16_t *restrict vm_num,
246 size_t dim_z,
247 const real *restrict vn_geo_rout,
248 const real *restrict vn_geo_rin,
249 const real *restrict vn_geo_rel_w,
250 const real *restrict vn_geo_depth,
251 real *restrict mvn_mod
252);
253
261 size_t dim_m,
262 const int16_t *restrict vm_num,
263 size_t dim_z,
264 const real *restrict vn_geo_rout,
265 const real *restrict vn_geo_rel_w,
266 const real *restrict vn_geo_depth,
267 real *restrict mvn_mod
268);
269
288 const real *restrict opt_ptr_ref_z,
289 size_t dim_m,
290 size_t dim_z,
291 const real *restrict vn_z,
292 const real *restrict mvn_mod,
293 cplx *restrict vm_freq
294);
295
313 size_t dim_m,
314 const real *restrict opt_vm_freq_init,
315 size_t dim_z,
316 size_t opt_iz_min_fcut,
317 const real *restrict vn_z,
318 const real *restrict mvn_mod,
319 const real *restrict tdm_c,
320 const real *restrict mv_tdm_zk,
321 cplx *restrict vm_cfreq
322);
323
336 size_t dim_z,
337 size_t opt_iz_min_fcut,
338 const real *restrict vn_z,
339 const real *restrict vn_mod,
340 const real *restrict tdm_c,
341 const real *restrict tdm_zk,
342 size_t dim_freq,
343 size_t *restrict out_dim_freq,
344 cplx *restrict out_cfreq
345);
346
359 size_t dim_m,
360 const cplx *restrict vm_rfc,
361 size_t dim_z,
362 const real *restrict vn_z,
363 const real *restrict mvn_mod,
364 cplx *restrict mvn_env
365);
366
373 size_t dim_z, const real *restrict vn_z, const real *restrict vn_mod
374);
375
384 size_t dim_z,
385 const real *restrict vn_z,
386 const real *restrict vn_mod,
387 size_t dim_freq,
388 real *restrict freq,
389 real *restrict ampl
390);
391
402 int max_iter,
403 size_t dim_z,
404 const real *restrict vn_z,
405 const real *restrict vn_mod,
406 const real *restrict tdm_c,
407 const real *restrict tdm_zk,
408 size_t dim_freq,
409 real *restrict freq,
410 real *restrict ampl
411);
412
421 size_t dim_m,
422 size_t dim_z,
423 const real *restrict vn_z,
424 const real *restrict mvn_mod,
425 real *restrict tdm_c,
426 real *restrict mv_tdm_zk
427);
428
443 real dt,
444 size_t dim_m,
445 const real *restrict vm_cf,
446 const cplx *restrict vm_bc,
447 size_t dim_z,
448 const real *restrict tdm_c,
449 const real *restrict mv_tdm_zk,
450 const cplx *restrict mvn_src,
451 cplx *restrict vm_bd,
452 cplx *restrict mvn_env,
453 real *restrict opt_vm_cp,
454 real *restrict opt_vm_df,
455 struct cr_cache *restrict *restrict opt_pp_cache
456);
457
463 size_t dim_m,
464 const real *restrict vm_freq,
465 size_t dim_z,
466 const real *restrict mvn_mod,
467 cplx *restrict vm_bc
468);
469
473 size_t dim_m,
474 size_t dim_z,
475 const cplx *restrict mvn_env,
476 real *restrict vm_bp
477);
478
484 real dt,
485 size_t dim_m,
486 const real *restrict vm_cf,
487 size_t dim_z,
488 const real *restrict mvn_mod,
489 const cplx *restrict mvn_env,
490 real *restrict vm_bp,
491 cplx *restrict vm_bc
492);
493
508 size_t dim_m,
509 const cplx *restrict vm_bc,
510 size_t dim_z,
511 const cplx *restrict mvn_env,
512 cplx *restrict vm_bd
513);
514
515CROCK_API ROCK_MALLOC void *cr_malloc(size_t size);
516CROCK_API void cr_free(void *ptr);
517
531 real pot_outer,
532 real opt_pot_inner,
533 const real *restrict beam_init,
534 size_t dim_z,
535 const real *restrict vn_mag_axis,
536 const real *restrict vn_rhocd,
537 const real *restrict vn_r_outer,
538 const real *restrict opt_vn_r_inner,
539 real *restrict vn_pot
540);
541
559 real r_center,
560 real r_span,
561 size_t dim_m,
562 const int16_t *restrict vm_num,
563 size_t dim_z,
564 const real *restrict vn_mag_axis,
565 const real *restrict mvn_mod,
566 size_t dim_bcc,
567 real *restrict nvmh_bcc
568);
569
605 uint32_t options,
606 const real *restrict beam_init,
607 size_t dim_m,
608 const int16_t *restrict vm_num,
609 const real *restrict vm_cf,
610 const real *restrict vm_cp,
611 size_t dim_z,
612 const real *restrict vn_z,
613 const real *restrict vn_pot,
614 const real *restrict vn_mag_axis,
615 const real *restrict mvn_mod,
616 const cplx *restrict mvn_env,
617 size_t dim_b,
618 size_t dim_bcc,
619 real bcc_r_center,
620 real bcc_r_span,
621 const real *restrict nvmh_bcc,
622 uint32_t *seed,
623 real *restrict vn_rhocd,
624 cplx *restrict mvn_src,
625 real *restrict opt_vn_mrs,
626 real *restrict opt_vn_blt_avg,
627 real *restrict opt_bvn_blt_trj,
628 struct cr_cache *restrict *restrict opt_pp_cache
629);
630
640 size_t dim_m,
641 const real *restrict vm_cf,
642 size_t dim_z,
643 const real *restrict mvn_mod,
644 const cplx *restrict mvn_env,
645 real *restrict opt_vm_pout_left,
646 real *restrict opt_vm_pout_right
647);
648
665 real r,
666 real d,
667 real w,
668 int16_t num_azi,
669 int16_t num_rad,
670 real *restrict opt_array_chi
671);
672
690 real d,
691 real w,
692 int16_t num_azi,
693 int16_t num_rad,
694 real *restrict opt_array_chi
695);
696
703 size_t dim_m,
704 size_t dim_z,
705 const cplx *restrict mvn_env,
706 const real *restrict mvn_uuload,
707 real *restrict vn_uload
708);
709
719 size_t dim_m,
720 const int16_t *restrict vm_num,
721 const real *restrict vm_freq,
722 size_t dim_z,
723 const real *restrict vn_radius,
724 const real *restrict mvn_mod,
725 real *restrict mvn_uuload
726);
727
733 size_t systems,
734 size_t rows,
735 const cplx *restrict multi_mat,
736 const cplx *restrict multi_vec,
737 cplx *restrict multi_x
738);
739
747 real elapsed_time,
748 size_t dim_m,
749 size_t dim_z,
750 const cplx *restrict mvn_new_env,
751 real *restrict mvn_old_env_phase,
752 real *restrict vm_df
753);
754
764 real weight,
765 size_t dim_z,
766 const real *restrict vn_z,
767 const real *restrict vn_mrs,
768 size_t dim_z_new,
769 real *restrict vn_z_new
770);
771
777 size_t systems,
778 size_t rows,
779 const cplx *restrict multi_mat,
780 const cplx *restrict multi_vec,
781 cplx *restrict multi_x
782);
783
787 real dt,
788 size_t dim_m,
789 const real *restrict vm_cf,
790 const cplx *restrict vm_bc,
791 size_t dim_z,
792 const real *restrict tdm_c,
793 const real *restrict mv_tdm_zk,
794 const cplx *restrict mvn_src,
795 cplx *restrict vm_bd,
796 cplx *restrict mvn_env,
797 real *restrict opt_vm_cp,
798 real *restrict opt_vm_df,
799 struct cr_cache *restrict *restrict opt_pp_cache
800);
801
805 real dt,
806 size_t dim_m,
807 const real *restrict vm_cf,
808 const cplx *restrict vm_bc,
809 size_t dim_z,
810 const real *restrict tdm_c,
811 const real *restrict mv_tdm_zk,
812 const cplx *restrict mvn_src,
813 cplx *restrict vm_bd,
814 cplx *restrict mvn_env,
815 real *restrict opt_vm_cp,
816 real *restrict opt_vm_df,
817 struct cr_cache *restrict *restrict opt_pp_cache
818);
819
820#ifdef __cplusplus
821}
822#endif
823
824#endif
double real
Definition types.h:13
double _Complex cplx
Definition types.h:14
CROCK_API int cr_tdm_solve_offload(size_t systems, size_t rows, const cplx *restrict multi_mat, const cplx *restrict multi_vec, cplx *restrict multi_x)
CROCK_API int cr_make_bcc(real r_center, real r_span, size_t dim_m, const int16_t *restrict vm_num, size_t dim_z, const real *restrict vn_mag_axis, const real *restrict mvn_mod, size_t dim_bcc, real *restrict nvmh_bcc)
CROCK_API int cr_step_field_gpu(real dt, size_t dim_m, const real *restrict vm_cf, const cplx *restrict vm_bc, size_t dim_z, const real *restrict tdm_c, const real *restrict mv_tdm_zk, const cplx *restrict mvn_src, cplx *restrict vm_bd, cplx *restrict mvn_env, real *restrict opt_vm_cp, real *restrict opt_vm_df, struct cr_cache *restrict *restrict opt_pp_cache)
Doc see the CPU version.
CROCK_API int cr_step_field(real dt, size_t dim_m, const real *restrict vm_cf, const cplx *restrict vm_bc, size_t dim_z, const real *restrict tdm_c, const real *restrict mv_tdm_zk, const cplx *restrict mvn_src, cplx *restrict vm_bd, cplx *restrict mvn_env, real *restrict opt_vm_cp, real *restrict opt_vm_df, struct cr_cache *restrict *restrict opt_pp_cache)
CROCK_API int cr_make_fem(size_t dim_m, size_t dim_z, const real *restrict vn_z, const real *restrict mvn_mod, real *restrict tdm_c, real *restrict mv_tdm_zk)
CROCK_API int cr_refine_z(real weight, size_t dim_z, const real *restrict vn_z, const real *restrict vn_mrs, size_t dim_z_new, real *restrict vn_z_new)
Remap vn_z into vn_z_ne considering the mesh refinement score.
CROCK_API ROCK_PURE ROCK_NODISCARD const char * cr_errmsg(int err)
#define ROCK_CONST
Definition crock.h:44
CROCK_API void cr_init_bp(size_t dim_m, size_t dim_z, const cplx *restrict mvn_env, real *restrict vm_bp)
CROCK_API int cr_find_all_cold_resonances(size_t dim_z, size_t opt_iz_min_fcut, const real *restrict vn_z, const real *restrict vn_mod, const real *restrict tdm_c, const real *restrict tdm_zk, size_t dim_freq, size_t *restrict out_dim_freq, cplx *restrict out_cfreq)
CROCK_API int cr_deprecated_make_cold_spectrum(size_t dim_z, const real *restrict vn_z, const real *restrict vn_mod, size_t dim_freq, real *restrict freq, real *restrict ampl)
CROCK_API void cr_make_power_out(size_t dim_m, const real *restrict vm_cf, size_t dim_z, const real *restrict mvn_mod, const cplx *restrict mvn_env, real *restrict opt_vm_pout_left, real *restrict opt_vm_pout_right)
CROCK_API int cr_tdm_solve(size_t systems, size_t rows, const cplx *restrict multi_mat, const cplx *restrict multi_vec, cplx *restrict multi_x)
CROCK_API int cr_make_cold_envelope(size_t dim_m, const cplx *restrict vm_rfc, size_t dim_z, const real *restrict vn_z, const real *restrict mvn_mod, cplx *restrict mvn_env)
CROCK_API void cr_make_uuload(size_t dim_m, const int16_t *restrict vm_num, const real *restrict vm_freq, size_t dim_z, const real *restrict vn_radius, const real *restrict mvn_mod, real *restrict mvn_uuload)
CROCK_API void cr_init_bd(size_t dim_m, const cplx *restrict vm_bc, size_t dim_z, const cplx *restrict mvn_env, cplx *restrict vm_bd)
CROCK_API void cr_update_bc_simple(real dt, size_t dim_m, const real *restrict vm_cf, size_t dim_z, const real *restrict mvn_mod, const cplx *restrict mvn_env, real *restrict vm_bp, cplx *restrict vm_bc)
CROCK_API real cr_make_chi_TE_corr_holl_imp(real d, real w, int16_t num_azi, int16_t num_rad, real *restrict opt_array_chi)
CROCK_API ROCK_PURE ROCK_NODISCARD size_t cr_guess_dim_cold_spectrum(size_t dim_z, const real *restrict vn_z, const real *restrict vn_mod)
CROCK_API real cr_make_chi_TE_corr_ins(real r, real d, real w, int16_t num_azi, int16_t num_rad, real *restrict opt_array_chi)
CROCK_API int cr_make_mode_coax(size_t dim_m, const int16_t *restrict vm_num, size_t dim_z, const real *restrict vn_geo_rout, const real *restrict vn_geo_rin, real *restrict mvn_mod)
CROCK_API void cr_make_uload(size_t dim_m, size_t dim_z, const cplx *restrict mvn_env, const real *restrict mvn_uuload, real *restrict vn_uload)
CROCK_API int cr_find_cold_resonance(size_t dim_m, const real *restrict opt_vm_freq_init, size_t dim_z, size_t opt_iz_min_fcut, const real *restrict vn_z, const real *restrict mvn_mod, const real *restrict tdm_c, const real *restrict mv_tdm_zk, cplx *restrict vm_cfreq)
CROCK_API ROCK_CONST ROCK_NODISCARD int cr_version_patch(void)
CROCK_API void cr_make_df(real elapsed_time, size_t dim_m, size_t dim_z, const cplx *restrict mvn_new_env, real *restrict mvn_old_env_phase, real *restrict vm_df)
CROCK_API ROCK_CONST ROCK_NODISCARD int cr_version_major(void)
CROCK_API void cr_free(void *ptr)
CROCK_API int cr_make_mode_corr_ins(size_t dim_m, const int16_t *restrict vm_num, size_t dim_z, const real *restrict vn_geo_rout, const real *restrict vn_geo_rin, const real *restrict vn_geo_rel_w, const real *restrict vn_geo_depth, real *restrict mvn_mod)
CROCK_API int cr_make_mode_holl(size_t dim_m, const int16_t *restrict vm_num, size_t dim_z, const real *restrict vn_geo_rout, real *restrict mvn_mod)
CROCK_API int cr_numa_bless(void *restrict buf, size_t sizeof_type, size_t dim_shape, const size_t *restrict shape)
Set the data of buf to zero.
CROCK_API ROCK_PURE ROCK_NODISCARD size_t cr_stride_cplx(size_t dim)
Calculate stride including padding.
CROCK_API int cr_shoot_beamlet(uint32_t options, const real *restrict beam_init, size_t dim_m, const int16_t *restrict vm_num, const real *restrict vm_cf, const real *restrict vm_cp, size_t dim_z, const real *restrict vn_z, const real *restrict vn_pot, const real *restrict vn_mag_axis, const real *restrict mvn_mod, const cplx *restrict mvn_env, size_t dim_b, size_t dim_bcc, real bcc_r_center, real bcc_r_span, const real *restrict nvmh_bcc, uint32_t *seed, real *restrict vn_rhocd, cplx *restrict mvn_src, real *restrict opt_vn_mrs, real *restrict opt_vn_blt_avg, real *restrict opt_bvn_blt_trj, struct cr_cache *restrict *restrict opt_pp_cache)
CROCK_API void cr_make_bc_simple(size_t dim_m, const real *restrict vm_freq, size_t dim_z, const real *restrict mvn_mod, cplx *restrict vm_bc)
CROCK_API ROCK_PURE ROCK_NODISCARD size_t cr_stride_real(size_t dim)
Calculate stride including padding.
CROCK_API int cr_step_field_offload(real dt, size_t dim_m, const real *restrict vm_cf, const cplx *restrict vm_bc, size_t dim_z, const real *restrict tdm_c, const real *restrict mv_tdm_zk, const cplx *restrict mvn_src, cplx *restrict vm_bd, cplx *restrict mvn_env, real *restrict opt_vm_cp, real *restrict opt_vm_df, struct cr_cache *restrict *restrict opt_pp_cache)
Doc see the CPU version.
#define CROCK_API
Definition crock.h:33
CROCK_API int cr_make_cold_spectrum(int max_iter, size_t dim_z, const real *restrict vn_z, const real *restrict vn_mod, const real *restrict tdm_c, const real *restrict tdm_zk, size_t dim_freq, real *restrict freq, real *restrict ampl)
CROCK_API ROCK_MALLOC void * cr_malloc(size_t size)
#define ROCK_MALLOC
Definition crock.h:42
CROCK_API int cr_deprecated_search_cold_resonance(const real *restrict opt_ptr_ref_z, size_t dim_m, size_t dim_z, const real *restrict vn_z, const real *restrict mvn_mod, cplx *restrict vm_freq)
CROCK_API void cr_make_potential(real pot_outer, real opt_pot_inner, const real *restrict beam_init, size_t dim_z, const real *restrict vn_mag_axis, const real *restrict vn_rhocd, const real *restrict vn_r_outer, const real *restrict opt_vn_r_inner, real *restrict vn_pot)
#define ROCK_PURE
Definition crock.h:43
#define ROCK_NODISCARD
Definition crock.h:45
CROCK_API ROCK_CONST ROCK_NODISCARD int cr_version_minor(void)
CROCK_API int cr_make_mode_corr_holl_imp(size_t dim_m, const int16_t *restrict vm_num, size_t dim_z, const real *restrict vn_geo_rout, const real *restrict vn_geo_rel_w, const real *restrict vn_geo_depth, real *restrict mvn_mod)
Read the detailed description!
Definition crock.h:167
void(* free)(struct cr_cache *self)
Definition crock.h:168