HyperX.Solver.Api 1.23.0
The HyperX Solver Application Programming Interface
Loading...
Searching...
No Matches
Sample Calcs

You may optionally enable sample calculations for your custom criterion.

To do so, implement the two following configurational options:

var definition = new CriterionDefinitionConfig()
// ...
.WithInitSampleCalcFunc(InitSampleCalc) // <-- Func initializes sample calc inputs.
.WithAnalyzeSampleCalcFunc(ComputeSampleCalc); // <-- Func computes sample calc results.

The following is a complete criterion that supports sample calculations:

namespace Solver.Criteria.Sample;
public class MyModule : CriterionModule
{
public override CriteriaConfig GetCriteria()
{
var config = new CriteriaConfig();
definition = new CriterionDefinitionConfig()
.WithName("My Criterion")
.WithDescription("A sample criterion")
.WithVersion(1, 0, 0)
.WithUid("00000000-0000-0000-0000-REPLACEME001")
.WithAnalyzeFunc(Compute)
.WithInitSampleCalcFunc(InitSampleCalc)
.WithAnalyzeSampleCalcFunc(ComputeSampleCalc);
_ = config.Add(definition);
setting = new SettingDefinitionConfig()
.WithName("Stress allowable")
.WithDescription("A setting")
.WithUid("00000000-0000-0000-0000-REPLACEME001")
.WithCategory("Allowables")
.WithId(1)
_ = config.Add(setting);
return config;
}
private AnalysisResult Compute(ICriterionInput input)
{
var plate = input.Analyzable.GetPlateRep();
var details = input.Details;
double t = plate.Thickness;
double a = plate.Length;
double b = plate.Width;
_ = details.AddSubTree("Geometry")
.Add("t", t, Unit.Distance, SampleCalcIds.t)
.Add("a", a, Unit.Distance, SampleCalcIds.a)
.Add("b", b, Unit.Distance, SampleCalcIds.b);
var forces = plate.GetLoadMidpoint();
_ = details.AddSubTree("Loads")
.Add("N<_x>", forces.Nx, Unit.UnitForce)
.Add("N<_y>", forces.Ny, Unit.UnitForce)
.Add("N<_xy>", forces.Nxy, Unit.UnitForce);
var allowable = input.Analyzable.Settings.GetValue<double>(1);
_ = details.AddSubTree("Allowables")
.Add("Allow", allowable, Unit.Stress);
var margin = ComputeCore(t, a, b);
return new AnalysisResult(margin, details);
}
private static Margin ComputeCore(double t, double a, double b)
{
return new Margin(t * a * b);
}
private static SampleCalcItemList InitSampleCalc()
{
var items = new SampleCalcItemList();
SampleCalcItemConfig item;
item = new SampleCalcItemConfig()
.WithName("t")
.WithValue(0.01)
.WithId(SampleCalcIds.t);
items.Add(item);
item = new SampleCalcItemConfig()
.WithName("a")
.WithValue(10.0)
.WithId(SampleCalcIds.a);
items.Add(item);
item = new SampleCalcItemConfig()
.WithName("b")
.WithValue(10.0)
.WithId(SampleCalcIds.b);
items.Add(item);
return items;
}
private static ISampleCalcOutput ComputeSampleCalc(ISampleCalcInput sampleInput)
{
var items = sampleInput.Items;
double t = items.GetItem(SampleCalcIds.t).DoubleValue;
double a = items.GetItem(SampleCalcIds.a).DoubleValue;
double b = items.GetItem(SampleCalcIds.b).DoubleValue;
var ms = ComputeCore(t, a, b);
var outItems = new SampleCalcItemList();
SampleCalcItemConfig item;
item = new SampleCalcItemConfig()
.WithName("t*a")
.WithValue(t * a);
outItems.Add(item);
item = new SampleCalcItemConfig()
.WithName("MS")
.WithValue(ms);
outItems.Add(item);
return new SampleCalcOutput(outItems);
}
}
internal enum SampleCalcIds
{
t, a, b
}
A single analysis result. Use this to return the analysis result from a criterion that does not use b...
Definition Public.cs:3509
Definition Public.cs:3315
CriterionDefinitionConfig WithThreadSafety(bool isThreadSafe)
Definition Public.cs:4542
CriterionDefinitionConfig WithVersion(Version version)
Definition Public.cs:4484
CriterionDefinitionConfig WithAnalyzeFunc(Func< ICriterionInput, ICriterionResult > analyzeFunc)
Definition Public.cs:4694
CriterionDefinitionConfig AddApplicability(RepresentationType representationType)
If no applicability is defined, this criterion will be applicable to all representation types.
Definition Public.cs:4589
CriterionDefinitionConfig WithAnalyzeSampleCalcFunc(Func< ISampleCalcInput, ISampleCalcOutput > analyzeSampleCalcFunc)
Definition Public.cs:4702
CriterionDefinitionConfig WithDescription(string description)
Definition Public.cs:4477
CriterionDefinitionConfig WithUid(Guid uid)
Definition Public.cs:4497
CriterionDefinitionConfig WithInitSampleCalcFunc(Func< IReadOnlySampleCalcItemList > sampleCalcInitFunc)
Definition Public.cs:4710
CriterionDefinitionConfig WithBatchLoads(bool isBatchLoads)
Definition Public.cs:4548
CriterionDefinitionConfig WithReferenceId(int referenceId)
Definition Public.cs:4523
CriterionDefinitionConfig WithName(string name)
Definition Public.cs:4470
ENTRY POINT.
Definition Public.cs:3189
SampleCalcItemConfig WithId(int id)
Definition Public.cs:4151
double DoubleValue
Definition Public.cs:3987
SampleCalcItemConfig WithName(string name)
Definition Public.cs:4112
SampleCalcItemConfig WithValue(double? value)
Definition Public.cs:4033
SettingDefinitionConfig WithName(string name)
Definition Public.cs:3668
SettingDefinitionConfig WithCategory(string category)
Definition Public.cs:3728
SettingDefinitionConfig WithDefaultValue(int? defaultValue)
Definition Public.cs:3735
SettingDefinitionConfig WithId(int id)
Definition Public.cs:3689
SettingDefinitionConfig WithDescription(string description)
Definition Public.cs:3675
SettingDefinitionConfig WithUid(Guid uid)
Definition Public.cs:3702
IPlateRep GetPlateRep()
Represent this analyzable as a plate.
ISettingList Settings
Custom analysis settings.
Definition Public.cs:1700
Definition Public.cs:2689
IAnalyzable Analyzable
The object to be analyzed. Contains loading information, element information, materials,...
Definition Public.cs:2694
IDetailTree Details
Store intermediate details calculated by your method here and return it alongside the margin in your ...
Definition Public.cs:2704
IDetailTree Add(string name, double value, Unit unit)
Captures a value as a detail. The 'unit' field allows HyperX to convert this number to display units ...
IDetailTree AddSubTree(string name)
Adds and returns, nested detail tree.
SampleCalcItemConfig GetItem(int id)
IReadOnlySampleCalcItemList Items
Definition Public.cs:4253
Definition Margin.cs:3
RepresentationType
Ways a portion of structure can be represented for analysis.
Definition Public.cs:86
Unit
Definition Public.cs:412
@ Margin
Definition Public.cs:456

Further reading: