Exemple #1
0
    def preprocess(self, problem_data):
        """Code generation and compilation before running solver."""

        # if os.path.isfile('codecache.pkl'):
        #     with open('codecache.pkl','rb') as f:
        #         deriv_func_bck = pickle.load(f)
        #
        # else:
        #     deriv_func_bck = None
        out_ws = QCPICodeGen({'problem_data': problem_data})
        print(out_ws['bc_func_code'])
        print(out_ws['deriv_func_code'])

        self.bvp = BVP(out_ws['deriv_func_fn'],
                       out_ws['bc_func_fn'], None) #out_ws['compute_control_fn'])#out_ws['compute_control_fn'])

        self.stm_ode_func = self.bvp.deriv_func
        self.module = out_ws['code_module']
        self.left_bc_mask = out_ws['code_module'].bc_free_mask
        self.num_dae_vars = out_ws['code_module'].num_dae_vars
        # self.left_bc_mask = problem_data['bc_free_mask']
        # print(self.left_bc_mask)
        self.bc_left_fn = out_ws['code_module'].bc_func_left
        self.bc_right_fn  = out_ws['code_module'].bc_func_right
        # self.deriv_func = njit(parallel=True)(out_ws['code_module'].deriv_func_mcpi)
        # if deriv_func_bck is not None:
        #     print('Loaded deriv_func from cache')
        #     self.deriv_func = deriv_func_bck
        #     self.saved_deriv_func = True
        # else:
        # self.deriv_func = out_ws['code_module'].deriv_func_mcpi
        self.deriv_func = out_ws['code_module'].deriv_func

        sys.modules['_beluga_'+problem_data['problem_name']] = out_ws['code_module']
        return out_ws['code_module']
Exemple #2
0
    def preprocess(self, problem_data):
        """Code generation and compilation before running solver."""
        cache_exists = os.path.isfile('codecache.pkl')
        out_ws = PythonCodeGen({'problem_data': problem_data})
        if not self.cached or not cache_exists:
            print(out_ws['bc_func_code'])
            print(out_ws['deriv_func_code'])
            self.stm_ode_func = self.make_stmode(out_ws['deriv_func_fn'],
                                                 problem_data['nOdes'])
            self.saved_code = False
        else:
            bvp_data = self.load_code()
            out_ws['deriv_func_fn'] = bvp_data['deriv_fn']
            out_ws['code_module'].deriv_func = bvp_data['deriv_fn']
            # self.stm_ode_func = bvp_data['stmode_fn']
            self.stm_ode_func = self.make_stmode(bvp_data['deriv_fn'],
                                                 problem_data['nOdes'])

        out_ws['code_module'].deriv_func_ode45 = self.deriv_func_ode45
        self.out_ws = out_ws
        self.bvp = BVP(
            out_ws['deriv_func_fn'], out_ws['bc_func_fn'],
            out_ws['compute_control_fn'])  #out_ws['compute_control_fn'])
        # self.stm_ode_func = ft.partial(self._stmode_fd, odefn=self.bvp.deriv_func)
        self.bc_jac_multi = ft.partial(self.__bc_jac_multi,
                                       bc_func=self.bvp.bc_func)

        sys.modules['_beluga_' +
                    problem_data['problem_name']] = out_ws['code_module']
        return out_ws['code_module']
