bendudson / BOUT

NOTE: BOUT++ now at https://github.com/boutproject/BOUT-dev
GNU Lesser General Public License v3.0
24 stars 34 forks source link

Problem with test_suite #45

Open nightkeo opened 7 years ago

nightkeo commented 7 years ago

Dear doc Benduson, I compiled BOUT and after running test_suite one test failed: initial_test. In particularly, function mixmode and mixmode_suite failed. How to solve this problem?

And what is the virsion of python requasted?

Machine: Ubuntu 14.04.5 on the VirtualBox.

make_config file:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

configuration file for BOUT++

September 2008: Converted to use autoconf. Can be manually edited

for the (very) rare occasions when autoconf fails

extra compilation flags:

-DCHECK Enables a host of additional checks on each operation

such as uninitialised data. Helps when debugging

-DTRACK Keeps track of variable names.

Enables more useful error messages

for SSE2: -msse2 -mfpmath=sse

This must also specify one or more file formats

-DPDBF PDB format (need to include pdb_format.cxx)

-DNCDF NetCDF format (nc_format.cxx)

PETSc config variables need to be first, else they may clobber other

options (e.g. CXX, CXXFLAGS)

Created this variable so that a user won't overwrite the CXXFLAGS variable

on the command line, just add to this one

BOUT_FLAGS = $(CXXFLAGS) -g -O2 -O -DCHECK=2 -DSIGHANDLE -DBACKTRACE -DNCDF -DBOUT_HAS_PVODE -std=c++11

Specify the MPI C++ compiler in CXX

CXX = mpic++ CC = $(CXX)

AR = ar ARFLAGS = cruU RANLIB = ranlib MKDIR = @MKDIR@

####################################################################

Do not need to alter anything below

####################################################################

LD = $(CXX) LDFLAGS =

####################################################################

Extra (optional) source files, includes and libs

NOTE: EXTRA_SRC must include a solver (solver.cxx or ida_solver.cxx)

and a file format (nc_format.cxx or pdb_format.cxx)

####################################################################

EXTRA_INCS =
EXTRA_LIBS = -lfftw3 -lnetcdf -lnetcdf_c++ -L$(BOUT_TOP)/lib -lpvode -lpvpre

PRECON_SOURCE = FACETS_SOURCE =

####################################################################

These are used for compiling physics modules using BOUT++ library

####################################################################

Files that are needed by configure and should be dependencies for 'all'

OBJ = $(SOURCEC:%.cxx=%.o) LIB = $(BOUT_TOP)/lib/libbout++.a

BOUT_INCLUDE = -I$(BOUT_TOP)/include $(CXXINCLUDE) $(EXTRA_INCS) BOUT_LIBS = -lm -L$(BOUT_TOP)/lib -lbout++ $(EXTRA_LIBS)

DEPS = $(SOURCEC:.cxx=.d)

CHANGED = $(shell find -f $(BOUT_TOP)/include $(BOUT_TOP)/src -type f ( -name *.cxx -or -name *.h ) -newer $(LIB) -print 2> /dev/null)

Need to use ifndef because TARGET could be set in a file (as opposed to the command line or environment variable)

This will set a default if no TARGET is provided

ifndef TARGET TARGET = $(SOURCEC:%.cxx=%) endif

####################################################################

Definining stuff for recursive make

####################################################################

Phony targets since they are directory names

.PHONY: $(DIRS) lib install

all: $(BOUT_TOP)/config.status $(BOUT_TOP)/make.config $(DIRS) $(TARGET)

####################################################################

Recursively run make through subdirs

####################################################################

$(DIRS): @$(MAKE) --no-print-directory -s -C $@ all

Create 'lib' and 'include' incase they don't exist

$(BOUT_TOP)/include $(BOUT_TOP)/lib: $(MKDIR) $@

####################################################################

Install header files and libraries

