Skip to content

Commit

Permalink
filter elementlist by dimension
Browse files Browse the repository at this point in the history
  • Loading branch information
Kristjan Nielsen committed Nov 29, 2023
1 parent 882211a commit f234d89
Show file tree
Hide file tree
Showing 28 changed files with 259 additions and 133 deletions.
2 changes: 1 addition & 1 deletion GsaGH/Components/5_Results/BeamDerivedStresses.cs
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ protected override void SolveInternal(IGH_DataAccess da) {
return;
}

ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist);
ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist, 1);

Check warning on line 135 in GsaGH/Components/5_Results/BeamDerivedStresses.cs

View check run for this annotation

Codecov / codecov/patch

GsaGH/Components/5_Results/BeamDerivedStresses.cs#L135

Added line #L135 was not covered by tests
IEntity1dResultSubset<IEntity1dDerivedStress, IStress1dDerived, ResultDerivedStress1d<Entity1dExtremaKey>> resultSet =
result.Element1dDerivedStresses.ResultSubset(elementIds, positionsCount);

Expand Down
2 changes: 1 addition & 1 deletion GsaGH/Components/5_Results/BeamDisplacements.cs
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ protected override void SolveInternal(IGH_DataAccess da) {
return;
}

ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist);
ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist, 1);
IEntity1dResultSubset<IEntity1dDisplacement, IDisplacement, ResultVector6<Entity1dExtremaKey>> resultSet =
result.Element1dDisplacements.ResultSubset(elementIds, positionsCount);

Expand Down
2 changes: 1 addition & 1 deletion GsaGH/Components/5_Results/BeamForcesAndMoments.cs
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ protected override void SolveInternal(IGH_DataAccess da) {
return;
}

ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist);
ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist, 1);
IEntity1dResultSubset<IEntity1dInternalForce, IInternalForce, ResultVector6<Entity1dExtremaKey>> resultSet =
result.Element1dInternalForces.ResultSubset(elementIds, positionsCount);

Expand Down
2 changes: 1 addition & 1 deletion GsaGH/Components/5_Results/BeamStrainEnergyDensity.cs
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ protected override void SolveInternal(IGH_DataAccess da) {
return;
}

ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist);
ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist, 1);
if (_average) {
INodeResultSubset<IEnergyDensity, NodeExtremaKey> resultSet =
result.Element1dAverageStrainEnergyDensities.ResultSubset(elementIds);
Expand Down
2 changes: 1 addition & 1 deletion GsaGH/Components/5_Results/BeamStresses.cs
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ protected override void SolveInternal(IGH_DataAccess da) {
return;
}

ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist);
ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist, 1);

Check warning on line 170 in GsaGH/Components/5_Results/BeamStresses.cs

View check run for this annotation

Codecov / codecov/patch

GsaGH/Components/5_Results/BeamStresses.cs#L170

Added line #L170 was not covered by tests
IEntity1dResultSubset<IEntity1dStress, IStress1d, ResultStress1d<Entity1dExtremaKey>> resultSet =
result.Element1dStresses.ResultSubset(elementIds, positionsCount);

Expand Down
2 changes: 1 addition & 1 deletion GsaGH/Components/5_Results/Element2dDisplacements.cs
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ protected override void SolveInternal(IGH_DataAccess da) {
return;
}

ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist);
ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist, 2);
IEntity2dResultSubset<IEntity2dQuantity<IDisplacement>, IDisplacement, ResultVector6<Entity2dExtremaKey>> resultSet =
result.Element2dDisplacements.ResultSubset(elementIds);

Expand Down
2 changes: 1 addition & 1 deletion GsaGH/Components/5_Results/Element2dForcesAndMoments.cs
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ protected override void SolveInternal(IGH_DataAccess da) {
return;
}

ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist);
ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist, 2);
IEntity2dResultSubset<IEntity2dQuantity<IForce2d>, IForce2d, ResultTensor2InAxis<Entity2dExtremaKey>> forces
= result.Element2dForces.ResultSubset(elementIds);
IEntity2dResultSubset<IEntity2dQuantity<IShear2d>, IShear2d, ResultVector2<Entity2dExtremaKey>> shears = result.Element2dShearForces.ResultSubset(elementIds);
Expand Down
2 changes: 1 addition & 1 deletion GsaGH/Components/5_Results/Element2dStresses.cs
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ protected override void SolveInternal(IGH_DataAccess da) {
return;
}

ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist);
ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist, 2);
IEntity2dResultSubset<IEntity2dQuantity<IStress>, IStress, ResultTensor3<Entity2dExtremaKey>> resultSet =
result.Element2dStresses.ResultSubset(elementIds, layer);

