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.
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.
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.
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.
The development of this project is split into three phases. Each of them will have a deliverable milestone.
: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:
:LOGBOOK: CLOCK: [2019-01-14 lun 08:40]--[2019-01-14 lun 10:23] => 1:43 :END:
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++.
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.
Understand the implementation of finite elements in MOOSE and implement new materials
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).
To get feedback on the development and finalise the project.
Technical communication
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.
I have read and agree with this proposal
\vspace{2cm}
\rule{0.3\textwidth}{1pt}
Dr. Trevor Lujan, Supervisor
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.
If exporting to PDF, add a :noexport:
to the headline which reads taskjuggler_resource
.
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/")