Main

Introducci´ on a FreeFem++ versi´ on 1.0 2014 Este documento se distribuye bajo la licencia GPLv3 ´n ˜ iga Paulo Zu U

Views 278 Downloads 1 File size 684KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Introducci´ on a FreeFem++ versi´ on 1.0

2014 Este documento se distribuye bajo la licencia GPLv3

´n ˜ iga Paulo Zu

Universidad del B´ıo-B´ıo UBB

Índice general

1. Introducción 1.1. Primeros pasos . . . . . . . . . . . . 1.1.1. Instalación sobre Gnu/Linux 1.1.2. Ejecutar desde la terminal . . 1.2. Editor . . . . . . . . . . . . . . . . . 1.2.1. Gedit . . . . . . . . . . . . . 1.2.2. FreeFem++-cs . . . . . . . . 1.3. Syntaxis c++ . . . . . . . . . . . . . 1.4. Syntaxis FreeFem++ . . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

3 3 3 4 5 5 6 6 6

2. Dominio y espacios de elementos finitos 2.1. Dominio . . . . . . . . . . . . . . . . . . 2.1.1. Dominio Poligonal . . . . . . . . 2.1.2. Otros tipos de dominio . . . . . . 2.1.3. Condiciones de frontera . . . . . 2.2. FEspace . . . . . . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

7 7 7 7 7 7

3. Algunos ejemplos 3.1. Formulación primal del problema de poisson 2D . . . . 3.1.1. Condiciones de frontera tipo Dirichlet . . . . . 3.1.2. Condiciones de frontera tipo Neumann . . . . . 3.2. Formulación mixta del problema de poisson 2D . . . . 3.3. Problema de Stokes . . . . . . . . . . . . . . . . . . . . 3.4. Formulación primal del problema de elasticidad lineal

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

8 8 8 8 8 8 8

. . . . . . . .

2

Cap´ıtulo

1

Introducción En este primer capítulo se busca introducir al usuario en la instalación y configuración de FreeFem++, así como también en la instalación de editores que faciliten la escritura y ejecución de programas.edp. Para esto , se asumirá que el usuario utilizá alguna distribución Gnu/Linux como Debian o sus derivados (ubuntu, linuxmint, elementary OS, etc.). Se adelanta que no es necesario que el lector sea un experto en comandos de terminal o lenguajes de programación, pues se darán a conocer algunas ideas básicas de c++ y FreeFem++. Recomendamos actualizar su sistema antes de proseguir al siguiente paso.

1.1.

Primeros pasos

Antes de compilar FreeFem++, se debe usar el centro de software de ubuntu o synaptic para instalar los siguientes paquetes: build-essential, linux-headers-generic, y gfortran. Es importante notar que se puede evitar el proceso de compilación, ya que FreeFem++ se puede instalar desde el mismo centro de software de ubuntu, sin embargo la versión que aparece en los repositorios no está actualizada.

1.1.1.

Instalación sobre Gnu/Linux

La syntaxis usada en la terminal de Gnu/Linux es muy parecida a la usada en Mac Os X, debido a que ambos sistemas se originan de unix. En la mayoría de las distribuciones Gnu/Linux es posible invocar la terminal usando la combinación de teclas CTRL+ALT+T. Hasta la fecha de edición de este manual, FreeFem++ se encuentra en la versión 3.32-1 y es posible descargar su código fuente gratuitamente desde su pagina oficial. Para Ubuntu 14.04 o derivados deben descargar el archivo freefem++-3.32-1.tar.gz , abrir la terminal y dirigirse al directorio donde se encuentra el archivo en cuestión. Suponiendo que el usuario se encuentra en el directorio /home/usuario y que el archivo está en el directorio /home/Descargas; se debe ingresar al directorio Descargas utilizando el comando cd: user@machine:~$ cd Descargas El comando ls mostrará los archivos en el directorio Descargas: user@machine:~/Descargas $ ls Para descomprimir el archivo.tar.gz: user@machine:~/Descargas$ tar zxf freefem++-3.32-1.tar.gz

3

Procedemos a compilar FreeFem++ de la manera más sencilla. Se ingresa al directorio freefem++-3.32-1: user@machine:~/Descargas $ cd

freefem++-3.32-1

Como usuario normal deben ejecutar: user@machine:~/Descargas/ freefem++-3.32-1$ ./configure En esta parte se debe tener cuidado, pues lo más probable es que aparezcan muchos mensajes de error debido a que faltan librerías o herramientas de compilación. Afortunadamente el mismo mensaje de error entrega el nombre de los paquetes a instalar y en la mayoría de los casos, los comandos a ejecutar. Después de instalar cada una de las cosas que se pieden, deben volver a ejecutar ./configure y luego: user@machine:~/Descargas/freefem++-3.32-1$ sudo make Para instalar el paquete compilado: user@machine:~/Descargas/ freefem++-3.32-1$ sudo make install El comando sudo indica que el comando se ejecutará como usuario root o como administrador, razón por la cual se les pedirá la contraseña para cada sentencia.

1.1.2.

Ejecutar desde la terminal

Consideremos el problema: resolver el sistema de ecuaciones lineales Ax = b. Para escribir el programa en la terminal se usará el editor nano. user@machine:~$ sudo apt-get install nano para abrir el editor, simplemente deben escribir: user@machine:~$ nano Luego, copien y peguen el siguiente código: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

// E s t o e s un c o m e n t a r i o . // En e s t e p r o gr a m a s e han o m i t i d o l o s a c e n t o s . r e a l [ i n t , i n t ] B ( 4 , 4 ) ; // s e d e c l a r a l a m a t r i z B B=[[2 ,1 ,0 ,0] ,[1 ,2 ,1 ,0] ,[0 ,1 ,2 ,1] ,[0 ,0 ,1 ,2]] ; c o u t