ovevans / SlopeFEA

See README file for more information including contact information, project description, references, and revision history.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

PROJECT:        SlopeFEA (c) 2011-2013 Brandon Karchewski
                Licensed under the Academic Free License version 3.0
                    http://www.opensource.org/licenses/afl-3.0.php

CONTACT:        Brandon Karchewski
                Department of Civil Engineering
                McMaster University, JHE-301
                1280 Main St W
                Hamilton, Ontario, Canada
                L8S 4L7
                p: 905-525-9140 x24287
                f: 905-529-9688
                e: karcheba@mcmaster.ca


SOURCE INFORMATION:

The repository for this software project is hosted on git at:

        git://github.com/karcheba/SlopeFEA

As such, the code for the project is free and open source.
The relevant license is AFLv3 (see link above).

            
DESCRIPTION:

This project includes a set of specialized tools for numerical analysis
of problems in geotechnical engineering. The project began in the summer
of 2009 as a Matlab package for conducting slip circle analysis of slopes
consisting of horizontally layered material using Bishop's method [1],
the Rigid Finite Element Method (RFEM) [2], and both binary and continuous
parameter Genetic Algorithm minimization schemes [3,4,5]. Selected results
were presented at the 3rd Canadian Young Geotechnical Engineering &
Geoscientists Conference (cYGEGC) and a conference paper has also been
accepted to the 2011 Pan-Am CGS Geotechnical Conference [6].

During the summer of 2010 a graphical front-end for the project was initially
built using C++ and the Windows API. The GUI advanced the data input
capabilities of the project since it allowed more complex layering and
ground surface configurations to be drawn. During the fall and winter of
2010-2011 the project was rebuilt in C# making use of Microsoft's .NET
Framework v4 to simplify and enrich development of the user interface.

As of May 2011 the project continues to be developed for the purpose of
conducting numerical analysis as part of the author's M.A.Sc. thesis. Recent
additions are structured mesh generation tools for 4-noded quadrilateral and
3-noded triangular elements. Also included in these pre-processors are graphical
input of kinematic boundary conditions and natural boundary conditions (tractions).
Once these tools are complete, the main line of development will be the FEA
engine for analyzing the problems defined by the user input and generated mesh.
This component will be written in Fortran 90/95 and will be added to the
repository as it becomes available. Also planned for the near future of the
project are plotting tools for viewing the FEA output.

Note that this project is being developed primarily for the author's research
purposes and is not intended for community development. However, if you are
interested in further information about the project please contact the author
(see contact info above). For detailed information on the project's development
see the revision history below.


ACKNOWLEDGEMENTS:

The author would like to acknowledge:

-Natural Sciences and Engineering Research Council of Canada (NSERC) for their
support in the form of a series of USRA grants and an Alexander Graham Bell
CGS M scholarship.
-Dr. Dieter Stolle and Dr. Peijun Guo for their continued supervision and
provision of resources for the project.
-The Department of Civil Engineering at McMaster University for provision
of funding and resources.


REFERENCES:

[1]     Fredlund, D. and Krahn, J. 1977. "Comparison of slope stability methods of analysis," Canadian Geotechnical Journal, 25: 735-748.
[2]     Stolle, D. and Guo, P. 2008. "Limit equilibrium slope stability analysis using rigid finite elements," Canadian Geotechnical Journal, 45: 653-662.
[3]     Haupt, R. and Haupt, S. 1998.  Practical Genetic Algorithms, John Wiley and Sons, Inc., Toronto.
[4]     McCombie, P. and Wilkinson, P. 2002. "The use of the simple genetic algorithm in finding the critical factor of safety in slope stability analysis," Computers and Geotechnics, 29: 699-714.
[5]     Sengupta, A. and Upadhyay, A. 2005.  "An evolutionary algorithm for locating the critical failure surface in a soil slope," The Electronic Journal of Geotechnical Engineering, 10 (F).
[6]     Karchewski, B., Stolle, D., and Guo, P. 2011. "Determination of minimum factor of safety using a genetic algorithm and limit equilibrium analysis," 2011 Pan-Am CGS Geotechnical Conference.
[7]     Marshall, A., Morgan, J., and Schonfelder, J. 1997. "Fortran 90 Course Notes," The University of Liverpool. Available: http://www.liv.ac.uk/HPC/F90Course3DayHomePage.html
[8]     Hermanns, M. 2002. "Parallel Programming in Fortran 95 using OpenMP," Universidad Politecnica de Madrid, Spain. Available: http://www.openmp.org/presentations/miguel/F95_OpenMPv1_v2.pdf
[9]     Basic Linear Algebra Subprograms (BLAS). Available: http://www.netlib.org/blas/ (see Publications/References page on project site for list of contributors)
[10]    Linear Algebra Package (LAPACK). Available: http://www.netlib.org/lapack/ (see Contributors page on project site for long list of contributors)
[11]    van Langen, H. 1991. "Numerical Analysis of Soil-Structure Interaction," Ph.D. Thesis. Delft.
[12]    PLAXIS b.v. 2003. PLAXIS Version 8 Reference Manual, Delft.
[13]    Dill, E.H. 2007. Continuum Mechanics, CRC Press, New York.
[14]    Talpaert, Y.R. 2002. Tensor Analysis and Continuum Mechanics, Kluwer Academic Publishers, Boston.
[15]    Stolle, D. 2007. Introduction to the Finite Element Method, McMaster University, Hamilton.


REVISION HISTORY:

[13 June 2013]

=== Analysis code (SlopeFEA3NodeMultiPhase.for) is tested and working properly
=== Output viewing in shell is working, although the stress field plotting is primitive
+++ Added 32-bit and 64-bit versions of the compiled LAPACK libraries
+++ Added 'SlopeFEA Install Instructions.txt' file, which provides details on how to
	download, install, and test that the code is working
+++ Added Makefile to SlopeFEA/SlopeFEA/Slope/engine directory to ease compilation
	of the analysis code


[29 May 2011]

{Project initialization}
+++ Added project to git://github.com/karcheba/SlopeFEA.git

{v1.0.0.0}
+++ Added .gitignore file to ignore bin/ and obj/ directories

{v1.0.0.1}
+++ (CanvasData.cs) Added LoadX and LoadY modes to DrawModes enum
+++ (LoadX.ico) Created
+++ (LoadY.ico) Created
+++ (LoadX.cur) Created
+++ (LoadY.cur) Created
+++ (MainWindow.xaml) Added LoadX.cur and LoadY.cur as resources
+++ (MainWindow.xaml) Added Horizontal Load and Vertical Load MenuItems
+++ (MainWindow.xaml) Added Horizontal Load and Vertical Load ToolBar buttons
+++ (MainWindow.xaml.cs) Added loadX_Click() and loadY_Click()
+++ (SlopeCanvas.cs) Added LoadX and LoadY cases to OnMouseUp() [for switching cursor on middle mouse button pan]
=== (SlopeCanvas.cs) Changed DrawMode if statement series to equivalent switch-case in OnMouseLeftButtonUp(); this required duplicating one section of code (since C# does not allow "fall-through"), but the value of DrawMode need only be checked once as opposed to 10+ times
+++ (SlopeCanvas.cs) Added List<DrawingPoint> loadPoints and its associated initialization in the constructor
+++ (SlopeCanvas.cs) Added DrawModes.LoadX and DrawModes.LoadY cases to OnMouseLeftButtonUp()
+++ (CanvasData.cs) Added LineLoad class 
+++ (CanvasData.cs) Added LoadX() and LoadY() methods to MaterialBlock class


[30 May 2011]

{v1.0.0.2}
+++ (SlopeCanvas.cs) Added List<feSubstructs> FEASubstructs property and its associated initialization
+++ (MeshGen.cs) Added side effect of setting canvas.FEASubstructs to the generated list of substructures
+++ (FEA.cs) Added Parent property to fe4NodedQuadElement and fe3NodedTriElement to make these objects aware of their parent substructure
=== (MeshGen.cs) Modified calls to fe4NodedQuadElement() and fe3NodedTriElement() to include substruct as parent
+++ (MeshGen.cs) Added elimination of elements with centroid outside substructure in MeshGenStructured3NodedTri()
+++ (MeshGen.cs) Added element renumbering post-elimination in MeshGenStructured3NodedTri()

{v1.0.0.3}
--- (All code files) Cleaned up unused usings
+++ (All code files) Added project, contact, and license information [Academic Free License v3.0] at top of file

{v1.0.0.4}
+++ (AddLoadDialog.xaml) Created
--- (LoadX.ico) Removed
--- (LoadY.ico) Removed
+++ (PointLoad.ico) Created
+++ (LineLoad.ico) Created
--- (LoadX.cur) Removed
--- (LoadY.cur) Removed
+++ (PointLoad.cur) Created
+++ (LineLoad.cur) Created
=== (CanvasData.cs) Changed LoadX and LoadY to PointLoad and LineLoad in DrawModes
=== (MainWindow.xaml) Changed loadXCursor and loadYCursor to pointLoadCursor and lineLoadCursor
=== (MainWindow.xaml) Modified menu and toolbar entries for applying loads
--- (MainWindow.xaml.cs) Removed loadX_Click() and loadY_Click()
+++ (MainWindow.xaml.cs) Added pointLoad_Click() and lineLoad_Click()
=== (SlopeCanvas.cs) Changed LoadX and LoadY cases to PointLoad and LineLoad in OnMouseUp() for reverting middle mouse pan cursor
=== (CanvasData.cs, FEA.cs, CircularSurface.cs) Made a number of utility classes public
=== (SlopeCanvas.cs) Changed LoadX and LoadY cases to PointLoad and LineLoad in OnMouseLeftButtonUp()
=== (CanvasData.cs) Changed LoadX() and LoadY() to PointLoad() and LineLoad() in MaterialBlock class
+++ (CanvasData.cs) Added PointLoad and LineLoad draw modes to OnMouseLeftButtonDown() in DrawingPoint class


[31 May 2011]

{v1.0.0.5}
--- (AddLoadDialog.xaml, AddLoadDialog.xaml.cs) Removed
+++ (AddLineLoadDialog.xaml, AddLineLoadDialog.xaml.cs) Created
+++ (AddLineLoadDialog.xaml, AddLineLoadDialog.xaml.cs) Added functionality
+++ (CanvasData.cs) Added functionality to LineLoad class

{v1.0.0.6}
=== (AddLineLoadDialog.xaml) Changed X and Y load groups to N (normal) and T (tangential)
=== (CanvasData.cs) Changed X and Y load properties to N and T in LineLoad
--- (CanvasData.cs) Removed QuarterPoint plotting locations and associated Polylines from LineLoad [will only plot one normal and one tangential arrow at centre]
=== (AddLineLoadDialog.xaml.cs) Changed X and Y load actions to N and T
+++ (CanvasData.cs) Added Update() to LineLoad and dialog calling functionality to MaterialBlock.ApplyLineLoad()
+++ (AddLineLoadDialog.xaml.cs) Added Checked and Unchecked events for N and T checkboxes
+++ (CanvasData.cs) Added plotting of normal and tangential load arrows to LineLoad.Update()
+++ (CanvasData.cs) Added LineLoad.Update() to DrawingPoint.Move(), MaterialBlock.Translate(), and MaterialBlock.Zoom()
+++ (CanvasData.cs) Added Delete() to LineConstraint and LineLoad and added calls to both in MaterialBlock.Delete(); also added ClearFixLines() to DrawingPoint and added calls during MaterialBlock.Delete()
+++ (SlopeCanvas.cs) Added LineConstraints.FixLines and LineLoads.LoadLines to BuildAxes()
=== (AddLineLoadDialog.xaml.cs) Changed load units: "kN/mm" -> "kN/m" and "lbf/in" -> "lbf/ft"
+++ (SlopeCanvas.cs) Added LineLoads to UpdateUnits()
+++ (SlopeCanvas.cs) Added clearing of selections to DrawModes.FixX, DrawModes.FixY, and DrawModes.LineLoad in OnMouseLeftButtonUp()
+++ (SlopeCanvas.cs) Added LineLoads to SaveInputFile()
+++ (CanvasData.cs) Added unsave and unverify to MaterialBlock.ApplyLineLoad()
+++ (CanvasData.cs) Added LineLoads to OpenInputFile()
+++ (CanvasData.cs) Added check for existing line constraints and line loads to MaterialBlock.AddPoint() and DrawingPoint.Delete()
+++ (CanvasData.cs) Added PointLoad class
+++ (AddPointLoadDialog.xaml, AddPointLoadDialog.xaml.cs) Created
+++ (CanvasData.cs) Added functionality to MaterialBlock.ApplyPointLoad()
+++ (CanvasData.cs) Added PointLoad.Update() to DrawingPoint.Move(), MaterialBlock.Translate(), and MaterialBlock.Zoom()
=== (CanvasData.cs) Changed DrawingPoint.Delete() so that if parent material block or boundary has 2 or fewer points, all remaining points and the block will be deleted
+++ (CanvasData.cs) Added PointLoad.Delete() to DrawingPoint.Delete()
=== (CanvasData.cs) Modified SlopeBoundary.SortPoints() and MaterialBlock.SortPoints() since actual polygon points were not being sorted correctly with PointCollection.Reverse()
=== (CanvasData.cs) Modified LineLoad.Update() and PointLoad.Update() to indicate direction of loading


[01 June 2011]

{v1.0.0.7}
+++ (FEA.cs) Added feLineLoad class
+++ (FEA.cs) Added NLoads and TLoads and appropriate initializations to fe2NodedBoundElement class
=== (FEA.cs) Modified Nodes initialization in fe3NodedTriElement() and fe4NodedQuadElement() to a single line initialization instead of initialization followed by 3-4 calls to Add()
+++ (MeshGen.cs) Began adding creation of boundary elements from line loads in MeshGenStructured4NodedQuad()
+++ (MeshGen.cs) Completed creation of boundary elements from line loads in MeshGenStructured4NodedQuad()
+++ (FEA.cs) Added point load properties to feNode
+++ (FEA.cs) Created fePointLoad class
+++ (MeshGen.cs) Added indication of point loads at vertex nodes
+++ (SlopeCanvas.cs) Added loading of point load values to LoadFEA3NodedTriMesh() and LoadFEA4NodedQuadMesh()
+++ (CanvasData.cs) Added deletion of point loads to MaterialBlock.Delete()
+++ (SlopeCanvas.cs) Added updating of point loads to UpdateUnits()
+++ (SlopeCanvas.cs) Added plotting of point loads to BuildAxes()
=== (SlopeCanvas.cs) Modified order of plotting so that loads and fixities always get plotted on top
=== (CanvasData.cs) Modified LineLoad.Update() to plot three lines instead of just one
+++ (Multiple files) Added in-built NULL material; when this material is assigned to a block, the mesh generator skips the block


[02 June 2011]

{v1.0.0.8}
=== (AddLineLoadDialog.xaml, CanvasData.cs) Changed N load to +ve inward [i.e. tending toward CCW rotation]
=== (SlopeCanvas.cs) Changed draw order so that vertex nodes are drawn on top


[03 June 2011]

{v1.0.0.9}
+++ (Fortran Testing/) Added directory for Fortran 90/95 examples [after [7] and [8]]
+++ (*.for) Added tutorials completed previously, converted to fixed-format, and compiled with gfortran
=== (AddLineLoad.xaml, CanvasData.cs) Changed +ve direction for N loading back to outward [CW rotation about node 1]
+++ (Fortran Testing/) Continued working through [7], performing exercises along the way


[04-05 June 2011]

{v1.0.0.9}
+++ (Fortran Testing/) Continued working through [7], performing exercises along the way


[06 June 2011]

{v1.0.0.9}
+++ (LAPACK/) Built and tested reference BLAS and LAPACK
+++ (Fortran Testing/) Continued working through [7], performing exercises along the way


[07 June 2011]

{v1.0.0.9}
+++ (Fortran Testing/) Continued working through [7], performing exercises along the way


[08 June 2011]

{v1.0.0.9}
--- (README) Reference [8] to University of Liverpool HPF Course
+++ (README) Reference [8] to OpenMP in Fortran 95
+++ (Fortran Testing/) Began working through [8]
+++ (Fortran Testing/) Completed the majority of [8] and reviewed applicable functions/subroutines in [9,10] for later use in analysis code


[09 June 2011]

{v1.0.0.10}
=== (FemMC3.for) [not included in project] Dissected code for the purpose of understanding the procedure and developing analysis code
+++ (FortranWrappers.cs, DLLtest.dll, DLLtest.for, DLLtest.o) Created to determine how to to call a Fortran procedure from C#, passing in the appropriate file name; it works!
        [Note: This took longer than expected due to a number of tricky aspects related to name mangling by the Fortran compiler, the differences in how C# and Fortran store strings, and the lack of case sensitivity in Fortran]
+++ (SlopeFEA.for) Created and added some lines for opening input files
+++ (feModules.for) Created, added GCONTROL module
+++ (gcontrol.for) Module file for GCONTROL [will contain procedures for input, mapping, etc.]
+++ (gcontrol.for)  Added BANDWH() subroutine for calculating number of co-diagonal bands [for packed banded storage of stiffness matrix]


[10 June 2011]

{v1.0.0.10}
--- (feModules.for) Removed GCONTROL module
+++ (feModules.for) Added MPROPERTY and TRACTIONS modules
+++ (gcontrol.for) Added MAPST() subroutine [for mapping to packed banded storage]
+++ (gcontrol.for) Added INPUT() subroutine
--- (SlopeFEA.for) Removed lines for opening input units in main program [moved to INPUT() subroutine in GCONTROL]


[12 June 2011]

{v1.0.0.10}
+++ (gcontrol.for) Continued creating INPUT() subroutine
=== (MeshGen.cs, SlopeCanvas.cs) Changed material type numbering in mesh generator output and mesh loading to one-based indexing (for Fortran compatibility)
+++ (feModules.for) Added NODES and ELEMENTS modules


[13 June 2011]

{v1.0.0.10}
+++ (gcontrol.for) Added to INPUT() subroutine
+++    (gcontrol.for) Completed INPUT() subroutine
+++ (gcontrol.for) Added CLEANUP() subroutine to deallocate and rewind in preparation for subsequent runs
+++ (Test Files/*.out) Tested INPUT(), BANDWH(), CLEANUP()
+++ (gcontrol.for) Added allocation of TLOAD, GLOAD, STR, GLOAD0, DISP, TDISP, GSTIF, ESTIF to INPUT() and deallocation to CLEANUP()
+++ (PrintPoint.ico, PrintPoint.cur) Created
+++ (MainWindow.xaml, MainWindow.xaml.cs, SlopeCanvas.cs, CanvasData.cs) Added selection of print point mode
+++ (FEA.cs) Added isPrintPoint[] to feSubstruct and IsPrintPoint to feNode
+++ (MeshGen.cs) Added detection of print point
+++ (feModules.for) Added IPRINT variable for print point
+++ (gcontrol.for) Added reading and writing of IPRINT variable
+++ (FEAParamsDialog.xaml, FEAParamsDialog.xaml.cs, SlopeCanvas.cs, CanvasData.cs, gcontrol.for) Added NSTEP, NITER, NPRINT, LFACT, GFACT
+++ (feModules.for) Added PI and degTOrad constants to NUMERIC
+++ (gfortran.for) Added pre-calculation of trig functions of material props to INPUT()


[14 June 2011]

{v1.0.0.10}
--- (Build/) Removed since the ClickOnce installer cannot accomodate packaging of the Fortran compiled FEA DLL files
+++ (SlopeFEA 2011/) Added SlopeFEA 2011.vdproj setup wizard project [creates a folder in the Program Files (x86 for 64-bit systems) containing the program EXE and the FEA DLLs, places shortcuts on the desktop and in the start menu, and places some sample input files in a folder on the desktop]
+++ (feUtility.for) Created, as the name suggests it contains utility functions for the FEA solver
+++ (feUtility.for) Added LOAD(), TRACT() fka BONDRY(), ESHAPET(), STFMAT() fka MATRX(), STIFF(), DMATRX(), BMATRX()
+++ (feModules.for) Added NVELT
+++ (gcontrol.for) Added LOCAL(), LOCALT(), MAPLD(), fGSTIF, fWORK, fiWORK, HBW
+++ (SlopeFEA3Node.for) Added calls to LOAD() and STFMAT()


[15 June 2011]

{v1.0.0.10}
=== (feUtility.for) Changed call to DPBSVX() to calls to DPBTRF() and DPBTRS() [DPBSVX() calls these two routines among many other things, DPBTRF() computes the Cholesky factorization and DPBTRS() solves a linear system based on the factorization]
+++ (solver_test.xls) Added spreadsheet containing preliminary verification of results for a simple slope [displacement only linear elastic model; results look reasonable, i.e. everything is moving in the expected direction; more thorough testing will be completed once the analysis code is finished]
+++ (*.out, *.his) Tested decomposition and trial solution of 5 test files of varying complexity
+++ (MeshGen.cs) Added removal of elements with zero area in MeshGenStructured3NodedTri() as this was causing issues in the solver
+++ (gcontrol.for) Added code to clear existing output from output files in INPUT()
+++ (SlopeFEA3Node.for) Added solver code for gravity loading
+++ (feUtility.for) Added FEASLV() and RLOAD()


[16 June 2011]

{v1.0.0.10}
+++ (feUtility.for) Continued building solver code in FEASLV()
+++ (feUtility.for) Added VOLSTR() and UPDATE()
+++ (gcontrol.for) Added GLOLOC()
+++ (feModules.for) Added EVOL, EVOL0, EVOLi, DIA to nodes and EVOLB, FBAR to elements
+++ (AddMaterialDialog.*, AssignMaterialDialog.*, SlopeCanvas.cs, MeshGen.cs) Added PSI
+++ (feUtility.for) Added MOHRC()


[17 June 2011]

{v1.0.0.10}
+++ (feUtility.for) Finished MOHRC()
+++ (gcontrol.for) Added OUTPUT()
+++ (SlopeFEA3Node.for) Added lines to call FEASLV() on traction loads, added calls to OUTPUT() and SMOOTH(), SMOOTH() calls commented out as this is yet to be written
+++ (SlopeFEA3Node.dll, SlopeFEA3Node.exe) Compiled for testing, compilation successful, at runtime throws a memory access violation, this occurred once before when testing at INPUT()/BANDWH() stage and turned out to be a minor error, will fix over weekend or on Monday since convocation is this afternoon :)


[19 June 2011]

{v1.0.0.10}
=== (gcontrol.for) Moved check for sensible value to after reading of NVELT in INPUT() [otherwise, GFACT always gets set to 1.0 since NVELT=0, always .LT. 1 before this point]
+++ (gcontrol.for) Added allocation and initialization of DIA [this solves the memory access violation issue, since VOLSTR() was trying to use DIA before it was allocated]
+++ (SlopeFEA3Node.for, feUtility.for) Added an error return code, rerr, to STFMAT(), FEASLV(), UPDATE(), MOHRC(), and SlopeFEA3Node() to avoid using STOP [since this also kills the calling program]


[20 June 2011]

{v1.0.0.10}
=== (TestFiles/, engine/) Testing and making adjustments to how errors are handled and how output is formatted


[21 June 2011]

{v1.0.0.10}
=== Reading [11], PLAXIS code, and [12] for more background on handling interface elements, structural elements, multi-stage analysis, and initial conditions


[22-27 June 2011]

{v1.0.0.10}
=== Reading/reviewing relevant sections of [13], [14], [15] for background on elasticity theory, vector/tensor algebra, interpolation, and generalized coordinates


[27 June 2011]

{v1.0.0.10}
+++ (SlopeFEA3Node.for) Copied NUMERIC, MPROPERTY, NODES, ELEMENTS, TRACTIONS, GCONTROL, and FEUTILITY modules into SlopeFEA3Node.for so that the program is self-contained and it can be easily Saved As.. and modified to create closely related programs
--- (feModules.for, gcontrol.for, feUtility.for) Deleted
+++ (SlopeFEA4Node.for) Copied code from SlopeFEA3Node.for for modification
=== (SlopeFEA4Node.for) Modified BMATRX() and calls to it
+++ (SlopeFEA4Node.for) Added JACOBQ() for computing Jacobian matrix of transformation


[28 June 2011]

{v1.0.0.11}
+++ (dialogs/PlotResultsWindow.xaml, dialogs/PlotResultsWindow.xaml.cs, main/SlopePlotCanvas.cs) Created for viewing and plotting results; this window/dialog essentially behaves as a reduced version of the main program with some specialized plotting tools
+++ (SlopePlotCanvas.cs) Added plotting of deformed mesh


[29 June 2011]

{v1.0.0.11}
=== (SlopeFEA3Node.for) Changed ICO to ICOT in LOCALT(); this was causing the traction load vector to be formed incorrectly since connectivity was being set against the wrong list
+++ (PlotResultsWindow.xaml, PlotResultsWindow.xaml.cs, SlopePlotCanvas.cs) Added dialog and associated properties for setting of Magnification
+++ (SlopePlotCanvas.cs) Added optional autoMag parameter to PlotDeformedMesh() and PlotDisplacementVectors()
+++ (CanvasData.cs) Added DisplacementVector class
+++ (SlopePlotCanvas.cs) Created PlotDisplacementVectors() method


[30 June 2011]

{v1.0.0.11}
+++ (CanvasData.cs) Changed size of arrow head in DisplacementVector.Update() to Max(5, 0.5*scaleFactor) so that the arrow head size will approach zero as the magnitude of the displacement does
=== Planning a tool for specifying load phases/cases; it is likely that this will require modifications/additions to how the base program, mesh generator, and analysis programs handle data so it is important to have a solid plan before coding the tool
        Plan (in no particular order):  - Replace "Assign Materials" dialog with an actual window that resembles a reduced version of the input program (similar to plotting window, but different toolset)
                                                - Must contain: i)      Ability to define a new load phase (assignment of material type, specification of load factor for each point/line load, specification of defined fixities, indication of which load phase initial stress field should be taken from, whether to set displacements to zero, perhaps specification of analysis parameters such as NSTEP, NITER, etc.)
                                                                ii)     Ability to return to and modify all parameters of previously defined load phases
                                                                iii)    Will not be allowed to add or remove any of the components; all loads, material blocks, material types, etc. must be defined in the input program; only will have ability to turn items "on" or "off" (perhaps on a factored scale with the loads)
                                                                iv)     Will have only one draw mode: DrawModes.Select; therefore, all components must be able to receive a click to modify their state
                                                                v)      Will have the familiar zoom/pan tools, but no grid, specified scale, or axis options
                                        - For mesh generator:   i)      Add data structure to feSubstruct, fe3NodedTriElement, and fe4NodedTriElement to store a list of MaterialTypes indicating the type of material during each phase
                                                                ii)     Add data structure to feLineLoad, fePointLoad, and fe2NodedBoundElement to indicate the load factor during each phase
                                                                iii)    Add data structure to feNode indicating whether the dofs are free/fixed during each phase
                                                                iv)     Generate mesh for all material blocks (including "NULL" blocks since they may contain material during some phases)
                                                                iv)     In "nod" file, indicate number of phases, NPHASE, on top line, fixities during each phase following connectivity, and load factors during each phase following point loads
                                                                v)      In "ele" file print list of material types during each phase following connectivity ("0" indicates the block has NULL material, or is "turned off" during that phase)
                                                                vi)     In "bel" file print list of load factors during each phase following connectivity and load values
                                                                vii)    Create "phs" file to store information about each phase such as: which phase to load stresses from, whether to reset displacements
                                        - For analysis code:    i)      Add reading and associated allocation of the above information to INPUT()
                                                                i)      Remove "gravity loading" step in main program
                                                                ii)     Place "traction loading" step inside a loop over NPHASE
                                                                iii)    Move construction of stiffness matrix and load vector inside the NPHASE loop since GSTIF and TLOAD will need to be rebuilt for each PHASE
                                                                iv)     Add output of diplacements and stresses for each phase to a .PXX file (where XX = phase number) so that they can be re-read from arbitrary future phases at the beginning of the NPHASE loop
                                        - For plotting tool:    i)      Add ability to select the phase from which to plot output
        This task will likely take about 1-2 weeks to be sure everything is working correctly, but when complete will make the code significantly more powerful and capable of handling much more realistic cases
+++ (CanvasData.cs) Added MouseLeftButtonUp() methods to PointLoad and LineLoad classes to allow modification by direct clicks on the arrows


[4 July 2011]

{v1.0.0.12}
+++ (DefineAnalysisWindow.xaml, DefineAnalysisWindow.xaml.cs, SlopeDefineCanvas.cs) Created for analysis phase definition
+++ (MainWindow.xaml.cs) Added calls to DefineAnalysisWindow() to addMaterials_Click()
+++ (CanvasData.cs) Added constructors to DrawingPoint, MaterialBlock, LineConstraint, LineLoad, and PointLoad for SlopeDefineCanvas


[5-7 July 2011]

{v1.0.0.12}
=== Working on analysis phase definition tool; status check-in:
    Additions:  - "Define Analysis Phases" dialog
                    - Contains:     - Drawing region for viewing and modifying substructs, contraints, and tractions
                                    - Zoom/pan tools
                                    - All items receive click and there are no overlapping components (i.e. two points at same location are merged into a single point referenced by multiple blocks)
                                    - Plotting axes
                                    - Phase data input region containg input items for analysis info and material selector
                                    - Activate/deactivate specified kinematic constraints for lines and points
                                    - Apply material types to blocks
                                    - Active/deactivate and apply load factors to specified tractions and point loads
                                    - Define new analysis phase (save material types, begin from phase, reset displacements, nstep, niter, nprint, gfact)
                                            - This information is also saved in and loaded from the .slp file
    
    Requires:   - "Define Analysis Phases" dialog
                    - Requires:     - Additional items in define new analysis phase (recording/saving of factors for point/line loads and point/line fixities)
                                    - Modify previous analysis phase
                                    - Delete previous analysis phase
                - SlopeFEA Main Program:
                    - Requires:     - Updates to MaterialBlock, PointLoad, LineLoad, LineConstraint, DrawingPoint constructors to add "dummy" items to analysis phase lists if phases are already present
                                    - Updates to merge point operation in order to merge analysis phase data
                - Updates to mesh generator (all listed above)
                - Updates to analysis code (all listed above)


[8-10 July 2011]

{v1.0.0.13}
=== Working on analysis phase definition tool; status check-in:
    Additions:  - "Define Analysis Phases" dialog
                    - Recording/saving of point/line load activation/factors to new analysis phase defition
                    - Recording/saving of point/line fixity activation to new analysis phase definition
                    - Modification of previously defined analysis phase
                    - Deletion of analysis phase (also recursively deletes phases that use the currently selected phase as a start point)
                SlopeFEA Main Program
                    - Accounting for existing analysis phases in MaterialBlock, PointLoad, LineLoad, LineConstraint, and DrawingPoint constructors
                    - Accounting for existing analysis phases in MaterialBlock.ApplyFixity(), MaterialBlock.ApplyPointLoad(), MaterialBlock.ApplyLineLoad()
                    - Accounting for existing analysis phases in DrawingPoint.Merge()
    
    Requires:   - Updates to mesh generator (all listed above)
                - Updates to analysis code (all listed above)
                

[14-15 July 2011]

{v1.0.0.14}
=== Working on mesh generation modification to account for analysis phases; status check-in:
    Additions:  - Mesh generator
                    (FEA.cs)
                    - Added lists for point loads and fixities during each phase to feNode
                    - Modified feNode.Merge() to account for multiple phases
                    - Added lists for line fixities during each phases to feLineConstraint
                    - Added lists for point loads during each phase to fePointLoad
                    - Added lists for line loads during each phase to feLineLoad
                    - Added lists for material types during each phase to feSubstruct, fe3NodedTriElement, and fe4NodedQuadElement
                    
                    (MeshGen.cs)
                    - Modified generation of feSubstructs from MaterialBlocks to account for multiple analysis phases
                    - Modified calls to class constructors from FEA.cs to account for new additions described above
                    - Added printing of analysis phases data to a .phs file in MeshGenStructured4NodedQuad()
                    - Added NPHASE parameter output to .nod file and removed GFACT and LFACT since this information is captured in the analysis phase data (at global and element/node levels)
                
                - "Define Analysis Phases" dialog
                    - Added OnClosing() override to set main program MaterialBlock.Material values to same as first phase (if present) and to NULL otherwise
                
                - Main Program
                    - Hid options for stability analysis since the code for these aspects may require updating given the modifications toward FEA analysis
    
    Requires:   - Updates to analysis code (all listed above)
    

[16 July - 4 August 2011]

{v1.0.0.15}
=== Working on analysis code (SlopeFEA3NodeMultiPhase.for) modifications to account for analysis phases
    Additions:  - Mesh generator
                    (MeshGen.cs)
                    - Added a loop to search for nodes attached only to elements with NULL material for each phase; fixities set to TRUE in this case so that a dof is not assigned in the analysis code
                
                - SlopeFEA3NodeMultiPhase.for
                    - Changed structures that will contain information in input files to POINTER arrays as opposed to ALLOCATABLE arrays as appropriate
                    - Added POINTER array structures that will point to appropriate analysis phase data (ending in C = current, ending in P = previous)
                    - Modified INPUT() so that it only allocates structures that will be fixed throughout the program; also INPUT() no longer writes anything
                    - Modified BANDWH() to calculate NNET, LBAND, and HBW for all phases
                    - Added ALLOCPHS() and DEALLOCPHS() to manage data and files that will change depending on the analysis phase including allocations and loading of previous phase state
                    - Added INITOP() to initialize writing to output files; this handles writing formerly performed by INPUT() as well as some additional features related to inter-phase data exchange
                    - Modified LOAD(), STFMAT(), FEASLV(), UPDATE(), VOLSTR(), and some others with appropriate variable names (note: the logic is essentially the same as before for these since the pre-processing in INPUT(), ALLOCPHS(), and INITOP() as well as post-processing in OUTPUT() takes care of the majority of the bookkeeping details; however, there were some variable name changes that needed to be updated)
                    - Modified OUTPUT() and SMOOTH() to account for multi-phase information; some of the output data has been moved to different files
                    - The program now produces output for each phase in the following files (*** = 3 digit analysis phase number code left-padded with 0s):
                        .OP*** - "output" file; contains general input information, stiffness matrix statistics, node displacements, and element stresses
                        .HS*** - "history" file; contains load stepping / iteration history
                        .LD*** - "load" file; stores load vector for inter-phase data exchange
                        .ST*** - "stress" file; stores stress vector and element stresses for inter-phase data exchange
                        .UV*** - "displacement" file; stores displacement/solution vector for inter-phase data exchange
                        .EL*** - "element" file; stores element output formerly placed at the end of the .ele input file
                        .ND*** - "node" file; stores node output formerly placed at the end of the .nod input file
    
    Requires:   - After some preliminary testing the code runs and provides a solution to phase 1; there appears to be an issue with loading up previous phase data causing NaNs in the results for subsequent phases
                - More testing and debugging is required, but the majority of this component is complete
                - Updates to plotting functions / window

About

See README file for more information including contact information, project description, references, and revision history.


Languages

Language:C# 79.1%Language:Fortran 17.1%Language:C++ 3.7%Language:C 0.1%Language:Objective-C 0.0%