pygrt.c_structures 源代码

"""
    :file:     c_structures.py  
    :author:   Zhu Dengda (zhudengda@mail.iggcas.ac.cn)  
    :date:     2024-07-24  

    该文件包括  
        1、模型结构体的C接口 c_PyModel1D  
        2、格林函数结构体的C接口 c_GRN  

"""


from ctypes import *

__all__ = [
    "CHANNEL_NUM",
    "QWV_NUM",
    "INTEG_NUM",
    "SRC_M_NUM",
    "SRC_M_ORDERS",
    "SRC_M_NAME_ABBR",
    "ZRTchs",
    "ZNEchs",
    "qwvchs",
    "MECHANISM_NUM",

    "NPCT_REAL_TYPE",
    "NPCT_CMPLX_TYPE",

    "REAL",
    "PREAL",
    "CPLX",
    "PCPLX",

    "c_MODEL1D",
    "c_K_INTEG_METHOD",
    "c_GRNSPEC"
]


CHANNEL_NUM = 3
QWV_NUM = 3
INTEG_NUM = 4
SRC_M_NUM = 6
SRC_M_ORDERS = [0, 0, 1, 0, 1, 2]
SRC_M_NAME_ABBR = ["EX", "VF", "HF", "DD", "DS", "SS"]
ZRTchs = ['Z', 'R', 'T']
ZNEchs = ['Z', 'N', 'E']
qwvchs = ['q', 'w', 'v']
MECHANISM_NUM = 6

NPCT_REAL_TYPE = 'f8'
NPCT_CMPLX_TYPE = 'c16'


[文档] class CPLX(Structure): _fields_ = [ ('real', c_double), ('imag', c_double), ]
REAL = c_double PREAL = POINTER(REAL) PCPLX = POINTER(CPLX)
[文档] class c_MODEL1D(Structure): """ 和C结构体 MODEL1D 作匹配 """ _fields_ = [ ('n', c_size_t), ("depsrc", REAL), ("deprcv", REAL), ('isrc', c_size_t), ('ircv', c_size_t), ('ircvup', c_bool), ('io_depth', c_bool), ('srcrcv_isInserted', c_bool), ('omgref', CPLX), ('Thk', PREAL), ('Dep', PREAL), ('Va', PREAL), ('Vb', PREAL), ('Rho', PREAL), ('Qa', PREAL), ('Qb', PREAL), ('Qainv', PREAL), ('Qbinv', PREAL), ('isLiquid', POINTER(c_bool)), ('topbound', c_int), ('botbound', c_int), ]
[文档] class c_K_INTEG_METHOD(Structure): """ 和C结构体 K_INTEG_METHOD 作匹配 """ _fields_ = [ ('k0', REAL), ('ampk', REAL), ('keps', REAL), ('vmin', REAL), ('kcut', REAL), ('kmax', REAL), ('dk', REAL), ('applyFIM', c_bool), ('filondk', REAL), ('applySAFIM', c_bool), ('sa_tol', REAL), ('applyDCM', c_bool), ('applyPTAM', c_bool), ('fstats', c_void_p), ('ptam_fstatsnr', c_void_p), ]
[文档] class c_GRNSPEC(Structure): """ 和 C 结构体 GRNSPEC 作匹配 """ _fields_ = [ ('nf', c_size_t), ('freqs', PREAL), ('nf1', c_size_t), ('nf2', c_size_t), ('nr', c_size_t), ('rs', PREAL), ('wI', REAL), ('keepAllFreq', c_bool), ('calc_upar', c_bool), ('u', POINTER((PCPLX*CHANNEL_NUM)*SRC_M_NUM)), ('uiz', POINTER((PCPLX*CHANNEL_NUM)*SRC_M_NUM)), ('uir', POINTER((PCPLX*CHANNEL_NUM)*SRC_M_NUM)), ('statsstr', c_char_p), ('nstatsidxs', c_size_t), ('statsidxs', POINTER(c_size_t)), ]