#################################################################### prefix = /usr/local exec_prefix = ${prefix} install: all @$(MKDIR) $(DESTDIR)${prefix} @$(MKDIR) $(DESTDIR)${prefix}/include @$(MKDIR) $(DESTDIR)${prefix}/lib @echo "Installing header files into $(DESTDIR)${prefix}/include" @cp include/.hxx $(DESTDIR)${prefix}/include @echo "Installing library files into $(DESTDIR)${exec_prefix}/lib" @cp lib/.a $(DESTDIR)${exec_prefix}/lib

####################################################################

A bit of a clever hack that determines wheter the TARGET variable is 'lib'

then, if true, adds the .o files to libbout++.a, else, it links the .o's

into an executable

####################################################################

ifeq ("$(TARGET)", "lib")

BEGIN 'lib'

####################################################################

The prerquisites of any .o file should depend on

$(BOUT_TOP)/make.config

$(BOUT_TOP)/makefile

which are generated by configuration

####################################################################

-include $(DEPS)

This automatically generates dependency rules

%.d : %.cxx

-@$(CXX) $(BOUT_INCLUDE) $(BOUT_FLAGS) -MF"$@" -MG -MP -MM -MT"$(<:.cxx=.o)" -fsyntax-only "$<" 2> /dev/null

####################################################################

Notes about the different flags:

-MF write the generated dependency rule to a file

-MG assume missing headers will be generated and don't stop with an error

-MM generate dependency rule for prerequisite, skipping system headers

-MP add phony target for each header to prevent errors when header is missing

-MT add a target to the generated dependency

####################################################################

####################################################################

Builds the library with $(OBJ) which is defined from the SOURCEC variable

####################################################################

lib: makefile $(BOUT_TOP)/make.config $(BOUT_TOP)/include $(BOUT_TOP)/lib $(OBJ) ifneq ("$(OBJ)foo", "foo") @echo "Adding $(OBJ) to libbout++.a" @$(AR) $(ARFLAGS) $(LIB) $(OBJ) @$(RANLIB) $(LIB) endif

END 'lib'

else

ifeq ("$(TARGET)", "sub")

LIB=$(MODULE_DIR)/$(SUB_NAME).a

sub: makefile $(BOUT_TOP)/make.config $(BOUT_TOP)/include $(BOUT_TOP)/lib $(OBJ) ifneq ("$(OBJ)foo", "foo") @echo "Adding $(OBJ)" @$(AR) cru $(LIB) $(OBJ) @$(RANLIB) $(LIB) endif

else

####################################################################

Make libbout++.a if it doesn't exist with the checklib target

#################################################################### %.a: @echo "Rebuilding out-of-date bout++ library" @$(MAKE) --no-print-directory -C $(BOUT_TOP)

####################################################################

Make the target (e.g. gas_compress)

#################################################################### SUB_LIBS=$(DIRS:%=%.a)

$(TARGET).cxx: checklib $(TARGET).o: $(LIB) $(TARGET): makefile $(BOUT_TOP)/make.config $(OBJ) $(SUB_LIBS) @echo " Linking" $(TARGET) @$(LD) $(LDFLAGS) -o $(TARGET) $(OBJ) $(BOUT_LIBS) $(SUB_LIBS)

checklib: ifneq ("$(CHANGED)foo", "foo") @echo "Rebuilding out-of-date bout++ library" @$(MAKE) --no-print-directory -C $(BOUT_TOP) endif

endif

endif

%.o: $(BOUT_TOP)/make.config %.cxx @echo " Compiling " $(@F:.o=.cxx) @$(CXX) $(BOUT_INCLUDE) $(BOUT_FLAGS) -c $(@F:.o=.cxx) -o $@

####################################################################

Clean target. Pretty self explanatory.

NOTE: See that double colon (::) below? That's signifies a rule that can be added to later

See:

http://owen.sj.ca.us/~rk/howto/slides/make/slides/makecolon.html

####################################################################

clean:: -@$(RM) -rf $(OBJ) $(DEPS) $(TARGET) @for pp in $(DIRS); do echo " " $$pp cleaned; $(MAKE) --no-print-directory -C $$pp clean; done

distclean: clean @echo include cleaned

Removing the externalpackage installation. When we have more packages, need a better way

