ROCK 1.10.0
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_B_RF_PERP 0x00000020
67#define ROCK_MASK_BLT_DOPPLER ROCK_MASK_BLT_B_RF_PERP
78#define ROCK_MASK_BLT_TREAT_BEAM_INIT_AS_RAW_IMPORT 0x00010000
84#define ROCK_MASK_BLT_SRC_MONOHARM 0x40000000
87#define ROCK_MASK_BLT_MONOGC 0x80000000
90#define ROCK_MASK_BLT_DEBUG ROCK_MASK_BLT_MONOGC
91
93#define ROCK_MASK_BLT_ALL_FEATURES \
94 (ROCK_MASK_BLT_VAR_UZ | ROCK_MASK_BLT_TAYLOR \
95 | ROCK_MASK_BLT_CALI_CYC_PHASE | ROCK_MASK_BLT_CALI_GC_AZI \
96 | ROCK_MASK_BLT_CALI_GC_R | ROCK_MASK_BLT_B_RF_PERP)
97
106#define ROCK_FOREACH(X) for (size_t i##X = 0; i##X < (dim_##X); ++i##X)
107
109#define ROCK_FOREACH_1(X) for (size_t i##X = 1; i##X < (dim_##X); ++i##X)
110
112#define ROCK_IF_RETURN(IF_VAL, RET_VAL) \
113 do { \
114 if (IF_VAL) \
115 return RET_VAL; \
116 } while (0)
117
126 void *restrict buf,
127 size_t sizeof_type,
128 size_t dim_shape,
129 const size_t *restrict shape
130);
131
133#define CR_NUMA_BLESS(type, buf, ...) \
134 cr_numa_bless( \
135 (buf), (size_t)sizeof(type), \
136 (size_t)(sizeof((size_t[]){__VA_ARGS__}) / sizeof(size_t)), \
137 (size_t[]){__VA_ARGS__} \
138 )
139
180struct cr_cache {
181 void (*free)(struct cr_cache *self);
182};
183
188
193
198
203const char *cr_errmsg(int err);
204
211size_t cr_stride_real(size_t dim);
212
219size_t cr_stride_cplx(size_t dim);
220
226 size_t dim_m,
227 const int16_t *restrict vm_num,
228 size_t dim_z,
229 const real *restrict vn_geo_rout,
230 real *restrict mvn_mod
231);
232
241 size_t dim_m,
242 const int16_t *restrict vm_num,
243 size_t dim_z,
244 const real *restrict vn_geo_rout,
245 const real *restrict vn_geo_rin,
246 real *restrict mvn_mod
247);
248
257 size_t dim_m,
258 const int16_t *restrict vm_num,
259 size_t dim_z,
260 const real *restrict vn_geo_rout,
261 const real *restrict vn_geo_rin,
262 const real *restrict vn_geo_rel_w,
263 const real *restrict vn_geo_depth,
264 real *restrict mvn_mod
265);
266
274 size_t dim_m,
275 const int16_t *restrict vm_num,
276 size_t dim_z,
277 const real *restrict vn_geo_rout,
278 const real *restrict vn_geo_rel_w,
279 const real *restrict vn_geo_depth,
280 real *restrict mvn_mod
281);
282
292 size_t dim_m,
293 size_t dim_z,
294 const real *restrict vn_z,
295 const cplx *restrict mvn_env,
296 real *restrict opt_vm_energy
297);
298
317 const real *restrict opt_ptr_ref_z,
318 size_t dim_m,
319 size_t dim_z,
320 const real *restrict vn_z,
321 const real *restrict mvn_mod,
322 cplx *restrict vm_freq
323);
324
342 size_t dim_m,
343 const real *restrict opt_vm_freq_init,
344 size_t dim_z,
345 size_t opt_iz_min_fcut,
346 const real *restrict vn_z,
347 const real *restrict mvn_mod,
348 const real *restrict tdm_c,
349 const real *restrict mv_tdm_zk,
350 cplx *restrict vm_cfreq
351);
352
365 size_t dim_z,
366 size_t opt_iz_min_fcut,
367 const real *restrict vn_z,
368 const real *restrict vn_mod,
369 const real *restrict tdm_c,
370 const real *restrict tdm_zk,
371 size_t dim_freq,
372 size_t *restrict out_dim_freq,
373 cplx *restrict out_cfreq
374);
375
388 size_t dim_m,
389 const cplx *restrict vm_rfc,
390 size_t dim_z,
391 const real *restrict vn_z,
392 const real *restrict mvn_mod,
393 cplx *restrict mvn_env
394);
395
402 size_t dim_z, const real *restrict vn_z, const real *restrict vn_mod
403);
404
413 size_t dim_z,
414 const real *restrict vn_z,
415 const real *restrict vn_mod,
416 size_t dim_freq,
417 real *restrict freq,
418 real *restrict ampl
419);
420
431 int max_iter,
432 size_t dim_z,
433 const real *restrict vn_z,
434 const real *restrict vn_mod,
435 const real *restrict tdm_c,
436 const real *restrict tdm_zk,
437 size_t dim_freq,
438 real *restrict freq,
439 real *restrict ampl
440);
441
450 size_t dim_m,
451 size_t dim_z,
452 const real *restrict vn_z,
453 const real *restrict mvn_mod,
454 real *restrict tdm_c,
455 real *restrict mv_tdm_zk
456);
457
474 real dt,
475 size_t dim_m,
476 const real *restrict vm_cf,
477 const cplx *restrict vm_bc,
478 size_t dim_z,
479 const real *restrict tdm_c,
480 const real *restrict mv_tdm_zk,
481 const cplx *restrict mvn_src,
482 const real *restrict opt_mvn_losscoef,
483 cplx *restrict vm_bd,
484 cplx *restrict mvn_env,
485 real *restrict opt_vm_cp,
486 real *restrict opt_vm_df,
487 struct cr_cache *restrict *restrict opt_pp_cache
488);
489
495 size_t dim_m,
496 const real *restrict vm_freq,
497 size_t dim_z,
498 const real *restrict mvn_mod,
499 cplx *restrict vm_bc
500);
501
505 size_t dim_m,
506 size_t dim_z,
507 const cplx *restrict mvn_env,
508 real *restrict vm_bp
509);
510
516 real dt,
517 size_t dim_m,
518 const real *restrict vm_cf,
519 size_t dim_z,
520 const real *restrict mvn_mod,
521 const cplx *restrict mvn_env,
522 real *restrict vm_bp,
523 cplx *restrict vm_bc
524);
525
540 size_t dim_m,
541 const cplx *restrict vm_bc,
542 size_t dim_z,
543 const cplx *restrict mvn_env,
544 cplx *restrict vm_bd
545);
546
547CROCK_API ROCK_MALLOC void *cr_malloc(size_t size);
548CROCK_API void cr_free(void *ptr);
549
563 real pot_outer,
564 real opt_pot_inner,
565 const real *restrict beam_init,
566 size_t dim_z,
567 const real *restrict vn_mag_axis,
568 const real *restrict vn_rhocd,
569 const real *restrict vn_r_outer,
570 const real *restrict opt_vn_r_inner,
571 real *restrict vn_pot
572);
573
591 real r_center,
592 real r_span,
593 size_t dim_m,
594 const int16_t *restrict vm_num,
595 size_t dim_z,
596 const real *restrict vn_mag_axis,
597 const real *restrict mvn_mod,
598 size_t dim_bcc,
599 real *restrict nvmh_bcc
600);
601
637 uint32_t options,
638 const real *restrict beam_init,
639 size_t dim_m,
640 const int16_t *restrict vm_num,
641 const real *restrict vm_cf,
642 const real *restrict vm_cp,
643 size_t dim_z,
644 const real *restrict vn_z,
645 const real *restrict vn_pot,
646 const real *restrict vn_mag_axis,
647 const real *restrict mvn_mod,
648 const cplx *restrict mvn_env,
649 size_t dim_b,
650 size_t dim_bcc,
651 real bcc_r_center,
652 real bcc_r_span,
653 const real *restrict nvmh_bcc,
654 uint32_t *seed,
655 real *restrict vn_rhocd,
656 cplx *restrict mvn_src,
657 real *restrict opt_vn_mrs,
658 real *restrict opt_vn_blt_avg,
659 real *restrict opt_bvn_blt_trj,
660 struct cr_cache *restrict *restrict opt_pp_cache
661);
662
672 size_t dim_m,
673 const real *restrict vm_cf,
674 size_t dim_z,
675 const real *restrict mvn_mod,
676 const cplx *restrict mvn_env,
677 real *restrict opt_vm_pout_left,
678 real *restrict opt_vm_pout_right
679);
680
697 real r,
698 real d,
699 real w,
700 int16_t num_azi,
701 int16_t num_rad,
702 real *restrict opt_array_chi
703);
704
722 real d,
723 real w,
724 int16_t num_azi,
725 int16_t num_rad,
726 real *restrict opt_array_chi
727);
728
735 size_t dim_m,
736 size_t dim_z,
737 const cplx *restrict mvn_env,
738 const real *restrict mvn_uuload,
739 real *restrict vn_uload
740);
741
751 size_t dim_m,
752 const int16_t *restrict vm_num,
753 const real *restrict vm_freq,
754 size_t dim_z,
755 const real *restrict vn_radius,
756 const real *restrict mvn_mod,
757 real *restrict mvn_uuload
758);
759
765 size_t systems,
766 size_t rows,
767 const cplx *restrict multi_mat,
768 const cplx *restrict multi_vec,
769 cplx *restrict multi_x
770);
771
779 real elapsed_time,
780 size_t dim_m,
781 size_t dim_z,
782 const cplx *restrict mvn_new_env,
783 real *restrict mvn_old_env_phase,
784 real *restrict vm_df
785);
786
796 real weight,
797 size_t dim_z,
798 const real *restrict vn_z,
799 const real *restrict vn_mrs,
800 size_t dim_z_new,
801 real *restrict vn_z_new
802);
803
809 size_t systems,
810 size_t rows,
811 const cplx *restrict multi_mat,
812 const cplx *restrict multi_vec,
813 cplx *restrict multi_x
814);
815
819 real dt,
820 size_t dim_m,
821 const real *restrict vm_cf,
822 const cplx *restrict vm_bc,
823 size_t dim_z,
824 const real *restrict tdm_c,
825 const real *restrict mv_tdm_zk,
826 const cplx *restrict mvn_src,
827 cplx *restrict vm_bd,
828 cplx *restrict mvn_env,
829 real *restrict opt_vm_cp,
830 real *restrict opt_vm_df,
831 struct cr_cache *restrict *restrict opt_pp_cache
832);
833
837 real dt,
838 size_t dim_m,
839 const real *restrict vm_cf,
840 const cplx *restrict vm_bc,
841 size_t dim_z,
842 const real *restrict tdm_c,
843 const real *restrict mv_tdm_zk,
844 const cplx *restrict mvn_src,
845 cplx *restrict vm_bd,
846 cplx *restrict mvn_env,
847 real *restrict opt_vm_cp,
848 real *restrict opt_vm_df,
849 struct cr_cache *restrict *restrict opt_pp_cache
850);
851
852#ifdef __cplusplus
853}
854#endif
855
856#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_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_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, const real *restrict opt_mvn_losscoef, 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_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 real cr_make_stored_energy(size_t dim_m, size_t dim_z, const real *restrict vn_z, const cplx *restrict mvn_env, real *restrict opt_vm_energy)
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:180
void(* free)(struct cr_cache *self)
Definition crock.h:181