subroutine zout c---print a list of elements and their locations. c---------------------------------------------------------------------- save c include 'param_sz.h' include 'bfieldcom.h' include 'constcom.h' include 'flagcom.h' include 'pfieldcom.h' include 'phizoutcom.h' include 'syscom.h' include 'ucom.h' c parameter (nbcd=16) character*10 bcd(nbcd) c-------------------------------------------------------------------------- c* data (bcd(j),j=1,nbcd) /'drift','solenoid','quad','bend', 1 'buncher','chopper','cell','tank','trwave','sbload', 2 'rotate','dpout','cathode','wiggler','alpham','sextupol'/ if(ifld.ne.0 .or. poiflag)then write(nnout, 11) write(nnout, 12) else write(nnout, 10) write(nnout,13) endif 10 format(3x,'n',8x,'z1',2x,'element ',8x,'z2',8x,'dz',5x,'phase') 13 format(3x,1x,8x,'cm',2x,8x,8x,'cm',8x,'cm',4x,'degres') 11 format(3x,'n',8x,'z1',2x,'element ',8x,'z2',8x,'dz',5x, 1 'Bz(z2,r=0.)',4x,'phase') 12 format(3x,1x,8x,'cm',2x,8x,8x,'cm',8x,'cm',7x,'Gauss',7x,'degres') z1=0. do 30 n=1,nel z2=zloc(n) dz=z2-z1 nt=ntype(n) if(nt.eq.26)nt=11 if(nt.eq.27)nt=10 if(nt.eq.29)nt=12 if(nt.eq.30)nt=13 if(nt.eq.35)nt=14 ! wiggler if(nt.eq.36)nt=15 ! alpha magnet if(ifld.ne.0 .or. poiflag)then if(nt.eq.7) then angle=atan2(el(9,n),el(10,n))/radian c the range of the result for atan2 is -pi < result <= pi if(abs(angle).eq.180.) angle=-angle c si l'on veut l'angle entre sur la carte cell c angle=phideg(n) write(nnout, 40)n,z1,bcd(nt),z2,dz,bfld(z2,0.,brfld), * angle elseif(nt.eq.9) then angle=el(4,n)/radian write(nnout, 40)n,z1,bcd(nt),z2,dz,bfld(z2,0.,brfld), * angle else c for solenoid nt = 2 if(nt.eq.2) then write(nnout, 40)n,z1,bcd(nt),z2,dz,el(4,n) else write(nnout, 40)n,z1,bcd(nt),z2,dz,bfld(z2,0.,brfld) endif endif else if(nt.eq.7) then angle=atan2(el(9,n),el(10,n))/radian if(abs(angle).eq.180.) angle=-angle c si l'on veut l'angle entre sur la carte cell c angle=phideg(n) write(nnout, 20)n,z1,bcd(nt),z2,dz,angle elseif(nt.eq.9) then angle=el(4,n)/radian write(nnout, 20)n,z1,bcd(nt),z2,dz,angle else write(nnout, 20)n,z1,bcd(nt),z2,dz endif endif 20 format(i4,f10.1,2x,a10,f8.1,f10.3,f10.3) 40 format(i4,f10.1,2x,a10,f8.1,f10.2,f12.2,3x,f10.3) z1=z2 30 continue if(ifld.ne.0.or.poiflag)then open(unit=nfield,file='pmbfield',access='sequential', * status='unknown',form='formatted') write(nfield,*)'z(cm) b(gauss)' if(ifld.ne.0) then zz=zmin zpas=dzz else zz=pzmin div=nptcbu cbm28/09/09 zpas=(pzmax-pzmin)/1000. zpas=(pzmax-pzmin)/div endif cbm28/09/09 do 50 i=1,1001 do 50 i=1,nptcbu+1 write(nfield,150)zz,bfld(zz,0.,br),br,bfld(zz,.5,br),br zz=zz+zpas 50 continue close(nfield) endif 150 format(f8.3,f10.2,3f10.2) return end c++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*