diff --git a/eigen1d/.clang-format b/eigen1d/.clang-format new file mode 100644 index 000000000..165b53b5d --- /dev/null +++ b/eigen1d/.clang-format @@ -0,0 +1,31 @@ +BasedOnStyle: LLVM + +TabWidth: 2 +ColumnLimit: 100 +UseTab: Never + +CommentPragmas: '^/' +ReflowComments: true +AlignTrailingComments: true +SpacesBeforeTrailingComments: 1 + +SpaceBeforeParens: ControlStatements +SpacesInSquareBrackets: false +BreakBeforeBraces: Allman +PointerAlignment: Middle + +BinPackParameters: false +BinPackArguments: false +ConstructorInitializerAllOnOneLineOrOnePerLine: true +AllowShortBlocksOnASingleLine: false +AllowShortFunctionsOnASingleLine: true +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false + +SortIncludes: false +IndentCaseLabels: true +ConstructorInitializerIndentWidth: 2 +AlwaysBreakAfterDefinitionReturnType: TopLevel +AlwaysBreakTemplateDeclarations: true + +FixNamespaceComments: false diff --git a/eigen1d/.gitignore b/eigen1d/.gitignore new file mode 100644 index 000000000..53eb5b092 --- /dev/null +++ b/eigen1d/.gitignore @@ -0,0 +1,327 @@ +.libs +*.la +*.lo +*.d +*.o +*.a +*-opt +*-optimized +*-dbg +*-debug +*-oprof +*-oprofile +*-pro +*-prof +*-profiling +*-devel +*.e +*.nav +*.log +*.aux +*.toc +*.snm +*.csv +*.csv.* +*.dylib +*.so +*.so.* +*.vrb +*.jou +*.pyc +*.mod +*.e.* +*.e-s* +*.cfg +*.lbd.* +*.nem +*.spd +*.pex +*.pdf +*.plist* +*.bbl +*.blg +*.spl +*.idx +traceout*.txt +temp_print_trace.* +*.xda +*.xda.* +*.xdr +*.xdr.* +*.mps +*.msmp +*.msmp-* +*.muds +# Latex garbage +*.lot +*.lof +*.poly +*.mpx +*.btr +*.tex-e +*.xml +*.xml.* +*.gmv +*.plt +*.slh +*.eps +*.dat +*.gp +*.plugin +*.outp +*.patch +*.txt +*.bib.bak +*.out +*.vtk +*.vtu +*.pvtu +*.zip +*.pt +*.net +.depend +*.png +*.svg +*.gif +*.tif +*.jpg +*.tiff +*.ps +*.bmp +*.mp4 +*.webm +*.ico +*.html +*.xyz +*Revision.h +*.json +*.json.* +*.bak +*.data +*.processor.* +.clang_complete +.failed_tests +failed-unittest +compile_commands.json +build +framework/contrib/libtorch + +# Allow certain files in gold directories +!**/gold/*.e +!**/gold/*.e-s* +!**/gold/*.csv +!**/gold/*.csv.* +!**/gold/*.vtk +!**/gold/*.vtu +!**/gold/*.pvtu +!**/gold/*.xml* +!**/gold/*.json* + +peacock_run_tmp.i +yaml_dump* +test/tests/outputs/format/dump.i + +# Generated header file +MooseRevision.h + +# Precompiled headers +moose/include/base/Precompiled.h.gch + +# test garbagge +*.FAILED.txt + +# eclipse garbage +.project +.cproject +.metadata +.settings +.pydevproject + +# vim garbage +*~ +.*.swp +.*.swo + +framework/contrib/exodiff/exodiff + +# Mac garbage +.DS_Store +*.dSYM + +# Unit testing stuffbmoose_unit/test_results.xml +!unit/data/csv/*.csv + +# gcov code coverage files +*.gcno +*.gcda +*.gcov + +# paraview state files +*.pvsm + +#Peacock generated files +peacock_*.i +peacock_*.e + +# On linux, shared libs end in .0 sometimes +libpcre-opt* +libpcre-dbg* +libmoose-opt* +libmoose-dbg* + +#doxygen generated +*/doc/doxygen/html/* +*/doc/doxygen/**/* +moose/doc/doxygen/html/* +modules/*/doc/doxygen/html/* +tutorials/*/*/doc/doxygen/html/* +ICE/ +framework/contrib/asio/ + +# Restartable Data +*.rd +*.rd-* + +# Checkpoint Files +*.cpa +*.cpr +*.cpa-* +*.cpr-* + +# Ignore petsc arch +petsc/arch-*/* + +# phase_field/tests/solution_rasterizer +out.xyz + +# JIT and automatic differentiation cache files +.jitcache/ +.jitdir/ +tmp_jit_* + +# Do not store ipython notebook checkpoints +*-checkpoint.ipynb* + +# HIT +framework/contrib/hit/hit + +# MooseDocs +site +python/MooseDocs/test/output +!**/doc/content/**/*.md +!**/doc/content/**/*.jpg +!**/doc/content/**/*.jpeg +!**/doc/content/**/*.gif +!**/doc/content/**/*.png +!**/doc/content/**/*.svg +!**/doc/content/**/*.ogg +!**/doc/content/**/*.webm +!**/doc/content/**/*.mp4 +!**/doc/content/**/*.css +!**/doc/content/**/*.js +!**/doc/content/**/*.bib +!**/doc/content/**/*.woff +!**/doc/content/**/*.woff2 +!python/MooseDocs/test/gold/**/*.json +!python/MooseDocs/test/gold/**/*.html +!python/MooseDocs/test/gold/**/*.tex +.ruby-version + +# Chigger +!python/chigger/tests/**/gold/*.png +!python/chigger/tests/input/*.e* +!python/chigger/logos/*.png +!python/chigger/contrib/*.xml + +# Peacock +python/peacock/tests/exodus_tab/TestOutputPlugin_repr.py +python/peacock/tests/exodus_tab/TestExodusPluginManager_repr.py +python/peacock/tests/input_tab/InputFileEditor/fsp_test.i +python/peacock/tests/postprocessor_tab/TestPostprocessorPluginManager_test_script.py +!python/peacock/tests/**/gold/*.png +!python/peacock/icons/**/*.* +!python/peacock/tests/**/input/*.* +peacock_tmp_diff.exo +*.e.diff + +# configure +_configs.sed +autom4te.cache +config.status +*MooseConfig.h +*MooseConfig.h.tmp +conf_vars.mk + +# GPerf performance +*.prof +*.heap + +# MetaData files in Reactor Module tests +modules/reactor/test/tests/functions/multi_control_drum_function/positions_meta.data +modules/reactor/test/tests/meshgenerators/patterned_hex_mesh_generator/positions_meta.data + +# Ignore share directory +share/ + +# Ignore vscode local parameters +.vscode/* + +# App Resource file (including modules/) +/test/moose_test.yaml +/modules/functional_expansion_tools/functional_expansion_tools.yaml +/modules/solid_properties/solid_properties.yaml +/modules/electromagnetics/electromagnetics.yaml +/modules/contact/contact.yaml +/modules/external_petsc_solver/external_petsc_solver.yaml +/modules/xfem/xfem.yaml +/modules/stochastic_tools/stochastic_tools.yaml +/modules/scalar_transport/scalar_transport.yaml +/modules/navier_stokes/navier_stokes.yaml +/modules/chemical_reactions/chemical_reactions.yaml +/modules/optimization/optimization.yaml +/modules/peridynamics/peridynamics.yaml +/modules/ray_tracing/ray_tracing.yaml +/modules/phase_field/phase_field.yaml +/modules/heat_transfer/heat_transfer.yaml +/modules/tensor_mechanics/tensor_mechanics.yaml +/modules/richards/richards.yaml +/modules/level_set/level_set.yaml +/modules/combined/combined.yaml +/modules/fluid_properties/fluid_properties.yaml +/modules/porous_flow/porous_flow.yaml +/modules/geochemistry/geochemistry.yaml +/modules/thermal_hydraulics/thermal_hydraulics.yaml +/modules/reactor/reactor.yaml +/modules/rdg/rdg.yaml +/modules/fsi/fsi.yaml +/unit/moose-unit.yaml +/modules/functional_expansion_tools/unit/functional_expansion_tools-unit.yaml +/modules/solid_properties/unit/solid_properties-unit.yaml +/modules/electromagnetics/unit/electromagnetics-unit.yaml +/modules/contact/unit/contact-unit.yaml +/modules/external_petsc_solver/unit/external_petsc_solver-unit.yaml +/modules/xfem/unit/xfem-unit.yaml +/modules/stochastic_tools/unit/stochastic_tools-unit.yaml +/modules/scalar_transport/unit/scalar_transport-unit.yaml +/modules/navier_stokes/unit/navier_stokes-unit.yaml +/modules/chemical_reactions/unit/chemical_reactions-unit.yaml +/modules/optimization/unit/optimization-unit.yaml +/modules/peridynamics/unit/peridynamics-unit.yaml +/modules/ray_tracing/unit/ray_tracing-unit.yaml +/modules/phase_field/unit/phase_field-unit.yaml +/modules/heat_transfer/unit/heat_transfer-unit.yaml +/modules/tensor_mechanics/unit/tensor_mechanics-unit.yaml +/modules/richards/unit/richards-unit.yaml +/modules/level_set/unit/level_set-unit.yaml +/modules/combined/combined-unit.yaml +/modules/fluid_properties/unit/fluid_properties-unit.yaml +/modules/porous_flow/unit/porous_flow-unit.yaml +/modules/geochemistry/unit/geochemistry-unit.yaml +/modules/thermal_hydraulics/unit/thermal_hydraulics-unit.yaml +/modules/reactor/unit/reactor-unit.yaml +/modules/rdg/unit/rdg-unit.yaml +/modules/fsi/unit/fsi-unit.yaml +/modules/misc/misc.yaml +/tutorials/tutorial01_app_development/*/babbler.yaml +/tutorials/darcy_thermo_mech/*/darcy_thermo_mech.yaml +eigen1d.yaml diff --git a/eigen1d/LICENSE b/eigen1d/LICENSE new file mode 100644 index 000000000..4362b4915 --- /dev/null +++ b/eigen1d/LICENSE @@ -0,0 +1,502 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/eigen1d/Makefile b/eigen1d/Makefile new file mode 100644 index 000000000..bb74a2a46 --- /dev/null +++ b/eigen1d/Makefile @@ -0,0 +1,65 @@ +############################################################################### +################### MOOSE Application Standard Makefile ####################### +############################################################################### +# +# Optional Environment variables +# MOOSE_DIR - Root directory of the MOOSE project +# +############################################################################### +# Use the MOOSE submodule if it exists and MOOSE_DIR is not set +MOOSE_SUBMODULE := $(CURDIR)/moose +ifneq ($(wildcard $(MOOSE_SUBMODULE)/framework/Makefile),) + MOOSE_DIR ?= $(MOOSE_SUBMODULE) +else + MOOSE_DIR ?= $(shell dirname `pwd`)/moose +endif + +# framework +FRAMEWORK_DIR := $(MOOSE_DIR)/framework +include $(FRAMEWORK_DIR)/build.mk +include $(FRAMEWORK_DIR)/moose.mk + +################################## MODULES #################################### +# To use certain physics included with MOOSE, set variables below to +# yes as needed. Or set ALL_MODULES to yes to turn on everything (overrides +# other set variables). + +ALL_MODULES := no + +CHEMICAL_REACTIONS := no +CONTACT := no +ELECTROMAGNETICS := no +EXTERNAL_PETSC_SOLVER := no +FLUID_PROPERTIES := no +FSI := no +FUNCTIONAL_EXPANSION_TOOLS := no +GEOCHEMISTRY := no +HEAT_TRANSFER := no +LEVEL_SET := no +MISC := no +NAVIER_STOKES := no +OPTIMIZATION := no +PERIDYNAMICS := no +PHASE_FIELD := no +POROUS_FLOW := no +RAY_TRACING := no +REACTOR := no +RDG := no +RICHARDS := no +STOCHASTIC_TOOLS := no +THERMAL_HYDRAULICS := no +TENSOR_MECHANICS := yes +XFEM := no + +include $(MOOSE_DIR)/modules/modules.mk +############################################################################### + +# dep apps +APPLICATION_DIR := $(CURDIR) +APPLICATION_NAME := eigen1d +BUILD_EXEC := yes +GEN_REVISION := no +include $(FRAMEWORK_DIR)/app.mk + +############################################################################### +# Additional special case targets should be added here diff --git a/eigen1d/README.md b/eigen1d/README.md new file mode 100644 index 000000000..f65438b1b --- /dev/null +++ b/eigen1d/README.md @@ -0,0 +1,6 @@ +eigen1d +===== + +Fork "eigen1d" to create a new MOOSE-based application. + +For more information see: [https://mooseframework.org/getting_started/new_users.html#create-an-app](https://mooseframework.org/getting_started/new_users.html#create-an-app) diff --git a/eigen1d/doc/config.yml b/eigen1d/doc/config.yml new file mode 100644 index 000000000..42a20cf08 --- /dev/null +++ b/eigen1d/doc/config.yml @@ -0,0 +1,20 @@ +Content: + eigen1d: + root_dir: ${ROOT_DIR}/doc/content + moose: + root_dir: ${MOOSE_DIR}/framework/doc/content + content: + - js/* + - css/* + - contrib/** + - media/** +Renderer: + type: MooseDocs.base.MaterializeRenderer +Extensions: + MooseDocs.extensions.navigation: + name: eigen1d + MooseDocs.extensions.appsyntax: + executable: ${ROOT_DIR} + remove: !include ${MOOSE_DIR}/framework/doc/remove.yml + includes: + - include diff --git a/eigen1d/doc/content/index.md b/eigen1d/doc/content/index.md new file mode 100644 index 000000000..42b9ab14d --- /dev/null +++ b/eigen1d/doc/content/index.md @@ -0,0 +1,3 @@ +!config navigation breadcrumbs=False scrollspy=False + +# eigen1dApp diff --git a/eigen1d/doc/moosedocs.py b/eigen1d/doc/moosedocs.py new file mode 100755 index 000000000..ce1a0ad7d --- /dev/null +++ b/eigen1d/doc/moosedocs.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python3 +#* This file is part of the MOOSE framework +#* https://www.mooseframework.org +#* +#* All rights reserved, see COPYRIGHT for full restrictions +#* https://github.com/idaholab/moose/blob/master/COPYRIGHT +#* +#* Licensed under LGPL 2.1, please see LICENSE for details +#* https://www.gnu.org/licenses/lgpl-2.1.html + +import sys +import os + +# Locate MOOSE directory +MOOSE_DIR = os.getenv('MOOSE_DIR', os.path.abspath(os.path.join(os.path.dirname(__name__), '..', 'moose'))) +if not os.path.exists(MOOSE_DIR): + MOOSE_DIR = os.path.abspath(os.path.join(os.path.dirname(__name__), '..', '..', 'moose')) +if not os.path.exists(MOOSE_DIR): + raise Exception('Failed to locate MOOSE, specify the MOOSE_DIR environment variable.') +os.environ['MOOSE_DIR'] = MOOSE_DIR + +# Append MOOSE python directory +MOOSE_PYTHON_DIR = os.path.join(MOOSE_DIR, 'python') +if MOOSE_PYTHON_DIR not in sys.path: + sys.path.append(MOOSE_PYTHON_DIR) + +from MooseDocs import main +if __name__ == '__main__': + sys.exit(main.run()) diff --git a/eigen1d/eigen1D_periodic_eigen.i b/eigen1d/eigen1D_periodic_eigen.i new file mode 100644 index 000000000..d16ed570e --- /dev/null +++ b/eigen1d/eigen1D_periodic_eigen.i @@ -0,0 +1,93 @@ +[Mesh] + [First] + type = GeneratedMeshGenerator + elem_type = EDGE + dim = 1 + xmin = 0 + xmax = 10 + nx = 10 + [] +[] + +[Variables] + [ur] + order = FIRST + family = LAGRANGE + [] + [uim] + order = FIRST + family = LAGRANGE + [] +[] + +[Kernels] + [diff1] + type = MatDiffusion + variable = ur + diffusivity = diffusivity + [] + [diff2] + type = MatDiffusion + variable = uim + diffusivity = diffusivity + [] + [eigen1] + type = CoefReaction + variable = ur + coefficient = -1.0 + extra_vector_tags = 'eigen' + [] + [eigen2] + type = CoefReaction + variable = uim + coefficient = -1.0 + extra_vector_tags = 'eigen' + [] +[] + +[BCs] + [Blochur] + type = BlochDirichletBCReal + variable = ur + ur = 'ur' + uim = 'uim' + lattice_length = 10.0 + wave_number = 1.732 + boundary = 'left' + [] + [Blochuim] + type = BlochDirichletBCImag + variable = uim + ur = 'ur' + uim = 'uim' + lattice_length = 10 + wave_number = 1.732 + boundary ='left' + [] +[] + +[Materials] + [nm] + type = GenericConstantMaterial + prop_names = 'diffusivity' + prop_values = 0.333333333333333333 + [] +[] + +[Constraints] + +[] + +[Executioner] + type = Eigenvalue + eigen_problem_type = gen_non_hermitian + which_eigen_pairs = SMALLEST_MAGNITUDE + n_eigen_pairs = 5 + n_basis_vectors = 18 + solve_type = jacobi_davidson + petsc_options = '-eps_view' +[] + +[Outputs] + exodus = true +[] diff --git a/eigen1d/include/BlochDirichletBCImag.h b/eigen1d/include/BlochDirichletBCImag.h new file mode 100644 index 000000000..a795df983 --- /dev/null +++ b/eigen1d/include/BlochDirichletBCImag.h @@ -0,0 +1,32 @@ +//* https://www.mooseframework.org +//* +//* All rights reserved, see COPYRIGHT for full restrictions +//* https://github.com/idaholab/moose/blob/master/COPYRIGHT +//* +//* Licensed under LGPL 2.1, please see LICENSE for details +//* https://www.gnu.org/licenses/lgpl-2.1.html + +#pragma once + +#include "ADDirichletBCBaseTempl.h" +/** + * Dirichlet boundary condition with functor inputs. + */ +class BlochDirichletBCImag : public ADDirichletBCBaseTempl +{ +public: + static InputParameters validParams(); + + BlochDirichletBCImag(const InputParameters & parameters); + +protected: + virtual ADReal computeQpValue() override; + + double _lattice_vec; + double _wave_num; + /// The functor value to impose + const Moose::Functor & _uim; + const Moose::Functor & _ur; + /// Coefficient + const Moose::Functor & _coef; +}; diff --git a/eigen1d/include/BlochDirichletBCReal.h b/eigen1d/include/BlochDirichletBCReal.h new file mode 100644 index 000000000..192771efa --- /dev/null +++ b/eigen1d/include/BlochDirichletBCReal.h @@ -0,0 +1,33 @@ +//* This file is part of the MOOSE framework +//* https://www.mooseframework.org +//* +//* All rights reserved, see COPYRIGHT for full restrictions +//* https://github.com/idaholab/moose/blob/master/COPYRIGHT +//* +//* Licensed under LGPL 2.1, please see LICENSE for details +//* https://www.gnu.org/licenses/lgpl-2.1.html + +#pragma once + +#include "ADDirichletBCBaseTempl.h" +/** + * Dirichlet boundary condition with functor inputs. + */ +class BlochDirichletBCReal : public ADDirichletBCBaseTempl +{ +public: + static InputParameters validParams(); + + BlochDirichletBCReal(const InputParameters & parameters); + +protected: + virtual ADReal computeQpValue() override; + + double _lattice_vec; + double _wave_num; + /// The functor value to impose + const Moose::Functor & _uim; + const Moose::Functor & _ur; + /// Coefficient + const Moose::Functor & _coef; +}; diff --git a/eigen1d/include/base/eigen1dApp.h b/eigen1d/include/base/eigen1dApp.h new file mode 100644 index 000000000..08a0f2dd2 --- /dev/null +++ b/eigen1d/include/base/eigen1dApp.h @@ -0,0 +1,24 @@ +//* This file is part of the MOOSE framework +//* https://www.mooseframework.org +//* +//* All rights reserved, see COPYRIGHT for full restrictions +//* https://github.com/idaholab/moose/blob/master/COPYRIGHT +//* +//* Licensed under LGPL 2.1, please see LICENSE for details +//* https://www.gnu.org/licenses/lgpl-2.1.html + +#pragma once + +#include "MooseApp.h" + +class eigen1dApp : public MooseApp +{ +public: + static InputParameters validParams(); + + eigen1dApp(InputParameters parameters); + virtual ~eigen1dApp(); + + static void registerApps(); + static void registerAll(Factory & f, ActionFactory & af, Syntax & s); +}; diff --git a/eigen1d/run_tests b/eigen1d/run_tests new file mode 100755 index 000000000..b3bf34e13 --- /dev/null +++ b/eigen1d/run_tests @@ -0,0 +1,12 @@ +#!/usr/bin/env python3 +import sys, os + +MOOSE_DIR = os.path.abspath(os.environ.get('MOOSE_DIR', os.path.join(os.path.dirname(__file__), '..', 'moose'))) +if os.path.exists(os.path.abspath(os.path.join('moose', 'framework', 'Makefile'))): + MOOSE_DIR = os.path.abspath('moose') +MOOSE_DIR = os.environ.get('MOOSE_DIR', MOOSE_DIR) + +sys.path.append(os.path.join(MOOSE_DIR, 'python')) + +from TestHarness import TestHarness +TestHarness.buildAndRun(sys.argv, 'eigen1d', MOOSE_DIR) diff --git a/eigen1d/scripts/install-format-hook.sh b/eigen1d/scripts/install-format-hook.sh new file mode 100755 index 000000000..44a2037a5 --- /dev/null +++ b/eigen1d/scripts/install-format-hook.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +REPO_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/../" +hookfile="$REPO_DIR/.git/hooks/pre-commit" + +if [[ -f $hookfile ]]; then + echo "'$hookfile' already exists - aborting" 1>&2 + exit 1 +fi + +echo '#!/bin/bash +patch=$(git clang-format --diff -- $(git diff --staged --name-only -- src include tests unit)) +if [[ "$patch" =~ "no modified files to format" || "$patch" =~ "clang-format did not modify any files" ]]; then + echo "" > /dev/null +else + echo "" + echo "Your code is not properly formatted." >&2 + echo "Run 'git clang-format' to resolve the following issues:" >&2 + echo "" + echo "$patch" + exit 1 +fi +' > $hookfile + +chmod a+x $hookfile + diff --git a/eigen1d/src/BlochDirichletBCImag.C b/eigen1d/src/BlochDirichletBCImag.C new file mode 100644 index 000000000..20aa9c088 --- /dev/null +++ b/eigen1d/src/BlochDirichletBCImag.C @@ -0,0 +1,68 @@ +//* This file is part of the MOOSE framework +//* https://www.mooseframework.org +//* +//* All rights reserved, see COPYRIGHT for full restrictions +//* https://github.com/idaholab/moose/blob/master/COPYRIGHT +//* +//* Licensed under LGPL 2.1, please see LICENSE for details +//* https://www.gnu.org/licenses/lgpl-2.1.html + +#include "BlochDirichletBCImag.h" + +registerMooseObject("MooseApp", BlochDirichletBCImag); + +InputParameters +BlochDirichletBCImag::validParams() +{ + InputParameters params = ADDirichletBCBase::validParams(); + + params.addClassDescription("Imposes the Dirichlet boundary condition " + "$u(t,\\vec{x})=h(t,\\vec{x})$, " + "where $h$ is a functor and can have complex dependencies."); + + params.addRequiredParam("uim", "Functor used for uim"); + params.addRequiredParam("ur", "Functor used for ur"); + params.addParam( + "coefficient", 1.0, "An optional functor coefficient to multiply the imposed functor"); + + params.addParam("lattice_length", 1.0, "length of the phononic lattice"); + params.declareControllable("lattice_length"); + params.addParam("wave_number", 1.0, "wave number exp(ikx)"); + params.declareControllable("wave_number"); + + return params; +} + +BlochDirichletBCImag::BlochDirichletBCImag(const InputParameters & parameters) + : ADDirichletBCBaseTempl(parameters), + _lattice_vec(getParam("lattice_length")), + _wave_num(getParam("wave_number")), + _uim(getFunctor("uim")), + _ur(getFunctor("ur")), + _coef(getFunctor("coefficient")) +{ +} + +// u(x + h) = u(x) * exp(ikx) +//Translation vector is used to define the right side of the boundary +ADReal +BlochDirichletBCImag::computeQpValue() +{ + //Get point locator + const auto pl = _mesh.getPointLocator(); + //Locate node on the other side of the geometry + //The translation vector will be a user parameter + libMesh::Point _translation_vec= libMesh::Point(_lattice_vec, 0.0, 0.0); + const auto new_node = pl->locate_node(*_current_node + _translation_vec); + + + if(!new_node) + mooseError("Did not find the opposite side value"); + + const Moose::NodeArg space_arg = {new_node, Moose::INVALID_BLOCK_ID}; + + const Moose::StateArg time_arg = Moose::currentState(); + + return _coef(space_arg, time_arg) * (_ur(space_arg, time_arg) * sin (_wave_num * _lattice_vec) - _uim(space_arg, time_arg) * cos (_wave_num * _lattice_vec)); + +} \ No newline at end of file diff --git a/eigen1d/src/BlochDirichletBCReal.C b/eigen1d/src/BlochDirichletBCReal.C new file mode 100644 index 000000000..8b92b7986 --- /dev/null +++ b/eigen1d/src/BlochDirichletBCReal.C @@ -0,0 +1,68 @@ +//* This file is part of the MOOSE framework +//* https://www.mooseframework.org +//* +//* All rights reserved, see COPYRIGHT for full restrictions +//* https://github.com/idaholab/moose/blob/master/COPYRIGHT +//* +//* Licensed under LGPL 2.1, please see LICENSE for details +//* https://www.gnu.org/licenses/lgpl-2.1.html + +#include "BlochDirichletBCReal.h" + +registerMooseObject("MooseApp", BlochDirichletBCReal); + +InputParameters +BlochDirichletBCReal::validParams() +{ + InputParameters params = ADDirichletBCBase::validParams(); + + params.addClassDescription("Imposes the Bloch boundary condition on displacements " + "$u(t,\\vec{x + h})=u(t,\\vec{x})exp(ikx)$, "); + + params.addRequiredParam("uim", "Functor used for uim"); + params.addRequiredParam("ur", "Functor used for ur"); + + params.addParam( + "coefficient", 1.0, "An optional functor coefficient to multiply the imposed functor"); + + params.addParam("lattice_length", 1.0, "length of the phononic lattice"); + params.declareControllable("lattice_length"); + params.addParam("wave_number", 1.0, "wave number exp(ikx)"); + params.declareControllable("wave_number"); + + return params; +} + +BlochDirichletBCReal::BlochDirichletBCReal(const InputParameters & parameters) + : ADDirichletBCBaseTempl(parameters), + _lattice_vec(getParam("lattice_length")), + _wave_num(getParam("wave_number")), + _uim(getFunctor("uim")), + _ur(getFunctor("ur")), + _coef(getFunctor("coefficient")) +{ +} + +// u(x + h) = u(x) * exp(ikx) +//Translation vector is used to define the right side of the boundary +ADReal +BlochDirichletBCReal::computeQpValue() +{ + //Get point locator + const auto pl = _mesh.getPointLocator(); + //Locate node on the other side of the geometry + //The translation vector will be a user parameter + libMesh::Point _translation_vec= libMesh::Point(_lattice_vec, 0.0, 0.0); + const auto new_node = pl->locate_node(*_current_node + _translation_vec); + + + if(!new_node) + mooseError("Did not find the opposite side value"); + + const Moose::NodeArg space_arg = {new_node, Moose::INVALID_BLOCK_ID}; + + const Moose::StateArg time_arg = Moose::currentState(); + + return _coef(space_arg, time_arg) * (_ur(space_arg, time_arg) * cos (_wave_num * _lattice_vec) - _uim(space_arg, time_arg) * sin (_wave_num * _lattice_vec)); + +} \ No newline at end of file diff --git a/eigen1d/src/base/eigen1dApp.C b/eigen1d/src/base/eigen1dApp.C new file mode 100644 index 000000000..85cea8784 --- /dev/null +++ b/eigen1d/src/base/eigen1dApp.C @@ -0,0 +1,50 @@ +#include "eigen1dApp.h" +#include "Moose.h" +#include "AppFactory.h" +#include "ModulesApp.h" +#include "MooseSyntax.h" + +InputParameters +eigen1dApp::validParams() +{ + InputParameters params = MooseApp::validParams(); + params.set("use_legacy_material_output") = false; + return params; +} + +eigen1dApp::eigen1dApp(InputParameters parameters) : MooseApp(parameters) +{ + eigen1dApp::registerAll(_factory, _action_factory, _syntax); +} + +eigen1dApp::~eigen1dApp() {} + +void +eigen1dApp::registerAll(Factory & f, ActionFactory & af, Syntax & s) +{ + ModulesApp::registerAllObjects(f, af, s); + Registry::registerObjectsTo(f, {"eigen1dApp"}); + Registry::registerActionsTo(af, {"eigen1dApp"}); + + /* register custom execute flags, action syntax, etc. here */ +} + +void +eigen1dApp::registerApps() +{ + registerApp(eigen1dApp); +} + +/*************************************************************************************************** + *********************** Dynamic Library Entry Points - DO NOT MODIFY ****************************** + **************************************************************************************************/ +extern "C" void +eigen1dApp__registerAll(Factory & f, ActionFactory & af, Syntax & s) +{ + eigen1dApp::registerAll(f, af, s); +} +extern "C" void +eigen1dApp__registerApps() +{ + eigen1dApp::registerApps(); +} diff --git a/eigen1d/src/main.C b/eigen1d/src/main.C new file mode 100644 index 000000000..bbca6c3b8 --- /dev/null +++ b/eigen1d/src/main.C @@ -0,0 +1,20 @@ +//* This file is part of the MOOSE framework +//* https://www.mooseframework.org +//* +//* All rights reserved, see COPYRIGHT for full restrictions +//* https://github.com/idaholab/moose/blob/master/COPYRIGHT +//* +//* Licensed under LGPL 2.1, please see LICENSE for details +//* https://www.gnu.org/licenses/lgpl-2.1.html + +#include "eigen1dTestApp.h" +#include "MooseMain.h" + +// Begin the main program. +int +main(int argc, char * argv[]) +{ + Moose::main(argc, argv); + + return 0; +} diff --git a/eigen1d/test/include/base/eigen1dTestApp.h b/eigen1d/test/include/base/eigen1dTestApp.h new file mode 100644 index 000000000..abfc74b81 --- /dev/null +++ b/eigen1d/test/include/base/eigen1dTestApp.h @@ -0,0 +1,24 @@ +//* This file is part of the MOOSE framework +//* https://www.mooseframework.org +//* +//* All rights reserved, see COPYRIGHT for full restrictions +//* https://github.com/idaholab/moose/blob/master/COPYRIGHT +//* +//* Licensed under LGPL 2.1, please see LICENSE for details +//* https://www.gnu.org/licenses/lgpl-2.1.html + +#pragma once + +#include "MooseApp.h" + +class eigen1dTestApp : public MooseApp +{ +public: + static InputParameters validParams(); + + eigen1dTestApp(InputParameters parameters); + virtual ~eigen1dTestApp(); + + static void registerApps(); + static void registerAll(Factory & f, ActionFactory & af, Syntax & s, bool use_test_objs = false); +}; diff --git a/eigen1d/test/src/base/eigen1dTestApp.C b/eigen1d/test/src/base/eigen1dTestApp.C new file mode 100644 index 000000000..ce568d40c --- /dev/null +++ b/eigen1d/test/src/base/eigen1dTestApp.C @@ -0,0 +1,62 @@ +//* This file is part of the MOOSE framework +//* https://www.mooseframework.org +//* +//* All rights reserved, see COPYRIGHT for full restrictions +//* https://github.com/idaholab/moose/blob/master/COPYRIGHT +//* +//* Licensed under LGPL 2.1, please see LICENSE for details +//* https://www.gnu.org/licenses/lgpl-2.1.html +#include "eigen1dTestApp.h" +#include "eigen1dApp.h" +#include "Moose.h" +#include "AppFactory.h" +#include "MooseSyntax.h" + +InputParameters +eigen1dTestApp::validParams() +{ + InputParameters params = eigen1dApp::validParams(); + params.set("use_legacy_material_output") = false; + return params; +} + +eigen1dTestApp::eigen1dTestApp(InputParameters parameters) : MooseApp(parameters) +{ + eigen1dTestApp::registerAll( + _factory, _action_factory, _syntax, getParam("allow_test_objects")); +} + +eigen1dTestApp::~eigen1dTestApp() {} + +void +eigen1dTestApp::registerAll(Factory & f, ActionFactory & af, Syntax & s, bool use_test_objs) +{ + eigen1dApp::registerAll(f, af, s); + if (use_test_objs) + { + Registry::registerObjectsTo(f, {"eigen1dTestApp"}); + Registry::registerActionsTo(af, {"eigen1dTestApp"}); + } +} + +void +eigen1dTestApp::registerApps() +{ + registerApp(eigen1dApp); + registerApp(eigen1dTestApp); +} + +/*************************************************************************************************** + *********************** Dynamic Library Entry Points - DO NOT MODIFY ****************************** + **************************************************************************************************/ +// External entry point for dynamic application loading +extern "C" void +eigen1dTestApp__registerAll(Factory & f, ActionFactory & af, Syntax & s) +{ + eigen1dTestApp::registerAll(f, af, s); +} +extern "C" void +eigen1dTestApp__registerApps() +{ + eigen1dTestApp::registerApps(); +} diff --git a/eigen1d/test/tests/kernels/simple_diffusion/gold/simple_diffusion_out.e b/eigen1d/test/tests/kernels/simple_diffusion/gold/simple_diffusion_out.e new file mode 100644 index 000000000..26b05edab Binary files /dev/null and b/eigen1d/test/tests/kernels/simple_diffusion/gold/simple_diffusion_out.e differ diff --git a/eigen1d/test/tests/kernels/simple_diffusion/simple_diffusion.i b/eigen1d/test/tests/kernels/simple_diffusion/simple_diffusion.i new file mode 100644 index 000000000..ddc8fc8bd --- /dev/null +++ b/eigen1d/test/tests/kernels/simple_diffusion/simple_diffusion.i @@ -0,0 +1,44 @@ +[Mesh] + type = GeneratedMesh + dim = 2 + nx = 10 + ny = 10 +[] + +[Variables] + [u] + [] +[] + +[Kernels] + [diff] + type = Diffusion + variable = u + [] +[] + +[BCs] + [left] + type = DirichletBC + variable = u + boundary = left + value = 0 + [] + [right] + type = DirichletBC + variable = u + boundary = right + value = 1 + [] +[] + +[Executioner] + type = Steady + solve_type = 'PJFNK' + petsc_options_iname = '-pc_type -pc_hypre_type' + petsc_options_value = 'hypre boomeramg' +[] + +[Outputs] + exodus = true +[] diff --git a/eigen1d/test/tests/kernels/simple_diffusion/tests b/eigen1d/test/tests/kernels/simple_diffusion/tests new file mode 100644 index 000000000..209a41506 --- /dev/null +++ b/eigen1d/test/tests/kernels/simple_diffusion/tests @@ -0,0 +1,10 @@ +[Tests] + design = 'Diffusion.md' + issues = '#108' + [test] + type = 'Exodiff' + input = 'simple_diffusion.i' + exodiff = 'simple_diffusion_out.e' + requirement = 'The system shall be able to solve a simple diffusion problem.' + [] +[] diff --git a/eigen1d/testroot b/eigen1d/testroot new file mode 100644 index 000000000..1e894f032 --- /dev/null +++ b/eigen1d/testroot @@ -0,0 +1,4 @@ +app_name = eigen1d +allow_warnings = false +allow_unused = false +allow_override = false diff --git a/eigen1d/unit/Makefile b/eigen1d/unit/Makefile new file mode 100644 index 000000000..88d843a66 --- /dev/null +++ b/eigen1d/unit/Makefile @@ -0,0 +1,70 @@ +############################################################################### +################### MOOSE Application Standard Makefile ####################### +############################################################################### +# +# Required Environment variables (one of the following) +# PACKAGES_DIR - Location of the MOOSE redistributable package +# +# Optional Environment variables +# MOOSE_DIR - Root directory of the MOOSE project +# FRAMEWORK_DIR - Location of the MOOSE framework +# +############################################################################### +# Use the MOOSE submodule if it exists and MOOSE_DIR is not set +MOOSE_SUBMODULE := $(CURDIR)/../moose +ifneq ($(wildcard $(MOOSE_SUBMODULE)/framework/Makefile),) + MOOSE_DIR ?= $(MOOSE_SUBMODULE) +else + MOOSE_DIR ?= $(shell dirname `pwd`)/../moose +endif +FRAMEWORK_DIR ?= $(MOOSE_DIR)/framework +############################################################################### + +# framework +include $(FRAMEWORK_DIR)/build.mk +include $(FRAMEWORK_DIR)/moose.mk + +################################## MODULES #################################### +# set desired physics modules equal to 'yes' to enable them +CHEMICAL_REACTIONS := no +CONTACT := no +FLUID_PROPERTIES := no +FSI := no +HEAT_TRANSFER := no +MISC := no +NAVIER_STOKES := no +PHASE_FIELD := no +RDG := no +RICHARDS := no +STOCHASTIC_TOOLS := no +TENSOR_MECHANICS := no +XFEM := no +POROUS_FLOW := no +LEVEL_SET := no +include $(MOOSE_DIR)/modules/modules.mk +############################################################################### + +# Extra stuff for GTEST +ADDITIONAL_INCLUDES := -I$(FRAMEWORK_DIR)/contrib/gtest +ADDITIONAL_LIBS := $(FRAMEWORK_DIR)/contrib/gtest/libgtest.la + +# dep apps +CURRENT_DIR := $(shell pwd) +APPLICATION_DIR := $(CURRENT_DIR)/.. +APPLICATION_NAME := eigen1d +include $(FRAMEWORK_DIR)/app.mk + +APPLICATION_DIR := $(CURRENT_DIR) +APPLICATION_NAME := eigen1d-unit +BUILD_EXEC := yes + +DEP_APPS ?= $(shell $(FRAMEWORK_DIR)/scripts/find_dep_apps.py $(APPLICATION_NAME)) +include $(FRAMEWORK_DIR)/app.mk + +# Find all the eigen1d unit test source files and include their dependencies. +eigen1d_unit_srcfiles := $(shell find $(CURRENT_DIR)/src -name "*.C") +eigen1d_unit_deps := $(patsubst %.C, %.$(obj-suffix).d, $(eigen1d_unit_srcfiles)) +-include $(eigen1d_unit_deps) + +############################################################################### +# Additional special case targets should be added here diff --git a/eigen1d/unit/include/place_holder b/eigen1d/unit/include/place_holder new file mode 100644 index 000000000..e69de29bb diff --git a/eigen1d/unit/run_tests b/eigen1d/unit/run_tests new file mode 100755 index 000000000..b3e3987c2 --- /dev/null +++ b/eigen1d/unit/run_tests @@ -0,0 +1,18 @@ +#!/bin/bash + +APPLICATION_NAME=eigen1d +# If $METHOD is not set, use opt +if [ -z $METHOD ]; then + export METHOD=opt +fi + +if [ -e ./unit/$APPLICATION_NAME-unit-$METHOD ] +then + ./unit/$APPLICATION_NAME-unit-$METHOD +elif [ -e ./$APPLICATION_NAME-unit-$METHOD ] +then + ./$APPLICATION_NAME-unit-$METHOD +else + echo "Executable missing!" + exit 1 +fi diff --git a/eigen1d/unit/src/SampleTest.C b/eigen1d/unit/src/SampleTest.C new file mode 100644 index 000000000..da0782db9 --- /dev/null +++ b/eigen1d/unit/src/SampleTest.C @@ -0,0 +1,32 @@ +//* This file is part of the MOOSE framework +//* https://www.mooseframework.org +//* +//* All rights reserved, see COPYRIGHT for full restrictions +//* https://github.com/idaholab/moose/blob/master/COPYRIGHT +//* +//* Licensed under LGPL 2.1, please see LICENSE for details +//* https://www.gnu.org/licenses/lgpl-2.1.html + +#include "gtest/gtest.h" + +TEST(MySampleTests, descriptiveTestName) +{ + // compare equality + EXPECT_EQ(2, 1 + 1); + EXPECT_DOUBLE_EQ(2 * 3.5, 1.0 * 8 - 1); + + // compare equality and immediately terminate this test if it fails + // ASSERT_EQ(2, 1); + + // this won't run if you uncomment the above test because above assert will fail + ASSERT_NO_THROW(1 + 1); + + // for a complete list of assertions and for more unit testing documentation see: + // https://github.com/google/googletest/blob/master/googletest/docs/Primer.md +} + +TEST(MySampleTests, anotherTest) +{ + EXPECT_LE(1, 2); + // ... +} diff --git a/eigen1d/unit/src/main.C b/eigen1d/unit/src/main.C new file mode 100644 index 000000000..663a18eef --- /dev/null +++ b/eigen1d/unit/src/main.C @@ -0,0 +1,33 @@ +//* This file is part of the MOOSE framework +//* https://www.mooseframework.org +//* +//* All rights reserved, see COPYRIGHT for full restrictions +//* https://github.com/idaholab/moose/blob/master/COPYRIGHT +//* +//* Licensed under LGPL 2.1, please see LICENSE for details +//* https://www.gnu.org/licenses/lgpl-2.1.html + +#include "eigen1dApp.h" +#include "gtest/gtest.h" + +// Moose includes +#include "Moose.h" +#include "MooseInit.h" +#include "AppFactory.h" + +#include +#include + +GTEST_API_ int +main(int argc, char ** argv) +{ + // gtest removes (only) its args from argc and argv - so this must be before moose init + testing::InitGoogleTest(&argc, argv); + + MooseInit init(argc, argv); + registerApp(eigen1dApp); + Moose::_throw_on_error = true; + Moose::_throw_on_warning = true; + + return RUN_ALL_TESTS(); +}