=====EN LOS CLUSTERS=====
1. Ya está instalado. Sólo levantar los módulos que se detallan en la sección “Uso de Flash”
----------------------------------
======USO DE FLASH======
Manual de usuario: [[http://flash.uchicago.edu/site/flashcode/user_support/|manual de FLASH]]
1. El Makefile.h que usa para compilar el programa está en:
/lugardeinstalacion/FLASHX.X/sites/Prototypes/Linux
Allí hay varios ejemplos de makefiles. Para nuestro ejemplo utilizaremos un makefile que llamaremos Makefile.h.escogido. Iremos a la carpeta "site".
cd /lugardeinstalacion/FLASHX.X/sites/
Ejecutar el siguiente comando.
mkdir $HOSTNAME
Eso creará una carpeta que se llama como el nombre de la maquina en /sites. Copiar en esa carpeta el Makefile.h elegido. Renombrar este archivo a Makefile.h.
cd /lugardeinstalacion/FLASHX.X/sites/Prototypes/Linux/
2. Módulos a cargar en las diferentes máquinas:
clemente
module load gcc
module load openmpi
module load hypre
module load hdf5
module load flash
Nombre del archivo: Makefile.h
Servidor: clemente
#FLASH makefile definitions for x86-64 Linux (GNU compilers)
#----------------------------------------------------------------------------
# Set the HDF5/MPI library paths -- these need to be updated for your system
#----------------------------------------------------------------------------
# sites/clemente/Makefile.h
MPI_PATH = /opt/spack/0.16.2/opt/spack/linux-centos7-broadwell/gcc-10.2.0/openmpi-4.0.5-jdedu5ob5yuqtaujmqw7l3fyzfaatzqm/
HDF4_PATH =
HDF5_PATH = /opt/spack/0.16.2/opt/spack/linux-centos7-broadwell/gcc-10.2.0/hdf5-1.10.7-6v6h3jwmez6mhhfg5vrhp2odezq7kdat/
HYPRE_PATH = /opt/spack/0.16.2/opt/spack/linux-centos7-broadwell/gcc-10.2.0/hypre-2.20.0-izz4brayoocfvlz2u3z76avmrlvls2gi/
ZLIB_PATH = /opt/spack/0.16.2/opt/spack/linux-centos7-broadwell/gcc-10.2.0/zlib-1.2.11-nk6k5unszfepso6b4zvivtimoeped7if/
PAPI_PATH =
PAPI_FLAGS =
NCMPI_PATH = /usr/local/netcdf
MPE_PATH =
#----------------------------------------------------------------------------
# Compiler and linker commands
#
# Use the MPICH wrappers around the compilers -- these will automatically
# load the proper libraries and include files. Version of MPICH prior
# to 1.2.2 (?) do not recognize .F90 as a valid Fortran file extension.
# You need to edit mpif90 and add .F90 to the test of filename extensions,
# or upgrade your MPICH.
#----------------------------------------------------------------------------
FCOMP = ${MPI_PATH}/bin/mpif90
CCOMP = ${MPI_PATH}/bin/mpicc
CPPCOMP = ${MPI_PATH}/bin/mpic++
LINK = ${MPI_PATH}/bin/mpif90
# pre-processor flag
PP = -D
#----------------------------------------------------------------------------
# Compilation flags
#
# Three sets of compilation/linking flags are defined: one for optimized
# code, one for testing, and one for debugging. The default is to use the
# _OPT version. Specifying -debug to setup will pick the _DEBUG version,
# these should enable bounds checking. Specifying _TEST is used for
# flash_test, and is set for quick code generation, and (sometimes)
# profiling. The Makefile generated by setup will assign the generic token
# (ex. FFLAGS) to the proper set of flags (ex. FFLAGS_OPT).
#----------------------------------------------------------------------------
OPENMP =
#-fopenmp
# *************************cambio ********************************
# PATRON
#FFLAGS_OPT = -c -O2 -fdefault-real-8 -fdefault-double-8 \
#-Wuninitialized
# OPTIMIZADO
FFLAGS_OPT = -c -O3 -march=broadwell -fdefault-real-8 -fdefault-double-8 \
-Wuninitialized
#I explictly add -O0 because I found that compiling source files without
#an optimization flag generates the same object code as compiling source
#files with -O2. The -O0 is required so that gdb no longer shows
#"" for certain function arguments.
FFLAGS_DEBUG = -ggdb -c -O0 -fdefault-real-8 -fdefault-double-8 \
-pedantic -Wall -Waliasing \
-Wsurprising -Wconversion -Wunderflow \
-ffpe-trap=invalid,zero,overflow -fbounds-check \
-fimplicit-none -fstack-protector-all
FFLAGS_TEST = -ggdb -c -O0 -fdefault-real-8 -fdefault-double-8
FFLAGS_HYPRE = -I${HYPRE_PATH}/include
F90FLAGS = -w -fallow-argument-mismatch
#The macro _FORTIFY_SOURCE adds some lightweight checks for buffer
#overflows at both compile time and run time (only active at -O1 or higher)
#http://gcc.gnu.org/ml/gcc-patches/2004-09/msg02055.html
# *****************************cambios***********************************
# FLAGS PATRON
#CFLAGS_OPT = -ggdb -c -O2 -Wuninitialized -D_FORTIFY_SOURCE=2
# FLAGS OPTIMIZADO
CFLAGS_OPT = -c -O3 -march=broadwell -Wuninitialized -D_FORTIFY_SOURCE=2
CFLAGS_DEBUG = -ggdb -c -O0 -Wno-div-by-zero -Wundef \
-Wconversion -Wstrict-prototypes -Wunreachable-code \
-pedantic -Wall -Winit-self -ftree-vrp -Wfloat-equal \
-Wunsafe-loop-optimizations -Wpadded -fstack-protector-all
CFLAGS_TEST = -ggdb -O0 -c
# if we are using HDF5, we need to specify the path to the include files
CFLAGS_HDF5 = -I${HDF5_PATH}/include -DH5_USE_16_API
CFLAGS_NCMPI = -I${NCMPI_PATH}/include
#----------------------------------------------------------------------------
# Linker flags
#
# There is a seperate version of the linker flags for each of the _OPT,
# _DEBUG, and _TEST cases.
#----------------------------------------------------------------------------
LFLAGS_OPT = -o
LFLAGS_DEBUG = -ggdb -O0 -o
LFLAGS_TEST = -ggdb -O0 -o
#----------------------------------------------------------------------------
# Library specific linking
#
# If a FLASH module has a 'LIBRARY xxx' line in its Config file, we need to
# create a macro in this Makefile.h for LIB_xxx, which will be added to the
# link line when FLASH is built. This allows us to switch between different
# (incompatible) libraries. We also create a _OPT, _DEBUG, and _TEST
# library macro to add any performance-minded libraries (like fast math),
# depending on how FLASH was setup.
#----------------------------------------------------------------------------
LIB_OPT =
LIB_DEBUG =
LIB_TEST =
LIB_HDF4 =
LIB_HDF5 = -L ${HDF5_PATH}/lib -lhdf5 -lz
LIB_PAPI =
LIB_MATH =
LIB_MPI =
LIB_NCMPI = -L ${NCMPI_PATH}/lib -lpnetcdf
LIB_MPE =
LIB_HYPRE = -L${HYPRE_PATH}/lib -lHYPRE
# Uncomment the following line to use electic fence memory debugger.
# export EF_ALLOW_MALLOC_0=1
#CONFIG_LIB = -L/usr/lib64 -lefence
#----------------------------------------------------------------------------
# Additional machine-dependent object files
#
# Add any machine specific files here -- they will be compiled and linked
# when FLASH is built.
#----------------------------------------------------------------------------
MACHOBJ =
#----------------------------------------------------------------------------
# Additional commands
#----------------------------------------------------------------------------
MV = mv -f
AR = ar -r
RM = rm -f
CD = cd
RL = ranlib
ECHO = echo
#----------------------------------------------------------------------------
# Fake existence of iso_c_bindings module to prevent unnecessary recompilations.
#----------------------------------------------------------------------------
ifeq ($(FLASHBINARY),true)
iso_c_binding.mod :
touch $@
endif
mulatona (mulatona.ccad.unc.edu.ar)
module load gcc/7
module load flash/4.4
mendieta (mendieta.ccad.unc.edu.ar)
module load flash/4.5
3. Cómo compilar el programa:
En /lugardeinstalacion/FLASHX.X/./setup magnetoHD/proyecto -auto -parfile=flash.par +usm threadBlockList=True -objdir=object -site=clemente -2d -maxblocks=5000 -nxb=20 -nyb=10
* **parfile**: archivo de parámetros
* **+usm**: se activa el Unsplit Staggered Method. Este metodo evalua los campos en las caras, para hacer una correcta limpieza de los monopolos magnéticos.
* **threadBlockList**:
* **-objdir**: directorio donde se crearán los objetos para compilar
* **-site**: nombre de la máquina donde se correrá. Si no se pone nada, por default es la máquina donde estamos
* **-2d**: corrida bidimensional
* **maxblocks**: número máximo de bloques permitidos
* **nxb, nyb**: número de celdas por bloque.
Luego compilar haciendo:
cd /lugardeinstalacion/FLASHX.X/object/
make -j 16
4. Cómo correr el programa
a) Máquinas con trabajos en cola → clemente, mulatona (uso exclusivo del IATE) y mendieta (cluster UNC)
Para correr el programa, usar los diferentes [[script>wiki:infraestructura_computo|script]] según la maquina . Se deben copiar los submit_job_maquina.sh en las carpetas donde se crean los objetos de la compilación. Luego correrlos con:
sbatch submit_job_maquina.sh
Tips: antes de correr verificar los cores y nodos disponibles:
[[Tutorial>wiki:tutorial_slurm|Tutorial de Slurm]]
b) Para correr en las máquinas sin trabajos en cola:
cd /lugardeinstalacion/FLASHX.X/object/
mpirun -np 8 ./flash4
var acc = document.getElementsByClassName("botonPanel");
var i;
for (i = 0; i < acc.length; i++) {
acc[i].addEventListener("click", function() {
this.classList.toggle("active");
var panel = this.nextElementSibling;
if (panel.style.display === "block") {
panel.style.display = "none";
} else {
panel.style.display = "block";
}
});
}