#------------- import and wrap Kessler routines and variables -------------# from ctypes import * lib = cdll.LoadLibrary("Kessler/libkessler.so") libvars={} def addvars(ctype,names): for name in names: libvars[name]=ctype.in_dll(lib, name) def getvar(name): return libvars[name].value def setvar(name,val): libvars[name].value=val def setvars(names,vals): for name,val in zip(names,vals): libvars[name].value=val addvars(c_int,('nx','nz','nz1')) addvars(c_double,('g', 'p0', 'dt', 'cp', 'r', 'dt', 'time', 'tsfc', 'qc')) ptr_arg = POINTER(c_int) def loc(array): return array.ctypes.data_as(ptr_arg) def locs(arrays): return [loc(v) for v in arrays] def wrap(routine): return lambda *args : routine(*locs(args)) create_moist_sounding = wrap(lib.create_moist_sounding) kessler = wrap(lib.kessler)