/// <summary> /// This method creates a new instance of class <see cref="Beam{TProfile}"/>. /// This is a step to create the input fot finite element analysis. /// </summary> /// <param name="request"></param> /// <param name="degreesOfFreedom"></param> /// <returns>A new instance of class <see cref="Beam{TProfile}"/>.</returns> public override async Task <Beam <TProfile> > BuildBeam(BeamRequest <TProfile> request, uint degreesOfFreedom) { GeometricProperty geometricProperty = new GeometricProperty(); if (request.Profile.Area != null && request.Profile.MomentOfInertia != null) { geometricProperty.Area = await ArrayFactory.CreateVectorAsync(request.Profile.Area.Value, request.NumberOfElements).ConfigureAwait(false); geometricProperty.MomentOfInertia = await ArrayFactory.CreateVectorAsync(request.Profile.MomentOfInertia.Value, request.NumberOfElements).ConfigureAwait(false); } else { geometricProperty.Area = await this._geometricProperty.CalculateArea(request.Profile, request.NumberOfElements).ConfigureAwait(false); geometricProperty.MomentOfInertia = await this._geometricProperty.CalculateMomentOfInertia(request.Profile, request.NumberOfElements).ConfigureAwait(false); } var beam = new Beam <TProfile>() { Fastenings = await this._mappingResolver.BuildFastenings(request.Fastenings).ConfigureAwait(false), Forces = await this._mappingResolver.BuildForceVector(request.Forces, degreesOfFreedom).ConfigureAwait(false), GeometricProperty = geometricProperty, Length = request.Length, Material = MaterialFactory.Create(request.Material), NumberOfElements = request.NumberOfElements, Profile = request.Profile }; return(beam); }
public async Task <ActionResult <FiniteElementResponse> > CalculateVibration( [FromServices] ICalculateRectangularBeamVibration calculateVibration, [FromBody] BeamRequest <RectangularProfile> request) { FiniteElementResponse response = await calculateVibration.Process(request).ConfigureAwait(false); return(response.BuildHttpResponse()); }
/// <summary> /// This method creates the path to save the solution files. /// </summary> /// <param name="request"></param> /// <param name="input"></param> /// <returns>The path to save the solution files.</returns> public override Task <string> CreateSolutionPath(BeamRequest <TProfile> request, FiniteElementMethodInput input) { string previousPath = Path.GetDirectoryName(Directory.GetCurrentDirectory()); string fileUri = Path.Combine( previousPath, $"Solutions/FiniteElement/Beam/{request.Profile.GetType().Name}/nEl={request.NumberOfElements}/{request.NumericalMethod}"); string fileName = $"{request.AnalysisType}_{request.Profile.GetType().Name}_w={Math.Round(input.AngularFrequency, 2)}_nEl={request.NumberOfElements}.csv"; string path = Path.Combine(fileUri, fileName); Directory.CreateDirectory(fileUri); return(Task.FromResult(path)); }