Modelos numéricos¶
ModEM¶
Código de inversión 3D de datos magnetotelúricos ModEM. Este programa utiliza el algoritmo desarrollado por Egbert y Kelbert (2012), que constituye una formulación general para resolver problemas electromagnéticos inversos en el dominio de frecuencias.
Compilación de ModEM con MPI¶
Note
Para descargar ModEM se utiliza subversión y se debe de contar con acceso autorizado a los repositorios.
- Una vez descargado entrar al directorio donde se encuentran los fuentes:
$ cd ModEM/f90
- Modificar el archivo
Configure.3D_MT.Intel
para actualizar bibliotecas de los compiladores MPI y bibliotecas MKL de intel.
# Cambiar las lineas (15,16,26,27,33,37,38) donde aparezca:
ORIGINAL
-l '-llapack -lblas -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -lpthread -openmp -parallel' \
-lp '/opt/intel/Compiler/11.1/075/mkl/lib/em64t' \
# MPI configuration (not tested)
perl fmkmf.pl -f90 ifort \
MODIFICADO
-l '-llapack -lblas -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -lpthread -qopenmp -parallel' \
-lp '/opt/intel/oneapi/mkl/latest/lib/intel64' \
# MPI configuration (not tested)
perl fmkmf.pl -f90 mpiifort \
- Generar el archivo
Makefile
en su versión paralela con MPI.
$ ./Configure.3D_MT.Intel Makefile MPI
# Otras opciones
Usage: $0 Makefile [debug|release|MPI]
- Limpiar una posible compilación previa
$ make cleanall
- Compilar con
$ make -f Makefile
- Se genera el ejecutable
Mod3DMT
y copiarlo al directorio ModEM/ejecutable
Ejecución de ModEM con MPI¶
- Ejecutando un caso.
$ ls
BCcoast_mas_sedi_DCC_DR_model.mod data_fwd_resul2.dat datos_cascaron.dat PBS_fwd
- Crear el script de PBS para ejecutarlo con MPI de Intel (en este caso 16 cores de un solo nodo).
PBS_fwd
#!/bin/bash
#PBS -N ModeloC
#PBS -q intel
#PBS -l nodes=1:ppn=16
#PBS -o salida.txt
#PBS -e error.txt
ulimit -s unlimited
cd $PBS_O_WORKDIR
echo Inicio: `date` > tiempo.log
start=`date +%s`
sort -u $PBS_NODEFILE > nodes.file
mpiexec -ppn $PBS_NUM_PPN -np $PBS_NP -f nodes.file /home/judelga/ModEM/ejecutable/Mod3DMT -F BCcoast_mas_sedi_DCC_DR_model.mod datos_cascaron.dat data_fwd_resul2.dat
echo Final : `date` >> tiempo.log
end=`date +%s`
echo Tiempo ejecución : $((end-start)) seg. >> tiempo.log
- Enviarlo al PBS para su ejecución.
$ qsub PBS_fwd
- Revisar salida.
12 minutos
$ ls
data_fwd_resul2.dat salida.txt tiempo.log