HyperX.Solver.Api
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:3644
Definition Public.cs:3450
CriterionDefinitionConfig WithThreadSafety(bool isThreadSafe)
Definition Public.cs:4677
CriterionDefinitionConfig WithVersion(Version version)
Definition Public.cs:4619
CriterionDefinitionConfig WithAnalyzeFunc(Func< ICriterionInput, ICriterionResult > analyzeFunc)
Definition Public.cs:4829
CriterionDefinitionConfig AddApplicability(RepresentationType representationType)
If no applicability is defined, this criterion will be applicable to all representation types.
Definition Public.cs:4724
CriterionDefinitionConfig WithAnalyzeSampleCalcFunc(Func< ISampleCalcInput, ISampleCalcOutput > analyzeSampleCalcFunc)
Definition Public.cs:4837
CriterionDefinitionConfig WithDescription(string description)
Definition Public.cs:4612
CriterionDefinitionConfig WithUid(Guid uid)
Definition Public.cs:4632
CriterionDefinitionConfig WithInitSampleCalcFunc(Func< IReadOnlySampleCalcItemList > sampleCalcInitFunc)
Definition Public.cs:4845
CriterionDefinitionConfig WithBatchLoads(bool isBatchLoads)
Definition Public.cs:4683
CriterionDefinitionConfig WithReferenceId(int referenceId)
Definition Public.cs:4658
CriterionDefinitionConfig WithName(string name)
Definition Public.cs:4605
ENTRY POINT.
Definition Public.cs:3315
SampleCalcItemConfig WithId(int id)
Definition Public.cs:4286
double DoubleValue
Definition Public.cs:4122
SampleCalcItemConfig WithName(string name)
Definition Public.cs:4247
SampleCalcItemConfig WithValue(double? value)
Definition Public.cs:4168
SettingDefinitionConfig WithName(string name)
Definition Public.cs:3803
SettingDefinitionConfig WithCategory(string category)
Definition Public.cs:3863
SettingDefinitionConfig WithDefaultValue(int? defaultValue)
Definition Public.cs:3870
SettingDefinitionConfig WithId(int id)
Definition Public.cs:3824
SettingDefinitionConfig WithDescription(string description)
Definition Public.cs:3810
SettingDefinitionConfig WithUid(Guid uid)
Definition Public.cs:3837
IPlateRep GetPlateRep()
Represent this analyzable as a plate.
ISettingList Settings
Custom analysis settings.
Definition Public.cs:1751
Definition Public.cs:2815
IAnalyzable Analyzable
The object to be analyzed. Contains loading information, element information, materials,...
Definition Public.cs:2820
IDetailTree Details
Store intermediate details calculated by your method here and return it alongside the margin in your ...
Definition Public.cs:2830
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:4388
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: