studyplan.org 12 KB

The present document is a proposal to undertake an independent study to fulfil the processing core course of the Ph.D. in Materials Science at Boise State University (BSU). It shows the need that exists for it, the learning outcomes and a brief plan with milestones.

Need

For my research, I am doing the computational modelling of meniscus. The goal is to develop models which describe its mechanical behaviour as a macroscopic material. To do this, I need to use MOOSE, a C++ finite element framework (i.e. libraries) developed by the Idaho National Laboratories (INL). This program requires extensive knowledge of finite element methods (FEM) and programming. Being a development platform, there is currently not an implementation of the models that are required for my research.

I have spent a lot of time trying to learn how to use this program successfully, and I have created documentation of how it works. I took Dr. Fitzpatrick's course on FEM, and I am experienced with programming C and other languages. However, the combination of using the particular features of C++, MOOSE and non-linear FEM has proven to be a challenge which requires extensive effort.

There is not an advanced FEM course nor faculty with expertise on MOOSE in BSU.

Outcomes noexport

Didactic

From a didactic perspective, I will learn how to use the particular features of C++ as they apply to MOOSE, advanced FEM for non-linear elasticity, and the creation of a software library for material analysis and its documentation. Learning how to create such a digital stock should suffice to meet a processing course.

Deliverables

A library with a set of hyperelastic materials (heron: \underline{h}yp\underline{er}elastic \underline{o}rie\underline{n}ted library) with continuum damage mechanics (CDM) will be implemented in MOOSE and distributed online with a Git repository (version control system) under a GPL (free license). This will be accompanied by documentation and ready-to-use examples for users. A printable version of the documentation with the theoretical background of FEM as it pertains to the library will serve as a final report. A couple of presentations with the developers will be prepared to demonstrate the acquired knowledge and get feedback.

Study plan taskjuggler_project

The development of this project is split into three phases. Each of them will have a deliverable milestone.

Auxiliary

Create repository

:LOGBOOK: CLOCK: [2019-01-14 lun 08:34]--[2019-01-14 lun 08:39] => 0:05 CLOCK: [2019-01-14 lun 08:18]--[2019-01-14 lun 08:34] => 0:16 :END:

Linear FEM with C++

:LOGBOOK: CLOCK: [2019-01-14 lun 08:40]--[2019-01-14 lun 10:23] => 1:43 :END:

Objective

Learn C++ and being able to apply it to FEM. I will take the code that I prepared for the FEM course (Python) and translate it to C++.

Learning outcome

  • [ ] classes v.s. structure
  • storage
  • [X] overloading,
  • [ ] templates,
  • [X] scope, namespace
  • [X] constructor and destructor
  • [ ] aliases and enumerated types, unions
  • [ ] inheritance and friendship,
  • [X] polymorphism

Milestone

Non-linear FEM in C++

  • C++ code to do 3D FE linear analysis.
  • The results will be compared to known values from academic exercises.

Objective

Learn the theory behind non-linear (hyperelastic) materials and being able to implement it in C++. This should serve as preparation before dealing with MOOSE.

Learning outcome

  • Material nonlinearities (nonlinear elasticity and elasto-plasticity)
  • Variational description for finite deformation
  • Linearisation
  • Lagrange method
  • Incremental formulations
  • Computation of stress increments: Return map algorithm

Milestone

  • 3D FE anlysis with neo-hookean formulation in C++
  • The results will be compared to a simulation in FEBio.

MOOSE

Objective

Understand the implementation of finite elements in MOOSE and implement new materials

Learning outcome

  • How to build effectively accross Linux platforms from source (without binary packages).
  • Understanding the methods, constructors and general environment to compile own applications.
  • Digest the steps that MOOSE takes to follow the FEM of tensor mechanics.

Milestones

  • Multi-element simulation of these types of materials in MOOSE:
  • neo-hookean (neoH)
  • transversely isotropic (transiso) material
  • transiso with continuum damage mechanics
  • The results will be compared to simulations in FEBio.

Presentation

A final presentation will be arranged with the MOOSE developers to deliver the final report at the end of the semester (see attached schedule on page pageref:fig-schedule).

Objective

To get feedback on the development and finalise the project.

Learning outcome

Technical communication

Milestone

  • Report and presentation

Schedule

According to BSU policies

"for a fifteen week semester, one Clock Hour of classroom or direct faculty instruction and two hours of out-of-class student work each week would be granted one credit."1

This means that 9 hours per week should be devoted for a 3-credit course (135 hours in total). The attached schedule (on page pageref:fig-schedule) shows an overview of the activities.

reports/independentstudy.pdf

Resources and support

Literature

    C++ and FEM are not new. There is a plethora of material online and in the library. These are only some of them:
  • http://courses.cms.caltech.edu/cs11/material/advcpp/
  • https://web.mit.edu/6.s096/www/
  • Weiss, J. A., Maker, B. N., & Govindjee, S. (1996). Finite element implementation of incompressible, transversely isotropic hyperelasticity. , 135(1-2),
  • 107–128. http://dx.doi.org/10.1016/0045-7825(96)01035-3
  • Belytschko, T., Liu, W. K., Moran, B., & Elkhodary, K. (2014). Nonlinear finite elements for continua and structures. : John Wiley and Sons, Ltd.
  • Zienkiewicz, O., & Taylor, R. (2005). The finite element
  • method for solid and structural mechanics. : Elsevier Butterworth-Heinemann.

Advising

  • Bi-weekly long-distance meetings with Dr. Daniel Schwen, who is the main developer of the tensor mechanics module of MOOSE (interested in implementing hyperelastic materials).
  • Regular meetings with Dr. Lujan
  • Online MOOSE forum for questions

Signature

I have read and agree with this proposal

\vspace{2cm}

\rule{0.3\textwidth}{1pt}

Dr. Trevor Lujan, Supervisor

Final remarks noexport

I don't foresee significant caveats with learning C++ by myself, and I am glad that I will finally have the time and support to address hyperelasticity in finite element analysis within MOOSE. I will need the support from people who are well versed in implementing non-linear FEA and are willing to answer questions.

Team and equipment taskjuggler_resource noexport

People

Edgar Rios

Configuration noexport ARCHIVE

Document options

    C-c / t C-c a
  • No table of contents
  • #+OPTIONS: toc:nil
  • No tags
  • #+OPTIONS: todo:nil tags:nil

How to use this document

  • Defining the columns to show in org-columns
  • #+COLUMNS: %5TODO %3PRIORITY %30ITEM %10SCHEDULED %START(Start) %10DEADLINE %5EFFORT(Estim){:} %5CLOCKSUM %5ID(ID) %10BLOCKER(After) %3ORDERED(Ord) # %5COMPLETE(Prgss) %ALLOCATE(Owner) #+PROPERTY: ALLOCATE_ALL edgar drlujan maddie derek justin oit #+PROPERTY: ORDERED_ALL t nil

If exporting to PDF, add a :noexport: to the headline which reads taskjuggler_resource.

Generating Gantt charts

Set the following Emacs variables in any way that you want and do C-c C-e J p, C-c C-e J o or run src_emacs-lisp[:eval no-export]{(org-taskjuggler-export-and-process)}. Then, open in your Abrowser, set to print a file with background colors, and import the resulting PDF here.


  ;; ********** TaskJuggler (planning) *****
  ;; Requires org-mode > 0.8
  (use-package ox-taskjuggler
    :config
    (add-to-list 'org-export-backends 'taskjuggler)
    ;; Change default version of taskjuggler
    (setq org-taskjuggler-target-version 3.6)
    ;; Define macros which load before the project definition.
    ;; This is useful to use the same keyword (e.g. extend)
    ;; more than once when defining the properties of a project
    ;; in org-mode
    (setq org-taskjuggler-default-global-header
          (concat
           "# A macro is replaced by its contents when it is called. To call\n"
           "# it, use ${  }, for instance ${allocate_students}\n"
           "macro extend_resource [\n"
           "    extend resource {\n"
           "        text Phone \"Phone\"\n"
           "        }\n"
           "]\n"
           "macro extend_task [\n"
           "    extend task {\n"
           "        text Place \"Place\"\n"
           "        }\n"
           "]\n"))
    ;; This is written after the definition of the project in the tjp file
    (setq org-taskjuggler-default-global-properties
          (concat
           "# Hours in which I am not in class (lab hours)\n"
           "shift labTime \"Lab time\" {
           workinghours mon 9:00 - 11:00
           workinghours wed 9:00 - 11:00
           workinghours tue 9:00 - 11:00
           workinghours thu 9:00 - 11:00
           workinghours fri 9:00 - 10:00
           }\n"
           ))
    ;; Add the custom macros which were defined above to the
    ;; valid keywords
    (add-to-list 'org-taskjuggler-valid-project-attributes
                 '${extend_task} '${extend_resource})
    (add-to-list 'org-taskjuggler-valid-resource-attributes
                 'Phone)
    (add-to-list 'org-taskjuggler-valid-task-attributes
                 'Place)

    ;; Modify the default report
    (setq org-taskjuggler-default-reports
          '("textreport report \"independentstudy\" {
    formats html
    header '== %title =='

    center -8<-
      [#Plan Plan] | [#Resource_Allocation Resource Allocation]
      ----
      === Plan ===
      <[report id=\"plan\"]>
      ----
      === Resource Allocation ===
      <[report id=\"resourceGraph\"]>
    ->8-
  }

  # A traditional Gantt chart with a project overview.
  taskreport plan \"\" {
    headline \"Project Plan\"
    columns bsi, name, start, end, effort, chart
    loadunit hours
    hideresource 1
  }

  # A graph showing resource allocation. It identifies whether each
  # resource is under- or over-allocated for.
  resourcereport resourceGraph \"\" {
    headline \"Resource Allocation Graph\"
    columns no, name, effort, weekly
    loadunit hours
    hidetask ~(isleaf() & isleaf_())
    sorttasks plan.start.up
  }"
            )))

  (use-package taskjuggler-mode
    ;; http://jurjenbokma.com/ApprenticesNotes/editing_taskjuggler_with_emacs.xhtml
    ;; https://www.skamphausen.de/cgi-bin/ska/taskjuggler-mode
    :load-path "~/.emacs.d/plugins/")

  1. DEFINITION NOT FOUND