cancel
Showing results for
Search instead for
Did you mean:

# Archives Discussions

Journeyman III

## Opencl math question New to opencl trying to convert octave to opencl getting different results

I just need a little help converting these lines of octave to opencl i guess i'm confused on the translation ^ to pow her is octave/opencl code but the results are not the same

v1=0.3;

E1=(207*(10^9));

E2=(3*(10^6));

v2=0.49;

octave

Er=1/(1/pi*((1-v1^2)/E1+(1-v2^2)/E2));%MPa

DEFACTOR=(6*n*U*B^2)/Er/(sigma^3);

my opencl attempt at translation

Er=(1.00/(1.00/pi*((1.00-pow(v1 ,2))/E1+(1.00-pow(v2, 2))/E2)));           //MPa

DEFACTOR=6*n*U*pow(B,2)/Er/pow(sigma,3);

octave results

//er 1.2402e+07

//DEFACTOR 30.962

opencl results

Er 139.336666

DEFACTOR -0.000003

not sure what i've done wrong but if someone sees it please help

Thanks chocjulio

1 Solution
Journeyman III

Thanks for your reply! No i was not able to figure out why i get different results it is very strange

n=0.01; //Pa-s

U=1;    //m/s

how would you translate this line in opencl?

E1=(207*(10^9));

Thanks Choc

EDIT: I did figure out sry its been a long project the correct answer was in the c translation c99 translation

http://stackoverflow.com/questions/21363729/opencl-math-new-to-opencl-trying-to-convert-octave-to-op...

`#include <math.h>#include <stdio.h>int main(int argc, char *argv[]){  double v1 = 0.3;  double E1 = (207*(1e9));  double E2 = (3*(1e6));  double v2 = 0.49;  double pi = M_PI;  double Ers = (1.00/(1.00/pi*((1.00-pow(v1,2))/E1+(1.00-pow(v2, 2))/E2)));  printf("Ers = %g\n", Ers);  return 0;}`

3 Replies
Staff

Is your issue resolved? We don't have the values of n and U to reproduce your problem.

Your OpenCL translation seems to be correct. Maybe expressing E1 and E2 also in terms of the pow() function would help, as n, U, E1, and E2 are the only variables (i.e. whose values can differ between the Octave version and the OpenCL version) that can influence the differing results.

Journeyman III

Thanks for your reply! No i was not able to figure out why i get different results it is very strange

n=0.01; //Pa-s

U=1;    //m/s

how would you translate this line in opencl?

E1=(207*(10^9));

Thanks Choc

EDIT: I did figure out sry its been a long project the correct answer was in the c translation c99 translation

http://stackoverflow.com/questions/21363729/opencl-math-new-to-opencl-trying-to-convert-octave-to-op...

`#include <math.h>#include <stdio.h>int main(int argc, char *argv[]){  double v1 = 0.3;  double E1 = (207*(1e9));  double E2 = (3*(1e6));  double v2 = 0.49;  double pi = M_PI;  double Ers = (1.00/(1.00/pi*((1.00-pow(v1,2))/E1+(1.00-pow(v2, 2))/E2)));  printf("Ers = %g\n", Ers);  return 0;}`

Can you try the following translation for E1 and E2 and report back?:

E1 = (double)(207*pow((double)10, 9))

E2 = (double)(3*pow((double)10,6))

With this change, we got the same Er result in OpenCL as your Er result using Octave.
Defactor uses additional variables (B, sigma), so we could not verify the result for that variable.