63 const Vector& shift_comp_temp,
double om) {
65 Vector shift_auto(shift_auto_temp) ;
67 Vector shift_comp(shift_comp_temp) ;
69 Vector shift_old (shift_auto) ;
71 double orientation = shift_auto.
get_mp().get_rot_phi() ;
72 assert ((orientation==0) || (orientation == M_PI)) ;
73 double orientation_autre = shift_comp.
get_mp().get_rot_phi() ;
74 assert ((orientation_autre==0) || (orientation_autre == M_PI)) ;
76 int alignes = (orientation == orientation_autre) ? 1 : -1 ;
78 int np = shift_auto.
get_mp().get_mg()->get_np(1) ;
79 int nt = shift_auto.
get_mp().get_mg()->get_nt(1) ;
80 int nr = shift_auto.
get_mp().get_mg()->get_nr(1) ;
84 shift_tot.
set(1).
import(alignes*shift_comp(1)) ;
85 shift_tot.
set(2).
import(alignes*shift_comp(2)) ;
88 shift_tot = shift_tot + shift_auto ;
90 double indic = (orientation == 0) ? 1 : -1 ;
94 for (
int i=1 ; i<=3 ; i++) {
99 tbi.
set(1) = *shift_tot(1).get_spectral_va().c - indic *om * shift_tot.
get_mp().ya ;
100 tbi.
set(2) = *shift_tot(2).get_spectral_va().c + indic *om * shift_tot.
get_mp().xa ;
107 for (
int i=1 ; i<=3 ; i++)
108 derive_r.
set(i) = tbi(i).dsdr() ;
114 Valeur fonction_radiale (shift_auto.
get_mp().get_mg()) ;
118 for (
int comp=1 ; comp<=3 ; comp++) {
120 for (
int k=0 ; k<np ; k++)
121 for (
int j=0 ; j<nt ; j++)
122 for (
int i=0 ; i<nr ; i++)
123 val_hor.
set(1, k, j, i) = derive_r(comp).
124 val_grid_point(1, k, j, 0) ;
126 double r_0 = shift_auto.
get_mp().val_r (1, -1, 0, 0) ;
127 double r_1 = shift_auto.
get_mp().val_r (1, 1, 0, 0) ;
129 fonction_radiale =
pow(r_1-shift_auto.
get_mp().r, 3.)*
130 (shift_auto.
get_mp().
r-r_0)/
pow(r_1-r_0, 3.) ;
131 fonction_radiale.
annule(0) ;
134 enleve = fonction_radiale * val_hor ;
136 get_spectral_va().get_base()) ;
138 if (
norme(enleve)(1) != 0)
139 shift_auto.
set(comp) = shift_auto(comp) - enleve ;
140 if (
norme(shift_auto(comp))(1) > 1e-5) {
142 if (erreur < diff(1))
164 for (
int i=1 ; i<=3 ; i++) {
169 for (
int i=1 ; i<=3 ; i++)
170 shift(i).get_spectral_va().coef_i() ;
172 tbi.
set(1) = *shift(1).get_spectral_va().c -
omega*
mp.y ;
173 tbi.
set(2) = *shift(2).get_spectral_va().c +
omega*
mp.x ;
174 if (shift(3).get_etat() != ETATZERO)
175 tbi.
set(3) = *shift(3).get_spectral_va().c ;
184 Vector derive_r (
mp, CON,
mp.get_bvect_cart()) ;
186 for (
int i=1 ; i<=3 ; i++)
187 derive_r.
set(i) = tbi(i).dsdr() ;
190 Valeur fonction_radiale (
mp.get_mg()) ;
194 int np =
mp.get_mg()->get_np(1) ;
195 int nt =
mp.get_mg()->get_nt(1) ;
196 int nr =
mp.get_mg()->get_nr(1) ;
198 double r_0 =
mp.val_r(1, -1, 0, 0) ;
199 double r_1 =
mp.val_r(1, 1, 0, 0) ;
201 for (
int comp=1 ; comp<=3 ; comp++) {
203 for (
int k=0 ; k<np ; k++)
204 for (
int j=0 ; j<nt ; j++)
205 for (
int i=0 ; i<nr ; i++)
206 val_hor.
set(1, k, j, i) = derive_r(comp).val_grid_point(1, k, j, 0) ;
208 fonction_radiale =
pow(r_1-
mp.r, 3.)* (
mp.r-r_0)/
pow(r_1-r_0, 3.) ;
209 fonction_radiale.
annule(0) ;
212 enleve = fonction_radiale*val_hor ;
215 Scalar copie (shift(comp)) ;
216 shift.
set(comp) = shift(comp)-enleve ;
219 assert (shift(comp).check_dzpuis(0)) ;
223 if (norm(1) > 1e-5) {
Tensor field of valence 0 (or component of a tensorial field).
Valeur & set_spectral_va()
Returns va (read/write version).
void import(const Scalar &ci)
Assignment to another Scalar defined on a different mapping.
Vector beta_auto
Shift function .
Map_af & mp
Affine mapping.
double regularisation(const Vector &shift_auto, const Vector &shift_comp, double ang_vel)
Corrects shift_auto in such a way that the total is equal to zero in the horizon,...
double omega
Angular velocity in LORENE's units.
double regularise_one()
Corrects the shift in the innermost shell, so that it remains and that equals zero on the horizon.
Vector beta
Shift function .
Values and coefficients of a (real-value) function.
void set_etat_c_qcq()
Sets the logical state to ETATQCQ (ordinary state) for values in the configuration space (Mtbl c ).
void set_base(const Base_val &)
Sets the bases for spectral expansions (member base ).
void annule(int l)
Sets the Valeur to zero in a given domain.
Tbl & set(int l)
Read/write of the value in a given domain (configuration space).
void coef_i() const
Computes the physical value of *this.
Base_val base
Bases on which the spectral expansion is performed.
void annule_hard()
Sets the Valeur to zero in a hard way.
Tensor field of valence 1.
virtual void std_spectral_base()
Sets the standard spectal bases of decomposition for each component.
virtual void change_triad(const Base_vect &)
Sets a new vectorial basis (triad) of decomposition and modifies the components accordingly.
Scalar & set(int)
Read/write access to a component.
Tbl norme(const Cmp &)
Sums of the absolute values of all the values of the Cmp in each domain.
Cmp pow(const Cmp &, int)
Power .
Tbl diffrelmax(const Cmp &a, const Cmp &b)
Relative difference between two Cmp (max version).
const Map & get_mp() const
Returns the mapping.
const Base_vect * get_triad() const
Returns the vectorial basis (triad) on which the components are defined.
void annule_domain(int l)
Sets the Tensor to zero in a given domain.
virtual void set_etat_qcq()
Sets the logical state of all components to ETATQCQ (ordinary state).
Coord r
r coordinate centered on the grid