*do,irech,1,tsteps

*get,timea,active,0,time,cpu

/prep7

kraftx=(formxx+forvwx)/2.

accel=kraftx/massef
speed=speed+accel*tstep
verschiebung=0.5*accel*tstep*tstep+speed*tstep
position=position+verschiebung
positionr=positionr+verschiebung

cedel,all,all,all

*if,positionr,gt,laenge/2,then
positionr=positionr-laenge
cmsel,s,_statorg
agen,1,all,,,-laenge,,,,,1
allsel
*endif

*if,positionr,lt,-laenge/2,then
positionr=positionr+laenge
cmsel,s,_statorg
agen,1,all,,,laenge,,,,,1
allsel
*endif

cmsel,s,_statorg
agen,1,all,,,verschiebung,,,,,1
allsel

lin_asyn_kurzw_interl.txt

allsel

zeit=zeit+tstep

*afun,deg
omegat=2*3.141593*freq*zeit
omegat=omegat/3.141593*180.

/prep7
*do,im,1,m
R,50+im,u1*cos(omegat-(im-1)*120), ,  
*enddo

/solu

krit=6
!
!   Kriterium erfuellen
!
ij=irech/krit
ijj=nint(ij-0.5)
isort=irech-ijj*krit
*If,isort,eq,0,then
  isort=krit
*EndIf
!
*If,isort,le,krit/3,then
!
!   Kriterium a
!
  /com,Jetzt ist irech = %irech%
  /assign,rst,a%irech%,rst
resfile=1
/sys,del b*.rst
!
*ElseIf,isort,le,2*krit/3,then
  *If,isort,gt,krit/3,then
    !
    !    Kriterium b
    !
    /assign,rst,b%irech%,rst
    resfile=2
    /sys,del c*.rst
  *EndIf
!
*ElseIf,isort,le,krit,then
  *If,isort,gt,2*krit/3,then
    !
    !   Kriterium c
    !
    /assign,rst,c%irech%,rst
    resfile=3
    /sys,del a*.rst
  *EndIf
*EndIf
!
!

allsel


antyp,tran,rest
timinit,on,mag
tintp,,,,1
time,zeit
cnvt,a,
cnvt,csg
neqit,250
*EndIf

solve

*get,timee,active,0,time,cpu
rechzeit=timee-timea

/post1

*If,resfile,eq,1,then
  inres,
    file,a%irech%,rst,
*ElseIf,resfile,eq,2,then
  inres,
    file,b%irech%,rst,
*ElseIf,resfile,eq,3,then
  inres,
    file,c%irech%,rst,
*EndIf



SET,last,LAST,1,

/post1
allsel
esel,s,enam,,124
etable,spanng,smisc,1
etable,strom,smisc,2
etable,leistu,nmisc,1
etable,refl
*get,u1e,elem,elemusp21,etab,spanng
*get,u2e,elem,elemusp22,etab,spanng
*get,u3e,elem,elemusp23,etab,spanng
*get,i1e,elem,elemst21,etab,strom
*get,i2e,elem,elemst22,etab,strom
*get,i3e,elem,elemst23,etab,strom
*get,Pauf1,elem,elemusp21,etab,leistu
*get,Pauf2,elem,elemusp22,etab,leistu
*get,Pauf3,elem,elemusp23,etab,leistu
*get,PR1,elem,elemst21,etab,leistu
*get,PR2,elem,elemst22,etab,leistu
*get,PR3,elem,elemst23,etab,leistu
FMAGSUM_L.MAC,'kraftste'
for1x=_for(1,1,2)
for2x=_for(1,1,1)
for1y=_for(1,2,1)
for2y=_for(1,2,2)
formxx=for1x*tiefe
forvwx=for2x*tiefe
formxy=for1y*tiefe
forvwy=for2y*tiefe
kraftx=(formxx+forvwx)/2