@$(RM) -rf $(BOUT_TOP)/include/pvode
@echo lib cleaned
@$(RM) -rf $(BOUT_TOP)/lib/*
-@$(RM) $(BOUT_TOP)/externalpackages/PVODE/lib/*.a
-@$(RM) $(BOUT_TOP)/externalpackages/PVODE/source/obj/*.o
-@$(RM) $(BOUT_TOP)/externalpackages/PVODE/precon/obj/*.o
-@$(RM) -rf $(BOUT_TOP)/autom4te.cache make.config
@echo externalpackages cleaned
@touch $(BOUT_TOP)/configure
@echo autom4te.cache cleaned

####################################################################

Documentation

####################################################################

MANUAL_DIR=$(BOUT_TOP)/manual

doxygen: cd $(MANUAL_DIR)/doxygen && doxygen Doxyfile

breathe-autogen: doxygen breathe-apidoc -f -o $(MANUAL_DIR)/sphinx/_breathe_autogen $(MANUAL_DIR)/doxygen/bout/xml

sphinx-docs-html: breathe-autogen sphinx-build -b html $(MANUAL_DIR)/sphinx/ $(MANUAL_DIR)/sphinx/_build/

sphinx-docs-latex: breathe-autogen sphinx-build -b latex $(MANUAL_DIR)/sphinx/ $(MANUAL_DIR)/sphinx/_build/

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

run.log in initial_test

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

BOUT++ version 4.00 Revision: Unknown MD5 checksum: 946e3d8d5632995b8e2b5f5842f42209 Code compiled on May 8 2017 at 15:10:29

B.Dudson (University of York), M.Umansky (LLNL) 2007 Based on BOUT by Xueqiao Xu, 1999

Processor number: 0 of 4

pid: 17411

Compile-time options: Checking enabled, level 2 Signal handling enabled netCDF support enabled Parallel NetCDF support disabled OpenMP parallelisation disabled Reading options file data/BOUT.inp

Getting grid data from options Option mesh:type = bout (default) Option mesh:StaggerGrids = false (default) Setting X differencing methods First : Second order central (C2) Second : Second order central (C2) Upwind : First order upwinding (U1) Flux : Split into upwind and central (SPLIT) Setting Y differencing methods First : Second order central (C2) Second : Second order central (C2) Upwind : First order upwinding (U1) Flux : Split into upwind and central (SPLIT) Setting Z differencing methods First : Second order central (C2) Second : Second order central (C2) Upwind : First order upwinding (U1) Flux : Split into upwind and central (SPLIT) Option mesh:symmetricglobalx = true (data/BOUT.inp) Option mesh:symmetricGlobalY = false (default) Loading mesh Option mesh:nx = 7 (data/BOUT.inp) Option mesh:ny = 12 (data/BOUT.inp) Option :mz = 4 (data/BOUT.inp) Grid size: 7 x 12 x 4 Option :mxg = 1 (data/BOUT.inp) Option :myg = 1 (data/BOUT.inp) WARNING: Separatrix location 'ixseps1' not found. Setting to 7 WARNING: Separatrix location 'ixseps2' not found. Setting to 7 WARNING: Branch-cut 'jyseps1_1' not found. Setting to -1 WARNING: Branch-cut 'jyseps1_2' not found. Setting to 6 WARNING: Branch-cut 'jyseps2_1' not found. Setting to 6 WARNING: Branch-cut 'jyseps2_2' not found. Setting to 11 WARNING: Number of inner y points 'ny_inner' not found. Setting to 6 Option :nxpe = 1 (data/BOUT.inp) Option :IncIntShear = false (default) Option :periodicX = false (default) Option :async_send = false (default) Option :ZMIN = 0 (default) Option :ZMAX = 1 (default) EQUILIBRIUM IS SINGLE NULL (SND) Connection between top of Y processor 3 and bottom of 0 in range 0 <= x < 7 => This processor sending in down WARNING adding connection: poloidal index -1 out of range MYPE_IN_CORE = 1 DXS = 7, DIN = 3. DOUT = -1 UXS = 0, UIN = -1. UOUT = 1 XIN = -1, XOUT = -1 Twist-shift: DI Option :TwistShift = false (default) Boundary regions in this processor: core, sol, done Option mesh:paralleltransform = identity (default) Option :append = false (default) Option :dump_format = nc (default) Setting up output (dump) file Option output:parallel = false (default) Option output:flush = true (default) Option output:guards = true (default) Option output:floats = false (default) Option output:openclose = true (default) Option output:enabled = true (default) Option output:init_missing = false (default) Option output:shiftOutput = false (default) Using NetCDF format for file 'data/BOUT.dmp.nc' Variable 'dx' not in mesh options. Setting to 0.000000e+00 WARNING: differencing quantity 'dx' not found. Set to 1.0 Variable 'dy' not in mesh options. Setting to 0.000000e+00 WARNING: differencing quantity 'dy' not found. Set to 1.0 Option :ZMIN = 0 (default) Option :ZMAX = 1 (default) Variable 'g11' not in mesh options. Setting to 1.000000e+00 Variable 'g22' not in mesh options. Setting to 1.000000e+00 Variable 'g33' not in mesh options. Setting to 1.000000e+00 Variable 'g12' not in mesh options. Setting to 0.000000e+00 Variable 'g13' not in mesh options. Setting to 0.000000e+00 Variable 'g23' not in mesh options. Setting to 0.000000e+00 Maximum error in diagonal inversion is 0.000000e+00 Maximum error in off-diagonal inversion is 0.000000e+00 Variable 'J' not in mesh options. Setting to 0.000000e+00 WARNING: Jacobian 'J' not found. Calculating from metric tensor Variable 'Bxy' not in mesh options. Setting to 0.000000e+00 WARNING: Magnitude of B field 'Bxy' not found. Calculating from metric tensor Calculating differential geometry terms Communicating connection terms Option :non_uniform = false (default) Variable 'd2x' not in mesh options. Setting to 0.000000e+00 WARNING: differencing quantity 'd2x' not found. Calculating from dx Variable 'd2y' not in mesh options. Setting to 0.000000e+00 WARNING: differencing quantity 'd2y' not found. Calculating from dy Variable 'ShiftTorsion' not in mesh options. Setting to 0.000000e+00 WARNING: No Torsion specified for zShift. Derivatives may not be correct Option var_x:function = x (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option var_y:function = y (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option var_z:function = z (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option abs:function = abs(x - 0.5) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option add:function = x + 2 (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option asin:function = asin(y/(2pi)) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option acos:function = acos(y/(2pi)) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option atan:function = atan(y/(2pi)) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option atan_y:function = atan(y,x) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option ballooning:function = ballooning(x) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option ballooning_n:function = ballooning(x,5) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option cos:function = cos(x) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option cosh:function = cosh(x) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option exp:function = exp(x) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option tanh:function = tanh(x) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option gauss:function = gauss(x) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option gauss_width:function = gauss(x, 1.0) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option h:function = h(x) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option log:function = log(abs(x)) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option max:function = max(4x,y-pi,z^3) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option min:function = min(4x,y-pi,z^3) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option minus:function = 4 - x (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option mixmode:function = mixmode(x) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option mixmode_seed:function = mixmode(x, 0.5) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option pi:function = z - pi (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option power:function = power(abs(x), y) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option sin:function = sin(x) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option sinh:function = sinh(x) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option sqrt:function = sqrt(abs(x)) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option square:function = y^2 (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option tan:function = tan(x) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option times:function = 4y (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option erf:function = erf(x) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp) Option tanhhat:function = tanhhat(x, 0.5, 0.4, 0.3) (data/BOUT.inp) Option all:scale = 1 (data/BOUT.inp)

bendudson commented 7 years ago

Hello,

It would be better to use the latest version of BOUT++, which is here:

https://github.com/boutproject/BOUT-dev

see instructions and details here:

http://boutproject.github.io/download/

The test-initial check needs Python 3, but the other tests should work with either python 2 or 3.

I think this particular problem was also reported here and (I think) fixed:

https://github.com/boutproject/BOUT-dev/issues/551

Best

Ben

dschwoerer commented 7 years ago

It also needs scipy - a missing scipy for python3 might be another option ...