Changeset 303d8d6 in sasmodels for sasmodels/kerneldll.py


Ignore:
Timestamp:
Mar 21, 2016 2:49:21 AM (8 years ago)
Author:
Paul Kienzle <pkienzle@…>
Branches:
master, core_shell_microgels, costrafo411, magnetic_model, release_v0.94, release_v0.95, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
Children:
4a72d1a, 3a45c2c
Parents:
03cac08
Message:

new calculator says hello before crashing

File:
1 edited

Legend:

Unmodified
Added
Removed
  • sasmodels/kerneldll.py

    r03cac08 r303d8d6  
    142142 
    143143    source = generate.convert_type(source, dtype) 
    144     source_files = generate.model_sources(model_info) + [model_info['filename']] 
     144    source_files = (generate.model_sources(model_info) 
     145                    + [model_info['filename']] 
     146                    + generate.model_templates()) 
    145147    dll = dll_path(model_info, dtype) 
    146148    newest = max(os.path.getmtime(f) for f in source_files) 
     
    172174    return DllModel(filename, model_info, dtype=dtype) 
    173175 
    174  
    175 IQ_ARGS = [c_void_p, c_void_p, c_int] 
    176 IQXY_ARGS = [c_void_p, c_void_p, c_void_p, c_int] 
    177  
    178176class DllModel(object): 
    179177    """ 
     
    197195 
    198196    def _load_dll(self): 
    199         Nfixed1d = len(self.info['partype']['fixed-1d']) 
    200         Nfixed2d = len(self.info['partype']['fixed-2d']) 
    201         Npd1d = len(self.info['partype']['pd-1d']) 
    202         Npd2d = len(self.info['partype']['pd-2d']) 
    203  
    204197        #print("dll", self.dllpath) 
    205198        try: 
     
    212205              else c_double if self.dtype == generate.F64 
    213206              else c_longdouble) 
    214         pd_args_1d = [c_void_p, fp] + [c_int]*Npd1d if Npd1d else [] 
    215         pd_args_2d = [c_void_p, fp] + [c_int]*Npd2d if Npd2d else [] 
     207 
     208        # int, int, int, int*, double*, double*, double*, double*, double*, double 
     209        argtypes = [c_int]*3 + [c_void_p]*5 + [fp] 
    216210        self.Iq = self.dll[generate.kernel_name(self.info, False)] 
    217         self.Iq.argtypes = IQ_ARGS + pd_args_1d + [fp]*Nfixed1d 
    218  
    219211        self.Iqxy = self.dll[generate.kernel_name(self.info, True)] 
    220         self.Iqxy.argtypes = IQXY_ARGS + pd_args_2d + [fp]*Nfixed2d 
     212        self.Iq.argtypes = argtypes 
     213        self.Iqxy.argtypes = argtypes 
    221214 
    222215    def __getstate__(self): 
     
    263256        self.q_input = q_input 
    264257        self.kernel = kernel 
    265         self.res = np.empty(q_input.nq, q_input.dtype) 
     258        self.res = np.empty(q_input.nq+3, q_input.dtype) 
    266259        dim = '2d' if q_input.is_2d else '1d' 
    267         self.fixed_pars = model_info['partype']['fixed-' + dim] 
    268         self.pd_pars = model_info['partype']['pd-' + dim] 
     260        self.parameters = model_info['par_type'][dim] 
    269261 
    270262        # In dll kernel, but not in opencl kernel 
    271263        self.p_res = self.res.ctypes.data 
    272264 
    273     def __call__(self, fixed_pars, pd_pars, cutoff): 
     265    def __call__(self, details, values, weights, cutoff): 
    274266        real = (np.float32 if self.q_input.dtype == generate.F32 
    275267                else np.float64 if self.q_input.dtype == generate.F64 
    276268                else np.float128) 
    277  
    278         nq = c_int(self.q_input.nq) 
    279         if pd_pars: 
    280             cutoff = real(cutoff) 
    281             loops_N = [np.uint32(len(p[0])) for p in pd_pars] 
    282             loops = np.hstack(pd_pars) 
    283             loops = np.ascontiguousarray(loops.T, self.q_input.dtype).flatten() 
    284             p_loops = loops.ctypes.data 
    285             dispersed = [p_loops, cutoff] + loops_N 
    286         else: 
    287             dispersed = [] 
    288         fixed = [real(p) for p in fixed_pars] 
    289         args = self.q_input.q_pointers + [self.p_res, nq] + dispersed + fixed 
    290         #print(pars) 
     269        args = [ 
     270            self.q_input.nq, # nq 
     271            0, # pd_start 
     272            1, # pd_stop 
     273            details.ctypes.data, # problem 
     274            weights.ctypes.data,  # weights 
     275            values.ctypes.data,  #pars 
     276            self.q_input.q_pointers[0], #q 
     277            self.p_res,   # results 
     278            real(cutoff), # cutoff 
     279            ] 
    291280        self.kernel(*args) 
    292281 
    293         return self.res 
     282        return self.res[:-3] 
    294283 
    295284    def release(self): 
Note: See TracChangeset for help on using the changeset viewer.