/out,mmf_,out
/gopr
/com, ANSYS REVISION 5.4a, MMF.MAC, Modified on 97/12/28, (SID) = 3.1
*get,_mnu,active,,menu
*if,_mnu,eq,0,then
 _dely=0
 *else
 _dely=0
*endif

*get,_arout,active,,rout
*if,_arout,ne,31,then
  fini
  /post1
  *get,_arout,active,,rout
*endif
*if,_arout,eq,31,then
 _dummy=1
 mmf=
! /out,scratch
/COM,   MACRO FOR CALCULATING ENCLOSED CURRENT VIA AMPERE'S LAW
/COM,
/COM,   *** ASSUMPTIONS
/COM,       VALID FOR ALL MAGNETICS ANALYSES
/COM,       PATH MUST BE DEFINED BEFORE CALLING MACRO
/COM,       THE /SHOW COMMAND MUST BE ISSUED PRIOR TO CALLING MACRO
/COM, 
/COM,   *** NOTE: MMF CALCULATION USES CALCULATED NODAL H VALUES. PATHS
/COM,             CROSSING DISSIMILAR MATERIALS MUST HAVE AT LEAST
/COM,             ONE POINT AT EVERY MATERIAL FOR GOOD ACCURACY.
/COM,
/COM,   *** ANSYS REVISION 5.4
/COM,
/COM,   *** CALCULATED PARAMETERS 
/COM,
/COM,       mmf = CURRENT (AMPERES) - MKS UNITS
/COM,                     (ABAMPERES) - CGS UNITS
/COM,
/COM,       (PARAMETER IS RETAINED)
! /out
*get,_unit,active,,solu,emunit      ! 1=mks, 2=cgs, 3=user
*get,_mu,active,,solu,muzro
*get,_dimn,active,,solu,dimn        ! 1=axisym, 2=planar, 3=3d 
*if,_unit,gt,2,then
 *msg,error
 Invalid units option specified, please reissue command macro
 /wait,_dely
 _ok=1
*endif
*get,_nc,path,,node,count
*if,_nc,eq,0,then
 *msg,error
 The path for calculating the mmf must be defined first
 _ok=1
*endif
*if,_ok,eq,0,then
*get,_sysr,active,,rsys             ! get active RSYS c.s.
*get,_sysd,active,,dsys             ! get active DSYS c.s.
_sysd=0
*get,_sysc,active,,csys             ! get active CSYS c.s.
_afun=atan(1)
*if,_afun,gt,1,then
 *afun,rad
*endif
_pi4=16*atan(1)                     ! 4*pi
/NOPR
dsys
RSYS,0
CSYS,0
/uis,msgpop,3
!PMAP,ACCU,MAT
/uis,msgpop,0
pmap,accurate,mat
PDEF,HX,H,X,NOAV                         ! interpret H to path
PDEF,HY,H,Y,NOAV
PDEF,HZ,H,Z,NOAV
PVECT,TANG,TX,TY,TZ                 ! interpret tangent normals to path
PDOT,D,HX,HY,HZ,TX,TY,TZ            ! calculate dot product
PCALC,INTG,MMF,D,S                  ! integrate over path
*GET,mmf,PATH,,LAST,MMF             ! get total mmf (current)
*IF,_unit,EQ,2,THEN
  mmf=mmf/_pi4                      ! correct by 4*pi for CGS units
*ENDIF
/com,  summarize the MMF data by material



/out,mmf,sum
*msg,info
%/________________ SUMMARY OF MMF CALCULATION____________________
/wait,_dely/2
*if,_unit,le,1,then
 *msg,info,mmf
%/MMF = %G Ampere %/
 /WAIT,_dely
 *elseif,_unit,eq,2,then
 *msg,info,mmf
%/MMF = %G AbAmpere %/
 /WAIT,_dely
*endif
*msg,info
NOTE:
*msg,info
  Parameter defined for magnetomotive force : MMF
*msg,info 
  Path Items for plotting:
*msg,info  
  "D"   H tangential
*msg,info  
  "MMF" MMF from path start to current position on path
*msg,info
____________________________________________________________

/out
!pdef,clear
rsys,_sysr
dsys,_sysd
csys,_sysc
*if,_afun,gt,1,then
*afun,deg
*endif
_afun=
*endif
_sysr=
_sysd=
_sysc=
_pi4=
_dummy=
_unit=
_dimn=
_mu=
_nc=
*endif

*if,_mg1,ne,1,then
 _mg1=0
*endif
*if,_mg2,ne,1,then
 _mg2=0
*endif


*if,_ok,ne,1,then       ! no error
 *if,_mg1,ne,1,then     ! no transient
  *if,_mg2,ne,1,then    ! no sub-macro call
   *if,_mnu,ne,1,then  ! menu off
    *list,mmf,sum       ! batch listing
   *else
    *list,mmf,sum       ! batch listing
    *uilist,mmf,sum     ! interactive listing
   *endif
  *endif
 *endif
*endif

*if,_ok,eq,1,then
 _ok2=1
*endif

_arout=
_mnu=
_ok=
_dely=