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)
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
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)
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
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)
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