Expand Down
2 changes: 1 addition & 1 deletion GsaGH/Components/5_Results/Element3dDisplacements.cs
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ protected override void SolveInternal(IGH_DataAccess da) {
return;
}

ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist);
ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist, 3);
IEntity2dResultSubset<IEntity2dQuantity<ITranslation>, ITranslation, ResultVector3InAxis<Entity2dExtremaKey>> resultSet =
result.Element3dDisplacements.ResultSubset(elementIds);

Expand Down
2 changes: 1 addition & 1 deletion GsaGH/Components/5_Results/Element3dStresses.cs
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ protected override void SolveInternal(IGH_DataAccess da) {
return;
}

ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist);
ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist, 3);
IEntity2dResultSubset<IEntity2dQuantity<IStress>, IStress, ResultTensor3<Entity2dExtremaKey>> resultSet =
result.Element3dStresses.ResultSubset(elementIds);

Expand Down
2 changes: 1 addition & 1 deletion GsaGH/Components/6_Display/Contour1dResults.cs
Original file line number Diff line number Diff line change
Expand Up @@ -621,7 +621,7 @@ protected override void SolveInternal(IGH_DataAccess da) {
da.GetData(5, ref ghScale);
GH_Convert.ToDouble(ghScale, out double scale, GH_Conversion.Both);

ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist);
ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist, 1);
int permutation = result.SelectedPermutationIds == null
? 0 : result.SelectedPermutationIds[0] - 1;
double dmax = 0;
Expand Down
137 changes: 124 additions & 13 deletions GsaGH/Components/6_Display/Contour2dResults.cs
Original file line number Diff line number Diff line change
Expand Up @@ -609,7 +609,7 @@ protected override void SolveInternal(IGH_DataAccess da) {
GH_Convert.ToInterval(ghInterval, ref customMinMax, GH_Conversion.Both);
}

ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist);
ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist, 2);
int permutation = result.SelectedPermutationIds == null
? 0 : result.SelectedPermutationIds[0] - 1;

