Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
801d43e
Update GlobalAssemblyInfo.cs
Marco-Pellegrino May 20, 2025
c800650
🐛 value list for Diaphragm is not implemented
Marco-Pellegrino Jun 13, 2025
ecae98e
✨ shear control regions
Marco-Pellegrino Sep 15, 2025
6ef931a
.
Marco-Pellegrino Sep 15, 2025
9b8779a
.
Marco-Pellegrino Sep 15, 2025
63e6086
👷 HubBased components
Marco-Pellegrino Sep 16, 2025
5a8cc55
🆙
Marco-Pellegrino Sep 25, 2025
b7c3ce4
👷 multi pipe
Marco-Pellegrino Oct 6, 2025
d844572
🔥 stage
Marco-Pellegrino Nov 12, 2025
97fb8ab
💄 category reinforcement
Marco-Pellegrino Nov 12, 2025
4a1ac53
👷 bended bar
Marco-Pellegrino Nov 13, 2025
f749dc6
👷 punching reinforcement
Marco-Pellegrino Nov 18, 2025
575dc27
👷 punching reinforcement
Marco-Pellegrino Nov 18, 2025
0049e22
👷 punching
Marco-Pellegrino Nov 19, 2025
187a816
✨ concreteDesignConfig
Marco-Pellegrino Nov 19, 2025
e0357a6
Update MaterialSetConcreteMaterialProperties.cs
Marco-Pellegrino Nov 19, 2025
bffd78e
👷 time dependant properties
Marco-Pellegrino Nov 19, 2025
692c518
👷 schema 24
Marco-Pellegrino Nov 19, 2025
b861a7f
✨ material TDA
Marco-Pellegrino Nov 20, 2025
55e54cf
🐛
Marco-Pellegrino Nov 25, 2025
3fe198d
🚧 replace old pipe components with the FemDesignConnectionHub handle …
lorinczandrea Nov 26, 2025
fdab292
🚧 new refactored connection gh components
lorinczandrea Nov 26, 2025
1a0ab9f
Update FemDesign.Grasshopper.csproj
lorinczandrea Nov 26, 2025
5a7da7f
:bug: fix reference issues
lorinczandrea Nov 26, 2025
ccf7c0e
🐛 Case in load case name was failing to parse
Marco-Pellegrino Nov 27, 2025
069efd2
🆙 reduce compression enum type msssing
Marco-Pellegrino Dec 4, 2025
a28ae4a
:bug: fix FemDesignRunAnalysis Exposure class
lorinczandrea Dec 4, 2025
184772b
add KeepOpen() to Dispose
lorinczandrea Dec 4, 2025
608ea32
💄 making ToString() more meaningful
lorinczandrea Dec 4, 2025
79e55c0
set `_keepOpen` to true in Disconnect & remove `Connection` output
lorinczandrea Dec 4, 2025
021a3a5
implementing `Enabled` event sensitivity
lorinczandrea Dec 4, 2025
99395c4
add missing error handling
lorinczandrea Dec 4, 2025
3551a86
Merge branch '1173-iterative-analysis-pipe' into 24.3.0_Dev
lorinczandrea Dec 4, 2025
c5c6798
Update FemDesign.Grasshopper.csproj
lorinczandrea Dec 4, 2025
8044597
✨ implement DiaphragmType
lorinczandrea Dec 9, 2025
2c15909
✨ LoadCaseType.Ordinary added
lorinczandrea Dec 9, 2025
425e1da
:bug: fix failing tests
lorinczandrea Dec 9, 2025
c0c9356
:bug: fix failing build
lorinczandrea Dec 9, 2025
ac0ae4c
Update MainWindow.xaml.cs
lorinczandrea Dec 9, 2025
4ec7212
Update FemDesignConnectionComponent.cs
Marco-Pellegrino Dec 9, 2025
4e2414f
:bug: fix parse issue
lorinczandrea Dec 15, 2025
5f9d252
Merge branch '1165-LoadCaseType-Ordinary' into 24.3.0_Dev
lorinczandrea Dec 15, 2025
859b9fb
LoadMainMenu template from Sx is added
lorinczandrea Dec 15, 2025
c7e194b
remove sx content and add fd content
lorinczandrea Dec 15, 2025
59b13c6
🐛 temporary fix for BarEndReleaseTypes
Marco-Pellegrino Dec 15, 2025
93958de
🔥 ✨ Info layout updated, links are removed
lorinczandrea Dec 15, 2025
2ca86c9
🆙 update GH SDK references
lorinczandrea Dec 15, 2025
b792175
💄 icon for disconnect
Marco-Pellegrino Dec 15, 2025
841f029
FD menu is added to GH ribbon
lorinczandrea Dec 15, 2025
23877eb
💄 Icons for main menu
lorinczandrea Dec 16, 2025
f1bf57d
💄 refine Info component layout
lorinczandrea Dec 16, 2025
5511ce7
Merge branch '1184_CreateFDMainMenu' into 24.3.0_Dev
lorinczandrea Dec 16, 2025
2fe345a
Update LoadMainMenu.cs
Marco-Pellegrino Dec 17, 2025
252b6f4
📝update iterative analysis example
Marco-Pellegrino Dec 17, 2025
ae1d30f
🆙 removed application run from examples
Marco-Pellegrino Dec 17, 2025
c17b920
🐛 `Diaphragm` load case type is added
lorinczandrea Dec 18, 2025
40f5a3d
Merge branch '1164_DiaphragmLoad' into 24.3.0_Dev
lorinczandrea Dec 18, 2025
f70c776
Update SetConcreteTimeDependant.cs
Marco-Pellegrino Dec 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion FemDesign.Core/Bars/Bar.cs
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,19 @@ public Geometry.Edge Edge
public BarType Type { get; set; }