/output,U_I_Stator%ausgabe%,lis,,append
*VWrite,irech,zeit,position,speed,accel,U1e,i1e,u2e,i2e,u3e,i3e,rechzeit
(12(g14.6,' '))
/output,term
/output,Pauf_Stator%ausgabe%,lis,,append
*VWrite,irech,zeit,position,speed,accel,Pauf1,Pauf2,Pauf3,PR1,PR2,PR3,rechzeit
(12(g14.6,' '))
/output,term
/output,Kraft%ausgabe%,lis,,append
*VWrite,irech,zeit,position,speed,accel,formxx,forvwx,formxy,forvwy
(9(g14.6,' '))
/output,term


SET,last,LAST,1,

/auto,1
/rep
/title,Kurzstator-Linearmotor-Kaefig, Zeit=%zeit%
allsel
/show,Plots%ausgabe%,grph,,append
aplot
/show,Plots%ausgabe%,grph,,append
plf2d,51,0,20,1
allsel,below,area
/show,Plots%ausgabe%,grph,,append
PLNSOL,B,SUM,0, 
/show,Plots%ausgabe%,grph,,append
PLESOL, JT,SUM, 0   
NSEL,S,LOC,y,-delta/2-1e-6,-delta/2-1e-6+1e-6  
/VSCALE,1,1,0   
/show,Plots%ausgabe%,grph,,append
PLVECT,B, , , ,VECT,ELEM,ON,0   
/show,Plots%ausgabe%,grph,,append
PLVECT,h, , , ,VECT,ELEM,ON,0   
/show,term
cmsel,s,_stator
allsel,below,area
/show,Plots%ausgabe%,grph,,append
PLESOL, JT,SUM, 0   
/show,term
/show,Plots%ausgabe%,grph,,append
plf2d,51,0,20,1
/show,term
/show,Plots%ausgabe%,grph,,append
plf2d,51,0,20,1
PADEL,ALL   
PATH,lufts1,2,12,6000, 
PPATH,1,0,0,-delta/2,,0,
PPATH,2,0,laenge,-delta/2,,0,
PDEF,by,B,Y,AVG 
/PBC,PATH, ,1   
 /axlab,x,Statorkoordinate in m 
 /axlab,y,B_r  in T
 /grid,1
 /xrange,0,laenge
 /yrange,-luftskal,luftskal
 /GCOL,1,'B (vertikal)'
 /title,Luftspaltfeld des Linearmotors bei t=%zeit%
/show,Plots%ausgabe%,grph,,append
plpath,by
/show,term

allsel


*enddo


/eof


/solu
!*  
antyp,trans
timinit,off,mag
time,t
*Else
antyp,tran,rest
timinit,on,mag
tintp,,,,1
time,t
*EndIf

zeit=1e-6
tstep=1./freq/30

/prep7

*do,irechz,1,12
timer=zeit+tstep*(irechz-1)
omegat=2*3.141593*freq*(zeit+tstep*(irechz-1))
omegat=omegat/3.141593*180.
/prep7
*do,im,1,m
R,50+im-1,u1*cos(omegat-(im-1)*120), ,  
*enddo
/solu
allsel
solve
/post1
SET,1,LAST,1,0, , , 
/show,pauli%u1_schl%,grph,,append
plf2d,27,0,20,1
allsel
esel,s,enam,,124
etable,spanng,smisc,1
etable,strom,smisc,2
etable,refl
*get,u11,elem,eu1,etab,spanng
*get,i11,elem,eu2,etab,strom
*get,u12,elem,eu3,etab,spanng
*get,i12,elem,eu1,etab,strom
*get,u13,elem,eu2,etab,spanng
*get,i13,elem,eu3,etab,strom
fmagsum_f,'kraftstate'
kraftvwx=fvw_x*tiefe
kraftvwy=fvw_y*tiefe
kraftmxx=fmx_x*tiefe
kraftmxy=fmx_y*tiefe
Fx=kraftvwx