Expand Down Expand Up @@ -658,6 +658,103 @@ protected override void SolveInternal(IGH_DataAccess da) {
values = ResultsUtility.GetResultComponent(displacements.Subset, translationSelector, permutation);
break;

case FoldMode.Force:
IEntity2dResultSubset<IEntity2dQuantity<IForce2d>, IForce2d,
ResultTensor2InAxis<Entity2dExtremaKey>> forces
= result.Element2dForces.ResultSubset(elementIds);
IEntity2dResultSubset<IEntity2dQuantity<IShear2d>, IShear2d,
ResultVector2<Entity2dExtremaKey>> shears
= result.Element2dShearForces.ResultSubset(elementIds);
IEntity2dResultSubset<IEntity2dQuantity<IMoment2d>, IMoment2d,
ResultTensor2AroundAxis<Entity2dExtremaKey>> moments
= result.Element2dMoments.ResultSubset(elementIds);
Func<IForce2d, IQuantity> forceSelector = null;
Func<IShear2d, IQuantity> shearSelector = null;
Func<IMoment2d, IQuantity> momentSelector = null;
switch (_disp) {
case DisplayValue.X when _isShear:
_resType = "2D Shear, Qx";
dmax = shears.GetExtrema(shears.Max.Qx).Qx.As(_forcePerLengthUnit);
dmin = shears.GetExtrema(shears.Min.Qx).Qx.As(_forcePerLengthUnit);
shearSelector = (r) => r.Qx.ToUnit(_forcePerLengthUnit);
values = ResultsUtility.GetResultComponent(shears.Subset, shearSelector, permutation);
break;

case DisplayValue.Y when _isShear:
_resType = "2D Shear, Qy";
dmax = shears.GetExtrema(shears.Max.Qy).Qy.As(_forcePerLengthUnit);
dmin = shears.GetExtrema(shears.Min.Qy).Qy.As(_forcePerLengthUnit);
shearSelector = (r) => r.Qy.ToUnit(_forcePerLengthUnit);
values = ResultsUtility.GetResultComponent(shears.Subset, shearSelector, permutation);
break;

case DisplayValue.X:
_resType = "2D Force, Nx";
dmax = forces.GetExtrema(forces.Max.Nx).Nx.As(_forcePerLengthUnit);
dmin = forces.GetExtrema(forces.Min.Nx).Nx.As(_forcePerLengthUnit);
forceSelector = (r) => r.Nx.ToUnit(_forcePerLengthUnit);
values = ResultsUtility.GetResultComponent(forces.Subset, forceSelector, permutation);
break;

case DisplayValue.Y:
_resType = "2D Force, Ny";
dmax = forces.GetExtrema(forces.Max.Ny).Ny.As(_forcePerLengthUnit);
dmin = forces.GetExtrema(forces.Min.Ny).Ny.As(_forcePerLengthUnit);
forceSelector = (r) => r.Ny.ToUnit(_forcePerLengthUnit);
values = ResultsUtility.GetResultComponent(forces.Subset, forceSelector, permutation);
break;

case DisplayValue.Z:
_resType = "2D Force, Nxy";
dmax = forces.GetExtrema(forces.Max.Nxy).Nxy.As(_forcePerLengthUnit);
dmin = forces.GetExtrema(forces.Min.Nxy).Nxy.As(_forcePerLengthUnit);
forceSelector = (r) => r.Nxy.ToUnit(_forcePerLengthUnit);
values = ResultsUtility.GetResultComponent(forces.Subset, forceSelector, permutation);
break;

case DisplayValue.Xx:
_resType = "2D Moment, Mx";
dmax = moments.GetExtrema(moments.Max.Mx).Mx.As(_forceUnit);
dmin = moments.GetExtrema(moments.Min.Mx).Mx.As(_forceUnit);
momentSelector = (r) => r.Mx.ToUnit(_forceUnit);
values = ResultsUtility.GetResultComponent(moments.Subset, momentSelector, permutation);
break;

case DisplayValue.Yy:
_resType = "2D Moment, My";
dmax = moments.GetExtrema(moments.Max.My).My.As(_forceUnit);
dmin = moments.GetExtrema(moments.Min.My).My.As(_forceUnit);
momentSelector = (r) => r.My.ToUnit(_forceUnit);
values = ResultsUtility.GetResultComponent(moments.Subset, momentSelector, permutation);
break;

case DisplayValue.Zz:
_resType = "2D Moment, Mxy";
dmax = moments.GetExtrema(moments.Max.Mxy).Mxy.As(_forceUnit);
dmin = moments.GetExtrema(moments.Min.Mxy).Mxy.As(_forceUnit);
momentSelector = (r) => r.Mxy.ToUnit(_forceUnit);
values = ResultsUtility.GetResultComponent(moments.Subset, momentSelector, permutation);
break;

case DisplayValue.ResXyz:
_resType = "2D Moment, Mx+sgn(Mx)|Mxy|";
dmax = moments.GetExtrema(moments.Max.WoodArmerX).WoodArmerX.As(_forceUnit);
dmin = moments.GetExtrema(moments.Min.WoodArmerX).WoodArmerX.As(_forceUnit);
momentSelector = (r) => r.WoodArmerX.ToUnit(_forceUnit);
values = ResultsUtility.GetResultComponent(moments.Subset, momentSelector, permutation);
break;

case DisplayValue.ResXxyyzz:
_resType = "2D Moment, My+sgn(My)|Mxy|";
dmax = moments.GetExtrema(moments.Max.WoodArmerY).WoodArmerY.As(_forceUnit);
dmin = moments.GetExtrema(moments.Min.WoodArmerY).WoodArmerY.As(_forceUnit);
momentSelector = (r) => r.WoodArmerY.ToUnit(_forceUnit);
values = ResultsUtility.GetResultComponent(moments.Subset, momentSelector, permutation);
break;
}

break;

case FoldMode.Stress:
IEntity2dResultSubset<IEntity2dQuantity<IStress>, IStress,
ResultTensor3<Entity2dExtremaKey>> stresses
Expand Down Expand Up @@ -709,6 +806,23 @@ ResultTensor3<Entity2dExtremaKey>> stresses

values = ResultsUtility.GetResultComponent(stresses.Subset, stressSelector, permutation);
break;

case FoldMode.Footfall:
_resType = "Response Factor [-]";
INodeResultCache<IFootfall, ResultFootfall<NodeExtremaKey>> nodeFootfallCache
= _selectedItems[1] == "Resonant"
? result.NodeResonantFootfalls
: result.NodeTransientFootfalls;
Func<IFootfall, IQuantity> footfallSelector =
(r) => new Ratio(r.MaximumResponseFactor, RatioUnit.DecimalFraction);
ICollection<int> nodeIds;
(values, nodeIds) = ResultsUtility.MapNodeResultToElements(
elems, nodeFootfallCache, footfallSelector, permutation);
INodeResultSubset<IFootfall, ResultFootfall<NodeExtremaKey>> nodeFootfall
= nodeFootfallCache.ResultSubset(nodeIds);
dmax = nodeFootfall.GetExtrema(nodeFootfall.Max.MaximumResponseFactor).MaximumResponseFactor;
dmin = nodeFootfall.GetExtrema(nodeFootfall.Min.MaximumResponseFactor).MaximumResponseFactor;
break;
}