[XmlAttribute("stage")]
public int StageId { get; set; } = 1;
public int _stageId = 1;

[XmlIgnore]
public int StageId
{
get { return _stageId; }
set
{
_stageId = value;
if (this.BarPart != null)
this.BarPart.StageId = value;
}
}

[XmlElement("bar_part", Order = 1)]
public BarPart _barPart; // bar_part_type
Expand Down
51 changes: 33 additions & 18 deletions FemDesign.Core/Calculate/Analysis.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
// https://strusoft.com/
using FemDesign.Shells;
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.ComponentModel;
using System.Linq;
using FemDesign.Shells;
using System.Xml.Serialization;


namespace FemDesign.Calculate
Expand Down Expand Up @@ -296,22 +297,19 @@ public bool ElemFine
this._elemFine = Convert.ToInt32(value);
}
}

[XmlAttribute("diaphragm")]
public int _diaphragm;
[XmlIgnore]
public int Diaphragm
public DiaphragmType Diaphragm
{
get
{
return this._diaphragm;
return (DiaphragmType)this._diaphragm;
}
set
{
if (value < 0 || value > 2)
throw new ArgumentException($"Diaphragm is set to {value}. Value must be '0'= None , '1'= Rigid membrane or '2'= Fully rigid.");

this._diaphragm = value;
this._diaphragm = (int)value;
}
}

Expand All @@ -337,7 +335,14 @@ private Analysis()
{
}

