#!MC 1410
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#
# DPW-VII SECTIONAL CUTTER AND SECTIONAL INTEGRATOR (Version 7c - Jun. 10, 2022)
# v7: Initial release of macro for DPW-VII
# v7a: Fix bug in sectional force/moment integration
# v7b: Add auto-detection of Body/Wing zones
# v7c: Improved integration process for general surface zone input
#
# TO BE USED WITH:
# DPW-VII.DataForm_SectionalCuts_v7.dat
# DPW-VII.DataForm_Sectional_Lift_and_Moment_Span_v7.dat
# DPW-VII.DataForm_Sectional_Lift_and_Moment_Alpha_v7.dat (re-arrange Span output as function of angle-of-attack)
#
# INSTRUCTIONS:
# 1. Load Fuselage and Wing Surface Zones into Tecplot
# 2. Assign SolutionLabel variable as the identifier of the dataset
# 3. Assign FilePrependLabel variable to the filename to write out sectional cut data (recommend using |SolutionLabel|)
# 4. Assign OutputDirectoryPath variable to the path to write out sectional cut data
# 5. Assign (Xvar,Yvar,Zvar) variables to the variable number in dataset (typically 1,2,3)
# 6. Assign CPvar variable to the variable number in dataset (typically 4)
# 7. Assign CFvar variable to the variable number in dataset (if exists)
# 8. Assign CFXvar,CFYvar,CFZvar variables to the variable number in dataset (if exists)
# 9. Assign BodyMaps variable to define which zones define the fuselage surface(s)
# 10. Assign WingMaps variable to define which zones define the wing surface(s)
# 11. Assign PlotTime variable (if multiple time steps are included in dataset) to define which solution time should be used
# 12. Run macro and verify output to:
# - |OutputDirectoryPath||FilePrependLabel|.plt
# - |OutputDirectoryPath||FilePrependLabel|_SectionalIntegration.plt
# 13. Copy sectional cutter data into data form
# - DPW-VII.DataForm_SectionalCuts_v7.dat
# 14. Copy sectional lift/pitching moment data into data form
# - DPW-VII.DataForm_Sectional_Lift_and_Moment_Span_v7.dat
# 15. Rearrange output from multiple angles-of-attack cases
# - DPW-VII.DataForm_Sectional_Lift_and_Moment_Alpha_v7.dat
#
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$!DRAWGRAPHICS FALSE
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#
# USER CUSTOM READ DATA COMMAND
# - Go to Scripting --> Record Macro
# - Manually read your dataset and stop recording
# - Copy the resulting macro command here
# - Note the required variables for entry below (variable numbers, maps, etc.)
#
#$!ReadDataSet ...
# ...
#
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#
# PLOT OUTPUT LOCATION
#
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# CaseX - Case [Case1/Case2/Case3/Case4/Case5/Case6]
# XXX - First-author participant's last name (or organization)
# XxQ - Condition Q [LoQ/HiQ/NoQ]
# RxxM - Reynolds Number [05/20/30]
# Lx - Grid Level [L1/L2/L3/L4/L5/L6]
# Axxx - Angle of Attack [275/300/325/350/375/400/425]
# (use C058 for Fixed CL=0.58 case)
#
# Grid/SolverVer/Method/TurbModel should be descriptive labels specific to your case
#
$!VarSet |SolutionLabel| = 'CaseX_XXX_XxQ_RxxM_Lx_Axxx_Grid_SolverVer_Method_TurbModel' # Label for this solution
$!VarSet |FilePrependLabel| = '|SolutionLabel|' # Prepend output files with this label (recommend |SolutionLabel| variable)
$!VarSet |OutputDirectoryPath| = '' # Images will be saved to this path
# NOTE: Use '' if launching Tecplot from the command line within the desired directory
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#
# PLOT TITLE SOLUTION INFORMATION
#
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
$!VarSet |Q| = '??Qa###' # Aeroelastic shape [ie LoQa275/HiQa275/NoQ]
$!VarSet |REYN| = '??' # Reynolds number [05 or 20 or 30] (based on reference chord)
$!VarSet |MACH| = '0.85' # Mach number
$!VarSet |ALPHA| = '?.????' # Angle-of-Attack (used in Sectional Lift/Pitching Moment output)
$!VarSet |CL| = '?.????' # Lift Coefficient (used in Sectional Lift/Pitching Moment output)
$!VarSet |CD| = '?.??????' # Drag Coefficient
$!VarSet |CMy| = '??.?????' # Pitching Moment Coefficient
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#
$!VarSet |Xvar| = 1 # Variable number to use for X coordinate (running from fuselage nose to tail)
$!VarSet |Yvar| = 2 # Variable number to use for Y coordinate (running from symmetry plane to wing tip)
$!VarSet |Zvar| = 3 # Variable number to use for Z coordinate (running from fuselage keel to crown)
$!VarSet |CPvar| = 4 # Variable number to use for Cp
$!VarSet |CFvar| = 8 # Variable number to use for Cf (use '' if variable does not exists)
$!VarSet |CFXvar| = 5 # Variable number to use for Cfx (use '' if variable does not exists)
$!VarSet |CFYvar| = 6 # Variable number to use for Cfy (use '' if variable does not exists)
$!VarSet |CFZvar| = 7 # Variable number to use for Cfz (use '' if variable does not exists)
$!VarSet |BodyMaps| = '1-1' # Fieldmaps of your dataset to plot for the body/fuselage ('1-2','1,3,5-6',etc.)
$!VarSet |WingMaps| = '2' # Fieldmaps of your dataset to plot for the wing ('1-2','1,3,5-6',etc.)
$!VarSet |PlotTime| = '' # Tecplot SolutionTime variable to export for time-accurate data sets
# # NOTE: Use |PlotTime| == '' if no solution time needs to be set.
#
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#
# ! ! ! E N D O F U S E R I N P U T ! ! !
#
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
$!VarSet |Xrev| = 0 # Set to 1 ONLY if X-axis is running from fuselage tail to nose (negative drag direction)
$!VarSet |Yrev| = 0 # Set to 1 ONLY if Y-axis is running from wing tip to the symmetry plane
$!VarSet |Zrev| = 0 # Set to 1 ONLY if Z-axis is running from fuselage crown to keel (negative lift direction)
#-------------------------------------
#===================================================================
# Create |OutputDirectoryPath|, if it does not exist (disabled due to security concerns)
#-------------------------------------
$!IF 0 == 1
$!IF "|OutputDirectoryPath|" != ""
#$!INTERFACE OKTOEXECUTESYSTEMCOMMAND = YES
$!IF |OPSYS| == 1
$!SYSTEM "mkdir -p |OutputDirectoryPath|"
$!ELSEIF |OPSYS| == 2
# NOTE: Untested syntax
#$!SYSTEM "if not exist \"|OutputDirectoryPath|\" mkdir |OutputDirectoryPath|"
$!SYSTEM "mkdir |OutputDirectoryPath|"
$!ENDIF
$!ENDIF
$!ENDIF
#===================================================================
$!SetStyleBase Factory
$!GlobalPaper
PaperSizeInfo { Letter { Width = 8.5 Height = 11 LeftHardClipOffset = 0.125 RightHardClipOffset = 0.125 TopHardClipOffset = 0.125 BottomHardClipOffset = 0.125 } }
$!Page
Name = 'Untitled'
PaperAttributes
{
BackgroundColor = White
IsTransparent = Yes
OrientPortrait = No
ShowGrid = Yes
ShowRuler = No
ShowPaper = No
PaperSize = Letter
RulerSpacing = OneInch
PaperGridSpacing = HalfInch
RegionInWorkArea { X1 = 1 Y1 = 0.25 X2 = 10 Y2 = 8.25 }
}
$!FrameLayout
ShowHeader = No
HeaderColor = Red
XYPos { X = 1 Y = 0.25 }
Width = 9
Height = 8
$!FrameName = 'Frame 001'
$!PlotType = Cartesian3D
$!ThreeDAxis
AspectRatioLimit = 25
BoxAspectRatioLimit = 25
XDetail { VarNum = |Xvar| ShowAxis = No RangeMin = 0.0 RangeMax = 1.0 GRSpacing = 10 AxisLine { Edge = 2 } }
YDetail { VarNum = |Yvar| ShowAxis = No RangeMin = 0.0 RangeMax = 1.0 GRSpacing = 10 AxisLine { Edge = 3 } }
ZDetail { VarNum = |Zvar| ShowAxis = No RangeMin = 0.0 RangeMax = 1.0 GRSpacing = 5 AxisLine { Edge = 2 } }
AxisMode = XYZDependent
XYDepXToYRatio = 1
DepXToYRatio = 1
DepXToZRatio = 1
EdgeAutoReset = Yes
FrameAxis { Size = 4 XYPos { X = 10 Y = 10 } }
$!GlobalRGB
RedChannelVar = 3
GreenChannelVar = 3
BlueChannelVar = 3
RangeMin = 0
RangeMax = 1
$!Interface ZoneBoundingBoxMode = Off
#===================================================================
# Scaling/Translating Dataset (wind tunnel/metric->inches/etc.)
#===================================================================
# Reverse coordinate axes, if required by user input
#-------------------------------------
$!IF |Xrev| == 1
$!AlterData
Equation = 'V|Xvar| = -1 * V|Xvar|'
$!AlterData
Equation = 'V|CFXvar| = -1 * V|CFXvar|'
$!ENDIF
$!IF |Yrev| == 1
$!AlterData
Equation = 'V|Yvar| = -1 * V|Yvar|'
$!AlterData
Equation = 'V|CFYvar| = -1 * V|CFYvar|'
$!ENDIF
$!IF |Zrev| == 1
$!AlterData
Equation = 'V|Zvar| = -1 * V|Zvar|'
$!AlterData
Equation = 'V|CFZvar| = -1 * V|CFZvar|'
$!ENDIF
# Calculate scaling based on grid coordinate ranges
#-------------------------------------
$!IF '|BodyMaps||WingMaps|' == ''
$!ACTIVEFIELDMAPS = [1-|NumZones|]
$!ELSE
$!ACTIVEFIELDMAPS = [|BodyMaps|,|WingMaps|]
$!ENDIF
#$!PAUSE 'Xrange = (|MINX%.12f|,|MAXX%.12f|)\nYrange = (|MINY%.12f|,|MAXY%.12f|)\nZrange = (|MINZ%.12f|,|MAXZ%.12f|)'
$!VarSet |Scale| = ((2562.883 - 92.500) / (|MAXX%.12f| - |MINX%.12f|))
$!VarSet |Xshift| = ( 92.50000 - |MINX%.12f|*|Scale| )
$!VarSet |Yshift| = ( 0.00000 - |MINY%.12f|*|Scale| )
$!VarSet |Zshift| = (343.14873687 - |MAXZ%.12f|*|Scale| )
$!VarSet |tab| = ' '
#$!PAUSE 'NOTE: Transforming grid to airplane coordinates with fuselage beginning at (92.5,0.0,198.0) inches\n|tab|Scale = |Scale|\n|tab|Xshift = |Xshift|\n|tab|Yshift = |Yshift|\n|tab|Zshift = |Zshift|'
$!AlterData
Equation = 'V|Xvar| = V|Xvar| * |Scale| + |Xshift|'
$!AlterData
Equation = 'V|Yvar| = V|Yvar| * |Scale| + |Yshift|'
$!AlterData
Equation = 'V|Zvar| = V|Zvar| * |Scale| + |Zshift|'
#$!PAUSE 'Xrange = (|MINX%.12f|,|MAXX%.12f|)\nYrange = (|MINY%.12f|,|MAXY%.12f|)\nZrange = (|MINZ%.12f|,|MAXZ%.12f|)'
#===================================================================
#===================================================================
# Auto detect zones that are Body vs. Wing (based on Body zones having max y-coordinate < 122.25)
#-------------------------------------
$!IF '|BodyMaps||WingMaps|' == ''
$!LOOP |NumZones|
$!ACTIVEFIELDMAPS = [|LOOP|]
$!IF |MAXY%.12f| < 122.25
$!IF '|BodyMaps|' == ''
$!VarSet |BodyMaps| = '|LOOP|'
$!ELSE
$!VarSet |BodyMaps| = '|BodyMaps|,|LOOP|'
$!ENDIF
$!ELSE
$!IF '|WingMaps|' == ''
$!VarSet |WingMaps| = '|LOOP|'
$!ELSE
$!VarSet |WingMaps| = '|WingMaps|,|LOOP|'
$!ENDIF
$!ENDIF
$!ENDLOOP
$!PAUSE 'NOTE: Auto-detected\n BodyMaps = |BodyMaps|\n WingMaps = |WingMaps|\n'
$!ENDIF
#===================================================================
# Populate variables, if not defined
#-------------------------------------
#$!IF "|CPvar|" == ""
# $!ALTERDATA EQUATION = "{CP} = -999"
# $!VARSET |CPvar| = "|NUMVARS|"
#$!ENDIF
$!IF "|CFXvar|" == ""
$!ALTERDATA EQUATION = "{CFX} = -999"
$!VARSET |CFXvar| = "|NUMVARS|"
$!ENDIF
$!IF "|CFYvar|" == ""
$!ALTERDATA EQUATION = "{CFY} = -999"
$!VARSET |CFYvar| = "|NUMVARS|"
$!ENDIF
$!IF "|CFZvar|" == ""
$!ALTERDATA EQUATION = "{CFZ} = -999"
$!VARSET |CFZvar| = "|NUMVARS|"
$!ENDIF
$!IF "|CFvar|" == ""
$!ALTERDATA EQUATION = "{CF} = -999"
$!VARSET |CFvar| = "|NUMVARS|"
$!ALTERDATA EQUATION = "V|CFvar| = SQRT(V|CFXvar|**2 + V|CFYvar|**2 + V|CFZvar|**2)"
$!ENDIF
$!ALTERDATA EQUATION = '{XoC} = -999'
$!VARSET |XOCvar| = |NUMVARS|
$!ALTERDATA EQUATION = '{YoC} = -999'
$!VARSET |YOCvar| = |NUMVARS|
$!ALTERDATA EQUATION = '{ZoC} = -999'
$!VARSET |ZOCvar| = |NUMVARS|
#===================================================================
# Name variables consistently
#-------------------------------------
$!RenameDataSetVar
Var = |Xvar|
Name = 'X'
$!RenameDataSetVar
Var = |Yvar|
Name = 'Y'
$!RenameDataSetVar
Var = |Zvar|
Name = 'Z'
$!RenameDataSetVar
Var = |CPvar|
Name = 'CP'
$!RenameDataSetVar
Var = |CFvar|
Name = 'CF'
$!RenameDataSetVar
Var = |CFXvar|
Name = 'CFx'
$!RenameDataSetVar
Var = |CFYvar|
Name = 'CFy'
$!RenameDataSetVar
Var = |CFZvar|
Name = 'CFz'
#-------------------------------------
#===================================================================
# Set rotation center (no effect on view, but nice to have rotation center near middle of view)
#-------------------------------------
$!VarSet |RotX| = 1325.89 # Moment Reference Center
$!VarSet |RotY| = (2313.50/4) # 0.25*Span
$!VarSet |RotZ| = 177.96 # Moment Reference Center
#-------------------------------------
#===================================================================
# Create Macro Function: SectionalCutter
#-------------------------------------
$!MACROFUNCTION
NAME = "SectionalCutter"
$!VarSet |FirstSliceZone| = (|NumZones|+1)
$!IF "|7|" == "CreateSliceZoneFromPlane"
$!GLOBALTHREED SLICE{ORIGIN{X = |1| Y = |2| Z = |3|}}
$!GLOBALTHREED SLICE{NORMAL{X = |4| Y = |5| Z = |6|}}
$!CREATESLICEZONEFROMPLANE
SLICESOURCE = SURFACEZONES
FORCEEXTRACTIONTOSINGLEZONE = NO
COPYCELLCENTEREDVALUES = NO
$!ELSEIF "|7|" == "ExtractSlices"
$!SliceLayers Show = Yes
$!SliceAttributes 1 SliceSource = SurfaceZones
$!SliceAttributes 1 SliceSurface = YPlanes
$!SliceAttributes 1 PrimaryPosition{Y = |2|}
$!ExtractSlices
Group = 1
ExtractMode = OneZonePerConnectedRegion
Resulting1DZonetype = IOrderedIfPossible
ExtractionStrandIDAssignment = DoNotAssignStrandIDs # We want each zone to be put into its own FieldMap
$!ENDIF
$!VarSet |NumNewZones| = (|NumZones| - |FirstSliceZone| + 1)
$!IF |NumNewZones| >= 1
$!EXTENDEDCOMMAND COMMANDPROCESSORID='extendmcr' COMMAND='QUERY.ACTIVEZONES SURFZONES'
# Normalize the slice values. Note that MINX, MAXX, MINZ, MAXZ return the min/max values
# for the set of active zones
$!VarSet |NewZoneSet| = "|FirstSliceZone| - |NumZones|"
$!ActiveFieldMaps = [|NewZoneSet|]
$!AlterData [|NewZoneSet|] Equation = 'V|XoCvar| = (V|Xvar| - |MINX%.12f|)/(|MAXX%.12f| - |MINX%.12f|)'
$!AlterData [|NewZoneSet|] Equation = 'V|YoCvar| = 0.0'
$!AlterData [|NewZoneSet|] Equation = 'V|ZoCvar| = (V|Zvar| - |MINZ%.12f|)/(|MAXX%.12f| - |MINX%.12f|)'
#===================================================================
# Rename Zones With Sectional Cuts
#-------------------------------------
$!Loop |NumNewZones|
$!VarSet |Zone| = (|FirstSliceZone| + |Loop| - 1)
$!RENAMEDATASETZONE
ZONE = |Zone|
NAME = '|SolutionLabel| - WING SECTION |SectionNumber|'
$!EndLoop
$!ActiveFieldMaps = [|SURFZONES|]
$!ELSE
$!Pause "No section cut extracted!!!"
$!ENDIF
$!ENDMACROFUNCTION
#===================================================================
# Create Macro Function: SectionalCutter
#-------------------------------------
$!MACROFUNCTION
NAME = "SectionalCutterSingleZone"
$!IF 1 == 1
# Preferred method - Requires Tecplot version 2019 V1 or newer
$!EXTRACTSLICETOZONES
ORIGIN {X = |1| Y = |2| Z = |3|}
NORMAL {X = |4| Y = |5| Z = |6|}
AUTOSTRANDTRANSIENTDATA = YES
COPYCELLCENTEREDVALUES = NO
EXTRACTMODE = SINGLEZONE
RESULTING1DZONETYPE = IORDEREDIFPOSSIBLE
SLICESOURCE = SURFACEZONES
SLICESURFACE = YPLANES
TRANSIENTOPERATIONMODE = SINGLESOLUTIONTIME
$!ELSE
# Tecplot version older than 2019 R1
$!GLOBALTHREED SLICE{ORIGIN{X = |1| Y = |2| Z = |3|}}
$!GLOBALTHREED SLICE{NORMAL{X = |4| Y = |5| Z = |6|}}
$!CREATESLICEZONEFROMPLANE
SLICESOURCE = SURFACEZONES
FORCEEXTRACTIONTOSINGLEZONE = YES
COPYCELLCENTEREDVALUES = NO
$!ENDIF
$!RENAMEDATASETZONE
ZONE = |NUMZONES|
NAME = '|SolutionLabel| - WING SECTION |SectionNumber|'
$!EXTENDEDCOMMAND COMMANDPROCESSORID='extendmcr' COMMAND='QUERY.ACTIVEZONES SURFZONES'
$!ActiveFieldMaps = [|NUMZONES|]
$!AlterData [|NUMZONES|] Equation = 'V|XoCvar| = (V|Xvar| - |MINX%.12f|)/(|MAXX%.12f| - |MINX%.12f|)'
$!AlterData [|NUMZONES|] Equation = 'V|YoCvar| = 0.0'
$!AlterData [|NUMZONES|] Equation = 'V|ZoCvar| = (V|Zvar| - |MINZ%.12f|)/(|MAXX%.12f| - |MINX%.12f|)'
$!ActiveFieldMaps = [|SURFZONES|]
$!ENDMACROFUNCTION
#===================================================================
$!IF "|PlotTime|" != ""
$!GlobalTime
SolutionTime = |PlotTime|
$!ENDIF
$!FieldMap [|BodyMaps|,|WingMaps|]
Mesh { Show = No Color = Black LineThickness = 0.1 }
Contour
{
ContourType = BothLinesAndFlood
LineContourGroup = 1
FloodColoring = Group1
Color = Custom2
UseLightingEffect = Yes
}
Vector { Color = Black }
Scatter { Color = Black }
Shade { Color = Custom2 }
EdgeLayer { Show = No Color = Black LineThickness = 0.1 }
Points { PointsToPlot = SurfaceNodes }
Surfaces { SurfacesToPlot = KPlanes IRange { Max = 1 } }
VolumeMode { VolumeObjectsToPlot { ShowIsosurfaces = No ShowSlices = No ShowStreamtraces = No } }
Effects { LightingEffect = Gouraud }
$!FieldLayers
ShowMesh = Yes
ShowContour = No
ShowShade = Yes
ShowEdge = No
$!StreamtraceLayers
Show = No
$!View Fit
$!FrameControl ActivateByNumber
Frame = 1
$!GlobalThreeD
AxisScaleFact { X = 1 Y = 1 Z = 1 }
RotateOrigin { X = |RotX| Y = |RotY| Z = |RotZ| }
LightSource
{
XYZDirection{ X = 0.1 Y = -0.1 Z = 0.95 }
Intensity = 75
BackgroundLight = 25
IncludeSpecular = Yes
SpecularIntensity = 40
SpecularShininess = 60
}
LineLiftFraction = 0.2
SymbolLiftFraction = 0.6
VectorLiftFraction = 0.7
NearPlaneFraction = 0.1
$!DRAWGRAPHICS TRUE
$!FIELDLAYERS SHOWMESH = NO
$!FIELDLAYERS SHOWCONTOUR = NO
$!FIELDLAYERS SHOWSHADE = YES
$!FIELDLAYERS SHOWVECTOR = NO
$!FIELDLAYERS SHOWEDGE = NO
$!FIELDLAYERS SHOWSCATTER = NO
$!FIELDLAYERS USELIGHTINGEFFECT = NO
$!FIELDLAYERS USETRANSLUCENCY = NO
$!SLICELAYERS SHOW = NO
$!STREAMTRACELAYERS SHOW = NO
$!STREAMATTRIBUTES ADDARROWS = NO
#===================================================================
# Activate ONLY wing surfaces
#-------------------------------------
$!ActiveFieldMaps = [|WingMaps|]
$!View Fit
$!RedrawAll
#===================================================================
# Determine the correct slice extraction method based on the zone type. Tecplot 360
# produces difference extracted slice normals with different extraction methods. The direction
# of the cell normals on the extracted section cut are critical to getting a correct integrated
# result. Tecplot developers are looking into this issue.
#-------------------------------------
$!VarSet |ExtractMethod| = "ExtractSlices"
$!ActiveFieldMaps = [|WingMaps|]
$!Loop |NumZones|
$!ExtendedCommand
CommandProcessorID = "extendmcr"
Command = "Query.IsZoneActive |LOOP| IsActive"
$!If "|IsActive|" == "Yes"
$!GetZoneType |ZoneType|
Zone = |LOOP|
$!If "|ZoneType|" == "Ordered"
$!VarSet |ExtractMethod| = "CreateSliceZoneFromPlane"
$!EndIf
$!EndIf
$!EndLoop
#===================================================================
# Create Sectional Cuts for Pressure Cuts (Single Zone Output)
#-------------------------------------
# Establish Zone Number For Cut Data
$!VARSET |NumZonesCuts| = (|NUMZONES| + 1)
# WING SECTION 1: ETA = 0.1050, CHORD=466.466
$!VarSet |SectionNumber| = 1
$!RUNMACROFUNCTION "SectionalCutterSingleZone" ( 993.728, 121.459, 176.053,0.000,1.000,0.000, |ExtractMethod|)
# WING SECTION 2: ETA = 0.1150, CHORD=459.571
$!VarSet |SectionNumber| += 1
$!RUNMACROFUNCTION "SectionalCutterSingleZone" (1002.168, 133.026, 176.306,0.000,1.000,0.000, |ExtractMethod|)
# WING SECTION 3: ETA = 0.1250, CHORD=452.687
$!VarSet |SectionNumber| += 1
$!RUNMACROFUNCTION "SectionalCutterSingleZone" (1010.656, 144.594, 176.539,0.000,1.000,0.000, |ExtractMethod|)
# WING SECTION 4: ETA = 0.1306, CHORD=448.836
$!VarSet |SectionNumber| += 1
$!RUNMACROFUNCTION "SectionalCutterSingleZone" (1015.435, 151.074, 176.659,0.000,1.000,0.000, |ExtractMethod|)
# WING SECTION 5: ETA = 0.2009, CHORD=400.743
$!VarSet |SectionNumber| += 1
$!RUNMACROFUNCTION "SectionalCutterSingleZone" (1076.873, 232.444, 177.509,0.000,1.000,0.000, |ExtractMethod|)
# WING SECTION 6: ETA = 0.2828, CHORD=344.991
$!VarSet |SectionNumber| += 1
$!RUNMACROFUNCTION "SectionalCutterSingleZone" (1148.974, 327.074, 178.606,0.000,1.000,0.000, |ExtractMethod|)
# WING SECTION 7: ETA = 0.3430, CHORD=304.101
$!VarSet |SectionNumber| += 1
$!RUNMACROFUNCTION "SectionalCutterSingleZone" (1202.038, 396.765, 180.222,0.000,1.000,0.000, |ExtractMethod|)
# WING SECTION 8: ETA = 0.3700, CHORD=285.806
$!VarSet |SectionNumber| += 1
$!RUNMACROFUNCTION "SectionalCutterSingleZone" (1225.822, 427.998, 181.162,0.000,1.000,0.000, |ExtractMethod|)
# WING SECTION 9: ETA = 0.3971, CHORD=278.111
$!VarSet |SectionNumber| += 1
$!RUNMACROFUNCTION "SectionalCutterSingleZone" (1249.711, 459.370, 182.250,0.000,1.000,0.000, |ExtractMethod|)
# WING SECTION 10: ETA = 0.5024, CHORD=248.312
$!VarSet |SectionNumber| += 1
$!RUNMACROFUNCTION "SectionalCutterSingleZone" (1342.440, 581.148, 188.658,0.000,1.000,0.000, |ExtractMethod|)
# WING SECTION 11: ETA = 0.6028, CHORD=219.904
$!VarSet |SectionNumber| += 1
$!RUNMACROFUNCTION "SectionalCutterSingleZone" (1430.914, 697.333, 198.060,0.000,1.000,0.000, |ExtractMethod|)
# WING SECTION 12: ETA = 0.7268, CHORD=184.844
$!VarSet |SectionNumber| += 1
$!RUNMACROFUNCTION "SectionalCutterSingleZone" (1540.091, 840.704, 213.659,0.000,1.000,0.000, |ExtractMethod|)
# WING SECTION 13: ETA = 0.8456, CHORD=151.235
$!VarSet |SectionNumber| += 1
$!RUNMACROFUNCTION "SectionalCutterSingleZone" (1644.738, 978.148, 233.317,0.000,1.000,0.000, |ExtractMethod|)
# WING SECTION 14: ETA = 0.9500, CHORD=121.735
$!VarSet |SectionNumber| += 1
$!RUNMACROFUNCTION "SectionalCutterSingleZone" (1736.708,1098.926, 253.727,0.000,1.000,0.000, |ExtractMethod|)
# WING SECTION 15: ETA = 0.9700, CHORD=116.095
$!VarSet |SectionNumber| += 1
$!RUNMACROFUNCTION "SectionalCutterSingleZone" (1754.313,1122.048, 257.777,0.000,1.000,0.000, |ExtractMethod|)
# WING SECTION 16: ETA = 0.9900, CHORD=110.452
$!VarSet |SectionNumber| += 1
$!RUNMACROFUNCTION "SectionalCutterSingleZone" (1771.927,1145.183, 261.823,0.000,1.000,0.000, |ExtractMethod|)
#===================================================================
# Visualize Sectional Cuts
#-------------------------------------
$!VarSet |PressureZones| = "|NumZonesCuts| - |NUMZONES|"
$!FIELDMAP [|PressureZones|] MESH{Show = Yes Color = Green LineThickness = 0.80 }
$!FIELDLAYERS SHOWMESH = YES
$!REDRAWALL
#===================================================================
#===================================================================
# Rename/Reorder Variables to output is in desired order
#-------------------------------------
$!RENAMEDATASETVAR VAR = |Xvar| NAME = "Xo"
$!RENAMEDATASETVAR VAR = |Yvar| NAME = "Yo"
$!RENAMEDATASETVAR VAR = |Zvar| NAME = "Zo"
$!RENAMEDATASETVAR VAR = |XoCvar| NAME = "XoCo"
#$!RENAMEDATASETVAR VAR = |YoCvar| NAME = "YoCo"
#$!RENAMEDATASETVAR VAR = |ZoCvar| NAME = "ZoCo"
$!RENAMEDATASETVAR VAR = |CPvar| NAME = "CPo"
$!RENAMEDATASETVAR VAR = |CFvar| NAME = "CFo"
$!RENAMEDATASETVAR VAR = |CFXvar| NAME = "CFXo"
$!RENAMEDATASETVAR VAR = |CFYvar| NAME = "CFYo"
$!RENAMEDATASETVAR VAR = |CFZvar| NAME = "CFZo"
$!ALTERDATA EQUATION = "{X} = {Xo}"
$!VARSET |NUMVARS0| = |NUMVARS|
$!ALTERDATA EQUATION = "{Y} = {Yo}"
$!ALTERDATA EQUATION = "{Z} = {Zo}"
$!ALTERDATA EQUATION = '{XoC} = {XoCo}'
$!ALTERDATA EQUATION = "{CP} = {CPo}"
$!ALTERDATA EQUATION = "{CF} = {CFo}"
$!ALTERDATA EQUATION = "{CFX} = {CFXo}"
$!ALTERDATA EQUATION = "{CFY} = {CFYo}"
$!ALTERDATA EQUATION = "{CFZ} = {CFZo}"
$!VARSET |NUMVARS1| = |NUMVARS|
#===================================================================
# Write Sectional Cuts To |OutputDirectoryPath||FilePrependLabel|.plt
#-------------------------------------
$!SETDATASETTITLE "SectionalCuts"
$!WRITEDATASET "|OutputDirectoryPath||FilePrependLabel|.plt"
ASSOCIATELAYOUTWITHDATAFILE = NO
BINARY = NO
INCLUDEAUTOGENFACENEIGHBORS = NO
INCLUDECUSTOMLABELS = NO
INCLUDEDATA = YES
INCLUDEDATASHARELINKAGE = NO
INCLUDEGEOM = NO
INCLUDETEXT = NO
PRECISION = 8
TECPLOTVERSIONTOWRITE = TECPLOTCURRENT
USEPOINTFORMAT = YES
VARPOSITIONLIST = [|NUMVARS0| - |NUMVARS|]
ZONELIST = [|PressureZones|]
##VARPOSITIONLIST = [|Xvar|,|Yvar|,|Zvar|,|XoCvar|,|Cpvar|,|CFvar|,|CFXvar|,|CFYvar|,|CFZvar|]
#===================================================================
#===================================================================
# Delete/Rename Temporary Variables used for output only
#-------------------------------------
$!DeleteVars [|NUMVARS0| - |NUMVARS|]
$!RENAMEDATASETVAR VAR = |Xvar| NAME = "X"
$!RENAMEDATASETVAR VAR = |Yvar| NAME = "Y"
$!RENAMEDATASETVAR VAR = |Zvar| NAME = "Z"
$!RENAMEDATASETVAR VAR = |XoCvar| NAME = "XoC"
$!RENAMEDATASETVAR VAR = |CPvar| NAME = "CP"
$!RENAMEDATASETVAR VAR = |CFvar| NAME = "CF"
$!RENAMEDATASETVAR VAR = |CFXvar| NAME = "CFX"
$!RENAMEDATASETVAR VAR = |CFYvar| NAME = "CFY"
$!RENAMEDATASETVAR VAR = |CFZvar| NAME = "CFZ"
#===================================================================
# Create Zone to store Sectional Lift/Pitching Moment for each sectional cut
#-------------------------------------
$!CreateRectangularZone
IMax = 16 JMax = 1 KMax = 1
X1 = 0 Y1 = 0 Z1 = 0
X2 = 0 Y2 = 0 Z2 = 0
XVar = 1 YVar = 2 ZVar = 3
$!VARSET |INTZONE| = |NUMZONES|
$!RenameDataSetZone Zone = |INTZONE| Name = 'Sectional Integration'
#===================================================================
# Variables for Sectional Force/Moments
#-------------------------------------
$!ALTERDATA EQUATION = '{CpM} = -999'
$!VARSET |CPMvar| = |NUMVARS|
$!ALTERDATA EQUATION = '{CUT} = -999'
$!VARSET |CUTvar| = |NUMVARS|
$!ALTERDATA EQUATION = '{ETA} = -999'
$!VARSET |ETAvar| = |NUMVARS|
$!ALTERDATA EQUATION = '{ALPHA} = |ALPHA%.4f|'
$!VARSET |ALPHAvar| = |NUMVARS|
$!ALTERDATA EQUATION = '{CL} = |CL%.4f|'
$!VARSET |CLvar| = |NUMVARS|
$!ALTERDATA EQUATION = '{CLS} = -999'
$!VARSET |CLSvar| = |NUMVARS|
$!ALTERDATA EQUATION = '{CMS} = -999'
$!VARSET |CMSvar| = |NUMVARS|
#===================================================================
# The SectionCutter is allowed to create multiple zones per section cut. We need
# to record which zones are associated with each section cut. To do this we create a zone
# to store zone number range for each extracted section cut.
# XVar is the first zone in the set
# YVar is the last zone in the set
#-------------------------------------
$!CreateRectangularZone
IMax = 16 JMax = 1 KMax = 1
X1 = 0 Y1 = 0 Z1 = 0
X2 = 0 Y2 = 0 Z2 = 0
XVar = 1 YVar = 2 ZVar = 3
$!VarSet |TempZone| = |NumZones|
$!RenameDataSetZone
Zone = |TempZone|
Name = "Section Zone Numbers"
$!ActiveFieldMaps -= [|TempZone|]
#===================================================================
# Create Sectional Cuts for Integration
#-------------------------------------
# Establish Zone Number For Integration Data
$!VARSET |NumZonesInt| = (|NUMZONES| + 1)
# WING SECTION 1: ETA = 0.1050, CHORD=466.466
$!VarSet |SectionNumber| = 1
$!SetFieldValue ZONE = |TempZone| VAR = 1 INDEX = |SectionNumber| FIELDVALUE = (|NumZones|+1)
$!RUNMACROFUNCTION "SectionalCutter" ( 993.728, 121.459, 176.053,0.000,1.000,0.000, |ExtractMethod|)
$!SetFieldValue ZONE = |TempZone| VAR = 2 INDEX = |SectionNumber| FIELDVALUE = |NumZones|
# WING SECTION 2: ETA = 0.1150, CHORD=459.571
$!VarSet |SectionNumber| += 1
$!SetFieldValue ZONE = |TempZone| VAR = 1 INDEX = |SectionNumber| FIELDVALUE = (|NumZones|+1)
$!RUNMACROFUNCTION "SectionalCutter" (1002.168, 133.026, 176.306,0.000,1.000,0.000, |ExtractMethod|)
$!SetFieldValue ZONE = |TempZone| VAR = 2 INDEX = |SectionNumber| FIELDVALUE = |NumZones|
# WING SECTION 3: ETA = 0.1250, CHORD=452.687
$!VarSet |SectionNumber| += 1
$!SetFieldValue ZONE = |TempZone| VAR = 1 INDEX = |SectionNumber| FIELDVALUE = (|NumZones|+1)
$!RUNMACROFUNCTION "SectionalCutter" (1010.656, 144.594, 176.539,0.000,1.000,0.000, |ExtractMethod|)
$!SetFieldValue ZONE = |TempZone| VAR = 2 INDEX = |SectionNumber| FIELDVALUE = |NumZones|
# WING SECTION 4: ETA = 0.1306, CHORD=448.836
$!VarSet |SectionNumber| += 1
$!SetFieldValue ZONE = |TempZone| VAR = 1 INDEX = |SectionNumber| FIELDVALUE = (|NumZones|+1)
$!RUNMACROFUNCTION "SectionalCutter" (1015.435, 151.074, 176.659,0.000,1.000,0.000, |ExtractMethod|)
$!SetFieldValue ZONE = |TempZone| VAR = 2 INDEX = |SectionNumber| FIELDVALUE = |NumZones|
# WING SECTION 5: ETA = 0.2009, CHORD=400.743
$!VarSet |SectionNumber| += 1
$!SetFieldValue ZONE = |TempZone| VAR = 1 INDEX = |SectionNumber| FIELDVALUE = (|NumZones|+1)
$!RUNMACROFUNCTION "SectionalCutter" (1076.873, 232.444, 177.509,0.000,1.000,0.000, |ExtractMethod|)
$!SetFieldValue ZONE = |TempZone| VAR = 2 INDEX = |SectionNumber| FIELDVALUE = |NumZones|
# WING SECTION 6: ETA = 0.2828, CHORD=344.991
$!VarSet |SectionNumber| += 1
$!SetFieldValue ZONE = |TempZone| VAR = 1 INDEX = |SectionNumber| FIELDVALUE = (|NumZones|+1)
$!RUNMACROFUNCTION "SectionalCutter" (1148.974, 327.074, 178.606,0.000,1.000,0.000, |ExtractMethod|)
$!SetFieldValue ZONE = |TempZone| VAR = 2 INDEX = |SectionNumber| FIELDVALUE = |NumZones|
# WING SECTION 7: ETA = 0.3430, CHORD=304.101
$!VarSet |SectionNumber| += 1
$!SetFieldValue ZONE = |TempZone| VAR = 1 INDEX = |SectionNumber| FIELDVALUE = (|NumZones|+1)
$!RUNMACROFUNCTION "SectionalCutter" (1202.038, 396.765, 180.222,0.000,1.000,0.000, |ExtractMethod|)
$!SetFieldValue ZONE = |TempZone| VAR = 2 INDEX = |SectionNumber| FIELDVALUE = |NumZones|
# WING SECTION 8: ETA = 0.3700, CHORD=285.806
$!VarSet |SectionNumber| += 1
$!SetFieldValue ZONE = |TempZone| VAR = 1 INDEX = |SectionNumber| FIELDVALUE = (|NumZones|+1)
$!RUNMACROFUNCTION "SectionalCutter" (1225.822, 427.998, 181.162,0.000,1.000,0.000, |ExtractMethod|)
$!SetFieldValue ZONE = |TempZone| VAR = 2 INDEX = |SectionNumber| FIELDVALUE = |NumZones|
# WING SECTION 9: ETA = 0.3971, CHORD=278.111
$!VarSet |SectionNumber| += 1
$!SetFieldValue ZONE = |TempZone| VAR = 1 INDEX = |SectionNumber| FIELDVALUE = (|NumZones|+1)
$!RUNMACROFUNCTION "SectionalCutter" (1249.711, 459.370, 182.250,0.000,1.000,0.000, |ExtractMethod|)
$!SetFieldValue ZONE = |TempZone| VAR = 2 INDEX = |SectionNumber| FIELDVALUE = |NumZones|
# WING SECTION 10: ETA = 0.5024, CHORD=248.312
$!VarSet |SectionNumber| += 1
$!SetFieldValue ZONE = |TempZone| VAR = 1 INDEX = |SectionNumber| FIELDVALUE = (|NumZones|+1)
$!RUNMACROFUNCTION "SectionalCutter" (1342.440, 581.148, 188.658,0.000,1.000,0.000, |ExtractMethod|)
$!SetFieldValue ZONE = |TempZone| VAR = 2 INDEX = |SectionNumber| FIELDVALUE = |NumZones|
# WING SECTION 11: ETA = 0.6028, CHORD=219.904
$!VarSet |SectionNumber| += 1
$!SetFieldValue ZONE = |TempZone| VAR = 1 INDEX = |SectionNumber| FIELDVALUE = (|NumZones|+1)
$!RUNMACROFUNCTION "SectionalCutter" (1430.914, 697.333, 198.060,0.000,1.000,0.000, |ExtractMethod|)
$!SetFieldValue ZONE = |TempZone| VAR = 2 INDEX = |SectionNumber| FIELDVALUE = |NumZones|
# WING SECTION 12: ETA = 0.7268, CHORD=184.844
$!VarSet |SectionNumber| += 1
$!SetFieldValue ZONE = |TempZone| VAR = 1 INDEX = |SectionNumber| FIELDVALUE = (|NumZones|+1)
$!RUNMACROFUNCTION "SectionalCutter" (1540.091, 840.704, 213.659,0.000,1.000,0.000, |ExtractMethod|)
$!SetFieldValue ZONE = |TempZone| VAR = 2 INDEX = |SectionNumber| FIELDVALUE = |NumZones|
# WING SECTION 13: ETA = 0.8456, CHORD=151.235
$!VarSet |SectionNumber| += 1
$!SetFieldValue ZONE = |TempZone| VAR = 1 INDEX = |SectionNumber| FIELDVALUE = (|NumZones|+1)
$!RUNMACROFUNCTION "SectionalCutter" (1644.738, 978.148, 233.317,0.000,1.000,0.000, |ExtractMethod|)
$!SetFieldValue ZONE = |TempZone| VAR = 2 INDEX = |SectionNumber| FIELDVALUE = |NumZones|
# WING SECTION 14: ETA = 0.9500, CHORD=121.735
$!VarSet |SectionNumber| += 1
$!SetFieldValue ZONE = |TempZone| VAR = 1 INDEX = |SectionNumber| FIELDVALUE = (|NumZones|+1)
$!RUNMACROFUNCTION "SectionalCutter" (1736.708,1098.926, 253.727,0.000,1.000,0.000, |ExtractMethod|)
$!SetFieldValue ZONE = |TempZone| VAR = 2 INDEX = |SectionNumber| FIELDVALUE = |NumZones|
# WING SECTION 15: ETA = 0.9700, CHORD=116.095
$!VarSet |SectionNumber| += 1
$!SetFieldValue ZONE = |TempZone| VAR = 1 INDEX = |SectionNumber| FIELDVALUE = (|NumZones|+1)
$!RUNMACROFUNCTION "SectionalCutter" (1754.313,1122.048, 257.777,0.000,1.000,0.000, |ExtractMethod|)
$!SetFieldValue ZONE = |TempZone| VAR = 2 INDEX = |SectionNumber| FIELDVALUE = |NumZones|
# WING SECTION 16: ETA = 0.9900, CHORD=110.452
$!VarSet |SectionNumber| += 1
$!SetFieldValue ZONE = |TempZone| VAR = 1 INDEX = |SectionNumber| FIELDVALUE = (|NumZones|+1)
$!RUNMACROFUNCTION "SectionalCutter" (1771.927,1145.183, 261.823,0.000,1.000,0.000, |ExtractMethod|)
$!SetFieldValue ZONE = |TempZone| VAR = 2 INDEX = |SectionNumber| FIELDVALUE = |NumZones|
#===================================================================
#===================================================================
# Calculate Sectional Lift/Pitching Moment for Sectional Cuts
#-------------------------------------
$!ThreeDAxis XDetail{VarNum = |XoCvar|}
$!ThreeDAxis YDetail{VarNum = |YoCvar|}
$!ThreeDAxis ZDetail{VarNum = |ZoCvar|}
$!AlterData [|NumZonesInt| - |NUMZONES|] Equation = '{CpM} = {Cp} * (0.25 - {XoC})'
#$!AlterData [|NumZonesInt| - |NUMZONES|] Equation = 'V|CPMvar| = V|CPvar| * (0.25 - V|XoCvar|)'
$!VARSET |Time| = ''
$!IF "|PlotTime|" != ""
$!VARSET |Time| = 'TimeMin=|PlotTime| TimeMax=|PlotTime|'
$!ENDIF
#===================================================================
#-------------------------------------------------------------------
# Use XYLINE & reset V1 to |XoCvar|, so integration runs over X/C
$!PlotType = XYLine
$!ALTERDATA EQUATION = '{V1tmp} = V1'
$!VARSET |V1tmp| = |NUMVARS|
$!ALTERDATA EQUATION = 'V1 = V|XoCvar|'
#-------------------------------------------------------------------
$!LOOP 16
# Extract the set of zones for the section from the TempZone we created earler.
$!GetFieldValue |FirstZone|
Zone = |TempZone|
Var = |V1tmp| # TODO - The equations above screw up the X-variable for this zone and results end up in V1tmp.
Index = |LOOP|
$!GetFieldValue |LastZone|
Zone = |TempZone|
Var = 2
Index = |LOOP|
$!VarSet |SectionZones| = "|FirstZone| - |LastZone|"
# All section zones will have the same Y-value, so we're grabbing from just the first zone in the set
$!GetFieldValue |CurrY| Zone = |FirstZone| Var = 2 Index = 1
$!VARSET |ETA| = (|CurrY| / 1156.75)
$!ExtendedCommand
CommandProcessorID = 'CFDAnalyzer4'
Command = 'Integrate [|SectionZones|] VariableOption=\'Scalar\' XOrigin=0 YOrigin=0 ZOrigin=0 ScalarVar=|CPvar| Absolute=\'F\' ExcludeBlanked=\'F\' XVariable=|XoCvar| YVariable=|YoCvar| ZVariable=|ZoCvar| IntegrateOver=\'Cells\' IntegrateBy=\'Zones\' IRange={MIN =1 MAX = 0 SKIP = 1} JRange={MIN =1 MAX = 0 SKIP = 1} KRange={MIN =1 MAX = 0 SKIP = 1} |Time|' #PlotResults=\'T\' PlotAs=\'SectionalLift\''
$!VARSET |revS| = 1
$!IF |AUXFRAME:CFDA.INTEGRATION_TOTAL| < 0
$!VARSET |revS| = -1
$!ENDIF
$!VARSET |CLS| = (|revS| * |AUXFRAME:CFDA.INTEGRATION_TOTAL|)
$!ExtendedCommand
CommandProcessorID = 'CFDAnalyzer4'
Command = 'Integrate [|SectionZones|] VariableOption=\'Scalar\' XOrigin=0 YOrigin=0 ZOrigin=0 ScalarVar=|CPMvar| Absolute=\'F\' ExcludeBlanked=\'F\' XVariable=|XoCvar| YVariable=|YoCvar| ZVariable=|ZoCvar| IntegrateOver=\'Cells\' IntegrateBy=\'Zones\' IRange={MIN =1 MAX = 0 SKIP = 1} JRange={MIN =1 MAX = 0 SKIP = 1} KRange={MIN =1 MAX = 0 SKIP = 1} |Time|' #PlotResults=\'T\' PlotAs=\'SectionalPitchingMoment\''
$!VARSET |CMS| = (|revS| * |AUXFRAME:CFDA.INTEGRATION_TOTAL|)
#$!SetFieldValue AUTOBRANCH = YES ZONE = |INTZONE| VAR = 2 INDEX = |LOOP| FIELDVALUE = |LOOP|
$!SetFieldValue AUTOBRANCH = YES ZONE = |INTZONE| VAR = |Yvar| INDEX = |LOOP| FIELDVALUE = |CurrY%.3f|
$!SetFieldValue AUTOBRANCH = YES ZONE = |INTZONE| VAR = |CUTvar| INDEX = |LOOP| FIELDVALUE = |LOOP|
$!SetFieldValue AUTOBRANCH = YES ZONE = |INTZONE| VAR = |ETAvar| INDEX = |LOOP| FIELDVALUE = |ETA%.4f|
$!SetFieldValue AUTOBRANCH = YES ZONE = |INTZONE| VAR = |CLSvar| INDEX = |LOOP| FIELDVALUE = |CLS|
$!SetFieldValue AUTOBRANCH = YES ZONE = |INTZONE| VAR = |CMSvar| INDEX = |LOOP| FIELDVALUE = |CMS|
$!ENDLOOP
$!ActiveFieldMaps -= [|INTZONE|]
#-------------------------------------------------------------------
# Reset V1 back to original values
$!ALTERDATA EQUATION = 'V1 = V|V1tmp|'
$!DeleteVars [|V1tmp|]
$!PlotType = Cartesian3D
#-------------------------------------------------------------------
#===================================================================
# Delete Zones With Integration Cuts
#-------------------------------------
$!DELETEZONES [|TempZone|, |NumZonesInt| - |NUMZONES|]
#===================================================================
#===================================================================
# Write Sectional Integration To |OutputDirectoryPath||FilePrependLabel|_SectionalIntegration.plt
#-------------------------------------
$!SETDATASETTITLE "SectionalIntegration"
$!WRITEDATASET "|OutputDirectoryPath||FilePrependLabel|_SectionalIntegration.plt"
ASSOCIATELAYOUTWITHDATAFILE = NO
BINARY = NO
INCLUDEAUTOGENFACENEIGHBORS = NO
INCLUDECUSTOMLABELS = NO
INCLUDEDATA = YES
INCLUDEDATASHARELINKAGE = NO
INCLUDEGEOM = NO
INCLUDETEXT = NO
PRECISION = 8
TECPLOTVERSIONTOWRITE = TECPLOTCURRENT
USEPOINTFORMAT = YES
VARPOSITIONLIST = [|Yvar|, |ETAvar|, |ALPHAvar|, |CLvar|, |CLSvar|, |CMSvar|]
ZONELIST = [|INTZONE|]
#===================================================================
#===================================================================
# Draw Sectional Lift/Pitching Moment
#-------------------------------------
$!ThreeDAxis XDetail{VarNum = |Xvar|}
$!ThreeDAxis YDetail{VarNum = |Yvar|}
$!ThreeDAxis ZDetail{VarNum = |Zvar|}
$!CreateNewFrame XYPos { X = 1.25 Y = 5.00 } Width = 3.0 Height = 3.0
$!FrameControl ActivateByNumber
Frame = 2
$!FrameLayout ShowHeader = No
$!PlotType = XYLine
$!DeleteLineMaps
$!CreateLineMap
$!LineMap [1] Name = 'Sectional Lift'
$!LineMap [1] Assign{Zone = |INTZONE| XAxisVar = |ETAvar| YAxisVar = |CLSvar|}
$!LineMap [2] Name = 'Sectional Moment'
$!LineMap [2] Assign{Zone = |INTZONE| XAxisVar = |ETAvar| YAxisVar = |CMSvar|}
$!ActiveLineMaps = [1,2]
$!LinePlotLayers ShowLines = Yes
$!LinePlotLayers ShowSymbols = Yes
$!View Fit
$!XYLineAxis XDetail 1 {RangeMin = 0.05 RangeMax = 1.05 Gridlines{Show = Yes} AutoGrid = No GRSpacing = 0.10}
$!XYLineAxis YDetail 1 {RangeMin = -0.25 RangeMax = 1.05 Gridlines{Show = Yes} AutoGrid = No GRSpacing = 0.10}
$!XYLineAxis GridArea{DrawBorder = Yes}
$!AttachText
AnchorPos { X = 50 Y = 97 }
TextShape { FontFamily = 'FreeSans' IsBold = No SizeUnits = Frame Height = 3.5 }
Box { BoxType = Filled Margin = 10 Color = Black FillColor = White }
Anchor = HeadCenter
Text = 'DPW-7: |Q| | Rey#=|REYN|M, M=|MACH|, a=|ALPHA|o\nCL=|CL|, CD=|CD|, CMy=|CMy|'
$!PrintSetup Palette = Color
$!ExportSetup ExportRegion = CurrentFrame
$!ExportSetup ImageWidth = 900
$!ExportSetup UseSuperSampleAntiAliasing = Yes
$!ExportSetup ExportFName = "|OutputDirectoryPath||FilePrependLabel|_SectionalIntegration.png"
$!Export
ExportRegion = CurrentFrame
$!FrameControl ActivateByNumber
Frame = 1
#===================================================================
# Delete Zones With Sectional Cuts
#-------------------------------------
#$!DELETEZONES [|NumZonesCuts|-|NUMZONES|]
#===================================================================