Exemple #1
0
    def wradObjAddToCnt(self, objectlist=[]):
        #self.objectlist = objectlist

        for i in range(len(objectlist)):
            self.objectlistradobj.append(objectlist[i].radobj)
            self.objectlist.append(objectlist[i])

        rd.ObjAddToCnt(self.radobj, self.objectlistradobj)
Exemple #2
0
def MagnetBlock(_pc, _wc, _cx, _cz, _type, _ndiv, _m):

    u = rad.ObjCnt([])
    
    wwc = _wc
    if(_type!=0):
        wwc = copy(_wc)
        wwc[0] -= 2*_cx
        
    b1 = rad.ObjRecMag(_pc, wwc, _m)
    rad.ObjAddToCnt(u, [b1])
    #ndiv2 = [1,_ndiv[1],_ndiv[2]]

    if((_cx>0.01) and (_cz>0.01)):
        if(_type==1):
            ppc = [_pc[0]-_wc[0]/2+_cx/2,_pc[1],_pc[2]-_cz/2]
            wwc = [_cx,_wc[1],_wc[2]-_cz]
            b2 = rad.ObjRecMag(ppc, wwc, _m)

            ppc = [_pc[0]+_wc[0]/2-_cx/2,_pc[1],_pc[2]+_cz/2]
            wwc = [_cx,_wc[1],_wc[2]-_cz]
            b3 = rad.ObjRecMag(ppc, wwc, _m)
            rad.ObjAddToCnt(u, [b2,b3])

        elif(_type==2):
            ppc = [_pc[0]-_wc[0]/2+_cx/2,_pc[1],_pc[2]+_cz/2]
            wwc = [_cx,_wc[1],_wc[2]-_cz]
            b2 = rad.ObjRecMag(ppc, wwc, _m)

            ppc = [_pc[0]+_wc[0]/2-_cx/2,_pc[1],_pc[2]-_cz/2]
            wwc = [_cx,_wc[1],_wc[2]-_cz]
            b3 = rad.ObjRecMag(ppc, wwc, _m)
            rad.ObjAddToCnt(u, [b2,b3])

        elif(_type==3):
            ppc = [_pc[0]-_wc[0]/2+_cx/2,_pc[1],_pc[2]]
            wwc = [_cx,_wc[1],_wc[2]-2*_cz]
            b2 = rad.ObjRecMag(ppc, wwc, _m)

            ppc = [_pc[0]+_wc[0]/2-_cx/2,_pc[1],_pc[2]]
            wwc = [_cx,_wc[1],_wc[2]-2*_cz]
            b3 = rad.ObjRecMag(ppc, wwc, _m)
            rad.ObjAddToCnt(u, [b2,b3])

    rad.ObjDivMag(u, _ndiv, 'Frame->LabTot')
    return u
Exemple #3
0
    def __init__(self, objectlist=[]):
        self.objectlist = objectlist
        self.objectlistradobj = []

        for i in range(len(objectlist)):
            self.objectlistradobj.append(self.objectlist[i].radobj)

        self.radobj = rd.ObjCnt([])

        for i in range(len(objectlist)):
            rd.ObjAddToCnt(self.radobj, self.objectlist[i].radobj)
Exemple #4
0
def undparts(po, wv, wh, nnp, per, br, si, axe=0.):
    """
    create Pure Permanent Magnet
    """
    g = rad.ObjCnt([])
    p = po - [0, nnp*per/2, 0]
    for i in range(0,4*nnp + 1):
        if i == 0 or i == 4*nnp: s = 0.5
        else: s = 1.
        if i%2 == 0: w = wv
        else: w = wh
        t = -(i - 1)*np.pi/2*si
        m = np.array([np.sin(axe)*np.sin(t), np.cos(t), np.cos(axe)*np.sin(t)])*br*s
        ma = rad.ObjRecMag(p, w, m)
        rad.ObjAddToCnt(g, [ma])
        p = p + [0, per/4, 0]
    rad.ObjDrwAtr(g, [0, 0, 1])
    return g