int significantDigits = 0;
Expand All @@ -728,7 +842,6 @@ ResultTensor3<Entity2dExtremaKey>> stresses
new List<Point3dList>(), new List<int>());
var meshes = new ConcurrentDictionary<int, Mesh>();
meshes.AsParallel().AsOrdered();
//var values = new ConcurrentDictionary<int, List<IQuantity>>();
values.AsParallel().AsOrdered();
var verticies = new ConcurrentDictionary<int, Point3dList>();
verticies.AsParallel().AsOrdered();
Expand Down Expand Up @@ -772,9 +885,8 @@ ResultTensor3<Entity2dExtremaKey>> stresses
break;
}
}
for (int i = 0; i < tempmesh.Vertices.Count - 1;
i++) // start at i=0, now the last index is the centre point in GsaAPI output so to count -1
{

for (int i = 0; i < values[key].Count - 1; i++) {
double tnorm = (2 * (values[key][i].Value - dmin) / (dmax - dmin)) - 1;
Color col = double.IsNaN(tnorm) ? Color.Transparent : ghGradient.ColourAt(tnorm);
tempmesh.VertexColors.Add(col);
Expand All @@ -787,8 +899,8 @@ ResultTensor3<Entity2dExtremaKey>> stresses
tempmesh.Vertices[i] = def;
}

if (values[key].Count == 9) // add the value/colour at the centre point if quad-8 (as it already has a vertex here)
{
if (values[key].Count == 9) {
// add the value/colour at the centre point if quad-8 (as it already has a vertex here)
double tnorm = (2 * (values[key].Last().Value - dmin) / (dmax - dmin)) - 1;
Color col = double.IsNaN(tnorm) ? Color.Transparent : ghGradient.ColourAt(tnorm);
tempmesh.VertexColors.Add(col);
Expand All @@ -799,9 +911,9 @@ ResultTensor3<Entity2dExtremaKey>> stresses
}
}

if (values[key].Count == 1) // if analysis settings is set to '2D element forces and 2D/3D stresses at centre only'
{
double tnorm = (2 * (values[0][key].Value - dmin) / (dmax - dmin)) - 1;
if (values[key].Count == 1) {
// if analysis settings is set to '2D element forces and 2D/3D stresses at centre only'
double tnorm = (2 * (values[key][0].Value - dmin) / (dmax - dmin)) - 1;
Color col = double.IsNaN(tnorm) ? Color.Transparent : ghGradient.ColourAt(tnorm);
for (int i = 0; i < tempmesh.Vertices.Count; i++) {
tempmesh.VertexColors.SetColor(i, col);
Expand All @@ -820,7 +932,6 @@ ResultTensor3<Entity2dExtremaKey>> stresses
}

meshes[key] = tempmesh;

});

resultMeshes.AddRange(meshes.Values.ToList(), values.Values.ToList(),
Expand Down Expand Up @@ -904,8 +1015,8 @@ Color gradientcolour
}

if (Math.Abs(t) > 1) {
_legendValues[i] = _legendValues[i]
.Replace(",", string.Empty); // remove thousand separator
// remove thousand separator
_legendValues[i] = _legendValues[i].Replace(",", string.Empty);
}

_legendValuesPosY.Add(_legend.Height - starty + (gripheight / 2) - 2);
Expand Down
2 changes: 1 addition & 1 deletion GsaGH/Components/6_Display/Contour3dResults.cs
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,7 @@ protected override void SolveInternal(IGH_DataAccess da) {
GH_Convert.ToInterval(ghInterval, ref customMinMax, GH_Conversion.Both);
}

ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist);
ReadOnlyCollection<int> elementIds = result.ElementIds(elementlist, 3);
int permutation = result.SelectedPermutationIds == null
? 0 : result.SelectedPermutationIds[0] - 1;
double dmax = 0;
Expand Down
19 changes: 17 additions & 2 deletions GsaGH/Parameters/5_Results/2_Results/GsaResult2.cs
Original file line number Diff line number Diff line change
Expand Up @@ -164,9 +164,24 @@ internal ReadOnlyCollection<int> NodeIds(string nodeList) {
return Model.Model.ExpandList(entityList);
}

internal ReadOnlyCollection<int> ElementIds(string elementList) {
internal ReadOnlyCollection<int> ElementIds(string elementList, int dimension) {
string filter = string.Empty;
switch (dimension) {
case 1:
filter = " not (PA PV)";
break;

case 2:
filter = " not (PB PV)";
break;

case 3:
filter = " not (PB PA)";
break;
}

var entityList = new EntityList() {
Definition = elementList,
Definition = elementList + filter,
Type = GsaAPI.EntityType.Element,
Name = "elem",
};
Expand Down
Loading

0 comments on commit f234d89

Please sign in to comment.