Skip to content

Sybenzvi/windows fixes #18

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 12 commits into
base: main
Choose a base branch
from
22 changes: 16 additions & 6 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [macos-latest] # [macos-latest, ubuntu-latest, windows-latest]
os: [macos-latest, windows-latest] # [macos-latest, ubuntu-latest, windows-latest]
python-version: ['3.10', '3.11', '3.12']
runs-on: ${{ matrix.os }}

Expand All @@ -42,16 +42,26 @@ jobs:
if: ${{ startsWith(matrix.os, 'ubuntu') }}
run: |
exit 1 # TODO: Add Ubuntu dependencies here
- name: Install dependencies (Windows)
if: ${{ startsWith(matrix.os, 'windows') }}
run: |
exit 1 # TODO: Add Windows dependencies here
# - name: Install dependencies (Windows)
# if: ${{ startsWith(matrix.os, 'windows') }}
# run: |
# exit 1 # TODO: Add Windows dependencies here

- name: Install BEMEWS
- name: Install BEMEWS (macOS)
if: ${{ startsWith(matrix.os, 'macos') }}
run: |
python -m build
ls -al dist/
pip install dist/*.whl

- name: Install BEMEWS (Windows)
if: ${{ startsWith(matrix.os, 'windows') }}
run: |
python -m build
dir dist
#- Wheel not being built, turn this off.
# pip install "dist\*.whl"

- name: Run example script
run: |
python BEMEWS_example.py
Expand Down
76 changes: 67 additions & 9 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,30 +1,88 @@
#!/usr/bin/env python

import os
import platform
from setuptools import setup
from setuptools.extension import Extension
import sysconfig
import pybind11


# All package metadata is contained in `pyproject.toml`.
# Here, we only run code to set up environment variables for compilation of
# the binary extension and register it with the `ext_modules` argument.

LIBOMP_INCLUDE = os.environ['LIBOMP_INCLUDE']
PYBIND11_INCLUDE = os.path.join(pybind11.__path__[0], "include")

# Set up libraries and includes
include_dirs = [
PYBIND11_INCLUDE,
'./src/BEMEWS/_ext',
'./src/BEMEWS/_ext/mstl',
'./src/BEMEWS/_ext/mstl/math2',
'./src/BEMEWS/_ext/mstl/math2/algebra',
'./src/BEMEWS/_ext/mstl/math2/analysis',
'./src/BEMEWS/_ext/mstl/math2/spline',
'./src/BEMEWS/_ext/mstl/physics'
]

if os.name == 'posix': # macOS or Linux
LIBDIR = sysconfig.get_config_var('LIBDIR')
if platform.system() == 'Darwin':
# Must have LIBOMP_INCLUDE env variable in macOS
LIBOMP_INCLUDE = os.environ['LIBOMP_INCLUDE']
include_dirs = [LIBOMP_INCLUDE] + include_dirs
elif os.name == 'nt': # Windows
LIBDIR = sysconfig.get_config_var('LIBDEST')

BEMEWS = Extension('BEMEWS._ext',
define_macros = [('MAJOR_VERSION', '1'), ('MINOR_VERSION', '0')],
include_dirs = [LIBOMP_INCLUDE, PYBIND11_INCLUDE, './src/BEMEWS/_ext', './src/BEMEWS/_ext/mstl', './src/BEMEWS/_ext/mstl/math2', './src/BEMEWS/_ext/mstl/math2/algebra', './src/BEMEWS/_ext/mstl/math2/analysis', './src/BEMEWS/_ext/mstl/math2/spline', './src/BEMEWS/_ext/mstl/physics'],
# libraries = ['stdc++', 'm', 'gomp', 'python3'],
library_dirs = [LIBDIR],
extra_compile_args = ['-std=c++17', '-fPIC', '-nostartfiles'],
# extra_link_args = ['-shared'],
sources = ['./src/BEMEWS/_ext/BEMEWS.cpp', './src/BEMEWS/_ext/adiabatic_basis.cpp', './src/BEMEWS/_ext/eigenvalues.cpp', './src/BEMEWS/_ext/flavour_basis.cpp', './src/BEMEWS/_ext/input_class.BEMEWS.cpp', './src/BEMEWS/_ext/jacobians.cpp', './src/BEMEWS/_ext/mixing_angles.cpp', './src/BEMEWS/_ext/output.BEMEWS.cpp', './src/BEMEWS/_ext/output_matrix.BEMEWS.cpp', './src/BEMEWS/_ext/parameters.cpp', './src/BEMEWS/_ext/potentials.cpp', './src/BEMEWS/_ext/RK.BEMEWS.cpp', './src/BEMEWS/_ext/update.BEMEWS.cpp', './src/BEMEWS/_ext/mstl/errors2.cpp', './src/BEMEWS/_ext/mstl/messages.cpp', './src/BEMEWS/_ext/mstl/miscellaneous functions.cpp', './src/BEMEWS/_ext/mstl/stdarg2.cpp', './src/BEMEWS/_ext/mstl/math2/algebra/column and row vectors.cpp', './src/BEMEWS/_ext/mstl/math2/algebra/linear algebra.cpp', './src/BEMEWS/_ext/mstl/math2/algebra/mmatrix.cpp', './src/BEMEWS/_ext/mstl/math2/analysis/algorithm3.cpp', './src/BEMEWS/_ext/mstl/math2/analysis/complex2.cpp', './src/BEMEWS/_ext/mstl/math2/analysis/derivative.cpp', './src/BEMEWS/_ext/mstl/math2/analysis/polynomial.cpp', './src/BEMEWS/_ext/mstl/math2/analysis/roots.cpp', './src/BEMEWS/_ext/mstl/math2/analysis/runge kutta.cpp', './src/BEMEWS/_ext/mstl/math2/analysis/special functions.cpp', './src/BEMEWS/_ext/mstl/math2/spline/discontinuous.cpp', './src/BEMEWS/_ext/mstl/math2/spline/interpolation data.cpp', './src/BEMEWS/_ext/mstl/physics/units and constants.cpp'])
define_macros = [
('MAJOR_VERSION', '1'),
('MINOR_VERSION', '0')
],
include_dirs = include_dirs,
#
# libraries = ['stdc++', 'm', 'gomp', 'python3'],
#
library_dirs = [LIBDIR],
extra_compile_args = [
'-std=c++17',
'-fPIC',
'-nostartfiles'
],
#
# extra_link_args = ['-shared'],
#
sources = [
'./src/BEMEWS/_ext/BEMEWS.cpp',
'./src/BEMEWS/_ext/adiabatic_basis.cpp',
'./src/BEMEWS/_ext/eigenvalues.cpp',
'./src/BEMEWS/_ext/flavour_basis.cpp',
'./src/BEMEWS/_ext/input_class.BEMEWS.cpp',
'./src/BEMEWS/_ext/jacobians.cpp',
'./src/BEMEWS/_ext/mixing_angles.cpp',
'./src/BEMEWS/_ext/output.BEMEWS.cpp',
'./src/BEMEWS/_ext/output_matrix.BEMEWS.cpp',
'./src/BEMEWS/_ext/parameters.cpp',
'./src/BEMEWS/_ext/potentials.cpp',
'./src/BEMEWS/_ext/RK.BEMEWS.cpp',
'./src/BEMEWS/_ext/update.BEMEWS.cpp',
'./src/BEMEWS/_ext/mstl/errors2.cpp',
'./src/BEMEWS/_ext/mstl/messages.cpp',
'./src/BEMEWS/_ext/mstl/miscellaneous functions.cpp',
'./src/BEMEWS/_ext/mstl/stdarg2.cpp',
'./src/BEMEWS/_ext/mstl/math2/algebra/column and row vectors.cpp',
'./src/BEMEWS/_ext/mstl/math2/algebra/linear algebra.cpp',
'./src/BEMEWS/_ext/mstl/math2/algebra/mmatrix.cpp',
'./src/BEMEWS/_ext/mstl/math2/analysis/algorithm3.cpp',
'./src/BEMEWS/_ext/mstl/math2/analysis/complex2.cpp',
'./src/BEMEWS/_ext/mstl/math2/analysis/derivative.cpp',
'./src/BEMEWS/_ext/mstl/math2/analysis/polynomial.cpp',
'./src/BEMEWS/_ext/mstl/math2/analysis/roots.cpp',
'./src/BEMEWS/_ext/mstl/math2/analysis/runge kutta.cpp',
'./src/BEMEWS/_ext/mstl/math2/analysis/special functions.cpp',
'./src/BEMEWS/_ext/mstl/math2/spline/discontinuous.cpp',
'./src/BEMEWS/_ext/mstl/math2/spline/interpolation data.cpp',
'./src/BEMEWS/_ext/mstl/physics/units and constants.cpp'
])

setup(ext_modules=[BEMEWS])
80 changes: 40 additions & 40 deletions src/BEMEWS/_ext/BEMEWS.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ vector<vector<vector<vector<double> > > > Run(InputDataBEMEWS ID)
kV = vector<array<double,NF> >(NE);
HfV=vector<vector<MATRIX<complex<double>,NF,NF> > >(NM,vector<MATRIX<complex<double>,NF,NF> >(NE));

// vectors of energies at infinity and vacuum eigenvalues at infinity
// vectors of energies at infinity and vacuum eigenvalues at infinity
for(i=0;i<=NE-1;i++)
{ if(NE>1){ E[i] = ((NE-1.-i)*Emin + i*Emax) / (NE-1.);}
else{ E[i] = Emin;}
Expand All @@ -202,7 +202,7 @@ vector<vector<vector<vector<double> > > > Run(InputDataBEMEWS ID)

// vaccum mixing matrices and Hamiltonians at infinity
Evaluate_UV();
Evaluate_HfV();
Evaluate_HfV();

// *****************************************************
// quantities evaluated at inital point
Expand All @@ -223,7 +223,7 @@ vector<vector<vector<vector<double> > > > Run(InputDataBEMEWS ID)
U0 = vector<vector<MATRIX<complex<double>,NF,NF> > >(NM,vector<MATRIX<complex<double>,NF,NF> >(NE));

// mixing angles to MSW basis at initial point
for(i=0;i<=NE-1;i++)
for(i=0;i<=NE-1;i++)
{ Hf0=HfV[nu][i]+VfMSW0;
k0=k(Hf0);
deltak0=deltak(k0);
Expand Down Expand Up @@ -284,12 +284,12 @@ vector<vector<vector<vector<double> > > > Run(InputDataBEMEWS ID)
lasttime = false;

// take into account the density jump from vacuum into Earth
#pragma omp parallel for schedule(static)
#pragma omp parallel for schedule(static)
for(i=0;i<=NE-1;i++){
for(state m=nu;m<=antinu;m++){
Scumulative[m][i] = Adjoint(U0[m][i])*UV[m];
}
}
}

// loop through the domains
for(int d=0;d<=ND-1;d++)
Expand All @@ -303,25 +303,25 @@ vector<vector<vector<vector<double> > > > Run(InputDataBEMEWS ID)
// initialize at beginning of every domain
lambda=lambdamin; dlambda=1e-3*cgs::units::cm; deltalambdamin=4.*lambda*numeric_limits<double>::epsilon();

#pragma omp parallel for schedule(static)
#pragma omp parallel for schedule(static)
for(i=0;i<=NE-1;i++){
for(state m=nu;m<=antinu;m++){
Y[m][i][0]=M_PI/2.;
Y[m][i][1]=M_PI/2.;
Y[m][i][2]=M_PI/2.;
Y[m][i][3]=M_PI/2.;
Y[m][i][1]=M_PI/2.;
Y[m][i][2]=M_PI/2.;
Y[m][i][3]=M_PI/2.;
Y[m][i][4]=0.;
Y[m][i][5]=M_PI/2.;
Y[m][i][6]=M_PI/2.;
Y[m][i][6]=M_PI/2.;
Y[m][i][7]=0;

Y[m][i][8]=1.;

Y[m][i][9]=0.;
Y[m][i][10]=0.;
Y[m][i][11]=0.;
}
}
Y[m][i][10]=0.;
Y[m][i][11]=0.;
}
}

finish = false;
counterout=1;
Expand Down Expand Up @@ -361,8 +361,8 @@ vector<vector<vector<vector<double> > > > Run(InputDataBEMEWS ID)
for(i=0;i<=NE-1;i++){
for(state m=nu;m<=antinu;m++){
for(int j=0;j<=NY-1;j++){ Y[m][i][j] += BB[1][0] * Ks[0][m][i][j];}
}
}
}
}
K(lambda,dlambda,Y,Ks[1]);

// remaining steps
Expand All @@ -372,11 +372,11 @@ vector<vector<vector<vector<double> > > > Run(InputDataBEMEWS ID)
#pragma omp parallel for schedule(static)
for(i=0;i<=NE-1;i++){
for(state m = nu; m <= antinu; m++){
for(int j=0;j<=NY-1;j++){
for(int l=0;l<=k-1;l++){ Y[m][i][j] += BB[k][l] * Ks[l][m][i][j];}
}
}
}
for(int j=0;j<=NY-1;j++){
for(int l=0;l<=k-1;l++){ Y[m][i][j] += BB[k][l] * Ks[l][m][i][j];}
}
}
}
K(lambda,dlambda,Y,Ks[k]);
}

Expand All @@ -387,11 +387,11 @@ vector<vector<vector<vector<double> > > > Run(InputDataBEMEWS ID)
for(state m=nu;m<=antinu;m++){
for(int j=0;j<=NY-1;j++){
Y[m][i][j]=Y0[m][i][j];
Yerror[m][i][j]=0.;
for(int k=0;k<=NRK-1;k++){
Yerror[m][i][j]=0.;
for(int k=0;k<=NRK-1;k++){
Y[m][i][j]+=CC[k]*Ks[k][m][i][j];
Yerror[m][i][j]+=(CC[k]-DD[k])*Ks[k][m][i][j];
}
Yerror[m][i][j]+=(CC[k]-DD[k])*Ks[k][m][i][j];
}
}
}
}
Expand All @@ -401,7 +401,7 @@ vector<vector<vector<vector<double> > > > Run(InputDataBEMEWS ID)
for(state m=nu;m<=antinu;m++){
for(i=0;i<=NE-1;i++){
for(int j=0;j<=NY-1;j++){ maxerror = max( maxerror, fabs(Yerror[m][i][j]) );}
}
}
}

// decide whether to accept step, if not adjust step size
Expand All @@ -425,29 +425,29 @@ vector<vector<vector<vector<double> > > > Run(InputDataBEMEWS ID)
resetflag = false;

// test that the S matrix is close to diagonal
if( norm(SS[0][0])+0.1<norm(SS[0][1]) || norm(SS[0][0])+0.1<norm(SS[0][2]) ){ resetflag = true;}
if( norm(SS[0][1])+0.1<norm(SS[0][2]) ){ resetflag = true;}
if( norm(SS[2][2])+0.1<norm(SS[1][2]) ){ resetflag = true;}
if( norm(SS[0][0])+0.1<norm(SS[0][1]) || norm(SS[0][0])+0.1<norm(SS[0][2]) ){ resetflag = true;}
if( norm(SS[0][1])+0.1<norm(SS[0][2]) ){ resetflag = true;}
if( norm(SS[2][2])+0.1<norm(SS[1][2]) ){ resetflag = true;}

if(resetflag!=false)
if(resetflag!=false)
{ // reset the S matrices
Scumulative[m][i]=MATRIX<complex<double>,NF,NF>( SS*Scumulative[m][i] );

Y[m][i][0]=Y[m][i][1]=Y[m][i][2]=Y[m][i][3]=M_PI/2.; Y[m][i][4]=0.;
Y[m][i][5]=Y[m][i][6]=M_PI/2.; Y[m][i][7]=0.;
Y[m][i][8]=1.;
Y[m][i][8]=1.;
Y[m][i][9]=Y[m][i][10]=Y[m][i][11]=0.;
}
else{ // take modulo 2 pi of phase angles
Y[m][i][4]=fmod(Y[m][i][4],M_2PI);
Y[m][i][7]=fmod(Y[m][i][7],M_2PI);

double ipart;
Y[m][i][9]=modf(Y[m][i][9],&ipart);
Y[m][i][10]=modf(Y[m][i][10],&ipart);
Y[m][i][11]=modf(Y[m][i][11],&ipart);
}
}
Y[m][i][4]=fmod(Y[m][i][4],M_2PI);
Y[m][i][7]=fmod(Y[m][i][7],M_2PI);

double ipart;
Y[m][i][9]=modf(Y[m][i][9],&ipart);
Y[m][i][10]=modf(Y[m][i][10],&ipart);
Y[m][i][11]=modf(Y[m][i][11],&ipart);
}
}
}

if(counterout==step){ if(ID.outputflag==true){ output=true;} else{ output=false;}; counterout=1;} else{ counterout++;}
Expand Down
2 changes: 1 addition & 1 deletion src/BEMEWS/_ext/mstl/math2/analysis/runge kutta.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ void RungeKuttaCashKarpParameters(int &NRK,int &NOrder,const double* &A,const do
{ NRK=6; NOrder=5;

static const double a[]={ 0., 1./5., 3./10., 3./5., 1., 7./8. };
static const double b0[]={};
static const double b0[1]={};
static const double b1[]={ 1./5. };
static const double b2[]={ 3./40.,9./40. };
static const double b3[]={ 3./10.,-9./10.,6./5. };
Expand Down
6 changes: 6 additions & 0 deletions src/BEMEWS/_ext/mstl/math2/number.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@

#define M_SQRTPI 1.772453850905516027298167 // sqrt of pi
#define M_1_SQRTPI 0.564189583547756286948 // reciprocal of sqrt pi
#ifndef M_PI
#define M_PI M_SQRTPI*M_SQRTPI // needed by some compilers
#endif // M_PI
#define M_2PI 6.283185307179586476925286766559 // 2 pi
#define M_4PI 2.*M_2PI // 4 pi
#define M_PI2 M_PI*M_PI // pi ^2
Expand All @@ -27,6 +30,9 @@
#define M_2PI_3 M_2PI / 3. // 2pi / 3
#define M_4PI_3 2.* M_2PI_3 // 4pi / 3

#ifndef M_SQRT2
#define M_SQRT2 1.4142135623730951455 // sqrt of 2 (needed by some compilers)
#endif // M_SQRT2
#define M_SQRT3 1.7320508075688772935 // sqrt of 3
#define M_SQRT5 2.2360679774997896964 // sqrt of 5
#define M_SQRT6 M_SQRT2*M_SQRT3 // sqrt of 6
Expand Down
Loading