def HybridUndCenPart(_gap,
                     _gap_ofst,
                     _nper,
                     _air,
                     _lp,
                     _ch_p,
                     _np,
                     _np_tip,
                     _mp,
                     _cp,
                     _lm,
                     _ch_m_xz,
                     _ch_m_yz,
                     _ch_m_yz_r,
                     _nm,
                     _mm,
                     _cm,
                     _use_ex_sym=False):
    zer = [0, 0, 0]
    grp = rad.ObjCnt([])

    y = _lp[1] / 4
    initM = [0, -1, 0]

    pole = rad.ObjFullMag([_lp[0] / 4, y, -_lp[2] / 2 - _gap / 2 - _ch_p],
                          [_lp[0] / 2, _lp[1] / 2, _lp[2]], zer,
                          [_np[0], int(_np[1] / 2 + 0.5), _np[2]], grp, _mp,
                          _cp)

    if (_ch_p > 0.):  # Pole Tip
        poleTip = rad.ObjThckPgn(
            _lp[0] / 4, _lp[0] / 2,
            [[y - _lp[1] / 4, -_gap / 2 - _ch_p], [y - _lp[1] / 4, -_gap / 2],
             [y + _lp[1] / 4 - _ch_p, -_gap / 2],
             [y + _lp[1] / 4, -_gap / 2 - _ch_p]], zer)
        rad.ObjDivMag(
            poleTip,
            [_np_tip[0], int(_np_tip[1] / 2 + 0.5), _np_tip[2]])
        rad.MatApl(poleTip, _mp)
        rad.ObjDrwAtr(poleTip, _cp)
        rad.ObjAddToCnt(grp, [poleTip])

    y += _lp[1] / 4 + _air + _lm[1] / 2

    for i in range(_nper):
        magnet = rad.ObjThckPgn(
            _lm[0] / 4, _lm[0] / 2,
            [[y + _lm[1] / 2 - _ch_m_yz_r * _ch_m_yz, -_gap / 2 - _gap_ofst],
             [y + _lm[1] / 2, -_gap / 2 - _gap_ofst - _ch_m_yz],
             [y + _lm[1] / 2, -_gap / 2 - _gap_ofst - _lm[2] + _ch_m_yz],
             [
                 y + _lm[1] / 2 - _ch_m_yz_r * _ch_m_yz,
                 -_gap / 2 - _gap_ofst - _lm[2]
             ],
             [
                 y - _lm[1] / 2 + _ch_m_yz_r * _ch_m_yz,
                 -_gap / 2 - _gap_ofst - _lm[2]
             ], [y - _lm[1] / 2, -_gap / 2 - _gap_ofst - _lm[2] + _ch_m_yz],
             [y - _lm[1] / 2, -_gap / 2 - _gap_ofst - _ch_m_yz],
             [y - _lm[1] / 2 + _ch_m_yz_r * _ch_m_yz, -_gap / 2 - _gap_ofst]],
            initM)
        # Cuting Magnet Corners
        magnet = rad.ObjCutMag(
            magnet, [_lm[0] / 2 - _ch_m_xz, 0, -_gap / 2 - _gap_ofst],
            [1, 0, 1])[0]
        magnet = rad.ObjCutMag(
            magnet, [_lm[0] / 2 - _ch_m_xz, 0, -_gap / 2 - _gap_ofst - _lm[2]],
            [1, 0, -1])[0]

        rad.ObjDivMag(magnet, _nm)
        rad.MatApl(magnet, _mm)
        rad.ObjDrwAtr(magnet, _cm)
        rad.ObjAddToCnt(grp, [magnet])

        initM[1] *= -1
        y += _lm[1] / 2 + _lp[1] / 2 + _air

        if (i < _nper - 1):
            pole = rad.ObjFullMag(
                [_lp[0] / 4, y, -_lp[2] / 2 - _gap / 2 - _ch_p],
                [_lp[0] / 2, _lp[1], _lp[2]], zer, _np, grp, _mp, _cp)

            if (_ch_p > 0.):  # Pole Tip
                poleTip = rad.ObjThckPgn(_lp[0] / 4, _lp[0] / 2,
                                         [[y - _lp[1] / 2, -_gap / 2 - _ch_p],
                                          [y - _lp[1] / 2 + _ch_p, -_gap / 2],
                                          [y + _lp[1] / 2 - _ch_p, -_gap / 2],
                                          [y + _lp[1] / 2, -_gap / 2 - _ch_p]],
                                         zer)
                rad.ObjDivMag(poleTip, _np_tip)
                rad.MatApl(poleTip, _mp)
                rad.ObjDrwAtr(poleTip, _cp)
                rad.ObjAddToCnt(grp, [poleTip])

            y += _lm[1] / 2 + _lp[1] / 2 + _air

    y -= _lp[1] / 4
    pole = rad.ObjFullMag([_lp[0] / 4, y, -_lp[2] / 2 - _gap / 2 - _ch_p],
                          [_lp[0] / 2, _lp[1] / 2, _lp[2]], zer,
                          [_np[0], int(_np[1] / 2 + 0.5), _np[2]], grp, _mp,
                          _cp)
    if (_ch_p > 0.):  # Pole Tip
        poleTip = rad.ObjThckPgn(
            _lp[0] / 4, _lp[0] / 2,
            [[y - _lp[1] / 4, -_gap / 2 - _ch_p],
             [y - _lp[1] / 4 + _ch_p, -_gap / 2], [y + _lp[1] / 4, -_gap / 2],
             [y + _lp[1] / 4, -_gap / 2 - _ch_p]], zer)
        rad.ObjDivMag(
            poleTip,
            [_np_tip[0], int(_np_tip[1] / 2 + 0.5), _np_tip[2]])
        rad.MatApl(poleTip, _mp)
        rad.ObjDrwAtr(poleTip, _cp)
        rad.ObjAddToCnt(grp, [poleTip])

    # Symmetries
    if (
            _use_ex_sym
    ):  # Some "non-physical" mirroring (applicable for calculation of central field only)
        y += _lp[1] / 4
        rad.TrfZerPerp(grp, [0, y, 0], [0, 1, 0])  # Mirror left-right
        rad.TrfZerPerp(grp, [0, 2 * y, 0], [0, 1, 0])

    #     #"Physical" symmetries (applicable also for calculation of total structure with terminations)
    #     rad.TrfZerPerp(grp, zer, [0,1,0]) #Mirror left-right
    #     #Mirror front-back
    #     rad.TrfZerPerp(grp, zer, [1,0,0])
    #     #Mirror top-bottom
    #     rad.TrfZerPara(grp, zer, [0,0,1])

    return grp
