Ignore:
Timestamp:
Jul 31, 2018 4:36:52 AM (6 years ago)
Author:
Torin Cooper-Bennun <torin.cooper-bennun@…>
Branches:
ESS_GUI, ESS_GUI_batch_fitting, ESS_GUI_bumps_abstraction, ESS_GUI_iss1116, ESS_GUI_iss879, ESS_GUI_opencl, ESS_GUI_ordering, ESS_GUI_sync_sascalc
Children:
d9b7197
Parents:
3067196
git-author:
Torin Cooper-Bennun <torin.cooper-bennun@…> (07/30/18 10:35:02)
git-committer:
Torin Cooper-Bennun <torin.cooper-bennun@…> (07/31/18 04:36:52)
Message:

Cherry-pick changes from master for tinycc compatibility (note: tinycc compilation not yet supported fully):

144e032af2 tinycc doesn't return structures, so must pass return structure as pointer
a1daf86c0d hack around broken isfinite/isnan in tinycc
7e82256ecb declare all variables at the start of the block so C89 compilers don't complain

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/sas/sascalc/calculator/c_extensions/sld2i.c

    re6f2009 rf54e82cf  
    5353        polar_sld b_sld; 
    5454        double qr = 0.0; 
    55         complex iqr = cassign(0.0, 0.0); 
    56         complex ephase = cassign(0.0, 0.0); 
    57         complex comp_sld = cassign(0.0, 0.0); 
    58  
    59         complex sumj_uu; 
    60         complex sumj_ud; 
    61         complex sumj_du; 
    62         complex sumj_dd; 
    63         complex temp_fi; 
     55        Cplx iqr; 
     56        Cplx ephase; 
     57        Cplx comp_sld; 
     58 
     59        Cplx sumj_uu; 
     60        Cplx sumj_ud; 
     61        Cplx sumj_du; 
     62        Cplx sumj_dd; 
     63        Cplx temp_fi; 
     64 
     65        int i, j; 
    6466 
    6567        double count = 0.0; 
    6668        //check if this computation is for averaging 
     69 
     70        cassign(&iqr, 0.0, 0.0); 
     71        cassign(&ephase, 0.0, 0.0); 
     72        cassign(&comp_sld, 0.0, 0.0); 
    6773 
    6874        //Assume that pixel volumes are given in vol_pix in A^3 unit 
     
    7278 
    7379        // Loop over q-values and multiply apply matrix 
    74         int i; 
    7580        for(i=0; i<npoints; i++){ 
    7681                //I_out[i] = 0.0; 
    77                 sumj_uu = cassign(0.0, 0.0); 
    78                 sumj_ud = cassign(0.0, 0.0); 
    79                 sumj_du = cassign(0.0, 0.0); 
    80                 sumj_dd = cassign(0.0, 0.0); 
    81                 //printf ("%d ", i); 
     82                cassign(&sumj_uu, 0.0, 0.0); 
     83                cassign(&sumj_ud, 0.0, 0.0); 
     84                cassign(&sumj_du, 0.0, 0.0); 
     85                cassign(&sumj_dd, 0.0, 0.0); 
     86                //printf("i: %d\n", i); 
    8287                //q = sqrt(qx[i]*qx[i] + qy[i]*qy[i]); // + qz[i]*qz[i]); 
    83                 int j; 
    8488                for(j=0; j<this->n_pix; j++){ 
    8589                        if (this->sldn_val[j]!=0.0 
     
    8892                                ||this->mz_val[j]!=0.0) 
    8993                        { 
     94                            // printf("i,j: %d,%d\n", i,j); 
    9095                                //anisotropic 
    91                                 temp_fi = cassign(0.0, 0.0); 
    92                                 b_sld = cal_msld(0, qx[i], qy[i], this->sldn_val[j], 
     96                                cassign(&temp_fi, 0.0, 0.0); 
     97                                cal_msld(&b_sld, 0, qx[i], qy[i], this->sldn_val[j], 
    9398                                                         this->mx_val[j], this->my_val[j], this->mz_val[j], 
    9499                                                         this->inspin, this->outspin, this->stheta); 
    95100                                qr = (qx[i]*this->x_val[j] + qy[i]*this->y_val[j]); 
    96                                 iqr = cassign(0.0, qr); 
    97                                 ephase = cplx_exp(iqr); 
     101                                cassign(&iqr, 0.0, qr); 
     102                                cplx_exp(&ephase, iqr); 
    98103 
    99104                                //Let's multiply pixel(atomic) volume here 
    100                                 ephase = rcmult(this->vol_pix[j], ephase); 
     105                                rcmult(&ephase, this->vol_pix[j], ephase); 
    101106                                //up_up 
    102107                                if (this->inspin > 0.0 && this->outspin > 0.0){ 
    103                                         comp_sld = cassign(b_sld.uu, 0.0); 
    104                                         temp_fi = cplx_mult(comp_sld, ephase); 
    105                                         sumj_uu = cplx_add(sumj_uu, temp_fi); 
     108                                        cassign(&comp_sld, b_sld.uu, 0.0); 
     109                                        cplx_mult(&temp_fi, comp_sld, ephase); 
     110                                        cplx_add(&sumj_uu, sumj_uu, temp_fi); 
    106111                                } 
    107112                                //down_down 
    108113                                if (this->inspin < 1.0 && this->outspin < 1.0){ 
    109                                         comp_sld = cassign(b_sld.dd, 0.0); 
    110                                         temp_fi = cplx_mult(comp_sld, ephase); 
    111                                         sumj_dd = cplx_add(sumj_dd, temp_fi); 
     114                                        cassign(&comp_sld, b_sld.dd, 0.0); 
     115                                        cplx_mult(&temp_fi, comp_sld, ephase); 
     116                                        cplx_add(&sumj_dd, sumj_dd, temp_fi); 
    112117                                } 
    113118                                //up_down 
    114119                                if (this->inspin > 0.0 && this->outspin < 1.0){ 
    115                                         comp_sld = cassign(b_sld.re_ud, b_sld.im_ud); 
    116                                         temp_fi = cplx_mult(comp_sld, ephase); 
    117                                         sumj_ud = cplx_add(sumj_ud, temp_fi); 
     120                                        cassign(&comp_sld, b_sld.re_ud, b_sld.im_ud); 
     121                                        cplx_mult(&temp_fi, comp_sld, ephase); 
     122                                        cplx_add(&sumj_ud, sumj_ud, temp_fi); 
    118123                                } 
    119124                                //down_up 
    120125                                if (this->inspin < 1.0 && this->outspin > 0.0){ 
    121                                         comp_sld = cassign(b_sld.re_du, b_sld.im_du); 
    122                                         temp_fi = cplx_mult(comp_sld, ephase); 
    123                                         sumj_du = cplx_add(sumj_du, temp_fi); 
    124                                 } 
    125  
     126                                        cassign(&comp_sld, b_sld.re_du, b_sld.im_du); 
     127                                        cplx_mult(&temp_fi, comp_sld, ephase); 
     128                                        cplx_add(&sumj_du, sumj_du, temp_fi); 
     129                                } 
    126130 
    127131                                if (i == 0){ 
     
    158162        //Assume that pixel volumes are given in vol_pix in A^3 unit 
    159163        // Loop over q-values and multiply apply matrix 
    160         int i;    
     164    int i, j, k; 
    161165        for(i=0; i<npoints; i++){ 
    162166                sumj =0.0; 
    163                 int j; 
    164167                for(j=0; j<n_pix; j++){ 
    165168                        //Isotropic: Assumes all slds are real (no magnetic) 
     
    179182                                //full calculation 
    180183                                //pragma omp parallel for 
    181                                 int k; 
    182184                                for(k=0; k<n_pix; k++){ 
    183185                                        sld_j =  this->sldn_val[j] * this->sldn_val[k] * this->vol_pix[j] * this->vol_pix[k]; 
Note: See TracChangeset for help on using the changeset viewer.