/output,kraft%u1_schl%,lis,,append
*VWrite,irechz,timer,position,speed,a,u11,u12,u13,i11,i12,i13,kraftvwx,kraftvwy,kraftmxx,kraftmxy
(15(g14.6,' '))
/output,term

*enddo



solve

/show,term
plf2d


!!Erste Rechnung (statisch)
/solu
eqslv,frontal!!!!sparse
allsel
antyp,trans
timint,off,mag
timint,off,elect
tintp,,,,1
time,zeit
cnvt,a,
cnvt,csg
neqit,250

allsel

solve
/post1
fmagsum_f,'kraft'
asel,u,mat,,1,3
allsel,below,area
PLESOL,JT,SUM,0,


SET,last,LAST,  
PLF2D,51,0,20,1 
allsel
esel,s,enam,,124
etable,spanng,smisc,1
etable,strom,smisc,2
etable,refl
*get,u11,elem,eu1,etab,spanng
*get,i11,elem,eu2,etab,strom
*get,u12,elem,eu3,etab,spanng
*get,i12,elem,eu1,etab,strom
*get,u13,elem,eu2,etab,spanng
*get,i13,elem,eu3,etab,strom

kraftvwx=fvw_x*tiefe
kraftvwy=fvw_y*tiefe
kraftmxx=fmx_x*tiefe
kraftmxy=fmx_y*tiefe

a=(Fx-Fgegen)/Masse

/output,kraft%u1_schl%,lis,,append
*VWrite,izeit,zeit,position,speed,a,u11,u12,u13,i11,i12,i13,kraftvwx,kraftvwy,kraftmxx,kraftmxy
(15(g14.6,' '))
/output,term

position=0
positionr=0

*do,izeit,1,tsteps
/prep7

tstep=1./freq/periodstep
Zeit=zeit+tstep

*do,im,1,m
R,21+im,u1*cos(2.*pi*freq*zeit/(2.*pi)*360-(im-1)*120), ,  
*enddo  

cedel,all,all,all


verschiebung=(a/2)*tstep*tstep+speed*tstep
speed=speed+a*tstep

cmsel,s,mstator
allsel,below,area
agen,1,all,,,verschiebung,,,,,1

position=position+verschiebung
positionr=positionr+verschiebung

*If,positionr,lt,-(2*klotzbreite+z1*nutteilung)/2,then
agen,1,all,,,2*klotzbreite+z1*nutteilung,,,,,1
positionr=positionr+2*klotzbreite+z1*nutteilung
*EndIf

cmsel,s,nodestator
*if,positionr,gt,0,then
NSEL,r,LOC,x,positionr,2*klotzbreite+z1*nutteilung
*else
NSEL,r,LOC,x,0,2*klotzbreite+z1*nutteilung+positionr
*endif
cm,nodezstator,node  
esln,s
esel,u,mat,,13
cm,elemzstator,elem

cmsel,s,noderotor
*if,positionr,gt,0,then
NSEL,r,LOC,x,positionr,2*klotzbreite+z1*nutteilung
*else
NSEL,r,LOC,x,0,2*klotzbreite+z1*nutteilung+positionr
*endif
cm,nodezrotor,node  

*if,positionr,ne,0,then

cmsel,s,nodestator
*if,positionr,gt,0,then
NSEL,r,LOC,x,2*klotzbreite+z1*nutteilung+1e-5,2*klotzbreite+z1*nutteilung+positionr
*else
NSEL,r,LOC,x,positionr,0-1e-5
*endif
cm,nodeuestator,node  
esln,s
cm,elemuestator,elem

cmsel,s,noderotor
*if,positionr,gt,0,then
NSEL,r,LOC,x,0,positionr-1e-5
*else
NSEL,r,LOC,x,2*klotzbreite+z1*nutteilung+positionr+1e-5,2*klotzbreite+z1*nutteilung
*endif
cm,nodeuerotor,node  