Exemple #6
0
mag08 = rad.ObjRecCur([-15,0,0], [5,7,15], [0.5,0.5,1.])

mag09 = rad.ObjArcCur([0,0,-5], [10,13], [0,2.5], 10, 15, 1.7, 'man', 'z')

mag10 = rad.ObjRaceTrk([0,0,0], [27,28], [1,2.5], 5, 15, 1.7, 'man', 'z')

mag11 = rad.ObjFlmCur([[-10,-30,-10],[30,-30,-10],[30,25,25],[-30,25,25],[-30,-30,-10]], 10.2)

magBkg = rad.ObjBckg([1,2,3])

mag = rad.ObjCnt([mag00, mag01, mag02, mag03, mag04, mag05, mag06, mag07, mag08, mag09])
print('Container Content:', rad.ObjCntStuf(mag))
print('Container Size:', rad.ObjCntSize(mag))

rad.ObjAddToCnt(mag, [mag10, mag11])
cnt02 = rad.ObjCnt([mag00, mag])

mat = rad.MatLin([1.01, 1.2], [0, 0, 1.3])
#mat = rad.MatStd('NdFeB', 1.2)
rad.MatApl(mag01, mat)
print('Magn. Material index:', mat, ' appled to object:', mag01)

mag00a = rad.ObjFullMag([10,0,40],[12,18,5],[0,0,1],[2,2,2],cnt02,mat,[0.5,0,0])

