32 #include "ope_elementary.h" 39 Tbl _cl_vorton_pas_prevu (
const Tbl &so,
int) {
41 cout <<
"Linear combination for vorton not implemented..." << endl ;
50 Tbl _cl_vorton_r_cheb (
const Tbl& source,
int) {
56 for (
int i=0 ; i<n-2 ; i++) {
57 barre.set(i) = ((1+dirac)*source(i)-source(i+2))
63 for (
int i=0 ; i<n-4 ; i++)
64 res.set(i) = barre(i)-barre(i+2) ;
73 Tbl _cl_vorton_r_chebu_trois (
const Tbl &source) {
77 for (
int i=0 ; i<n-2 ; i++) {
78 barre.set(i) = ((1+dirac)*source(i)-source(i+2)) ;
83 for (
int i=0 ; i<n-4 ; i++)
84 tilde.set(i) = (barre(i)-barre(i+2)) ;
87 for (
int i=0 ; i<n-4 ; i++)
88 res.set(i) = (tilde(i)+tilde(i+1)) ;
92 Tbl _cl_vorton_r_chebu (
const Tbl& source,
int puis) {
99 res = _cl_vorton_r_chebu_trois(source) ;
112 Tbl cl_vorton (
const Tbl &source,
int puis,
int base_r) {
115 static Tbl (*cl_vorton[
MAX_BASE])(
const Tbl &, int) ;
122 cl_vorton[i] = _cl_vorton_pas_prevu ;
129 Tbl res(cl_vorton[base_r](source, puis)) ;
141 Tbl _solp_vorton_pas_prevu (
const Matrice &,
const Matrice &,
142 const Tbl &,
double,
double,
int) {
143 cout <<
" Solution particuliere pas prevue in sec_order..... : "<< endl ;
153 Tbl _solp_vorton_r_chebu_trois (
const Matrice &lap,
const Matrice &nondege,
154 const Tbl &source,
double alpha) {
157 int dege = n-nondege.get_dim(0) ;;
158 assert ((dege==2) || (dege==1)) ;
160 Tbl source_aux (alpha*cl_vorton (source, 3,
R_CHEBU)) ;
164 for (
int i=0 ; i<n-dege ; i++)
165 so.set(i) = source_aux(i) ;
167 Tbl auxi(nondege.inverse(so)) ;
171 for (
int i=dege ; i<n ; i++)
172 res.set(i) = auxi(i-dege) ;
174 for (
int i=0 ; i<dege ; i++)
179 for (
int i=0 ; i<n ; i++)
188 Tbl _solp_vorton_r_chebu (
const Matrice &lap,
const Matrice &nondege,
189 const Tbl &source,
double alpha,
double,
int puis) {
196 res = _solp_vorton_r_chebu_trois(lap, nondege, source, alpha) ;
209 Tbl _solp_vorton_r_cheb (
const Matrice &lap,
const Matrice &nondege,
210 const Tbl &source,
double alpha,
double beta,
int dz) {
213 int dege = n-nondege.get_dim(0) ;
216 Tbl source_aux(source*alpha*alpha) ;
217 Tbl xso(source_aux) ;
218 Tbl xxso(source_aux) ;
219 multx_1d(n, &xso.t,
R_CHEB) ;
220 multx_1d(n, &xxso.t,
R_CHEB) ;
221 multx_1d(n, &xxso.t,
R_CHEB) ;
222 source_aux = beta*beta/alpha/alpha*source_aux+2*beta/alpha*xso+xxso ;
223 source_aux = cl_vorton (source_aux, dz,
R_CHEB) ;
227 for (
int i=0 ; i<n-dege ; i++)
228 so.set(i) = source_aux(i) ;
230 Tbl auxi(nondege.inverse(so)) ;
234 for (
int i=dege ; i<n ; i++)
235 res.set(i) = auxi(i-dege) ;
237 for (
int i=0 ; i<dege ; i++)
251 const Tbl&, double, double, int) ;
258 solp_vorton[i] = _solp_vorton_pas_prevu ;
261 solp_vorton[
R_CHEB >>
TRA_R] = _solp_vorton_r_cheb ;
double alpha
Parameter of the associated mapping.
double beta
Parameter of the associated mapping.
Matrice * ope_mat
Pointer on the matrix representation of the operator.
double dsp_minus
Value of the derivative of the particular solution at the inner boundary.
int dzpuis
the associated dzpuis, if in the compactified domain.
double sp_minus
Value of the particular solution at the inner boundary.
int base_r
Radial basis of decomposition.
double sp_plus
Value of the particular solution at the outer boundary.
virtual void do_non_dege() const
Computes the non-degenerated matrix of the operator.
#define TRA_R
Translation en R, used for a bitwise shift (in hex)
double dsp_plus
Value of the derivative of the particular solution at the outer boundary.
int get_dim(int i) const
Gives the i-th dimension (ie dim.dim[i])
virtual Tbl get_solp(const Tbl &so) const
Computes the particular solution, given the source so .
int get_dim(int i) const
Returns the dimension of the matrix.
#define R_CHEBU
base de Chebychev ordinaire (fin), dev. en 1/r
#define MAX_BASE
Nombre max. de bases differentes.
Matrice * non_dege
Pointer on the non-degenerated matrix of the operator.
#define R_CHEB
base de Chebychev ordinaire (fin)