.. _modelos`: 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. 1) Una vez descargado entrar al directorio donde se encuentran los fuentes: .. code-block:: shell $ cd ModEM/f90 2) Modificar el archivo ``Configure.3D_MT.Intel`` para actualizar bibliotecas de los compiladores MPI y bibliotecas MKL de intel. .. code-block:: cfg # 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 \ 3) Generar el archivo ``Makefile`` en su versión paralela con MPI. .. code-block:: shell $ ./Configure.3D_MT.Intel Makefile MPI .. code-block:: cfg # Otras opciones Usage: $0 Makefile [debug|release|MPI] 4) Limpiar una posible compilación previa .. code-block:: shell $ make cleanall 5) Compilar con .. code-block:: shell $ make -f Makefile 6) Se genera el ejecutable ``Mod3DMT`` y copiarlo al directorio ModEM/ejecutable Ejecución de ModEM con MPI -------------------------- 1) Ejecutando un caso. .. code-block:: shell $ ls BCcoast_mas_sedi_DCC_DR_model.mod data_fwd_resul2.dat datos_cascaron.dat PBS_fwd 2) Crear el script de PBS para ejecutarlo con MPI de Intel (en este caso 16 cores de un solo nodo). **PBS_fwd** .. code-block:: bash #!/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 3) Enviarlo al PBS para su ejecución. .. code-block:: shell $ qsub PBS_fwd 4) Revisar salida. 12 minutos .. code-block:: shell $ ls data_fwd_resul2.dat salida.txt tiempo.log