Commit 78044133 authored by Ron Rahaman's avatar Ron Rahaman

Merge branch 'test-driver' into 'develop'

Test driver

This adds two top-level examples in `moon/examples`
* `ex01_inputfile` is the same as `moose/examples/ex01_inputfile` except the Makefile paths have been updated
* `hello_nek` is the same as `ex01_inputfile` except it compiles `libnek5000.a`, initializes Nek from `eddy_uv.rea` and prints some values from a common block.  After that, it runs `ex01` to completion.

See merge request !1
parents 96eb53be 3c030ac8
###############################################################################
################### MOOSE Application Standard Makefile #######################
###############################################################################
#
# Optional Environment variables
# MOOSE_DIR - Root directory of the MOOSE project
# FRAMEWORK_DIR - Location of the MOOSE framework
#
###############################################################################
EXAMPLE_DIR ?= $(shell dirname `pwd`)
MOOSE_DIR ?= $(shell dirname $(EXAMPLE_DIR))/src/moose
FRAMEWORK_DIR ?= $(MOOSE_DIR)/framework
###############################################################################
TEST := test_ignore
# framework
include $(FRAMEWORK_DIR)/build.mk
include $(FRAMEWORK_DIR)/moose.mk
APPLICATION_NAME := ex01
# dep apps
APPLICATION_DIR := $(shell pwd)
APPLICATION_NAME := ex01
BUILD_EXEC := yes
DEP_APPS := $(shell $(FRAMEWORK_DIR)/scripts/find_dep_apps.py $(APPLICATION_NAME))
include $(FRAMEWORK_DIR)/app.mk
include ../test.mk
# Include dependency files for this example
ex_srcfiles := $(shell find $(APPLICATION_DIR) -name "*.C")
ex_deps := $(patsubst %.C, %.$(obj-suffix).d, $(ex_srcfiles))
-include $(ex_deps)
###############################################################################
# Additional special case targets should be added here
test: all
$(call TEST_exodiff,ex01.i,ex01_out.e)
[Mesh]
file = square.e
uniform_refine = 4
[]
# Note: This output block is out of its normal place (should be at the bottom)
[Outputs]
execute_on = 'timestep_end'
exodus = true
[]
# Note: The executioner is out of its normal place (should be just about the output block)
[Executioner]
type = Steady
solve_type = 'PJFNK'
[]
[Variables]
active = 'diffused' # Note the active list here
[./diffused]
order = FIRST
family = LAGRANGE
[../]
# This variable is not active in the list above
# therefore it is not used in the simulation
[./convected]
order = FIRST
family = LAGRANGE
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = diffused
[../]
[]
# This example applies DirichletBCs to all four sides of our square domain
[BCs]
[./left]
type = DirichletBC
variable = diffused
boundary = '1'
value = 0
[../]
[./right]
type = DirichletBC
variable = diffused
boundary = '2'
value = 1
[../]
[]
[Mesh]
file = mug.e
[]
[Variables]
[./diffused]
order = FIRST
family = LAGRANGE
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = diffused
[../]
[]
[BCs]
[./bottom]
type = DirichletBC
variable = diffused
boundary = 'bottom'
value = 1
[../]
[./top]
type = DirichletBC
variable = diffused
boundary = 'top'
value = 0
[../]
[]
[Executioner]
type = Steady
solve_type = 'PJFNK'
[]
[Outputs]
execute_on = 'timestep_end'
exodus = true
[]
This example has no header files. This directory
is just included for consistency with the other
examples.
\ No newline at end of file
/****************************************************************/
/* DO NOT MODIFY THIS HEADER */
/* MOOSE - Multiphysics Object Oriented Simulation Environment */
/* */
/* (c) 2010 Battelle Energy Alliance, LLC */
/* ALL RIGHTS RESERVED */
/* */
/* Prepared by Battelle Energy Alliance, LLC */
/* Under Contract No. DE-AC07-05ID14517 */
/* With the U. S. Department of Energy */
/* */
/* See COPYRIGHT for full restrictions */
/****************************************************************/
#ifndef EXAMPLEAPP_H
#define EXAMPLEAPP_H
#include "MooseApp.h"
class ExampleApp;
template<>
InputParameters validParams<ExampleApp>();
class ExampleApp : public MooseApp
{
public:
ExampleApp(InputParameters parameters);
virtual ~ExampleApp();
static void registerApps();
static void registerObjects(Factory & factory);
static void associateSyntax(Syntax& syntax, ActionFactory & action_factory);
};
#endif /* EXAMPLEAPP_H */
/****************************************************************/
/* DO NOT MODIFY THIS HEADER */
/* MOOSE - Multiphysics Object Oriented Simulation Environment */
/* */
/* (c) 2010 Battelle Energy Alliance, LLC */
/* ALL RIGHTS RESERVED */
/* */
/* Prepared by Battelle Energy Alliance, LLC */
/* Under Contract No. DE-AC07-05ID14517 */
/* With the U. S. Department of Energy */
/* */
/* See COPYRIGHT for full restrictions */
/****************************************************************/
#include "ExampleApp.h"
#include "Moose.h"
#include "Factory.h"
#include "AppFactory.h"
#include "MooseSyntax.h"
template<>
InputParameters validParams<ExampleApp>()
{
InputParameters params = validParams<MooseApp>();
params.set<bool>("use_legacy_uo_initialization") = false;
params.set<bool>("use_legacy_uo_aux_computation") = false;
return params;
}
ExampleApp::ExampleApp(InputParameters parameters) :
MooseApp(parameters)
{
srand(processor_id());
Moose::registerObjects(_factory);
ExampleApp::registerObjects(_factory);
Moose::associateSyntax(_syntax, _action_factory);
ExampleApp::associateSyntax(_syntax, _action_factory);
}
ExampleApp::~ExampleApp()
{
}
void
ExampleApp::registerObjects(Factory & /*factory*/)
{
}
void
ExampleApp::registerApps()
{
registerApp(ExampleApp);
}
void
ExampleApp::associateSyntax(Syntax& /*syntax*/, ActionFactory & /*action_factory*/)
{
}
/****************************************************************/
/* DO NOT MODIFY THIS HEADER */
/* MOOSE - Multiphysics Object Oriented Simulation Environment */
/* */
/* (c) 2010 Battelle Energy Alliance, LLC */
/* ALL RIGHTS RESERVED */
/* */
/* Prepared by Battelle Energy Alliance, LLC */
/* Under Contract No. DE-AC07-05ID14517 */
/* With the U. S. Department of Energy */
/* */
/* See COPYRIGHT for full restrictions */
/****************************************************************/
/**
* Example 1: Input File - The smallest MOOSE based application possible. It solves
* a simple 2D diffusion problem with Dirichlet boundary conditions using built-in
* objects from MOOSE.
*/
#include "ExampleApp.h"
//Moose Includes
#include "MooseInit.h"
#include "Moose.h"
#include "MooseApp.h"
#include "AppFactory.h"
// Create a performance log
PerfLog Moose::perf_log("Example");
// Begin the main program.
int main(int argc, char *argv[])
{
// Initialize MPI, solvers and MOOSE
MooseInit init(argc, argv);
// Register this application's MooseApp and any it depends on
ExampleApp::registerApps();
// This creates dynamic memory that we're responsible for deleting
MooseApp * app = AppFactory::createApp("ExampleApp", argc, argv);
// Execute the application
app->run();
// Free up the memory we created earlier
delete app;
return 0;
}
###############################################################################
################### MOOSE Application Standard Makefile #######################
###############################################################################
#
# Optional Environment variables
# MOOSE_DIR - Root directory of the MOOSE project
# FRAMEWORK_DIR - Location of the MOOSE framework
#
###############################################################################
EXAMPLE_DIR ?= $(shell dirname `pwd`)
MOOSE_DIR ?= $(shell dirname $(EXAMPLE_DIR))/src/moose
FRAMEWORK_DIR ?= $(MOOSE_DIR)/framework
###############################################################################
TEST := test_ignore
# framework
include $(FRAMEWORK_DIR)/build.mk
include $(FRAMEWORK_DIR)/moose.mk
APPLICATION_NAME := ex01
# dep apps
APPLICATION_DIR := $(shell pwd)
APPLICATION_NAME := ex01
BUILD_EXEC := yes
DEP_APPS := $(shell $(FRAMEWORK_DIR)/scripts/find_dep_apps.py $(APPLICATION_NAME))
include nek.mk
include app.mk
include ../test.mk
# Include dependency files for this example
ex_srcfiles := $(shell find $(APPLICATION_DIR) -name "*.C")
ex_deps := $(patsubst %.C, %.$(obj-suffix).d, $(ex_srcfiles))
-include $(ex_deps)
###############################################################################
# Additional special case targets should be added here
test: all
$(call TEST_exodiff,ex01.i,ex01_out.e)
C Dimension file to be included
C
C HCUBE array dimensions
C
parameter (ldim=2)
parameter (lx1=8,ly1=lx1,lz1=1,lelt=300,lelv=lelt)
parameter (lxd=12,lyd=lxd,lzd=1)
parameter (lelx=20,lely=20,lelz=1)
parameter (lzl=3 + 2*(ldim-3))
parameter (lx2=lx1-2)
parameter (ly2=ly1-2)
parameter (lz2=lz1 )
parameter (lx3=lx1)
parameter (ly3=ly1)
parameter (lz3=lz1)
parameter (lp = 512)
parameter (lelg = 4100)
c
c parameter (lpelv=lelv,lpelt=lelt,lpert=3) ! perturbation
c parameter (lpx1=lx1,lpy1=ly1,lpz1=lz1) ! array sizes
c parameter (lpx2=lx2,lpy2=ly2,lpz2=lz2)
c
parameter (lpelv=1,lpelt=1,lpert=1) ! perturbation
parameter (lpx1=1,lpy1=1,lpz1=1) ! array sizes
parameter (lpx2=1,lpy2=1,lpz2=1)
c
c parameter (lbelv=lelv,lbelt=lelt) ! MHD
c parameter (lbx1=lx1,lby1=ly1,lbz1=lz1) ! array sizes
c parameter (lbx2=lx2,lby2=ly2,lbz2=lz2)
c
parameter (lbelv=1,lbelt=1) ! MHD
parameter (lbx1=1,lby1=1,lbz1=1) ! array sizes
parameter (lbx2=1,lby2=1,lbz2=1)
C LX1M=LX1 when there are moving meshes; =1 otherwise
parameter (lx1m=1,ly1m=1,lz1m=1)
parameter (ldimt= 2) ! 2 passive scalars + T
parameter (ldimt1=ldimt+1)
parameter (ldimt3=ldimt+3)
c
c Note: In the new code, LELGEC should be about sqrt(LELG)
c
PARAMETER (LELGEC = 1)
PARAMETER (LXYZ2 = 1)
PARAMETER (LXZ21 = 1)
PARAMETER (LMAXV=LX1*LY1*LZ1*LELV)
PARAMETER (LMAXT=LX1*LY1*LZ1*LELT)
PARAMETER (LMAXP=LX2*LY2*LZ2*LELV)
PARAMETER (LXZ=LX1*LZ1)
PARAMETER (LORDER=3)
PARAMETER (MAXOBJ=4,MAXMBR=LELT*6)
PARAMETER (lhis=100) ! # of pts a proc reads from hpts.in
! Note: lhis*np > npoints in hpts.in
C
C Common Block Dimensions
C
PARAMETER (LCTMP0 =2*LX1*LY1*LZ1*LELT)
PARAMETER (LCTMP1 =4*LX1*LY1*LZ1*LELT)
C
C The parameter LVEC controls whether an additional 42 field arrays
C are required for Steady State Solutions. If you are not using
C Steady State, it is recommended that LVEC=1.
C
PARAMETER (LVEC=1)
C
C Uzawa projection array dimensions
C
parameter (mxprev = 20)
parameter (lgmres = 30)
C
C Split projection array dimensions
C
parameter(lmvec = 1)
parameter(lsvec = 1)
parameter(lstore=lmvec*lsvec)
c
c NONCONFORMING STUFF
c
parameter (maxmor = lelt)
C
C Array dimensions
C
COMMON/DIMN/NELV,NELT,NX1,NY1,NZ1,NX2,NY2,NZ2
$,NX3,NY3,NZ3,NDIM,NFIELD,NPERT,NID
$,NXD,NYD,NZD
c automatically added by makenek
parameter(lxo = lx1) ! max output grid size (lxo>=lx1)
c automatically added by makenek
parameter(lpart = 1 ) ! max number of particles
c automatically added by makenek
integer ax1,ay1,az1,ax2,ay2,az2
parameter (ax1=lx1,ay1=ly1,az1=lz1,ax2=lx2,ay2=ly2,az2=lz2) ! running averages
c automatically added by makenek
parameter (lxs=1,lys=lxs,lzs=(lxs-1)*(ldim-2)+1) !New Pressure Preconditioner
c automatically added by makenek
parameter (lfdm=0) ! == 1 for fast diagonalization method
c automatically added by makenek
common/IOFLAG/nio ! for logfile verbosity control
c automatically added by makenek
integer toteq
parameter(toteq = 1 ) ! Number of conserved variables
c IFCMT=FALSE then toteq=1
c automatically added by makenek
integer lelcmt
parameter(lelcmt = 1 ) ! # of cmt elements
c IFCMT=FALSE then lelcmt=1
# This file contains common MOOSE application settings
# Note: MOOSE applications are assumed to reside in peer directories relative to MOOSE and its modules.
# This can be overridden by using the MOOSE_DIR environment variable
# list of application-wide excluded source files
excluded_srcfiles :=
#
# Save off parameters for possible app.mk recursion
#
STACK ?= stack
STACK := $(STACK).X
$APPLICATION_DIR$(STACK) := $(APPLICATION_DIR)
$APPLICATION_NAME$(STACK) := $(APPLICATION_NAME)
$DEPEND_MODULES$(STACK) := $(DEPEND_MODULES)
$BUILD_EXEC$(STACK) := $(BUILD_EXEC)
$DEP_APPS$(STACK) := $(DEP_APPS)
-include $(APPLICATION_DIR)/$(APPLICATION_NAME).mk
#
# Restore parameters
#
APPLICATION_DIR := $($APPLICATION_DIR$(STACK))
APPLICATION_NAME := $($APPLICATION_NAME$(STACK))
DEPEND_MODULES := $($DEPEND_MODULES$(STACK))
BUILD_EXEC := $($BUILD_EXEC$(STACK))
DEP_APPS := $($DEP_APPS$(STACK))
STACK := $(basename $(STACK))
##############################################################################
######################### Application Variables ##############################
##############################################################################
#
# source files
SRC_DIRS := $(APPLICATION_DIR)/src
PLUGIN_DIR := $(APPLICATION_DIR)/plugins
excluded_srcfiles += main.C
find_excludes := $(foreach i, $(excluded_srcfiles), -not -name $(i))
srcfiles := $(shell find $(SRC_DIRS) -name "*.C" $(find_excludes))
csrcfiles := $(shell find $(SRC_DIRS) -name "*.c")
fsrcfiles := $(shell find $(SRC_DIRS) -name "*.f")
f90srcfiles := $(shell find $(SRC_DIRS) -name "*.f90")
# object files
objects := $(patsubst %.C, %.$(obj-suffix), $(srcfiles))
cobjects := $(patsubst %.c, %.$(obj-suffix), $(csrcfiles))
fobjects := $(patsubst %.f, %.$(obj-suffix), $(fsrcfiles))
f90objects := $(patsubst %.f90, %.$(obj-suffix), $(f90srcfiles))
app_objects := $(objects) $(cobjects) $(fobjects) $(f90objects) $(ADDITIONAL_APP_OBJECTS)
# plugin files
plugfiles := $(shell find $(PLUGIN_DIR) -name "*.C" 2>/dev/null)
cplugfiles := $(shell find $(PLUGIN_DIR) -name "*.c" 2>/dev/null)
fplugfiles := $(shell find $(PLUGIN_DIR) -name "*.f" 2>/dev/null)
f90plugfiles:= $(shell find $(PLUGIN_DIR) -name "*.f90" 2>/dev/null)
# plugins
plugins := $(patsubst %.C, %-$(METHOD).plugin, $(plugfiles))
plugins += $(patsubst %.c, %-$(METHOD).plugin, $(cplugfiles))
plugins += $(patsubst %.f, %-$(METHOD).plugin, $(fplugfiles))
plugins += $(patsubst %.f90, %-$(METHOD).plugin, $(f90plugfiles))
# main
main_src := $(APPLICATION_DIR)/src/main.C # Main must be located here!
main_object := $(patsubst %.C, %.$(obj-suffix), $(main_src))
# dependency files
app_deps := $(patsubst %.C, %.$(obj-suffix).d, $(srcfiles)) \
$(patsubst %.c, %.$(obj-suffix).d, $(csrcfiles)) \
$(patsubst %.C, %.$(obj-suffix).d, $(main_src)) \
$(ADDITIONAL_APP_DEPS)
depend_dirs := $(foreach i, $(DEPEND_MODULES), $(MOOSE_DIR)/modules/$(i)/include)
depend_dirs += $(APPLICATION_DIR)/include
# header files
include_dirs := $(shell find $(depend_dirs) -type d | grep -v "\.svn")
app_INCLUDE := $(foreach i, $(include_dirs), -I$(i)) $(ADDITIONAL_INCLUDES)
# clang static analyzer files
app_analyzer := $(patsubst %.C, %.plist.$(obj-suffix), $(srcfiles))
# library
app_LIB := $(APPLICATION_DIR)/lib/lib$(APPLICATION_NAME)-$(METHOD).la
# application
app_EXEC := $(APPLICATION_DIR)/$(APPLICATION_NAME)-$(METHOD)
# revision header
CAMEL_CASE_NAME := $(shell echo $(APPLICATION_NAME) | perl -pe 's/(?:^|_)([a-z])/\u$$1/g')
app_BASE_DIR ?= base/
app_HEADER := $(APPLICATION_DIR)/include/$(app_BASE_DIR)$(CAMEL_CASE_NAME)Revision.h
# depend modules
depend_libs := $(foreach i, $(DEPEND_MODULES), $(MOOSE_DIR)/modules/$(i)/lib/lib$(i)-$(METHOD).la)
##################################################################################################
# If we are NOT building a module, then make sure the dependency libs are updated to reflect
# all real dependencies
##################################################################################################
ifeq (,$(findstring $(APPLICATION_NAME), $(MODULE_NAMES)))
depend_libs := $(depend_libs) $(app_LIBS)
endif
# Here we'll filter out MOOSE libs since we'll assume our application already has MOOSE compiled in
depend_libs := $(filter-out $(moose_LIBS),$(depend_libs))
# Create -L/-l versions of the depend libs
depend_libs_flags := $(foreach i, $(depend_libs), -L$(dir $(i)) -l$(shell echo $(notdir $(i)) | perl -pe 's/^lib(.*?)\.la/$$1/'))
# If building shared libs, make the plugins a dependency, otherwise don't.
ifeq ($(libmesh_shared),yes)
app_plugin_deps := $(plugins)
else
app_plugin_deps :=
endif
app_LIBS := $(app_LIB) $(app_LIBS)
app_LIBS_other := $(filter-out $(app_LIB),$(app_LIBS))
app_HEADERS := $(app_HEADER) $(app_HEADERS)
app_INCLUDES += $(app_INCLUDE)
app_DIRS += $(APPLICATION_DIR)
# WARNING: the += operator does NOT work here!
ADDITIONAL_CPPFLAGS := $(ADDITIONAL_CPPFLAGS) -D$(shell echo $(APPLICATION_NAME) | perl -pe 'y/a-z/A-Z/' | perl -pe 's/-//g')_ENABLED
# dependencies
-include $(app_deps)
# Rest the DEPEND_MODULES variable in case this file is sourced again
DEPEND_MODULES :=
###############################################################################
# Build Rules:
#
###############################################################################
ifeq ($(BUILD_EXEC),yes)
all:: $(app_EXEC)
endif
$(app_objects): $(app_HEADER)
# Target-specific Variable Values (See GNU-make manual)
$(app_HEADER): curr_dir := $(APPLICATION_DIR)
$(app_HEADER): curr_app := $(APPLICATION_NAME)
$(app_HEADER):
@echo "MOOSE Generating Header "$@"..."
$(shell $(FRAMEWORK_DIR)/scripts/get_repo_revision.py $(curr_dir) $@ $(curr_app))
# Target-specific Variable Values (See GNU-make manual)
$(app_LIB): curr_objs := $(app_objects)
$(app_LIB): curr_dir := $(APPLICATION_DIR)
$(app_LIB): curr_deps := $(depend_libs)
$(app_LIB): curr_libs := $(depend_libs_flags)
$(app_LIB): $(app_objects) $(app_plugin_deps) $(app_HEADER) $(depend_libs)
@echo "Linking Library "$@"..."
@$(libmesh_LIBTOOL) --tag=CXX $(LIBTOOLFLAGS) --mode=link --quiet \
$(libmesh_CXX) $(libmesh_CXXFLAGS) -o $@ $(curr_objs) $(libmesh_LDFLAGS) $(EXTERNAL_FLAGS) -rpath $(curr_dir)/lib $(curr_libs)
@$(libmesh_LIBTOOL) --mode=install --quiet install -c $@ $(curr_dir)/lib
$(app_EXEC): $(app_LIBS) $(mesh_library) $(main_object) $(nek_LIB) $(nek_OBJ)
@echo "Linking Executable "$@"..."
@$(libmesh_LIBTOOL) --tag=CXX $(LIBTOOLFLAGS) --mode=link --quiet $(libmesh_CXX) $(libmesh_CXXFLAGS) -o $@ $(main_object) $(nek_LIB) $(nek_OBJ) $(app_LIBS) $(libmesh_LIBS) $(libmesh_LDFLAGS) $(EXTERNAL_FLAGS) $(ADDITIONAL_LIBS)
# Clang static analyzer
sa:: $(app_analyzer)
[Mesh]
file = square.e
uniform_refine = 4
[]
# Note: This output block is out of its normal place (should be at the bottom)
[Outputs]
execute_on = 'timestep_end'
exodus = true
[]
# Note: The executioner is out of its normal place (should be just about the output block)
[Executioner]
type = Steady
solve_type = 'PJFNK'
[]
[Variables]
active = 'diffused' # Note the active list here
[./diffused]
order = FIRST
family = LAGRANGE
[../]
# This variable is not active in the list above
# therefore it is not used in the simulation
[./convected]
order = FIRST
family = LAGRANGE
[../]
[]
[Kernels]
[./diff]
type = Diffusion
variable = diffused
[../]
[]
# This example applies DirichletBCs to all four sides of our square domain
[BCs]
[./left]
type = DirichletBC
variable = diffused
boundary = '1'
value = 0
[../]
[./right]
type = DirichletBC
variable = diffused
boundary = '2'
value = 1
[../]
[]
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
c-----------------------------------------------------------------------
subroutine exact(uu,vv,xx,yy,n,time,visc,u0,v0)
c
c This routine creates initial conditions for an exact solution
c to the Navier-Stokes equations based on the paper of Walsh [1],
c with an additional translational velocity (u0,v0).
c
c The computational domain is [0,2pi]^2 with doubly-periodic
c boundary conditions.
c
c Walsh's solution consists of an array of vortices determined
c as a linear combinations of eigenfunctions of having form:
c
c cos(pi m x)cos(pi n y), cos(pi m x)sin(pi n y)
c sin(pi m x)cos(pi n y), sin(pi m x)sin(pi n y)
c
c and
c
c cos(pi k x)cos(pi l y), cos(pi k x)sin(pi l y)
c sin(pi k x)cos(pi l y), sin(pi k x)sin(pi l y)
c
c While there are constraints on admissible (m,n),(k,l)
c pairings, Walsh shows that there is a large class of
c possible pairings that give rise to very complex vortex
c patterns.
c
c Walsh's solution applies either to unsteady Stokes or
c unsteady Navier-Stokes. The solution is a non-translating
c decaying array of vortices that decays at the rate
c
c exp ( -4 pi^2 (m^2+n^2) visc time ),
c
c with (m^2+n^2) = (k^2+l^2). A nearly stationary state may
c be obtained by taking the viscosity to be extremely small,
c so the effective decay is negligible. This limit, however,
c leads to an unstable state, thus diminsishing the value of
c Walsh's solution as a high-Reynolds number test case.
c
c It is possible to extend Walsh's solution to a stable convectively-