def APPLE_II(_per, _nper, _gap, _gapx, _phase, _phase_type, _lx, _lz, _cx, _cz, _air, _br, _mu, _ndiv, _bs1, _s1, _bs2, _s2, _bs3, _s3, _bs2dz, _qp_ind_mag, _qp_dz, _use_sym=False): w = [_lx,_per/4-_air,_lz] px = _lx/2+_gapx/2; pz = _gap/2+_lz/2; p1 = 0; p2 = _phase; p3 = 0; p4 = _phase if(_phase_type < 0): p2 = -_phase #print('w =', w) g1 = MagnetArray(_per, _nper, _po=[px,p1,pz], _w=w, _si=1, _type=1, _cx=_cx, _cz=_cz, _br=_br, _mu=_mu, _ndiv=_ndiv, _bs1=_bs1, _s1=_s1, _bs2=_bs2, _s2=_s2, _bs3=_bs3, _s3=_s3, _bs2dz=_bs2dz, _qp_ind_mag=_qp_ind_mag, _qp_dz=_qp_dz) g2 = MagnetArray(_per, _nper, _po=[-px,p2,pz], _w=w, _si=1, _type=2, _cx=_cx, _cz=_cz, _br=_br, _mu=_mu, _ndiv=_ndiv, _bs1=_bs1, _s1=_s1, _bs2=_bs2, _s2=_s2, _bs3=_bs3, _s3=_s3, _bs2dz=_bs2dz, _qp_ind_mag=_qp_ind_mag, _qp_dz=_qp_dz) if(_use_sym): u = rad.ObjCnt([g1,g2]) trf = rad.TrfCmbL(rad.TrfRot([0,0,0],[0,1,0],pi), rad.TrfInv()) rad.TrfMlt(u, trf, 2) return u, g1, g2, 0, 0 g3 = MagnetArray(_per, _nper, _po=[-px,p3,-pz], _w=w, _si=-1, _type=1, _cx=_cx, _cz=_cz, _br=-_br, _mu=_mu, _ndiv=_ndiv, _bs1=_bs1, _s1=_s1, _bs2=_bs2, _s2=_s2, _bs3=_bs3, _s3=_s3, _bs2dz=_bs2dz, _qp_ind_mag=_qp_ind_mag, _qp_dz=_qp_dz) g4 = MagnetArray(_per, _nper, _po=[px,p4,-pz], _w=w, _si=-1, _type=2, _cx=_cx, _cz=_cz, _br=-_br, _mu=_mu, _ndiv=_ndiv, _bs1=_bs1, _s1=_s1, _bs2=_bs2, _s2=_s2, _bs3=_bs3, _s3=_s3, _bs2dz=_bs2dz, _qp_ind_mag=_qp_ind_mag, _qp_dz=_qp_dz) u = rad.ObjCnt([g1,g2,g3,g4]) return u, g1, g2, g3, g4
def _apply_clone(g_id, xform): # start with 'identity' xf = radia.TrfTrsl([0, 0, 0]) for clone_xform in xform.transforms: cxf = PKDict(clone_xform) if cxf.model == 'translateClone': txf = radia.TrfTrsl(_split_comma_field(cxf.distance, 'float')) xf = radia.TrfCmbL(xf, txf) if cxf.model == 'rotateClone': rxf = radia.TrfRot(_split_comma_field(cxf.center, 'float'), _split_comma_field(cxf.axis, 'float'), numpy.pi * float(cxf.angle) / 180.) xf = radia.TrfCmbL(xf, rxf) if xform.alternateFields != '0': xf = radia.TrfCmbL(xf, radia.TrfInv()) radia.TrfMlt(g_id, xf, xform.numCopies + 1)
def _apply_clone(g_id, xform): xform = PKDict(xform) # start with 'identity' xf = radia.TrfTrsl([0, 0, 0]) for clone_xform in xform.transforms: cxf = PKDict(clone_xform) if cxf.model == 'translateClone': txf = radia.TrfTrsl( sirepo.util.split_comma_delimited_string(cxf.distance, float) ) xf = radia.TrfCmbL(xf, txf) if cxf.model == 'rotateClone': rxf = radia.TrfRot( sirepo.util.split_comma_delimited_string(cxf.center, float), sirepo.util.split_comma_delimited_string(cxf.axis, float), numpy.pi * float(cxf.angle) / 180. ) xf = radia.TrfCmbL(xf, rxf) if xform.alternateFields != '0': xf = radia.TrfCmbL(xf, radia.TrfInv()) radia.TrfMlt(g_id, xf, xform.numCopies + 1)
def wradFieldInvert(self): '''trying to write a field inversion function''' for i in range(len(self.magnetisation)): u = -self.magnetisation[i] self.magnetisation[i] = u self.material.M = self.magnetisation fieldinvert = rd.TrfInv(self.radobj) rd.TrfOrnt(self.radobj, fieldinvert) #invert the colour tmp = np.zeros(3) #reflect colour tmpcol = [(4 * x - 2) for x in self.colour] tmpcol[0] = -tmpcol[0] tmpcol[1] = -tmpcol[1] tmpcol[2] = -tmpcol[2] self.colour = [(2 + x) / 4.0 for x in tmpcol] rd.ObjDrwAtr(self.radobj, self.colour, self.linethickness)
def _clone_with_translation(g_id, num_copies, distance, alternate_fields): xf = radia.TrfTrsl(distance) if alternate_fields: xf = radia.TrfCmbL(xf, radia.TrfInv()) radia.TrfMlt(g_id, xf, num_copies + 1)
#mag01sbd = rad.ObjDivMagPln(mag01, [[2,0.5],[3,0.2],[4,0.1]], [1,0.4,0.1], [0.4,1,0.2], [0,0,1], 'Frame->Lab') mag01sbd = rad.ObjDivMagPln(mag01, [[2,0.5],[3,0.2],[4,0.1]]) #rad.ObjDrwOpenGL(mag01sbd) #mag00sbd = rad.ObjDivMag(mag00, [[2,0.5],[3,0.2],[4,0.1]], 'cyl', [[2.5,4,0],[0,0,1],[8,0,0],3], 'Frame->Lab') #mag00sbd = rad.ObjDivMagCyl(mag00, [[2,0.5],[3,0.2],[4,0.1]], [2.5,4,0], [0,0,1], [8,0,0], 3, 'Frame->Lab') print('Volume of 3D object:', rad.ObjGeoVol(mag01sbd)) print('Geom. Limits of 3D object:', rad.ObjGeoLim(mag01sbd)) #rad.ObjDrwOpenGL(mag01) trf01 = rad.TrfPlSym([0,10,0], [0,1,0]) trf02 = rad.TrfRot([0,10,0], [0,0,1], 1.) trf03 = rad.TrfTrsl([30,10,0]) trf04 = rad.TrfInv() trf05 = rad.TrfCmbL(trf01, trf04) trf06 = rad.TrfCmbR(trf01, trf04) #rad.TrfMlt(mag01, trf03, 3) rad.TrfOrnt(mag01, trf06) #rad.ObjDrwOpenGL(mag01) matNdFeB = rad.MatStd('NdFeB') M = rad.MatMvsH(matNdFeB, 'M', [0,0,0]) print('NdFeB material index:', matNdFeB, ' Magnetization:', M) matLin01 = rad.MatLin([0.1,0.2],1.1) matLin02 = rad.MatLin([0.1,0.2],[0,0,1.1]) print('Linear material indexes:', matLin01, matLin02)