rad.ObjDrwOpenGL(cnt02)

data_cnt = rad.ObjDrwVTK(cnt02)
print(data_cnt)

Exemple #7
0
def MagnetArray(_per, _nper, _po, _w, _si, _type, _cx, _cz, _br, _mu, _ndiv, _bs1, _s1, _bs2, _s2, _bs3, _s3, _bs2dz=0, _qp_ind_mag=None, _qp_dz=0):

    u = rad.ObjCnt([])

    Le = _bs1+_s1+_bs2+_s2+_bs3+_s3
    Lc = (_nper+0.25)*_per
    p = [_po[0],_po[1]-(Lc/2+Le),_po[2]] #po-{0,(Lc/2+Le),0}

    nMagTot = 4*_nper+7
    iMagCen = int(nMagTot/2.) #0-based index of the central magnet
    #print('iMagCen =', iMagCen) #DEBUG

    QP_IsDef = False; QP_DispIsConst = True
    nQP_Disp = 0
    if(_qp_ind_mag is not None):
        if(isinstance(_qp_ind_mag, list) or isinstance(_qp_ind_mag, array)):
            nQP_Disp = len(_qp_ind_mag)
            if(nQP_Disp > 0): QP_IsDef = True
        if(isinstance(_qp_dz, list) or isinstance(_qp_dz, array)): QP_DispIsConst = False
        elif(_qp_dz==0): QP_IsDef = False

    for i in range(nMagTot):
        wc = copy(_w)
        
        if(i==0):
            p[1] += _bs1/2
            wc[1] = _bs1
        elif(i==1):
            p[1] += _bs1/2+_s1+_bs2/2
            wc[1] = _bs2
        elif(i==2):
            p[1] += _bs2/2+_s2+_bs3/2
            wc[1] = _bs3
        elif(i==3):
            p[1] += _bs3/2+_s3+_per/8
        elif((i>3) and (i<4*_nper+4)):
            p[1] += _per/4
        elif(i==4*_nper+4):
            p[1] += _per/8+_s3+_bs3/2
            wc[1] = _bs3
        elif(i==4*_nper+5):
            p[1] += _bs3/2+_s2+_bs2/2
            wc[1] = _bs2
        elif(i==4*_nper+6):
            p[1] += _bs2/2+_s1+_bs1/2
            wc[1] = _bs1

        pc = copy(p)

        if((i==1) or (i==4*_nper+5)):
            if(_si==1): pc[2] += _bs2dz
            else: pc[2] -= _bs2dz

        if(QP_IsDef):
            for iQP in range(nQP_Disp):
                if(i == _qp_ind_mag[iQP] + iMagCen):
                    qpdz = _qp_dz
                    if(not QP_DispIsConst): qpdz = _qp_dz[iQP]
                    pc[2] += qpdz
                    #print('Abs. Ind. of Mag. to be Displaced:', i) #DEBUG
                    break

        t = -i*pi/2*_si
        mcol = [0.0,cos(t),sin(t)]
        m = [mcol[0],mcol[1]*_br,mcol[2]*_br]

        ma = MagnetBlock(pc, wc, _cx, _cz, _type, _ndiv, m)

        mcol = [0.27, 0.9*abs(mcol[1]), 0.9*abs(mcol[2])]
        rad.ObjDrwAtr(ma, mcol, 0.0001)

        rad.ObjAddToCnt(u, [ma])

    mat = rad.MatLin(_mu, abs(_br))
    rad.MatApl(u, mat)

    return u