00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 char som_tet_C[] = "$Header: /cvsroot/Lorene/C++/Source/Non_class_members/Operators/som_tet.C,v 1.6 2004/11/23 15:16:02 m_forot Exp $" ;
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093 #include <stdlib.h>
00094 #include <math.h>
00095
00096 #include "headcpp.h"
00097
00098
00099
00100
00101
00102 void som_tet_pas_prevu
00103 (double* , const int, const int, const double, double*) {
00104 cout << "Mtbl_cf::val_point: theta basis not implemented yet ! "
00105 << endl ;
00106 abort () ;
00107 }
00108
00109
00110
00111
00112
00113 void som_tet_cos
00114 (double* ti, const int nt, const int np,
00115 const double tet, double* to) {
00116
00117
00118 int j, k ;
00119 double* pi = ti ;
00120 double* po = to ;
00121
00122
00123 double* cosinus = new double [nt] ;
00124 for (j=0 ; j<nt ; j++) {
00125 cosinus[j] = cos(j * tet) ;
00126 }
00127
00128
00129 *po = 0 ;
00130 for (j=0 ; j<nt ; j++) {
00131 *po += (*pi) * cosinus[j] ;
00132 pi++ ;
00133 }
00134 po++ ;
00135
00136 if (np > 1) {
00137
00138
00139 pi += nt ;
00140 po++ ;
00141
00142
00143 for (k=2 ; k<np+1 ; k++) {
00144 (*po) = 0 ;
00145 for (j=0 ; j<nt ; j++) {
00146 *po += (*pi) * cosinus[j] ;
00147 pi++ ;
00148 }
00149 po++ ;
00150 }
00151
00152 }
00153
00154
00155 delete [] cosinus ;
00156
00157 }
00158
00159
00160
00161
00162
00163 void som_tet_cos_p
00164 (double* ti, const int nt, const int np,
00165 const double tet, double* to) {
00166
00167
00168 int j, k ;
00169 double* pi = ti ;
00170 double* po = to ;
00171
00172
00173 double* cosinus = new double [nt] ;
00174 for (j=0 ; j<nt ; j++) {
00175 cosinus[j] = cos(2*j * tet) ;
00176 }
00177
00178
00179 *po = 0 ;
00180 for (j=0 ; j<nt ; j++) {
00181 *po += (*pi) * cosinus[j] ;
00182 pi++ ;
00183 }
00184 po++ ;
00185
00186 if (np > 1) {
00187
00188
00189 pi += nt ;
00190 po++ ;
00191
00192
00193 for (k=2 ; k<np+1 ; k++) {
00194 (*po) = 0 ;
00195 for (j=0 ; j<nt ; j++) {
00196 *po += (*pi) * cosinus[j] ;
00197 pi++ ;
00198 }
00199 po++ ;
00200 }
00201
00202 }
00203
00204 delete [] cosinus ;
00205
00206 }
00207
00208
00209
00210
00211
00212 void som_tet_cos_i
00213 (double* ti, const int nt, const int np,
00214 const double tet, double* to) {
00215
00216
00217 int j, k ;
00218 double* pi = ti ;
00219 double* po = to ;
00220
00221
00222 double* cosinus = new double [nt] ;
00223 for (j=0 ; j<nt-1 ; j++) {
00224 cosinus[j] = cos((2*j+1) * tet) ;
00225 }
00226 cosinus[nt-1] = 0 ;
00227
00228
00229 *po = 0 ;
00230 for (j=0 ; j<nt ; j++) {
00231 *po += (*pi) * cosinus[j] ;
00232 pi++ ;
00233 }
00234 po++ ;
00235
00236 if (np > 1) {
00237
00238
00239 pi += nt ;
00240 po++ ;
00241
00242
00243 for (k=2 ; k<np+1 ; k++) {
00244 (*po) = 0 ;
00245 for (j=0 ; j<nt ; j++) {
00246 *po += (*pi) * cosinus[j] ;
00247 pi++ ;
00248 }
00249 po++ ;
00250 }
00251 }
00252
00253
00254 delete [] cosinus ;
00255
00256 }
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266 void som_tet_sin
00267 (double* ti, const int nt, const int np,
00268 const double tet, double* to) {
00269
00270
00271 int j, k ;
00272 double* pi = ti ;
00273 double* po = to ;
00274
00275
00276 double* sinus = new double [nt] ;
00277 for (j=0 ; j<nt ; j++) {
00278 sinus[j] = sin(j * tet) ;
00279 }
00280
00281
00282 *po = 0 ;
00283 for (j=0 ; j<nt ; j++) {
00284 *po += (*pi) * sinus[j] ;
00285 pi++ ;
00286 }
00287 po++ ;
00288
00289 if (np > 1) {
00290
00291
00292 pi += nt ;
00293 po++ ;
00294
00295
00296 for (k=2 ; k<np+1 ; k++) {
00297 (*po) = 0 ;
00298 for (j=0 ; j<nt ; j++) {
00299 *po += (*pi) * sinus[j] ;
00300 pi++ ;
00301 }
00302 po++ ;
00303 }
00304 }
00305
00306
00307 delete [] sinus ;
00308
00309 }
00310
00311
00312
00313
00314
00315 void som_tet_sin_p
00316 (double* ti, const int nt, const int np,
00317 const double tet, double* to) {
00318
00319
00320 int j, k ;
00321 double* pi = ti ;
00322 double* po = to ;
00323
00324
00325 double* sinus = new double [nt] ;
00326 for (j=0 ; j<nt-1 ; j++) {
00327 sinus[j] = sin(2*j * tet) ;
00328 }
00329 sinus[nt-1] = 0 ;
00330
00331
00332 *po = 0 ;
00333 for (j=0 ; j<nt ; j++) {
00334 *po += (*pi) * sinus[j] ;
00335 pi++ ;
00336 }
00337 po++ ;
00338
00339 if (np > 1) {
00340
00341
00342 pi += nt ;
00343 po++ ;
00344
00345
00346 for (k=2 ; k<np+1 ; k++) {
00347 (*po) = 0 ;
00348 for (j=0 ; j<nt ; j++) {
00349 *po += (*pi) * sinus[j] ;
00350 pi++ ;
00351 }
00352 po++ ;
00353 }
00354 }
00355
00356
00357 delete [] sinus ;
00358
00359 }
00360
00361
00362
00363
00364
00365 void som_tet_sin_i
00366 (double* ti, const int nt, const int np,
00367 const double tet, double* to) {
00368
00369
00370 int j, k ;
00371 double* pi = ti ;
00372 double* po = to ;
00373
00374
00375 double* sinus = new double [nt] ;
00376 for (j=0 ; j<nt-1 ; j++) {
00377 sinus[j] = sin( (2*j+1) * tet) ;
00378 }
00379 sinus[nt-1] = 0 ;
00380
00381
00382 *po = 0 ;
00383 for (j=0 ; j<nt ; j++) {
00384 *po += (*pi) * sinus[j] ;
00385 pi++ ;
00386 }
00387 po++ ;
00388
00389 if (np > 1) {
00390
00391
00392 pi += nt ;
00393 po++ ;
00394
00395
00396 for (k=2 ; k<np+1 ; k++) {
00397 (*po) = 0 ;
00398 for (j=0 ; j<nt ; j++) {
00399 *po += (*pi) * sinus[j] ;
00400 pi++ ;
00401 }
00402 po++ ;
00403 }
00404 }
00405
00406
00407 delete [] sinus ;
00408
00409 }
00410
00411
00412
00413
00414
00415
00416 void som_tet_cossin_cp
00417 (double* ti, const int nt, const int np,
00418 const double tet, double* to) {
00419
00420
00421 int j, k ;
00422 double* pi = ti ;
00423 double* po = to ;
00424
00425
00426 double* cossin = new double [2*nt] ;
00427 for (j=0 ; j<2*nt ; j +=2) {
00428 cossin[j] = cos(j * tet) ;
00429 cossin[j+1] = sin((j+1) * tet) ;
00430 }
00431
00432
00433 *po = 0 ;
00434 for (j=0 ; j<nt ; j++) {
00435 *po += (*pi) * cossin[2*j] ;
00436 pi++ ;
00437 }
00438 po++ ;
00439
00440 if (np > 1) {
00441
00442
00443 pi += nt ;
00444 po++ ;
00445
00446
00447 for (k=2 ; k<np+1 ; k++) {
00448 int m = (k/2) % 2 ;
00449 (*po) = 0 ;
00450 for (j=0 ; j<nt ; j++) {
00451 *po += (*pi) * cossin[2*j + m] ;
00452 pi++ ;
00453 }
00454 po++ ;
00455 }
00456 }
00457
00458
00459 delete [] cossin ;
00460
00461 }
00462
00463
00464
00465
00466
00467
00468 void som_tet_cossin_ci
00469 (double* ti, const int nt, const int np,
00470 const double tet, double* to) {
00471
00472
00473 int j, k ;
00474 double* pi = ti ;
00475 double* po = to ;
00476
00477
00478 double* cossin = new double [2*nt] ;
00479 for (j=0 ; j<2*nt ; j +=2) {
00480 cossin[j] = cos((j+1) * tet) ;
00481 cossin[j+1] = sin(j * tet) ;
00482 }
00483
00484
00485 *po = 0 ;
00486 for (j=0 ; j<nt ; j++) {
00487 *po += (*pi) * cossin[2*j] ;
00488 pi++ ;
00489 }
00490 po++ ;
00491
00492 if (np > 1) {
00493
00494
00495 pi += nt ;
00496 po++ ;
00497
00498
00499 for (k=2 ; k<np+1 ; k++) {
00500 int m = (k/2) % 2 ;
00501 (*po) = 0 ;
00502 for (j=0 ; j<nt ; j++) {
00503 *po += (*pi) * cossin[2*j + m] ;
00504 pi++ ;
00505 }
00506 po++ ;
00507 }
00508 }
00509
00510
00511 delete [] cossin ;
00512
00513 }
00514
00515
00516
00517
00518
00519
00520 void som_tet_cossin_sp
00521 (double* ti, const int nt, const int np,
00522 const double tet, double* to) {
00523
00524
00525 int j, k ;
00526 double* pi = ti ;
00527 double* po = to ;
00528
00529
00530 double* cossin = new double [2*nt] ;
00531 for (j=0 ; j<2*nt ; j +=2) {
00532 cossin[j] = sin(j * tet) ;
00533 cossin[j+1] = cos((j+1) * tet) ;
00534 }
00535
00536
00537 *po = 0 ;
00538 for (j=0 ; j<nt ; j++) {
00539 *po += (*pi) * cossin[2*j] ;
00540 pi++ ;
00541 }
00542 po++ ;
00543
00544 if (np > 1) {
00545
00546
00547 pi += nt ;
00548 po++ ;
00549
00550
00551 for (k=2 ; k<np+1 ; k++) {
00552 int m = (k/2) % 2 ;
00553 (*po) = 0 ;
00554 for (j=0 ; j<nt ; j++) {
00555 *po += (*pi) * cossin[2*j + m] ;
00556 pi++ ;
00557 }
00558 po++ ;
00559 }
00560 }
00561
00562
00563 delete [] cossin ;
00564
00565 }
00566
00567
00568
00569
00570
00571
00572 void som_tet_cossin_si
00573 (double* ti, const int nt, const int np,
00574 const double tet, double* to) {
00575
00576
00577 int j, k ;
00578 double* pi = ti ;
00579 double* po = to ;
00580
00581
00582 double* cossin = new double [2*nt] ;
00583 for (j=0 ; j<2*nt ; j +=2) {
00584 cossin[j] = sin((j+1) * tet) ;
00585 cossin[j+1] = cos(j * tet) ;
00586 }
00587
00588
00589 *po = 0 ;
00590 for (j=0 ; j<nt ; j++) {
00591 *po += (*pi) * cossin[2*j] ;
00592 pi++ ;
00593 }
00594 po++ ;
00595
00596 if (np > 1) {
00597
00598
00599 pi += nt ;
00600 po++ ;
00601
00602
00603 for (k=2 ; k<np+1 ; k++) {
00604 int m = (k/2) % 2 ;
00605 (*po) = 0 ;
00606 for (j=0 ; j<nt ; j++) {
00607 *po += (*pi) * cossin[2*j + m] ;
00608 pi++ ;
00609 }
00610 po++ ;
00611 }
00612 }
00613
00614
00615 delete [] cossin ;
00616
00617 }
00618
00619
00620
00621
00622
00623 void som_tet_cossin_c
00624 (double* ti, const int nt, const int np,
00625 const double tet, double* to) {
00626
00627
00628 int j, k ;
00629 double* pi = ti ;
00630 double* po = to ;
00631
00632
00633 double* cossin = new double [2*nt] ;
00634 for (j=0 ; j<2*nt ; j +=2) {
00635 cossin[j] = cos(j/2 * tet) ;
00636 cossin[j+1] = sin(j/2 * tet) ;
00637 }
00638
00639
00640 *po = 0 ;
00641 for (j=0 ; j<nt ; j++) {
00642 *po += (*pi) * cossin[2*j] ;
00643 pi++ ;
00644 }
00645 po++ ;
00646
00647 if (np > 1) {
00648
00649
00650 pi += nt ;
00651 po++ ;
00652
00653
00654 for (k=2 ; k<np+1 ; k++) {
00655 int m = (k/2) % 2 ;
00656 (*po) = 0 ;
00657 for (j=0 ; j<nt ; j++) {
00658 *po += (*pi) * cossin[2*j + m] ;
00659 pi++ ;
00660 }
00661 po++ ;
00662 }
00663 }
00664
00665
00666 delete [] cossin ;
00667
00668 }
00669
00670
00671
00672
00673
00674 void som_tet_cossin_s
00675 (double* ti, const int nt, const int np,
00676 const double tet, double* to) {
00677
00678
00679 int j, k ;
00680 double* pi = ti ;
00681 double* po = to ;
00682
00683
00684 double* cossin = new double [2*nt] ;
00685 for (j=0 ; j<2*nt ; j +=2) {
00686 cossin[j] = sin(j/2 * tet) ;
00687 cossin[j+1] = cos(j/2 * tet) ;
00688 }
00689
00690
00691 *po = 0 ;
00692 for (j=0 ; j<nt ; j++) {
00693 *po += (*pi) * cossin[2*j] ;
00694 pi++ ;
00695 }
00696 po++ ;
00697
00698 if (np > 1) {
00699
00700
00701 pi += nt ;
00702 po++ ;
00703
00704
00705 for (k=2 ; k<np+1 ; k++) {
00706 int m = (k/2) % 2 ;
00707 (*po) = 0 ;
00708 for (j=0 ; j<nt ; j++) {
00709 *po += (*pi) * cossin[2*j + m] ;
00710 pi++ ;
00711 }
00712 po++ ;
00713 }
00714 }
00715
00716
00717 delete [] cossin ;
00718
00719 }
00720