INTRODUCCION A CACTUS: PARTE 1 Francisco Siddhartha Guzman Murillo Instituto de Fisica y Matematicas, Univesidad Michoacana de San Nicolas de Hidalgo PARTE 1: EL FUNCIONAMIENTO BASICO --------------------------------- Requisitos: perl 5.0 -> GNU make C CPP CVS MPI * C++ F70/F90 En general soporta cualquier arquitectura que se sugiera al equipo Cactus. Estructura de directorios en Cactus/: src/ (el codigo fuente de Cactus) doc/ (la documentacion general) arrangements/ (los arreglos que contienen las espinas) CVS/ lib/ exe/ <- [eventualmente] CONFIGS/ <- Muy importante - contiene el archivo ThornList [ver "ThornList"] - Los .a generados durante la compilacion - los datos de los infraestructura usada para compilar Creacion de una configuracion 1. Necesita haber algunas espinas que compilar en Cactus/arrangements/ 2. Espinas basicas: # arrangement/thorn # implements (inherits) [friend] {shares} # CactusBase/Boundary # boundary ( ) [ ] { } CactusBase/CartGrid3D # grid (coordbase) [ ] {driver} CactusBase/CoordBase # CoordBase ( ) [ ] { } CactusBase/IOASCII # IOASCII ( ) [ ] {IO} CactusBase/IOBasic # IOBasic (IO) [ ] {IO} CactusBase/IOUtil # IO ( ) [ ] { } CactusBase/MoL # MethodOfLines ( ) [ ] { } CactusBase/SymBase # SymBase ( ) [ ] { } CactusBase/Time # time ( ) [ ] {cactus} CactusPUGH/PUGH # Driver ( ) [ ] {cactus} CactusPUGH/PUGHReduce # Reduce ( ) [ ] { } CactusPUGH/PUGHSlab # Hyperslab ( ) [ ] { } CactusUtils/NaNChecker # NaNChecker (Reduce) [ ] { } CactusUtils/TimerReport # timerreport ( ) [ ] { } CactusWave/IDScalarWave # idscalarwave (wavetoy,grid) [ ] {grid} CactusWave/IDScalarWaveC # idscalarwave (wavetoy,grid) [ ] {grid} CactusWave/IDScalarWaveCXX # idscalarwave (wavetoy,grid) [ ] {grid} CactusWave/IDScalarWaveMoLC # idscalarwavemol (wavetoyMoL,grid) [ ] {grid,wavetoymol} CactusWave/Schroedinger # schroedinger (Grid,Boundary) [ ] {grid,MethodOfLines} CactusWave/WaveBinarySource # binarysource (wavetoy,grid,idscalarwave) [ ] { } CactusWave/WaveMoL # wavetoyMoL (Grid,Boundary) [ ] {MethodOfLines} CactusWave/WaveMoLF90 # realphi (Grid,Boundary) [ ] {grid,MethodOfLines} CactusWave/WaveToyC # wavetoy (grid) [ ] { } CactusWave/WaveToyCXX # wavetoy (grid) [ ] { } CactusWave/WaveToyF77 # wavetoy (grid) [ ] { } CREANDO UNA CONFIGURACION (y un ejecutable): -----> paso 0: gcc g++ g77 Esto es para verificar que hay compiladores. paso 1: gmake options= revisa los compiladores existentes dice cuales son los errores potenciales durante la compilacion options file: CC= CXX= F90= F77= CFLAGS= CXXFLAGS= F77FLAGS= F90FLAGS= LD= paso 2: escribir el archivo /ThornList que contenga la lista de espinas de interes O BIEN -> paso 2: gmake - de cualquier modo pedira editar la lista de espinas existentes en arrengements/ NOTA: Compilar con espinas que no son de interes solo hara mas largo el proceso y producira ejecutables mas voluminosos.... paso 3: despues del proceso de compilacion ir a exe/ y revisar que hay un ejecutable llamado "cactus_" EJECUTANDO EL PROGRAMA - Es necesario un archivo de parametros [ver "wavetoyc_rad.par"] - Lo mas relevante del archivo de parametros: 1) Las espinas activas 2) La definicion del dominio espacial 3) La definicion de la resolucion 4) La definicion de dt 5) Definir los valores de los parametros de valores iniciales (del problema en cuestion) 6) En todos los casos hay valores por defecto para cada parametro. 7) Ah! el directorio de salida es importante tambien - La ejecucion es: cactus_ archivo-de-parametros.par VISUALIZANDO EL LOS RESULTADOS - En el directorio exe hay un ejecutable de ygraph - En las intalaciones estandard de linux hay gnuplot --------------------------------------------------------------- HAGAMOSLO CON EL EJEMPLO CLASICO: WAVETOY Paso 1: se instala Cactus con las espinas necesarias en arrangements/ procedemos a compilar. Aqui llamare a la configuracion "ondas". paso 2: gmake ondas (revisa los compiladores existentes) paso 3: gmake ondas (compila las espinas y crea el ejecutable | tarda unos minutos) debe aparecer el archivo exe/cactus_ondas (es el ejecutable) paso 4: en exe/ he puesto algunos archivos de parametros *.par - hay archivos de parametros para disttintas combinaciones de espinas f77 y C - hay distintas condiciones de frontera en casa archivo de parametro - echemos un vistazo a un archivo de parametros + nx [es el numero de puntos de la malla en la direccion x, etc] + dtfac [es el factor dt/dxyz] + idscalarwave::sigma = 2.8 [ancho de una gaussiana] + wavetoyf77::bound = "radiation" + grid::domain = "octant" + IOBasic::outScalar_every = 2 IOBasic::outScalar_vars = "wavetoy::phi" + IOASCII::out1D_every = 2 IOASCII::out1D_vars = "wavetoy::phi " + etc..... + Como ver otros paramatros????? gaussian, box?.... paso 5: ygraph phi_x_[1][1].xg [por ejemplo] splot 'phi_xy_[1].asc' i 0 w l [para la salida 2D] --------------------------------------------------------------- ESTRUCTURA DE UNA ESPINA - Hay tres archivos fundamentales: configuration.ccl Es un archivo temp -> CartGrid3D interface.ccl Es el archivo donde: * Se define el nombre de la IMPLEMENTACION * Se definen las GRID FUNCTIONS * Se definen las relaciones con otras espinas: + inherits: grid + friend: esto o lo otro * Se incluyen propiedades definidas en otras espinas: + USES INCLUDE: Symmetry.h => Cactus/arrangements/CactusWave/WaveToyF77/interface.ccl param.ccl Es el archivo donde: * Se definen los paramatros de la espina: + KEYWORD bound "Type of boundary condition to use" + REAL radius "The radius of the gaussian wave" { 0:* :: "Positive" } 0.0 + REAL sigma "The sigma for the gaussian wave" { 0:* :: "Positive" } 0.1 => Cactus/arrangements/CactusWave/WaveToyF77/param.ccl schedule.ccl Es el archivo donde: * Se pide la memoria para los ARRAYS * Se define el orden en que se llama a las subrutinas => Cactus/arrangements/CactusWave/WaveToyF77/schedule.ccl CCTK_STARTUP CCTK_PARAMCHECK CCTK_BASEGRID CCTK_INITIAL CCTK_POSTINITIAL CCTK_PRESTEP CCTK_EVOL CCTK_POSTSTEP CCTK_ANALYSIS SYNC (sincroniza las variables en todos los dominios) - Hay cuatro directorios fundamentales: src/ - Aqui se alamcenan los archivos del codigo fuente, con subrutinas locales. - Tambien hay un archivo make que se ejecuta localmente (en esta espina), y que se encarga de ligar unas rutinas locales con otras. - en el "make" tambien es posible compilar partes de espinas externas. doc/ Aqui hay que poner la documentacion. par/ Aqui hay archivos de parametros que se sabe que funcionan bien, y que sirven para probar que hemos compilado la espina de alguien mas correctamente. test/ Aqui se almacenan archivos de paramatros y los archivos de salida generados con esos archivos de parametros. El objeto de estos archivos es probar que los resultados de un calculo sean independientes de la maquina donde se ejecutan, y de la combinacion de compiladores que se haya usado. ---------------------------------------