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 base_val_mult_C[] = "$Header: /cvsroot/Lorene/C++/Source/Base_val/base_val_mult.C,v 1.8 2009/10/23 12:55:16 j_novak 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 #include <stdlib.h>
00077 #include <stdio.h>
00078 #include <assert.h>
00079
00080 #include "headcpp.h"
00081 #include "type_parite.h"
00082 #include "base_val.h"
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092 Base_val operator* (const Base_val& b1, const Base_val& b2) {
00093
00094 assert (b1.nzone == b2.nzone) ;
00095
00096 Base_val res(b1.nzone) ;
00097
00098 int base, indic_r, indic_t, indic_p ;
00099 int b1_r, b2_r, b1_t, b2_t, b1_p, b2_p ;
00100
00101 int indic_total = 1 ;
00102
00103
00104 for (int l=0 ; l<b1.nzone ; l++) {
00105
00106 indic_r = -1 ;
00107 indic_t = -1 ;
00108 indic_p = -1 ;
00109
00110 b1_r = b1.b[l] & MSQ_R ;
00111 b1_t = b1.b[l] & MSQ_T ;
00112 b1_p = b1.b[l] & MSQ_P ;
00113 b2_r = b2.b[l] & MSQ_R ;
00114 b2_t = b2.b[l] & MSQ_T ;
00115 b2_p = b2.b[l] & MSQ_P ;
00116
00117 base = 0 ;
00118
00119 switch (b1_p) {
00120 case P_COSSIN :
00121 switch (b2_p) {
00122 case P_COSSIN :
00123 base = P_COSSIN ;
00124 indic_p = 1 ;
00125 break ;
00126 default :
00127 break ;
00128 }
00129 break ;
00130
00131 case P_COSSIN_P :
00132 switch (b2_p) {
00133 case P_COSSIN_P :
00134 base = P_COSSIN_P ;
00135 indic_p = 1 ;
00136 break ;
00137
00138 case P_COSSIN_I :
00139 base = P_COSSIN_I ;
00140 indic_p = 1 ;
00141 break ;
00142
00143 default :
00144 break ;
00145 }
00146 break ;
00147
00148 case P_COSSIN_I :
00149 switch (b2_p) {
00150 case P_COSSIN_P :
00151 base = P_COSSIN_I ;
00152 indic_p = 1 ;
00153 break ;
00154
00155 case P_COSSIN_I :
00156 base = P_COSSIN_P ;
00157 indic_p = 1 ;
00158 break ;
00159
00160 default :
00161 break ;
00162 }
00163 break ;
00164
00165 default :
00166 break ;
00167 }
00168
00169 switch (b1_t) {
00170
00171 case T_COSSIN_CP :
00172 switch (b2_t) {
00173 case T_COSSIN_CP :
00174 base = base | T_COSSIN_CP ;
00175 indic_t = 1 ;
00176 break ;
00177
00178 case T_COSSIN_CI :
00179 base = base | T_COSSIN_CI ;
00180 indic_t = 1 ;
00181 break ;
00182
00183 case T_COSSIN_SP :
00184 base = base | T_COSSIN_SP ;
00185 indic_t = 1 ;
00186 break ;
00187
00188 case T_COSSIN_SI :
00189 base = base | T_COSSIN_SI ;
00190 indic_t = 1 ;
00191 break ;
00192
00193 default :
00194 break ;
00195 }
00196 break ;
00197
00198 case T_COSSIN_CI :
00199 switch (b2_t) {
00200 case T_COSSIN_CP :
00201 base = base | T_COSSIN_CI ;
00202 indic_t = 1 ;
00203 break ;
00204
00205 case T_COSSIN_CI :
00206 base = base | T_COSSIN_CP ;
00207 indic_t = 1 ;
00208 break ;
00209
00210 case T_COSSIN_SP :
00211 base = base | T_COSSIN_SI ;
00212 indic_t = 1 ;
00213 break ;
00214
00215 case T_COSSIN_SI :
00216 base = base | T_COSSIN_SP ;
00217 indic_t = 1 ;
00218 break ;
00219
00220 default :
00221 break ;
00222 }
00223 break ;
00224
00225 case T_COSSIN_SP :
00226 switch (b2_t) {
00227 case T_COSSIN_CP :
00228 base = base | T_COSSIN_SP ;
00229 indic_t = 1 ;
00230 break ;
00231
00232 case T_COSSIN_CI :
00233 base = base | T_COSSIN_SI ;
00234 indic_t = 1 ;
00235 break ;
00236
00237 case T_COSSIN_SP :
00238 base = base | T_COSSIN_CP ;
00239 indic_t = 1 ;
00240 break ;
00241
00242 case T_COSSIN_SI :
00243 base = base | T_COSSIN_CI ;
00244 indic_t = 1 ;
00245 break ;
00246
00247 default :
00248 break ;
00249 }
00250 break ;
00251
00252 case T_COSSIN_SI :
00253 switch (b2_t) {
00254 case T_COSSIN_CP :
00255 base = base | T_COSSIN_SI ;
00256 indic_t = 1 ;
00257 break ;
00258
00259 case T_COSSIN_CI :
00260 base = base | T_COSSIN_SP ;
00261 indic_t = 1 ;
00262 break ;
00263
00264 case T_COSSIN_SP :
00265 base = base | T_COSSIN_CI ;
00266 indic_t = 1 ;
00267 break ;
00268
00269 case T_COSSIN_SI :
00270 base = base | T_COSSIN_CP ;
00271 indic_t = 1 ;
00272 break ;
00273
00274 default :
00275 break ;
00276 }
00277 break ;
00278
00279 case T_COS_P :
00280 switch (b2_t) {
00281 case T_COS_P :
00282 base = base | T_COS_P ;
00283 indic_t = 1 ;
00284 break ;
00285
00286 case T_COS_I :
00287 base = base | T_COS_I ;
00288 indic_t = 1 ;
00289 break ;
00290
00291 case T_SIN_I :
00292 base = base | T_SIN_I ;
00293 indic_t = 1 ;
00294 break ;
00295
00296 case T_SIN_P :
00297 base = base | T_SIN_P ;
00298 indic_t = 1 ;
00299 break ;
00300
00301 default :
00302 break ;
00303 }
00304 break ;
00305
00306 case T_COS_I :
00307 switch (b2_t) {
00308 case T_COS_P :
00309 base = base | T_COS_I ;
00310 indic_t = 1 ;
00311 break ;
00312
00313 case T_COS_I :
00314 base = base | T_COS_P ;
00315 indic_t = 1 ;
00316 break ;
00317
00318 case T_SIN_I :
00319 base = base | T_SIN_P ;
00320 indic_t = 1 ;
00321 break ;
00322
00323 case T_SIN_P :
00324 base = base | T_SIN_I ;
00325 indic_t = 1 ;
00326 break ;
00327
00328 default :
00329 break ;
00330 }
00331 break ;
00332
00333 case T_SIN_P :
00334 switch (b2_t) {
00335 case T_SIN_P :
00336 base = base | T_COS_P ;
00337 indic_t = 1 ;
00338 break ;
00339
00340 case T_COS_P :
00341 base = base | T_SIN_P ;
00342 indic_t = 1 ;
00343 break ;
00344
00345 case T_COS_I :
00346 base = base | T_SIN_I ;
00347 indic_t = 1 ;
00348 break ;
00349
00350 case T_SIN_I :
00351 base = base | T_COS_I ;
00352 indic_t = 1 ;
00353 break ;
00354
00355 default :
00356 break ;
00357 }
00358 break ;
00359
00360 case T_SIN_I :
00361 switch (b2_t) {
00362 case T_SIN_I :
00363 base = base | T_COS_P ;
00364 indic_t = 1 ;
00365 break ;
00366
00367 case T_COS_I :
00368 base = base | T_SIN_P ;
00369 indic_t = 1 ;
00370 break ;
00371
00372 case T_COS_P :
00373 base = base | T_SIN_I ;
00374 indic_t = 1 ;
00375 break ;
00376
00377 case T_SIN_P :
00378 base = base | T_COS_I ;
00379 indic_t = 1 ;
00380 break ;
00381
00382 default :
00383 break ;
00384 }
00385 break ;
00386
00387 case T_COSSIN_C :
00388 switch (b2_t) {
00389 case T_COSSIN_C :
00390 base = base | T_COSSIN_C ;
00391 indic_t = 1 ;
00392 break ;
00393
00394 case T_COSSIN_S :
00395 base = base | T_COSSIN_S ;
00396 indic_t = 1 ;
00397 break ;
00398
00399 default :
00400 break ;
00401 }
00402 break ;
00403
00404 case T_COSSIN_S :
00405 switch (b2_t) {
00406 case T_COSSIN_C :
00407 base = base | T_COSSIN_S ;
00408 indic_t = 1 ;
00409 break ;
00410
00411 case T_COSSIN_S :
00412 base = base | T_COSSIN_C ;
00413 indic_t = 1 ;
00414 break ;
00415
00416 default :
00417 break ;
00418 }
00419 break ;
00420
00421 case T_LEG_P :
00422 switch (b2_t) {
00423 case T_LEG_P :
00424 base = base | T_LEG_P ;
00425 indic_t = 1 ;
00426 break ;
00427 case T_LEG_I :
00428 base = base | T_LEG_I ;
00429 indic_t = 1 ;
00430 break ;
00431 default :
00432 break ;
00433 }
00434 break ;
00435
00436 case T_COS :
00437 switch (b2_t) {
00438 case T_COS :
00439 base = base | T_COS ;
00440 indic_t = 1 ;
00441 break ;
00442
00443 case T_SIN :
00444 base = base | T_SIN ;
00445 indic_t = 1 ;
00446 break ;
00447
00448 default :
00449 break ;
00450 }
00451 break ;
00452
00453 case T_SIN :
00454 switch (b2_t) {
00455 case T_SIN :
00456 base = base | T_COS ;
00457 indic_t = 1 ;
00458 break ;
00459
00460 case T_COS :
00461 base = base | T_SIN ;
00462 indic_t = 1 ;
00463 break ;
00464
00465 default :
00466 break ;
00467 }
00468 break ;
00469
00470 case T_LEG_I :
00471 switch (b2_t) {
00472 case T_LEG_P :
00473 base = base | T_LEG_I ;
00474 indic_t = 1 ;
00475 break ;
00476 case T_LEG_I :
00477 base = base | T_LEG_P ;
00478 indic_t = 1 ;
00479 break ;
00480 default :
00481 break ;
00482 }
00483 break ;
00484
00485
00486 case T_LEG :
00487 switch (b2_t) {
00488 case T_LEG :
00489 base = base | T_LEG ;
00490 indic_t = 1 ;
00491 break ;
00492
00493 default :
00494 break ;
00495 }
00496 break ;
00497
00498 case T_LEG_MP :
00499 switch (b2_t) {
00500 case T_LEG_MP :
00501 base = base | T_LEG_MP ;
00502 indic_t = 1 ;
00503 break ;
00504
00505 case T_LEG_MI :
00506 base = base | T_LEG_MI ;
00507 indic_t = 1 ;
00508 break ;
00509
00510 default :
00511 break ;
00512 }
00513 break ;
00514
00515 case T_LEG_MI :
00516 switch (b2_t) {
00517 case T_LEG_MP :
00518 base = base | T_LEG_MI ;
00519 indic_t = 1 ;
00520 break ;
00521
00522 case T_LEG_MI :
00523 base = base | T_LEG_MP ;
00524 indic_t = 1 ;
00525 break ;
00526
00527 default :
00528 break ;
00529 }
00530 break ;
00531
00532
00533 default :
00534 break ;
00535 }
00536
00537 switch (b1_r) {
00538
00539 case R_CHEB :
00540 switch (b2_r) {
00541 case R_CHEB :
00542 base = base | R_CHEB ;
00543 indic_r = 1 ;
00544 break ;
00545
00546 default :
00547 break ;
00548 }
00549 break ;
00550
00551 case R_JACO02 :
00552 switch (b2_r) {
00553 case R_JACO02 :
00554 base = base | R_JACO02 ;
00555 indic_r = 1 ;
00556 break ;
00557
00558 default :
00559 break ;
00560 }
00561 break ;
00562
00563 case R_CHEBU :
00564 switch (b2_r) {
00565 case R_CHEBU :
00566 base = base | R_CHEBU ;
00567 indic_r = 1 ;
00568 break ;
00569
00570 default :
00571 break ;
00572 }
00573 break ;
00574
00575 case R_CHEBPIM_P :
00576 switch (b2_r) {
00577 case R_CHEBPIM_P :
00578 base = base | R_CHEBPIM_P ;
00579 indic_r = 1 ;
00580 break ;
00581
00582 case R_CHEBPIM_I :
00583 base = base | R_CHEBPIM_I ;
00584 indic_r = 1 ;
00585 break ;
00586
00587 default :
00588 break ;
00589 }
00590 break ;
00591
00592 case R_CHEBPIM_I :
00593 switch (b2_r) {
00594 case R_CHEBPIM_P :
00595 base = base | R_CHEBPIM_I ;
00596 indic_r = 1 ;
00597 break ;
00598
00599 case R_CHEBPIM_I :
00600 base = base | R_CHEBPIM_P ;
00601 indic_r = 1 ;
00602 break ;
00603
00604 default :
00605 break ;
00606 }
00607 break ;
00608
00609 case R_CHEBPI_I :
00610 switch (b2_r) {
00611 case R_CHEBPI_P :
00612 base = base | R_CHEBPI_I ;
00613 indic_r = 1 ;
00614 break ;
00615
00616 case R_CHEBPI_I :
00617 base = base | R_CHEBPI_P ;
00618 indic_r = 1 ;
00619 break ;
00620
00621 default :
00622 break ;
00623 }
00624 break ;
00625
00626 case R_CHEBPI_P :
00627 switch (b2_r) {
00628 case R_CHEBPI_P :
00629 base = base | R_CHEBPI_P ;
00630 indic_r = 1 ;
00631 break ;
00632
00633 case R_CHEBPI_I :
00634 base = base | R_CHEBPI_I ;
00635 indic_r = 1 ;
00636 break ;
00637
00638 default :
00639 break ;
00640 }
00641 break ;
00642
00643 case R_CHEBP :
00644 switch (b2_r) {
00645 case R_CHEBP :
00646 base = base | R_CHEBP ;
00647 indic_r = 1 ;
00648 break ;
00649
00650 case R_CHEBI :
00651 base = base | R_CHEBI ;
00652 indic_r = 1 ;
00653 break ;
00654
00655 default :
00656 break ;
00657 }
00658 break ;
00659
00660 case R_CHEBI :
00661 switch (b2_r) {
00662 case R_CHEBP :
00663 base = base | R_CHEBI ;
00664 indic_r = 1 ;
00665 break ;
00666
00667 case R_CHEBI :
00668 base = base | R_CHEBP ;
00669 indic_r = 1 ;
00670 break ;
00671
00672 default :
00673 break ;
00674 }
00675 break ;
00676
00677 default :
00678 break ;
00679 }
00680
00681 if (indic_r*indic_t*indic_p == -1)
00682 indic_total = -1 ;
00683
00684 res.b[l] = base ;
00685 }
00686
00687 if (indic_total == -1)
00688 res.set_base_nondef() ;
00689
00690 return res ;
00691 }