public Analysis(Calculate.Stage stage = null, Stability stability = null, Imperfection imperfection = null, Comb comb = null, Freq freq = null, Footfall footfall = null, Bedding bedding = null, GroundAcc groundAcc = null, ExcitationForce exForce = null, PeriodicExcitation periodicEx = null, bool calcCase = false, bool calcCStage = false, bool calcImpf = false, bool calcComb = false, bool calcGMax = false, bool calcStab = false, bool calcFreq = false, bool calcSeis = false, bool calcFootfall = false, bool calcBedding = false, bool calcGroundAcc = false, bool calcExForce = false, bool calcPeriodicEx = false, bool calcDesign = false, bool elemFine = true, int diaphragm = 0, bool peakSmoothing = false)
[Obsolete("Use Analysis(..., DiaphragmType diaphragm, ...) instead. This constructor will be removed in the next version.")]
[EditorBrowsable(EditorBrowsableState.Never)]
public Analysis(Calculate.Stage stage = null, Stability stability = null, Imperfection imperfection = null, Comb comb = null, Freq freq = null, Footfall footfall = null, Bedding bedding = null, GroundAcc groundAcc = null, ExcitationForce exForce = null, PeriodicExcitation periodicEx = null, bool calcCase = false, bool calcCStage = false, bool calcImpf = false, bool calcComb = false, bool calcGMax = false, bool calcStab = false, bool calcFreq = false, bool calcSeis = false, bool calcFootfall = false, bool calcBedding = false, bool calcGroundAcc = false, bool calcExForce = false, bool calcPeriodicEx = false, bool calcDesign = false, bool elemFine = true, int diaphragm = 0, bool peakSmoothing = false)
: this(stage, stability, imperfection, comb, freq, footfall, bedding, groundAcc, exForce, periodicEx, calcCase, calcCStage, calcImpf, calcComb, calcGMax, calcStab, calcFreq, calcSeis, calcFootfall, calcBedding, calcGroundAcc, calcExForce, calcPeriodicEx, calcDesign, elemFine, (DiaphragmType)diaphragm, peakSmoothing)
{
}