laufce=1

!!! Nodezahl oben (Laeufer)
cmsel,s,nodeuestator
*get,nodeanzahl_oben,node,0,count
nodeoben=
*dim,nodeoben,array,nodeanzahl_oben
xnodeoben=
*dim,xnodeoben,array,nodeanzahl_oben

*get,nodeoben(1),node,0,num,min
*get,xnodeoben(1),node,nodeoben(1),loc,x
*do,nodez,1,nodeanzahl_oben-1
erst=nodeoben(nodez)
*get,nex,node,erst,nxth
nodeoben(nodez+1)=nex
posi=nodeoben(nodez+1)
*get,xnodeoben(nodez+1),node,posi,loc,x
*enddo

!!! Nodezahl unten (Rotor)
cmsel,s,nodeuerotor
*get,nodeanzahl_unten,node,0,count
nodeunten=
*dim,nodeunten,array,nodeanzahl_unten
xnodeunten=
*dim,xnodeunten,array,nodeanzahl_unten

*get,nodeunten(1),node,0,num,min
*get,xnodeunten(1),node,nodeunten(1),loc,x
*do,nodez,1,nodeanzahl_unten-1
erst=nodeunten(nodez)
*get,nex,node,erst,nxth
nodeunten(nodez+1)=nex
posi=nodeunten(nodez+1)
*get,xnodeunten(nodez+1),node,posi,loc,x
*enddo

*if,positionr,gt,0,then
cmsel,s,mstator
allsel,below,area
agen,1,all,,,-(2*klotzbreite+z1*nutteilung),,,,,1
*else
agen,1,all,,,(2*klotzbreite+z1*nutteilung),,,,,1
*endif

cmsel,s,nodeuerotor
esln,s
cmsel,a,nodeuestator
ceintf,

*if,positionr,gt,0,then
cmsel,s,mstator
allsel,below,area
agen,1,all,,,(2*klotzbreite+z1*nutteilung),,,,,1
*else
agen,1,all,,,-(2*klotzbreite+z1*nutteilung),,,,,1
*endif

*endif

cmsel,s,nodezrotor
*if,positionr,ne,0,then
cmsel,u,nodeuerotor
*endif
cmsel,s,elemzstator
*if,positionr,ne,0,then
cmsel,u,elemuestator
*endif
cmsel,u,nodezstator
*if,positionr,ne,0,then
cmsel,u,nodeuestator
*endif

ceintf,

allsel
/solu
eqslv,frontal!!!!sparse
allsel

antyp,tran,rest
timint,on,mag
timint,on,elect
tintp,,,,1
time,zeit
cnvt,a,
cnvt,csg
neqit,250

allsel

solve
/post1
fmagsum_f,'kraft'
asel,u,mat,,1,3
allsel,below,area
PLESOL,JT,SUM,0,
allsel

SET,last,LAST,  
PLF2D,51,0,20,1 
allsel
esel,s,enam,,124
etable,spanng,smisc,1
etable,strom,smisc,2
etable,refl
*get,u11,elem,eu1,etab,spanng
*get,i11,elem,eu2,etab,strom
*get,u12,elem,eu3,etab,spanng
*get,i12,elem,eu1,etab,strom
*get,u13,elem,eu2,etab,spanng
*get,i13,elem,eu3,etab,strom

kraftvwx=fvw_x*tiefe
kraftvwy=fvw_y*tiefe
kraftmxx=fmx_x*tiefe
kraftmxy=fmx_y*tiefe
Fx=kraftvwx

/output,kraft%u1_schl%,lis,,append
*VWrite,izeit,zeit,position,speed,a,u11,u12,u13,i11,i12,i13,kraftvwx,kraftvwy,kraftmxx,kraftmxy
(15(g14.6,' '))
/output,term

a=(Fx-Fgegen)/Masse


*enddo
