Changeset 630


Ignore:
Timestamp:
12/12/17 16:03:39 (6 years ago)
Author:
dubos
Message:

devel/Python : more cythonic interface to XIOS

Location:
codes/icosagcm/devel/Python/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • codes/icosagcm/devel/Python/src/functions.h

    r618 r630  
    1212void cxios_context_finalize(void); 
    1313void cxios_finalize(void); 
     14 
     15void cxios_write_data_k81(char*, int, double*, int); 
     16void cxios_write_data_k82(char*, int, double*, int, int); 
     17void cxios_write_data_k83(char*, int, double*, int, int, int); 
  • codes/icosagcm/devel/Python/src/xios.pyx

    r615 r630  
    88 
    99cdef extern from "functions.h": 
    10      cpdef void context_close_definition "cxios_context_close_definition"() 
    11      cpdef void context_finalize "cxios_context_finalize"() 
    12      cpdef void finalize "cxios_finalize"() 
     10     cdef void cxios_context_close_definition() 
     11     cdef void cxios_context_finalize() 
     12     cdef void cxios_finalize() 
     13     cdef void cxios_write_data_k81(char*, int, double*, int) 
     14     cdef void cxios_write_data_k82(char*, int, double*, int,int) 
     15     cdef void cxios_write_data_k83(char*, int, double*, int,int,int) 
     16 
     17def context_close_definition(): cxios_context_close_definition() 
     18def context_finalize(): cxios_context_finalize() 
     19def finalize(): cxios_finalize() 
     20 
     21cdef send_field1(char* id, int idlen, double[:] data):     cxios_write_data_k81(id, idlen, &data[0],     data.shape[0]) 
     22cdef send_field2(char* id, int idlen, double[:,:] data):   cxios_write_data_k82(id, idlen, &data[0,0],   data.shape[0],data.shape[1]) 
     23cdef send_field3(char* id, int idlen, double[:,:,:] data): cxios_write_data_k83(id, idlen, &data[0,0,0], data.shape[0],data.shape[1],data.shape[2]) 
     24 
     25def send_field(bytes id, data): 
     26    cdef char* idptr = id 
     27    cdef int idlen = len(id) 
     28    print 'cxios.write_data', id, data.shape 
     29    ndim=data.ndim 
     30    if ndim==1: send_field1(idptr,idlen,data) 
     31    if ndim==2: send_field2(idptr,idlen,data) 
     32    if ndim==3: send_field3(idptr,idlen,data) 
    1333 
    1434# -------------------------------------------------------- # 
     
    7595    cats=['axis','domain','domaingroup','field','fieldgroup'] # XIOS categories 
    7696    cxios.import_funs([ 
    77 #                       ['finalize','context_finalize','context_close_definition', None], 
    7897                       [cat+'_handle_create' for cat in cats]+[c_void_pp,c_char_p,c_int], 
    7998                       ['get_current_'+'calendar_wrapper',c_void_pp], 
     
    87106    import_set_attr(['calendar_wrapper'], [Duration,'timestep']) 
    88107 
    89     cxios.import_funs([['write_data_k80', c_char_p, c_int, c_void_p], 
    90                        ['write_data_k81', c_char_p, c_int, c_void_p, c_int], 
    91                        ['write_data_k82', c_char_p, c_int, c_void_p, c_int, c_int], 
    92                        ['write_data_k83', c_char_p, c_int, c_void_p, c_int, c_int, c_int]]) 
    93  
    94 def send_field(id, data): 
    95     if type(data) is np.ndarray: 
    96         shp=data.shape 
    97         print 'cxios.write_data', id, shp 
    98         ndim=len(shp) 
    99         if ndim==1: 
    100             lib.write_data_k81(id, c_int(len(id)), data, shp[0]) 
    101         if ndim==2: 
    102             lib.write_data_k82(id, c_int(len(id)), data, shp[0], shp[1]) # reverse order of dimensions ?? 
    103         if ndim==3: 
    104             lib.write_data_k83(id, c_int(len(id)), data, shp[0], shp[1], shp[2]) 
    105     else: 
    106         print id, type(data) 
    107         raise(TypeError) 
    108  
    109108import_cxios_functions() 
Note: See TracChangeset for help on using the changeset viewer.