98 int type_inter)
const {
100 assert(
etat != ETATNONDEF) ;
101 assert(
gval->compatible(&mp, lmax, lmin) ) ;
104 if (
etat == ETATZERO) {
105 resu.
annule(lmin, lmax-1) ;
109 int nzin = lmax - lmin ;
111 const Mg3d* mgrid = mp.get_mg() ;
112 for (
int i=lmin; i<lmax; i++) {
113 if ((mgrid->
get_nt(i) > 1)&&(dim_spec==1)) dim_spec = 2;
114 if (mgrid->
get_np(i) > 1) dim_spec = 3;
116 const Coord& rr = mp.r ;
118 int* ntet =
new int[nzin] ;
120 int* nphi =
new int[nzin] ;
122 for (
int i=lmin; i<lmax; i++) {
123 int tmp = mgrid->
get_np(i) ;
125 nphimax = (tmp > nphimax ? tmp : nphimax) ;
128 ntetmax = (tmp > ntetmax ? tmp : ntetmax) ;
131 for (
int i=lmin; i<lmax; i++) {
132 if ((nphimax % nphi[i-lmin]) != 0) {
133 cout <<
"Tbl_val::to_spectral: The numbers of points in phi" << endl ;
134 cout <<
"in the different domains of Meudon grid are not" << endl;
135 cout <<
"well defined; see the documentation." << endl ;
138 assert((ntet[i-lmin]-1) > 0) ;
139 if (((ntetmax-1) % (ntet[i-lmin]-1)) != 0) {
140 cout <<
"Tbl_val::to_spectral: The numbers of points in theta"<< endl ;
141 cout <<
"in the different domains of Meudon grid are not" << endl;
142 cout <<
"well defined; see the documentation." << endl ;
149 if (lmin>0) resu.
annule(0,lmin-1) ;
150 if (lmax < mgrid->get_nzone()) resu.
annule(lmax, mgrid->
get_nzone()-1) ;
152 int fant =
gval->get_fantome() ;
155 for (
int l=lmin; l<lmax; l++) nrarr += mgrid->
get_nr(l) -1 ;
160 int tsize =
dim->dim[0] + 2*fant ;
163 for (
int i=0; i<tsize; i++) fdep.
set(i) =
t[i] ;
168 for (
int l=lmin; l<lmax; l++) {
169 for (
int i=0; i<mgrid->
get_nr(l); i++) {
170 rarr.
set(inum) = (+rr)(l,0,0,i) ;
175 farr =
gval->interpol1(*
gval->zr, rarr, fdep, flag, type_inter) ;
177 for (
int l=lmin; l<lmax; l++) {
178 for (
int i=0; i<mgrid->
get_nr(l); i++) {
188 int tsizex =
dim->dim[1] + 2*fant ;
189 int tsizez =
dim->dim[0] + 2*fant ;
190 Tbl fdep(tsizex, tsizez) ;
192 for (
int j=0; j<tsizex; j++) {
193 for (
int i=0; i<tsizez; i++) {
194 int l = tsizez*j + i ;
198 Tbl farr(ntetmax, nrarr) ;
201 Tbl tetarr(ntetmax) ;
205 for (
int l=lmin; l<lmax; l++) {
206 if (ntetmax == ntet[l-lmin]) ltmax = l ;
207 for (
int i=0; i<mgrid->
get_nr(l); i++) {
208 rarr.
set(inum) = (+rr)(l,0,0,i) ;
214 for (
int j=0; j<ntetmax; j++)
215 tetarr.
set(j) = (+
tet)(ltmax,0,j,0) ;
216 farr =
gval->interpol2(fdep, rarr, tetarr, type_inter) ;
218 for (
int l=lmin; l<lmax; l++) {
219 for (
int j=0; j<ntet[l-lmin]; j++) {
220 int itet = (ntetmax-1)/(ntet[l-lmin]-1)*j ;
221 for (
int i=0; i<mgrid->
get_nr(l); i++) {
225 inum -= mgrid->
get_nr(l) ;
227 inum += mgrid->
get_nr(l) - 1;
233 if (type_inter == 0) {
234 cout <<
"The use of routine INSMTS is not well suited" << endl ;
235 cout <<
"for 3D interpolation." << endl ;
238 int tsizey =
dim->dim[2] + 2*fant ;
239 int tsizex =
dim->dim[1] + 2*fant ;
240 int tsizez =
dim->dim[0] + 2*fant ;
241 Tbl fdep(tsizey, tsizex, tsizez) ;
243 for (
int k=0; k<tsizey; k++) {
244 for (
int j=0; j<tsizex; j++) {
245 for (
int i=0; i<tsizez; i++) {
246 int l = (k*tsizex+j)*tsizez+i ;
251 Tbl farr(nphimax, ntetmax, nrarr) ;
254 Tbl tetarr(ntetmax) ;
256 Tbl phiarr(nphimax) ;
261 for (
int l=lmin; l<lmax; l++) {
262 if (ntetmax == ntet[l-lmin]) ltmax = l ;
263 if (nphimax == nphi[l-lmin]) lpmax = l ;
264 for (
int i=0; i<mgrid->
get_nr(l); i++) {
265 rarr.
set(inum) = (+rr)(l,0,0,i) ;
272 for (
int k=0; k<nphimax; k++) {
273 phiarr.
set(k) = (+
phi)(lpmax,k,0,0) ;
275 for (
int j=0; j<ntetmax; j++)
276 tetarr.
set(j) = (+
tet)(ltmax,0,j,0) ;
277 farr =
gval->interpol3(fdep, rarr, tetarr, phiarr, type_inter) ;
279 for (
int l=lmin; l<lmax; l++) {
280 for (
int k=0; k<nphi[l-lmin]; k++) {
281 int iphi = (nphimax-1)/(nphi[l-lmin]-1)*k ;
282 for (
int j=0; j<ntet[l-lmin]; j++) {
283 int itet = (ntetmax-1)/(ntet[l-lmin]-1)*j ;
284 for (
int i=0; i<mgrid->
get_nr(l); i++) {
288 inum -= mgrid->
get_nr(l) ;
291 inum += mgrid->
get_nr(l) - 1 ;
297 cout <<
"Tbl_val::to_spectral:Strange error..." << endl ;
void from_spectral(const Scalar &meudon, int lmax, int lmin=0, bool interfr=false, bool interft=false)
Interpolation from a Scalar to a Tbl_val (spectral summation).