Commit 2c90922a authored by Cianciosa, Mark's avatar Cianciosa, Mark
Browse files

Merge branch 'vmec' into 'main'

Add Stellarator support

See merge request !22
parents 29c4a08a 4cbf417d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -67,7 +67,7 @@ void bench_runner() {
            ky->set(static_cast<T> (0.0));
            kz->set(static_cast<T> (0.0));

            auto eq = equilibrium::make_efit<T> (NC_FILE);
            auto eq = equilibrium::make_efit<T> (EFIT_FILE);

            const T endtime = static_cast<T> (1.0);
            const T dt = endtime/static_cast<T> (NUM_TIMES);
+259 −49
Original line number Diff line number Diff line
@@ -17,6 +17,96 @@ const bool write_step = true;
const bool print_expressions = false;
const bool verbose = true;

//------------------------------------------------------------------------------
///  @brief Initalize random rays for efit.
///
///  @tparam T         Base type of the calculation.
///  @tparam B         Base type of T.
///  @tparam SAFE_MATH Use safe math operations.
///
///  @params[in,out] omega    Frequency variable.
///  @params[in,out] x        X variable.
///  @params[in,out] y        Y variable.
///  @params[in,out] z        Z variable.
///  @params[in,out] ky       Ky variable.
///  @params[in,out] kz       Kz variable.
///  @params[in,out] engine   Random engine.
///  @params[in]     num_rays Numbers of rays.
//------------------------------------------------------------------------------
template<typename T, typename B, bool SAFE_MATH> 
void init_efit(graph::shared_leaf<T, SAFE_MATH> omega,
               graph::shared_leaf<T, SAFE_MATH> x,
               graph::shared_leaf<T, SAFE_MATH> y,
               graph::shared_leaf<T, SAFE_MATH> z,
               graph::shared_leaf<T, SAFE_MATH> ky,
               graph::shared_leaf<T, SAFE_MATH> kz,
               std::mt19937_64 engine,
               const size_t num_rays) {
    std::normal_distribution<B> norm_dist1(static_cast<B> (700.0),
                                           static_cast<B> (10.0));
    std::normal_distribution<B> norm_dist2(static_cast<B> (0.0),
                                           static_cast<B> (0.05));
    std::normal_distribution<B> norm_dist3(static_cast<B> (-100.0),
                                           static_cast<B> (10.0));
    std::normal_distribution<B> norm_dist4(static_cast<B> (0.0),
                                           static_cast<B> (10.0));

    for (size_t j = 0; j < num_rays; j++) {
        omega->set(j, static_cast<T> (norm_dist1(engine)));
        x->set(j, static_cast<T> (2.5*cos(norm_dist2(engine)/2.5)));
        y->set(j, static_cast<T> (2.5*sin(norm_dist2(engine)/2.5)));
        z->set(j, static_cast<T> (norm_dist2(engine)));
        ky->set(j, static_cast<T> (norm_dist3(engine)));
        kz->set(j, static_cast<T> (norm_dist4(engine)));
    }
}

//------------------------------------------------------------------------------
///  @brief Initalize random rays for vmec.
///
///  @tparam T         Base type of the calculation.
///  @tparam B         Base type of T.
///  @tparam SAFE_MATH Use safe math operations.
///
///  @params[in,out] omega    Frequency variable.
///  @params[in,out] x        X variable.
///  @params[in,out] y        Y variable.
///  @params[in,out] z        Z variable.
///  @params[in,out] ky       Ky variable.
///  @params[in,out] kz       Kz variable.
///  @params[in,out] engine   Random engine.
///  @params[in]     num_rays Numbers of rays.
//------------------------------------------------------------------------------
template<typename T, typename B, bool SAFE_MATH>
void init_vmec(graph::shared_leaf<T, SAFE_MATH> omega,
               graph::shared_leaf<T, SAFE_MATH> x,
               graph::shared_leaf<T, SAFE_MATH> y,
               graph::shared_leaf<T, SAFE_MATH> z,
               graph::shared_leaf<T, SAFE_MATH> ky,
               graph::shared_leaf<T, SAFE_MATH> kz,
               std::mt19937_64 engine,
               const size_t num_rays) {
    std::normal_distribution<B> norm_dist1(static_cast<B> (430.0),
                                           static_cast<B> (1.0));
    std::normal_distribution<B> norm_dist2(static_cast<B> (M_PI),
                                           static_cast<B> (0.05));
    std::normal_distribution<B> norm_dist3(static_cast<B> (0.0),
                                           static_cast<B> (0.05));
    std::normal_distribution<B> norm_dist4(static_cast<B> (0.0),
                                           static_cast<B> (1.0));
    std::normal_distribution<B> norm_dist5(static_cast<B> (-150.0),
                                           static_cast<B> (1.0));

    x->set(static_cast<T> (1.0));
    for (size_t j = 0; j < num_rays; j++) {
        omega->set(j, static_cast<T> (norm_dist1(engine)));
        y->set(j, static_cast<T> (norm_dist2(engine)));
        z->set(j, static_cast<T> (norm_dist3(engine)));
        ky->set(j, static_cast<T> (norm_dist4(engine)));
        kz->set(j, static_cast<T> (norm_dist5(engine)));
    }
}

//------------------------------------------------------------------------------
///  @brief Trace the rays.
///
@@ -48,7 +138,9 @@ void trace_ray(const size_t num_times,
            const size_t local_num_rays = batch
                                        + (extra > thread_number ? 1 : 0);

            std::mt19937_64 engine((thread_number + 1)*static_cast<uint64_t> (std::chrono::system_clock::to_time_t(std::chrono::system_clock::now())));
            const uint64_t seed = static_cast<uint64_t> (std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()));
            //const uint64_t seed = 0;
            std::mt19937_64 engine((thread_number + 1)*seed);
            std::uniform_int_distribution<size_t> int_dist(0, local_num_rays - 1);

            auto omega = graph::variable<T, SAFE_MATH> (local_num_rays, "\\omega");
@@ -64,50 +156,42 @@ void trace_ray(const size_t num_times,

//  Inital conditions.
            if constexpr (jit::is_float<T> ()) {
                std::normal_distribution<float> norm_dist1(static_cast<float> (700.0),
                                                           static_cast<float> (10.0));
                std::normal_distribution<float> norm_dist2(static_cast<float> (0.0),
                                                           static_cast<float> (0.05));
                std::normal_distribution<float> norm_dist3(static_cast<float> (-100.0),
                                                           static_cast<float> (10.0));
                std::normal_distribution<float> norm_dist4(static_cast<float> (0.0),
                                                           static_cast<float> (10.0));

                for (size_t j = 0; j < local_num_rays; j++) {
                    omega->set(j, static_cast<T> (norm_dist1(engine)));
                    x->set(j, static_cast<T> (2.5*cos(norm_dist2(engine)/2.5)));
                    y->set(j, static_cast<T> (2.5*sin(norm_dist2(engine)/2.5)));
                    z->set(j, static_cast<T> (norm_dist2(engine)));
                    ky->set(j, static_cast<T> (norm_dist3(engine)));
                    kz->set(j, static_cast<T> (norm_dist4(engine)));
                }
#if 0
                init_efit<T, float, SAFE_MATH> (omega, x, y, z,
                                                ky, kz, engine,
                                                local_num_rays);
#else
                init_vmec<T, float, SAFE_MATH> (omega, x, y, z,
                                                ky, kz, engine,
                                                local_num_rays);
#endif
            } else {
                std::normal_distribution<double> norm_dist1(static_cast<double> (700.0),
                                                            static_cast<double> (10.0));
                std::normal_distribution<double> norm_dist2(static_cast<double> (0.0),
                                                            static_cast<double> (0.05));
                std::normal_distribution<double> norm_dist3(static_cast<double> (-100.0),
                                                            static_cast<double> (10.0));
                std::normal_distribution<double> norm_dist4(static_cast<double> (0.0),
                                                            static_cast<double> (10.0));

                for (size_t j = 0; j < local_num_rays; j++) {
                    omega->set(j, static_cast<T> (norm_dist1(engine)));
                    x->set(j, static_cast<T> (2.5*cos(norm_dist2(engine)/2.5)));
                    y->set(j, static_cast<T> (2.5*sin(norm_dist2(engine)/2.5)));
                    z->set(j, static_cast<T> (norm_dist2(engine)));
                    ky->set(j, static_cast<T> (norm_dist3(engine)));
                    kz->set(j, static_cast<T> (norm_dist4(engine)));
                }
#if 0
                init_efit<T, double, SAFE_MATH> (omega, x, y, z,
                                                 ky, kz, engine,
                                                 local_num_rays);
#else
                init_vmec<T, double, SAFE_MATH> (omega, x, y, z,
                                                 ky, kz, engine,
                                                 local_num_rays);
#endif
            }
#if 0
            kx->set(static_cast<T> (-700.0));

            auto eq = equilibrium::make_efit<T, SAFE_MATH> (NC_FILE);
#else
            kx->set(static_cast<T> (-30.0));
#endif
            auto eq = equilibrium::make_vmec<T, SAFE_MATH> (VMEC_FILE);
            //auto eq = equilibrium::make_efit<T, SAFE_MATH> (EFIT_FILE);
            //auto eq = equilibrium::make_slab_density<T, SAFE_MATH> ();
            //auto eq = equilibrium::make_slab_field<T, SAFE_MATH> ();
            //auto eq = equilibrium::make_no_magnetic_field<T, SAFE_MATH> ();

#if 0
            const T endtime = static_cast<T> (2.0);
#else
            const T endtime = static_cast<T> (0.2);
#endif
            const T dt = endtime/static_cast<T> (num_times);

            //auto dt_var = graph::variable(num_rays, static_cast<T> (dt), "dt");
@@ -124,7 +208,7 @@ void trace_ray(const size_t num_times,
            //solver::rk4<dispersion::cold_plasma<T, SAFE_MATH>>
            //solver::adaptive_rk4<dispersion::ordinary_wave<T, SAFE_MATH>>
            //solver::rk4<dispersion::hot_plasma<T, dispersion::z_erfi<T, SAFE_MATH>, use_safe_math>>
            //solver::rk4<dispersion::hot_plasma_expandion<T, dispersion::z_erfi<T, SAFE_MATH>, use_safe_math>>
            //solver::rk4<dispersion::hot_plasma_expansion<T, dispersion::z_erfi<T, SAFE_MATH>, use_safe_math>>
                solve(omega, kx, ky, kz, x, y, z, t, dt, eq,
                      stream.str(), local_num_rays, thread_number);
            solve.init(kx);
@@ -201,6 +285,10 @@ void trace_ray(const size_t num_times,
///
///  @tparam T         Base type of the calculation.
///  @tparam SAFE_MATH Use safe math operations.
///
///  @params[in] num_times Total number of time steps.
///  @params[in] sub_steps Number of substeps to push the rays.
///  @params[in] num_rays  Number of rays to trace.
//------------------------------------------------------------------------------
template<jit::float_scalar T, bool SAFE_MATH=false>
void calculate_power(const size_t num_times,
@@ -235,17 +323,8 @@ void calculate_power(const size_t num_times,
            auto t     = graph::variable<T, SAFE_MATH> (local_num_rays, "t");
            auto kamp  = graph::variable<T, SAFE_MATH> (local_num_rays, "kamp");

            omega->set(static_cast<T> (0.0));
            graph::shared_variable<T, SAFE_MATH> omega_var = graph::variable_cast(omega);
            graph::shared_variable<T, SAFE_MATH> kx_var = graph::variable_cast(kx);
            graph::shared_variable<T, SAFE_MATH> ky_var = graph::variable_cast(ky);
            graph::shared_variable<T, SAFE_MATH> kz_var = graph::variable_cast(kz);
            graph::shared_variable<T, SAFE_MATH> x_var = graph::variable_cast(x);
            graph::shared_variable<T, SAFE_MATH> y_var = graph::variable_cast(y);
            graph::shared_variable<T, SAFE_MATH> z_var = graph::variable_cast(z);
            graph::shared_variable<T, SAFE_MATH> t_var = graph::variable_cast(t);

            auto eq = equilibrium::make_efit<T, SAFE_MATH> (NC_FILE);
            auto eq = equilibrium::make_vmec<T, SAFE_MATH> (VMEC_FILE);
            //auto eq = equilibrium::make_efit<T, SAFE_MATH> (EFIT_FILE);
            //auto eq = equilibrium::make_slab_density<T, SAFE_MATH> ();
            //auto eq = equilibrium::make_slab_field<T, SAFE_MATH> ();
            //auto eq = equilibrium::make_no_magnetic_field<T, SAFE_MATH> ();
@@ -268,6 +347,136 @@ void calculate_power(const size_t num_times,
    total.print();
}

//------------------------------------------------------------------------------
///  @brief Bin power.
///
///  @tparam T         Base type of the calculation.
///  @tparam SAFE_MATH Use safe math operations.
///
///  @params[in] num_times Total number of time steps.
///  @params[in] sub_steps Number of substeps to push the rays.
///  @params[in] num_rays  Number of rays to trace.
//------------------------------------------------------------------------------
template<jit::float_scalar T, bool SAFE_MATH=false>
void bin_power(const size_t num_times,
               const size_t sub_steps,
               const size_t num_rays) {
    const timeing::measure_diagnostic total("Power Time");

    std::vector<std::thread> threads(std::max(std::min(static_cast<unsigned int> (jit::context<T, SAFE_MATH>::max_concurrency()),
                                                       static_cast<unsigned int> (num_rays)),
                                              static_cast<unsigned int> (1)));

    const size_t batch = num_rays/threads.size();
    const size_t extra = num_rays%threads.size();

    for (size_t i = 0, ie = threads.size(); i < ie; i++) {
        threads[i] = std::thread([num_times, sub_steps, num_rays, batch, extra] (const size_t thread_number,
                                                                                 const size_t num_threads) -> void {
            std::ostringstream stream;
            stream << "result" << thread_number << ".nc";

            const size_t num_steps = num_times/sub_steps;
            const size_t local_num_rays = batch
                                        + (extra > thread_number ? 1 : 0);

            auto x          = graph::variable<T, SAFE_MATH> (local_num_rays, "x");
            auto y          = graph::variable<T, SAFE_MATH> (local_num_rays, "y");
            auto z          = graph::variable<T, SAFE_MATH> (local_num_rays, "z");
            auto x_last     = graph::variable<T, SAFE_MATH> (local_num_rays, "x_last");
            auto y_last     = graph::variable<T, SAFE_MATH> (local_num_rays, "y_last");
            auto z_last     = graph::variable<T, SAFE_MATH> (local_num_rays, "z_last");
            auto kamp       = graph::variable<T, SAFE_MATH> (local_num_rays, "kamp");
            auto power      = graph::variable<T, SAFE_MATH> (local_num_rays, static_cast<T> (1.0), "power");
            auto k_sum      = graph::variable<T, SAFE_MATH> (local_num_rays, static_cast<T> (0.0), "k_sum");

            auto eq = equilibrium::make_vmec<T, SAFE_MATH> (VMEC_FILE);
            auto x_real = eq->get_x(x, y, z);
            auto y_real = eq->get_y(x, y, z);
            auto z_real = eq->get_z(x, y, z);
            auto x_real_last = eq->get_x(x_last, y_last, z_last);
            auto y_real_last = eq->get_y(x_last, y_last, z_last);
            auto z_real_last = eq->get_z(x_last, y_last, z_last);

            auto dlvec = graph::vector(x_real - x_real_last,
                                       y_real - y_real_last,
                                       z_real - z_real_last);
            auto dl = dlvec->length();
            auto kdl = kamp*dl;
            auto k_next = kdl + k_sum;
            auto p_next = graph::exp(graph::none<T, SAFE_MATH> ()*graph::two<T, SAFE_MATH> ()*k_sum);
            auto d_power = p_next - power;
            d_power = graph::sqrt(d_power*d_power);

            workflow::manager<T, SAFE_MATH> work(thread_number);
            work.add_item({
                graph::variable_cast(x),
                graph::variable_cast(y),
                graph::variable_cast(z),
                graph::variable_cast(x_last),
                graph::variable_cast(y_last),
                graph::variable_cast(z_last),
                graph::variable_cast(kamp),
                graph::variable_cast(power),
                graph::variable_cast(k_sum),
            }, {d_power}, {
                {x, graph::variable_cast(x_last)},
                {y, graph::variable_cast(y_last)},
                {z, graph::variable_cast(z_last)},
                {p_next, graph::variable_cast(power)},
                {k_next, graph::variable_cast(k_sum)}
            }, "power");
            work.compile();

            output::result_file file(stream.str());
            output::data_set<T> dataset(file);

            dataset.create_variable(file, "power", power, work.get_context());
            dataset.create_variable(file, "d_power", d_power, work.get_context());

            dataset.reference_variable(file, "x", graph::variable_cast(x));
            dataset.reference_variable(file, "y", graph::variable_cast(y));
            dataset.reference_variable(file, "z", graph::variable_cast(z));
            dataset.reference_imag_variable(file, "kamp", graph::variable_cast(kamp));
            file.end_define_mode();

            dataset.read(file, 0);
            x_last->set(x->evaluate());
            y_last->set(y->evaluate());
            z_last->set(z->evaluate());
            dataset.write(file, 0);

            std::thread sync([]{});
            work.copy_to_device(x_last, graph::variable_cast(x_last)->data());
            work.copy_to_device(y_last, graph::variable_cast(y_last)->data());
            work.copy_to_device(z_last, graph::variable_cast(z_last)->data());
            for (size_t j = 1, je = num_steps + 1; j < je; j++) {
                dataset.read(file, j);
                work.copy_to_device(x,    graph::variable_cast(x)->data());
                work.copy_to_device(y,    graph::variable_cast(y)->data());
                work.copy_to_device(z,    graph::variable_cast(z)->data());
                work.copy_to_device(kamp, graph::variable_cast(kamp)->data());

                work.run();

                sync.join();
                work.wait();
                sync = std::thread([&file, &dataset] (const size_t k) -> void {
                    dataset.write(file, k);
                }, j);
            }

            sync.join();
        }, i, threads.size());
    }

    for (std::thread &t : threads) {
        t.join();
    }

    total.print();
}

//------------------------------------------------------------------------------
///  @brief Main program of the driver.
///
@@ -292,6 +501,7 @@ int main(int argc, const char * argv[]) {
    calculate_power<std::complex<base>, use_safe_math> (num_times,
                                                        sub_steps,
                                                        num_rays);
    bin_power<base> (num_times, sub_steps, num_rays);

    std::cout << std::endl << "Timing:" << std::endl;
    total.print();
+21 −13
Original line number Diff line number Diff line
@@ -296,6 +296,7 @@
		C73BBE7D29F816E60027BB7F /* piecewise_test.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; path = piecewise_test.cpp; sourceTree = "<group>"; };
		C73BBE9629F8669F0027BB7F /* newton.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = newton.hpp; sourceTree = "<group>"; };
		C74DF4572AA8BC7300319113 /* graph_benchmark */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = graph_benchmark; sourceTree = BUILT_PRODUCTS_DIR; };
		C7678FBD2B45C2850025F37E /* bin.py */ = {isa = PBXFileReference; lastKnownFileType = text.script.python; path = bin.py; sourceTree = "<group>"; };
		C77E6DF522DD64E700469621 /* trigonometry.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = trigonometry.hpp; sourceTree = "<group>"; };
		C79141A622DA9BF200E0BA0D /* libgraph_framework.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgraph_framework.a; sourceTree = BUILT_PRODUCTS_DIR; };
		C79141AE22DA9C3000E0BA0D /* node.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = node.hpp; sourceTree = "<group>"; };
@@ -459,6 +460,7 @@
			isa = PBXGroup;
			children = (
				C7167B222AC5CE8500E03131 /* fix_NaN.py */,
				C7678FBD2B45C2850025F37E /* bin.py */,
			);
			path = utilities;
			sourceTree = "<group>";
@@ -882,7 +884,7 @@
			isa = PBXProject;
			attributes = {
				BuildIndependentTargetsInParallel = YES;
				LastUpgradeCheck = 1500;
				LastUpgradeCheck = 1510;
				ORGANIZATIONNAME = "Cianciosa, Mark R.";
				TargetAttributes = {
					C73690302A38C498001733B0 = {
@@ -1258,7 +1260,8 @@
				"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
				CODE_SIGN_STYLE = Automatic;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"NC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"",
					"VMEC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/vmec.nc\\\"",
					"EFIT_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"",
					"DEBUG=1",
					"$(inherited)",
				);
@@ -1274,7 +1277,8 @@
				"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
				CODE_SIGN_STYLE = Automatic;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"NC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"",
					"VMEC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/vmec.nc\\\"",
					"EFIT_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"",
					USE_METAL,
					"CXX=\\\"c++\\ -I/Users/m4c/Projects/graph_framework/graph_framework\\ -std=gnu++2a\\\"",
					"$(inherited)",
@@ -1329,6 +1333,8 @@
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"EFIT_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"",
					"VMEC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/vmec.nc\\\"",
					USE_METAL,
					"CXX_FLAGS=\\\"-g\\ -fsanitize=undefined\\ -fsanitize=float-divide-by-zero\\ -fsanitize-trap=all\\\"",
					"CXX=\\\"c++\\ -I/Users/m4c/Projects/graph_framework/graph_framework\\ -std=gnu++2a\\\"",
@@ -1354,6 +1360,9 @@
				OTHER_LDFLAGS = (
					"-fsanitize=float-divide-by-zero",
					"-lnetcdf",
					"-ld_classic",
					"-rpath",
					/usr/local/lib,
				);
				SDKROOT = macosx;
			};
@@ -1402,6 +1411,8 @@
				GCC_C_LANGUAGE_STANDARD = gnu11;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"EFIT_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"",
					"VMEC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/vmec.nc\\\"",
					USE_METAL,
					"CXX=\\\"c++\\ -I/Users/m4c/Projects/graph_framework/graph_framework\\ -std=gnu++2a\\\"",
					"$(inherited)",
@@ -1425,6 +1436,9 @@
				OTHER_LDFLAGS = (
					"-fsanitize=float-divide-by-zero",
					"-lnetcdf",
					"-ld_classic",
					"-rpath",
					/usr/local/lib,
				);
				SDKROOT = macosx;
			};
@@ -1481,10 +1495,7 @@
				CODE_SIGN_STYLE = Automatic;
				DEAD_CODE_STRIPPING = YES;
				DEVELOPMENT_TEAM = "";
				GCC_PREPROCESSOR_DEFINITIONS = (
					"NC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"",
					"$(inherited)",
				);
				GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
				MACOSX_DEPLOYMENT_TARGET = 13.5;
				OTHER_CPLUSPLUSFLAGS = "-fsanitize=float-divide-by-zero";
				PRODUCT_NAME = "$(TARGET_NAME)";
@@ -1500,10 +1511,7 @@
				CODE_SIGN_STYLE = Automatic;
				DEAD_CODE_STRIPPING = YES;
				DEVELOPMENT_TEAM = "";
				GCC_PREPROCESSOR_DEFINITIONS = (
					"NC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"",
					"$(inherited)",
				);
				GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)";
				MACOSX_DEPLOYMENT_TARGET = 13.5;
				OTHER_CPLUSPLUSFLAGS = "";
				OTHER_LDFLAGS = "-lnetcdf";
@@ -1690,7 +1698,7 @@
				CODE_SIGN_STYLE = Automatic;
				DEAD_CODE_STRIPPING = YES;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"NC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"",
					"EFIT_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"",
					USE_METAL,
					"CXX=\\\"c++\\\"",
					"DEBUG=1",
@@ -1709,7 +1717,7 @@
				CODE_SIGN_STYLE = Automatic;
				DEAD_CODE_STRIPPING = YES;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"NC_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"",
					"EFIT_FILE=\\\"/Users/m4c/Projects/graph_framework/graph_tests/efit.nc\\\"",
					USE_METAL,
					"CXX=\\\"c++\\\"",
					"$(inherited)",
+1 −1
Original line number Diff line number Diff line
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
   LastUpgradeVersion = "1500"
   LastUpgradeVersion = "1510"
   version = "1.7">
   <BuildAction
      parallelizeBuildables = "YES"
+1 −1
Original line number Diff line number Diff line
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
   LastUpgradeVersion = "1500"
   LastUpgradeVersion = "1510"
   version = "1.3">
   <BuildAction
      parallelizeBuildables = "YES"
Loading