15#ifndef IJK_Ghost_Fluid_tools_included
16#define IJK_Ghost_Fluid_tools_included
18#include <IJK_Field_vector.h>
19#include <IJK_Interfaces.h>
20#include <Maillage_FT_IJK.h>
21#include <IJK_subres_constants.h>
24#define select_dir(a,x,y,z) ((a==0)?(x):((a==1)?(y):(z)))
25#define selectxy(a,x,y) ((a==0)?(x):(y))
27void compute_eulerian_normal_distance_facet_barycentre_field(
const IJK_Interfaces& interface,
28 IJK_Field_double& distance,
29 IJK_Field_vector3_double& normal_vect,
30 IJK_Field_vector3_double& facets_barycentre,
31 IJK_Field_vector3_double& tmp_old_vector_val,
32 IJK_Field_vector3_double& tmp_new_vector_val,
33 IJK_Field_double& tmp_old_val,
34 IJK_Field_double& tmp_new_val,
35 IJK_Field_int& tmp_interf_cells,
36 IJK_Field_int& tmp_propagated_cells,
41 const int& avoid_gfm_parallel_calls=0);
43void compute_eulerian_curvature_field_from_distance_field(
const IJK_Field_double& distance,
44 IJK_Field_double& curvature,
45 const IJK_Field_local_double& boundary_flux_kmin,
46 const IJK_Field_local_double& boundary_flux_kmax);
48void compute_eulerian_curvature_field_from_normal_vector_field(
const IJK_Field_vector3_double& normal_vect,
49 IJK_Field_double& curvature);
51void compute_eulerian_curvature_field_from_interface(
const IJK_Field_vector3_double& normal_vect,
53 IJK_Field_double& interfacial_area,
54 IJK_Field_double& curvature,
55 IJK_Field_double& tmp_old_val,
56 IJK_Field_double& tmp_new_val,
60void compute_eulerian_normal_temperature_gradient_interface(
const IJK_Field_double& distance,
61 const IJK_Field_double& indicator,
62 const IJK_Field_double& interfacial_area,
63 const IJK_Field_double& curvature,
64 const IJK_Field_double& temperature,
65 IJK_Field_double& grad_T_interface,
66 const int& spherical_approx,
67 const double& temperature_interf=0);
69void propagate_eulerian_normal_temperature_gradient_interface(
const IJK_Interfaces& interfaces,
70 const IJK_Field_double& distance,
71 IJK_Field_double& grad_T_interface,
72 const int& stencil_width,
73 const int& recompute_field_ini=1,
74 const int& zero_neighbour_value_mean=0,
75 const int& vapour_mixed_only=1,
76 const int& smooth_factor=10);
78void compute_eulerian_extended_temperature(
const IJK_Field_double& indicator,
79 const IJK_Field_double& distance,
80 const IJK_Field_double& curvature,
81 IJK_Field_double& grad_T_interface,
82 IJK_Field_double& temperature,
83 const int& spherical_approx,
84 const double& temperature_interf=0);
86void smooth_vector_field(IJK_Field_vector3_double& vector_field,
87 IJK_Field_vector3_double& vector_field_init,
88 const IJK_Field_vector3_double * eulerian_normal_vectors_ns_normed,
90 const double (&direct_smoothing_factors) [7],
91 const double (&gaussian_smoothing_factors) [3][3][3],
92 const int& smooth_numbers=1,
93 const int& remove_normal_compo=0,
94 const int& direct_neighbours=0,
95 const int& use_field_init=1,
96 const int& use_unique_phase=1);
98void smooth_eulerian_field(IJK_Field_double& field,
99 IJK_Field_double& field_init,
101 IJK_Field_vector3_double& vector_field_init,
102 const IJK_Field_vector3_double * eulerian_normal_vectors_ns_normed,
104 const double (&direct_smoothing_factors) [7],
105 const double (&gaussian_smoothing_factors) [3][3][3],
106 const int& smooth_numbers=1,
107 const int& remove_normal_compo=0,
108 const int& direct_neighbours=0,
109 const int& use_field_init=1,
110 const int& use_unique_phase=1);
112void fill_tangential_gradient(
const IJK_Field_vector3_double& vector_field,
113 const IJK_Field_vector3_double * eulerian_normal_vectors_ns_normed,
114 IJK_Field_vector3_double& tangential_vector_field);
116void fill_tangential_gradient_compo(
const IJK_Field_vector3_double& vector_field,
117 const IJK_Field_vector3_double * eulerian_normal_vectors_ns_normed,
118 IJK_Field_double& tangential_field,