hf_again/src/hf/bsplines_and_grid.h
Anton Ljungdahl fc2c897727 ok norm maybe
2024-11-18 17:42:31 +01:00

46 lines
1.3 KiB
C

#ifndef BSPLINES_AND_GRID_H
#define BSPLINES_AND_GRID_H
// coordinates in Bohr radii
#define GRID_START_POINT 0.0
#define GRID_END_POINT 40.0
#define GRID_NUM_STEPS 300
typedef struct Grid Grid;
struct Grid
{
F64 start;
F64 end;
U32 num_steps;
F64 *points;
};
typedef struct BSplineCtx BSplineCtx;
struct BSplineCtx
{
Arena* arena;
U32 order;
F64 *knotpoints;
U32 num_knotpoints;
U32 num_bsplines;
U32 num_phys_points;
F64 *bsplines_grid; // In grid points
F64 *dBsplines_grid; // First deriv in grid points
F64 *bsplines; // In knotpoints
F64 *dBsplines; // First deriv in knotpoints
};
function void set_up_grid(Arena *arena);
//~ Bspline functions
function F64 bspline_recursion(F64 x, U32 k, U32 i);
function F64 compute_bspline_F64(F64 x_coord, U32 index);
function F64 compute_dBspline_F64(F64 x_coord, U32 index);
function inline U32 get_bspline_index_size(U32 size1, U32 i, U32 j);
function inline U32 get_bspline_index(U32 i, U32 j);
function inline U32 get_bspline_grid_index(U32 i, U32 j);
function void set_up_bspline_context(Arena* arena);
function void write_bspline_matrix_F64(F64 *bsplines, U32 size1, U32 size2, String8 filename_path);
function void set_up_bsplines_at_points_and_write_matrix_F64(Arena *arena);
#endif /* BSPLINES_AND_GRID_H */