Exemple #3
0
    def preprocess(self, problem_data):
        """Code generation and compilation before running solver."""
        out_ws = PythonCodeGen({'problem_data': problem_data})
        logging.debug(out_ws['bc_func_code'])
        logging.debug(out_ws['deriv_func_code'])

        if self.use_numba:
            deriv_func = numba.njit(parallel=False)(
                out_ws['code_module'].deriv_func_nojit)
        else:
            deriv_func = out_ws['code_module'].deriv_func_nojit
        out_ws['deriv_func_fn'] = deriv_func
        out_ws['code_module'].deriv_func = deriv_func
        self.saved_code = False

        self.out_ws = out_ws
        # self.stm_ode_func = self.make_stmode(out_ws['deriv_func_fn'], problem_data['nOdes'])
        self.bvp = BVP(
            out_ws['deriv_func_fn'], out_ws['bc_func_fn'],
            out_ws['compute_control_fn'])  #out_ws['compute_control_fn'])

        # self.stm_ode_func = ft.partial(self._stmode_fd, odefn=self.bvp.deriv_func)
        self.stm_ode_func = self.make_stmode(self.bvp.deriv_func,
                                             problem_data['nOdes'])
        self.bc_jac_multi = ft.partial(self.__bc_jac_multi,
                                       bc_func=self.bvp.bc_func)
        sys.modules['_beluga_' +
                    problem_data['problem_name']] = out_ws['code_module']
        return out_ws['code_module']
    def preprocess(self, problem_data):
        """Code generation and compilation before running solver."""
        out_ws = PythonCodeGen({'problem_data': problem_data})
        logging.debug(out_ws['bc_func_code'])
        logging.debug(out_ws['deriv_func_code'])
        cache_exists = os.path.isfile('codecache.pkl')
        # if not self.cached or not cache_exists:
        deriv_func = numba.njit(parallel=True)(
            out_ws['code_module'].deriv_func_nojit)
        out_ws['deriv_func_fn'] = deriv_func
        out_ws['code_module'].deriv_func = deriv_func
        self.saved_code = False
        # else:
        #     bvp_data = self.load_code()
        #     print('deriv func',id(bvp_data['deriv_fn']))
        #     out_ws['deriv_func_fn'] = bvp_data['deriv_fn']
        #     out_ws['code_module'].deriv_func = bvp_data['deriv_fn']

        self.out_ws = out_ws
        # self.stm_ode_func = self.make_stmode(out_ws['deriv_func_fn'], problem_data['nOdes'])
        self.bvp = BVP(
            out_ws['deriv_func_fn'], out_ws['bc_func_fn'],
            out_ws['compute_control_fn'])  #out_ws['compute_control_fn'])

        # self.stm_ode_func = ft.partial(self._stmode_fd, odefn=self.bvp.deriv_func)
        # self.stm_ode_func = self.make_stmode(self.bvp.deriv_func, problem_data['nOdes'])
        # self.bc_jac_multi  = ft.partial(self.__bc_jac_multi, bc_func=self.bvp.bc_func)
        sys.modules['_beluga_' +
                    problem_data['problem_name']] = out_ws['code_module']
        return out_ws['code_module']
Exemple #5
0
    def preprocess(self, problem_data):
        """Code generation and compilation before running solver."""
        out_ws = PythonCodeGen({'problem_data': problem_data})
        print(out_ws['bc_func_code'])
        print(out_ws['deriv_func_code'])
        self.bvp = BVP(
            out_ws['deriv_func_fn'], out_ws['bc_func_fn'],
            out_ws['compute_control_fn'])  #out_ws['compute_control_fn'])

        # self.stm_ode_func = ft.partial(self.__stmode_fd, odefn=self.bvp.deriv_func)
        # self.bc_jac_func  = ft.partial(self.__bcjac_fd, bc_func=self.bvp.bc_func)
        return out_ws['code_module']
 def preprocess(self, problem_data):
     """Code generation and compilation before running solver."""
     out_ws = PythonCodeGen({'problem_data': problem_data})
     self.bvp = BVP(out_ws['deriv_func_fn'], out_ws['bc_func_fn'],
                    out_ws['compute_control_fn'])
     if self.derivative_method == 'csd':
         self.stm_ode_func = ft.partial(self.__stmode_csd,
                                        odefn=self.bvp.deriv_func)
         self.bc_jac_func = ft.partial(self.__bcjac_csd,
                                       bc_func=self.bvp.bc_func)
     elif self.derivative_method == 'fd':
         self.stm_ode_func = ft.partial(self.__stmode_fd,
                                        odefn=self.bvp.deriv_func)
         self.bc_jac_func = ft.partial(self.__bcjac_fd,
                                       bc_func=self.bvp.bc_func)
     return self.bvp