public Analysis(Calculate.Stage stage = null, Stability stability = null, Imperfection imperfection = null, Comb comb = null, Freq freq = null, Footfall footfall = null, Bedding bedding = null, GroundAcc groundAcc = null, ExcitationForce exForce = null, PeriodicExcitation periodicEx = null, bool calcCase = false, bool calcCStage = false, bool calcImpf = false, bool calcComb = false, bool calcGMax = false, bool calcStab = false, bool calcFreq = false, bool calcSeis = false, bool calcFootfall = false, bool calcBedding = false, bool calcGroundAcc = false, bool calcExForce = false, bool calcPeriodicEx = false, bool calcDesign = false, bool elemFine = true, DiaphragmType diaphragm = DiaphragmType.None, bool peakSmoothing = false)
{
this.Stage = stage;
this.Comb = comb;
Expand Down Expand Up @@ -411,7 +416,7 @@ private void _validateAnalysisSettings()
public static Analysis StaticAnalysis(Comb comb = null, bool calcCase = true, bool calccomb = true)
{
comb = comb ?? Comb.Default();
return new Analysis(comb: comb, calcCase: calcCase, calcComb: calccomb);
return new Analysis(comb: comb, calcCase: calcCase, calcComb: calccomb, diaphragm: DiaphragmType.None);
}


Expand All @@ -428,7 +433,7 @@ public static Analysis StaticAnalysis(Comb comb = null, bool calcCase = true, bo
public static Analysis Eigenfrequencies(int numShapes = 3, int maxSturm = 0, bool x = true, bool y = true, bool z = true, double top = -0.01)
{
var freqSettings = new Freq(numShapes, maxSturm, x, y, z, top);
return new Analysis(freq: freqSettings, calcFreq: true);
return new Analysis(freq: freqSettings, calcFreq: true, diaphragm: DiaphragmType.None);
}

/// <summary>
Expand All @@ -446,7 +451,17 @@ public static Analysis Eigenfrequencies(int numShapes = 3, int maxSturm = 0, boo
public static Analysis Eigenfrequencies(int numShapes = 3, int autoIteration = 0, ShapeNormalisation shapeNormalisation = ShapeNormalisation.Unit, int maxSturm = 0, bool x = true, bool y = true, bool z = true, double top = -0.01)
{
var freqSettings = new Freq(numShapes, autoIteration, shapeNormalisation, x, y, z, maxSturm, top);
return new Analysis(freq: freqSettings, calcFreq: true);
return new Analysis(freq: freqSettings, calcFreq: true, diaphragm: DiaphragmType.None);
}

/// <summary>
/// Define an eigenfrequencies analysis.
/// </summary>
/// <param name="freqSettings"></param>
/// <returns></returns>
public static Analysis Eigenfrequencies(Freq freqSettings)
{
return new Analysis(freq: freqSettings, calcFreq: true, diaphragm: DiaphragmType.None);
}

/// <summary>
Expand All @@ -467,7 +482,7 @@ public static Analysis Eigenfrequencies(int numShapes = 3, int autoIteration = 0
public static Analysis GroundAcceleration(bool levelAccSpectra = true, double deltaT = 0.2, double tEnd = 5.0, double q = 1.0, bool timeHistory = true, int step = 5, double lastMoment = 20.0, IntegrationSchemeMethod method = IntegrationSchemeMethod.Newmark, double alpha = 0.5, double beta = 0.25, double dmpFactor = 5.0)
{
GroundAcc grAccSettings = new GroundAcc(levelAccSpectra, deltaT, tEnd, q, timeHistory, step, lastMoment, method, alpha, beta, dmpFactor);
return new Analysis(groundAcc: grAccSettings, calcGroundAcc: true);
return new Analysis(groundAcc: grAccSettings, calcGroundAcc: true, diaphragm: DiaphragmType.None);
}

/// <summary>
Expand All @@ -483,7 +498,7 @@ public static Analysis GroundAcceleration(bool levelAccSpectra = true, double de
public static Analysis ExcitationForce(int step = 5, double lastMoment = 20.0, IntegrationSchemeMethod method = IntegrationSchemeMethod.Newmark, double alpha = 0.5, double beta = 0.25, double dmpFactor = 5.0)
{
ExcitationForce grAccSettings = new ExcitationForce(step, lastMoment, method, alpha, beta, dmpFactor);
return new Analysis(exForce: grAccSettings, calcExForce: true);
return new Analysis(exForce: grAccSettings, calcExForce: true, diaphragm: DiaphragmType.None);
}

/// <summary>
Expand All @@ -499,7 +514,7 @@ public static Analysis ExcitationForce(int step = 5, double lastMoment = 20.0, I
public static Analysis PeriodicExcitation(double deltaT = 0.01, double timeEnd = 5.0, DampingType dmpType = DampingType.Rayleigh, double alpha = 0.5, double beta = 0.25, double dmpFactor = 5.0)
{
PeriodicExcitation perExSettings = new PeriodicExcitation(deltaT, timeEnd, dmpType, alpha, beta, dmpFactor);
return new Analysis(periodicEx: perExSettings, calcPeriodicEx: true);
return new Analysis(periodicEx: perExSettings, calcPeriodicEx: true, diaphragm: DiaphragmType.None);
}

/// <summary>
Expand All @@ -511,13 +526,13 @@ public static Analysis PeriodicExcitation(double deltaT = 0.01, double timeEnd =
public static Analysis ConstructionStages(bool ghost = false)
{
var stage = ghost ? Stage.GhostMethod() : Stage.TrackingMethod();
return new Analysis(stage: stage, calcCStage: true);
return new Analysis(stage: stage, calcCStage: true, diaphragm: DiaphragmType.None);
}

// TODO (missing calculation parameters in .fdscript)
private static Analysis FootFall(Footfall footfall)
{
var analisys = new Analysis(footfall: footfall, calcFootfall: true);
var analisys = new Analysis(footfall: footfall, calcFootfall: true, diaphragm: DiaphragmType.None);
throw new NotImplementedException();
}

Expand Down
22 changes: 16 additions & 6 deletions FemDesign.Core/Calculate/Config/ConcreteDesignConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,29 +52,39 @@ public enum CalculationMethod
[XmlAttribute("fReopeningCracks")]
public bool ReopeningCracks { get; set; } = false;

/// <summary>
/// Use upper limit for Eq. 7.11
/// </summary>
[XmlAttribute("fUseUpperLimitForEq711")]
public bool UseUpperLimitForEq711 { get; set; } = false;


private ConcreteDesignConfig()
/// <summary>
/// Concrete design configuration
/// </summary>
public ConcreteDesignConfig()
{

}

public ConcreteDesignConfig(CalculationMethod secondOrder, bool crackQuasiPermanent = true, bool crackFrequent = false, bool crackCharacteristic = false, bool reopeningCracks = false)
public ConcreteDesignConfig(CalculationMethod secondOrder, bool crackQuasiPermanent = true, bool crackFrequent = false, bool crackCharacteristic = false, bool reopeningCracks = false, bool useUpperLimitForEq711 = false)
{
SecondOrderCalculationMethod = secondOrder;
CrackWidthQuasiPermanent = crackQuasiPermanent;
CrackWidthFrequent = crackFrequent;
CrackWidthCharacteristic = crackCharacteristic;
ReopeningCracks = reopeningCracks;
UseUpperLimitForEq711 = useUpperLimitForEq711;
}

public static ConcreteDesignConfig NominalStiffness(bool crackQuasiPermanent = true, bool crackFrequent = false, bool crackCharacteristic = false)
public static ConcreteDesignConfig NominalStiffness(bool crackQuasiPermanent = true, bool crackFrequent = false, bool crackCharacteristic = false, bool useUpperLimitForEq711 = false)
{
return new ConcreteDesignConfig(CalculationMethod.NominalStiffness, crackQuasiPermanent, crackFrequent, crackCharacteristic);
return new ConcreteDesignConfig(CalculationMethod.NominalStiffness, crackQuasiPermanent, crackFrequent, crackCharacteristic, useUpperLimitForEq711: useUpperLimitForEq711);
}

public static ConcreteDesignConfig NominalCurvature(bool crackQuasiPermanent = true, bool crackFrequent = false, bool crackCharacteristic = false)
public static ConcreteDesignConfig NominalCurvature(bool crackQuasiPermanent = true, bool crackFrequent = false, bool crackCharacteristic = false, bool useUpperLimitForEq711 = false)
{
return new ConcreteDesignConfig(CalculationMethod.NominalCurvature, crackQuasiPermanent, crackFrequent, crackCharacteristic);
return new ConcreteDesignConfig(CalculationMethod.NominalCurvature, crackQuasiPermanent, crackFrequent, crackCharacteristic, useUpperLimitForEq711: useUpperLimitForEq711);
}

}
Expand Down
15 changes: 15 additions & 0 deletions FemDesign.Core/Calculate/DiaphragmType.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FemDesign.Calculate
{
public enum DiaphragmType
{
None = 0,
RigidMembrane = 1,
FullyRigid = 2
}
}
2 changes: 2 additions & 0 deletions FemDesign.Core/FemDesign.Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@
<Compile Include="Calculate\Config\SteelBarCalculationParameters.cs" />
<Compile Include="Calculate\Config\SteelBarDesignParameters.cs" />
<Compile Include="Calculate\Config\SteelDesignConfiguration.cs" />
<Compile Include="Calculate\DiaphragmType.cs" />
<Compile Include="Calculate\ExcitationForce.cs" />
<Compile Include="Calculate\GroundAcc.cs" />
<Compile Include="Calculate\Imperfection.cs" />
Expand Down Expand Up @@ -143,6 +144,7 @@
<Compile Include="Stage\SFactorType.cs" />
<Compile Include="StruSoft\Interop\StruXml\Data\CaselessLoads.cs" />
<Compile Include="StruSoft\Interop\StruXml\Data\FD 23.00.001 Strusoft.cs" />
<Compile Include="StruSoft\Interop\StruXml\Data\FEM-Design 24.00.005.cs" />
<Compile Include="StruSoft\Interop\StruXml\Data\Layer_type.cs" />
<Compile Include="StruSoft\Interop\StruXml\Data\Vehicle_lib_type.cs" />
<Compile Include="Releases\RigidityDataType0.cs" />
Expand Down
51 changes: 37 additions & 14 deletions FemDesign.Core/FemDesignConnection.cs
Original file line number Diff line number Diff line change
Expand Up @@ -361,50 +361,73 @@ public void RunAnalysis(Analysis analysis)
string logfile = OutputFileHelper.GetLogfilePath(OutputDir);
FdScript script;

if (analysis.Comb != null)
if(analysis.CalcCase || analysis.CalcComb)
{
if(analysis.Comb.CombItem.Any(CombItem => CombItem.CombName != null) || analysis.Comb.CombItem.Count() == 0)
if (analysis.Comb == null) analysis.Comb = Comb.Default();
var analysis_static = Analysis.StaticAnalysis(analysis.Comb, analysis.CalcCase, analysis.CalcComb);

if (analysis_static.Comb.CombItem.Any(CombItem => CombItem.CombName != null) || analysis_static.Comb.CombItem.Count() == 0)
{
analysis.SetCombAnalysis(this);
analysis_static.SetCombAnalysis(this);
}
script = new FdScript(
logfile,
new CmdUser(CmdUserModule.RESMODE),
new CmdCalculation(analysis));
this.RunScript(script, "RunAnalysis");

new CmdCalculation(analysis_static));
this.RunScript(script, "RunStaticAnalysis");
}

if (analysis.Stability != null)
{
analysis.SetStabilityAnalysis(this);
var statbility_analysis = analysis.DeepClone();
statbility_analysis.SetStabilityAnalysis(this);

script = new FdScript(
logfile,
new CmdUser(CmdUserModule.RESMODE),
new CmdCalculation(analysis));
this.RunScript(script, "RunAnalysis");
new CmdCalculation(statbility_analysis));
this.RunScript(script, "RunStabilityAnalysis");
}

if (analysis.Imperfection != null)
{
analysis.SetImperfectionAnalysis(this);
var imperfection_analysis = analysis.DeepClone();
imperfection_analysis.SetImperfectionAnalysis(this);

script = new FdScript(
logfile,
new CmdUser(CmdUserModule.RESMODE),
new CmdCalculation(analysis));
this.RunScript(script, "RunAnalysis");
this.RunScript(script, "RunImperfectionAnalysis");
}

if (analysis.CalcFreq)
{
if (analysis.Freq == null) analysis.Freq = Freq.Default();
var freq_analysis = Analysis.Eigenfrequencies(analysis.Freq);

script = new FdScript(
logfile,
new CmdUser(CmdUserModule.RESMODE),
new CmdCalculation(freq_analysis));
this.RunScript(script, "RunFreqAnalysis");
}

if (analysis.Freq != null || analysis.Footfall != null || analysis.PeriodicEx != null || analysis.ExForce != null || analysis.GroundAcc != null)
// it requires a refactor
if (analysis.Footfall != null || analysis.PeriodicEx != null || analysis.ExForce != null || analysis.GroundAcc != null)
{
analysis.CalcCase = false;
analysis.CalcComb = false;
analysis.CalcFreq = false;
analysis.CalcImpf = false;
analysis.CalcStab = false;

script = new FdScript(
logfile,
new CmdUser(CmdUserModule.RESMODE),
new CmdCalculation(analysis));
this.RunScript(script, "RunAnalysis");
}


}

/// <summary>
Expand Down
18 changes: 16 additions & 2 deletions FemDesign.Core/Loads/Load cases/LoadCase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,23 @@ public string Name
}
[XmlAttribute("type")]
public LoadCaseType Type { get; set; } // loadcasetype_type

[XmlAttribute("duration_class")]
public LoadCaseDuration DurationClass { get; set; } // loadcasedurationtype

public LoadCaseDuration _durationClass; // loadcasedurationtype

[XmlIgnore]
public LoadCaseDuration DurationClass // loadcasedurationtype
{
get => _durationClass;
set
{
if(Type == LoadCaseType.Diaphragm && value != LoadCaseDuration.ShortTerm)
throw new ArgumentException("Diaphragm load cases must have ShortTerm duration class!");
else
_durationClass = value;
}
}

/// <summary>
/// Parameterless constructor for serialization.
/// </summary>
Expand Down
Loading
Loading