miércoles 9 de noviembre de 2011

CD/DVD label CAE Linux

0 comentarios, Publicado por Sebastian Rodriguez en 07:39 ,
Gracias a los desarrolladores de CAE Linux , ahora tenemos la version 2011 que cuenta con las ultimas versiones de todas las herramientas de elementos finitos.

http://www.caelinux.com/CMS/

Les dejo algunas descripciones:
  • Dedicated to CAE , scientific computing and mathematical modelling with emphasis on finite element simulation and computational fluid dynamics 
  • Includes the integrated 3D pre-/ post / FE solver package SALOME_MECA 2011.2 (GPL, developped by EDF, France) which  represents the fusion of Salome v5.1.3 GUI and Code-Aster STA11.0 finite element solver (updated, GPL)
  • Offers a complete solution for CFD with OpenFOAM 2.0.1 , Gerris and Code-Saturne 2.0.2 solvers
  • Contains several 2D & 3D CAD/pre/post packages: Paraview, OpenDX, EnGrid 1.2, Elmer GUI, Netgen, Tetgen, GMSH v2.5, Salome v.6.3, Freecad 0.12, & QCad
  • Includes other simulation softwares for multiphysics simulation: Elmer v6.2 , Calculix v2.3, Impact, MBDyn, Dynela, Fenics
  • Offers several scientific tools like OpenModelica, GNU Octave (+ QtOctave GUI ), R & Rkward, Scilab, wxMaxima, Scipy, Latex and a full set of developpement tools / compilers.
Con el objetivo de contribuir un poco a la causa, decidi diseñar un simple Label para el DVD.





martes 19 de julio de 2011

Como instalar CalculiX 2.3 en Ubuntu 11.04 multi-core ó multi-thread

0 comentarios, Publicado por Sebastian Rodriguez en 18:30 ,
En orden de mejorar las capacidades operativas de los análisis que desarrollo para mi trabajo de grado me encontré con la tarea de habilitar los solucionadores de CALCULIX para que trabajen con mas de un núcleo. De nada vale comprar un computador costoso con 6 cores cuando solo se va a utilizar uno ¬¬.

La documentación de como hacer esto se encuentra en la Internet para el que sabe como buscarla, el problema esta en todas esas fuentes incomprensibles o erróneas que nos pueden hacer perder tiempo. Versiones antiguas, programas o librerías diferentes, plataformas distintas o simplemente escasa documentación es lo que normalmente se encuentra.

Para esto decidí crear mi propio tutorial en busca de dejar la documentación en caso de volverlo a hacer:
Nota: Para correr el ejecutable predeterminado descargado de CCX en versiones actuales de Ubuntu se debe hacer un enlace simbolico:
sudo ln -s /usr/lib/x86_64-linux-gnulibgfortran.so.3 /usr/lib/libgfortran.so.2
Cambiando "/usr/lib/x86_64-linux-gnu" por la direccion donde este instaldo libgfortran.so3 en su sistema.
Lo primero es instalar todas las herramientas necesarias para nuestro trabajo, como debemos compilar los paquetes debemos asegurarnos de tener en nuestro sistema los siguientes programas.
  • gcc-4.4
  • gfortran (es el mismo G95)
  • make
  • libcnf-dev
  • libextutils-f77
  • f2c
  • nautilus-open-terminal (opcinal)
  • liblapack-dev
  • libblas-dev
  • liblapack3gf ( y todas sus dependencias, TODAS >< ! )
Descargamos los archivos:
Copiamos estos 5 archivos a la carpeta /usr/local y los descomprimimos todos asegurándonos de copiar el contenido del PATCH dentro de la carpeta creada ARPACK y reemplazar los archivos.

Bien, hora de compilar Spooles, acá la cosa se pone interesante ya que debemos hacer unos arreglos a mano antes de compilarlo con MAKE, entonces los cambios son:
-En /usr/local/spooles.2.2/Tree/src/makeGlobalLib debemos cambiar:
drawTree.c por draw.c
(Esto debido a un error en la configuración de Spooles, ¬¬)
-En /usr/local/spooles.2.2/Make.inc debemos cambiar
CC = /usr/lang-4.0/bin/cc por CC = /usr/bin/cc
(Esto es para definir donde esta ubicado nuestro compilador de C)

Luego de esto si podemos compilar la librería de spooles con el siguiente comando ubicados en la carpeta de spooles.2.2 por supuesto:

$ sudo make lib
Hecho, tenemos spooles compilado normal, pero como todo esto es con el objetivo de tener Spooles en paralelo tenemos que hacer otro paso, lo que pasa es que hay dos formas de hacer funcionar Spooles multi-core y son: (A) Compilando las librerías normales y MT en una sola o (B) compilarlas por separado, en este caso nos decidimos por la opción B para que CALCULIX llame a cada librería por separado según requiera.
$ cd MT/src/
$ sudo make spoolesMT.a
Y hecho de nuevo.

Ahora para ARPACK también debemos editar algunos archivos.

-En /usr/local/ARPACK/ARmake.inc debemos cambiar
home = $(HOME)/ARPACK por home = /usr/local/ARPACK
(Para definir el lugar donde tenemos los archivos de ARPACK)

PLAT = SUN4 por PLAT = linux
(Hace falta explicar eso? ¬¬)
FC = f77 por FC = gfortran
FFLAGS = -O -cg89 por FFLAGS = -O2
MAKE = /bin/make por MAKE = /usr/bin/make
(Esto se cambia para especificar nuestro interprete de Fortran y la ubicación de MAKE)

Acá viene el "Machete" , resulta que hay una sub-rutina en ARPACK que sirve para determinar el tiempo de ejecución del proceso que trae un pequeño problema, la función "ETIME" ya no es una función externa utilizada en Linux, pero esperen un momento, no hay un parámetro que hace precisamente esto mismo en Linux llamado "TIME" ? , pues si, resulta que podemos despedirnos de esta sub-rutina ya que le tenemos reemplazo.
-En /usr/local/ARPACK/UTIL/second.f debemos cambiar
EXTERNAL ETIME por *EXTERNAL ETIME
(Esto se puede compensar (a mi parecer) adicionando el parámetro time antes del comando con el que llamemos a ccx para que nos calcule el tiempo que demora el proceso en terminar)

Para luego poder compilar en /usr/local/ARPACK

$ sudo make lib
Ya con las dos librerías compiladas vamos a la carpeta descomprimida de CALCULIX para compilarlo.

En /usr/local/CalculiX/ccx_2.3/src:
Vamos a compilar la versión MT de CALCULIX pero recordemos que esta sigue usando tanto Spooles MT como el normal ya que los compilamos separadamente, para esto vamos a asegurarnos de que nuestro archivo Makefile quede igual a esto:
CFLAGS = -Wall -O3 -I ../../../spooles.2.2 -DARCH="Linux" -DSPOOLES -DARPACK -DMATRIXSTORAGE -DUSE_MT=1
FFLAGS = -Wall -O3
CC=cc
FC=gfortran
.c.o :
$(CC) $(CFLAGS) -c $<
.f.o :
$(FC) $(FFLAGS) -c $<
include Makefile.inc
SCCXMAIN = ccx_2.3.c
OCCXF = $(SCCXF:.f=.o)
OCCXC = $(SCCXC:.c=.o)
OCCXMAIN = $(SCCXMAIN:.c=.o)
DIR=../../../spooles.2.2
LIBS = \
$(DIR)/MT/src/spoolesMT.a \
$(DIR)/spooles.a \
../../../ARPACK/libarpack_linux.a \
-lpthread -lm
ccx_2.3_MT: $(OCCXMAIN) ccx_2.3_MT.a $(LIBS)
./date.pl; $(CC) $(CFLAGS) -c ccx_2.3.c; $(FC) -Wall -O3 -o $@ $(OCCXMAIN) ccx_2.3_MT.a $(LIBS)
ccx_2.3_MT.a: $(OCCXF) $(OCCXC)
ar vr $@ $?
Y terminamos con le comando:

$ sudo make
El cual nos creara un ejecutable llamado "ccx_2.3_MT" el cual lo moveremos a /usr/local/bin para tenerlo a la mano, también hace falta mover el ejecutable "cgx_2.3" que esta ubicado en /usr/local a esta carpeta y asegúrate que estos dos ejecutables tengan permisos para ejecutarse como programas.
( usualmente yo prefiero re nombrarlos a simplemente ccx y cgx para mayor facilidad pero esto es opcional)

Ya tenemos CALCULIX instalado en nuestro sistema, pero si hacemos algunas pruebas notaremos que los cálculos con Spooles siguen utilizando un solo core, esto se debe a que debemos especificar cuantos procesadores queremos utilizar en el análisis, esto se hace con la condicion CCX_NPROC.

CCX_NPROC = -1 tratara de detectar el numero de procesadores para usarlos todos (no es recomendado)

CCX_NPROC = 1 usara 1 procesador
CCX_NPROC = 2 usara 2 procesadores ... y así sigue ¬¬

En el caso que se utilicen mas de 1 procesador en el análisis se creara un archivo en la carpeta de trabajo llamado spooles el cual nos dirá "Using # threads" , cuando se utiliza solo uno el archivo no es creado.

FIN, ahora podemos probar CALCULIX multi-core con:
$ export CCX_NPROC=  #
$ time ccx jobname    o    sudo time ccx jobname
Una pequeña prueba me arrojo estos resultados sorprendentes:

jueves 26 de mayo de 2011

Seguidor Solar con Arduino

0 comentarios, Publicado por Sebastian Rodriguez en 08:52 ,
De acuerdo a un proyecto propuesto en la clase de energia alternativas se construyo un prototipo de seguidor solar usando un micro controlador Arduino.

Para el desarrollo del proyecto se tuvieron en cuenta los siguientes parametros:Bajo costo.
  • Uso de materiales reciclables.
  • Construccion y ensamblaje facil.
  • Produccion independiente de energia electrica.
  • Un eje de rotacion programable para el seguimiento de una bombilla
El dispositivo cuenta con un microcontrolador arduino que reconoce mediante a 3 foto-resistencias la inclinacion de alguna fuente de luz, calcula el movimiento necesario para alinear a 90 grados el plano donde se encuentra la foto-celda ( lo que incrementa su eficiencia) y mediante un servo motor instalado alinea la placa en la direccion indicada.




El codigo utilizado en realidad es muy simple, una simple comparacion entre los valores de los tres sensores y un mapeo para los 180 angulos de recorrido del servo-motor:

int v1 = 35;
if (valor3 < 700){
}
int v2 = 0;
a = 1;
if (a==1){
int analog = 0;
}
v1 = v1 - 1;
int p= 0;
}
}
int servo = 2;
}
if (a==3){
int valor1 = 0;
if (valor2 > 700) {
v1 = v1 + 1;
int valor2 = 0;
if (valor1 < 700){
}
int valor3 = 0;
if (valor3 < 700){
if (a==4){
int a = 0;
a = 2;
v1 = 35;
void setup()
}
}
{
}
if (v1>0){
pinMode(servo, OUTPUT);
}
if (v1<180){
Serial.begin(9600);
if (valor3 > 700) {
}
pinMode(1, INPUT);
if (valor2 < 700){
else{
pinMode(2, INPUT);
if (valor1 < 700){
v1 = 180;
pinMode(3, INPUT);
a = 3;
}
}
}
}
void loop()
}
else{
{
}
v1 = 0;
valor1 = analogRead(1);
if (valor3 < 700) {
}
valor2 = analogRead(2);
if (valor2 < 700){
v2 = map(v1,0,180,500,2500);
valor3 = analogRead(3);
if (valor1 < 700){
digitalWrite(servo, HIGH);
a = 2;
a = 4;
delayMicroseconds(v2);
if (valor1 > 700) {
}
digitalWrite(servo, LOW);
if (valor2 < 700){
}
}


sábado 1 de enero de 2011

Analisis de Humero con material anisotropico CalculiX CAElinux

4 comentarios, Publicado por Sebastian Rodriguez en 13:04 ,
Siguiendo con las pruebas sobre Calculix en CAElinus llega el turno de incursionar en el tema de los materiales, como la idea principal es un analisis de rodilla dinamico de contacto es de vital importancia saber manejar el material de los huesos sobre calculix. Lo divertido del asunto es que el hueso no es un material "uniforme" como los que se acostumbran a manejar como el acero o algunos plasticos , este es un material compuesto bastante complejo , se componen de distintas capas de fibra con distintas propiedades fisicas y mecanicas.
Antes que nada se debe leer un poco acerca de las propiedades mecanicas del hueso, ahunque no representa la investigacion oficial para los analisis del proyecto de investigacion si son una buena partida para entender como funciona este material. La diferencia radica en que no podemos solo especificar un modulo de YOUNG y un radio de POISSON'S ya que el hueso no se comporta de la misma manera para cargas en distintos ejes coordenados, este no experimenta la misma deformacion o esfuerzo sobre toda su geometria; lo que quiere decir que (como minimo) debemos conocer las diferentes propiedades mecanicas para este material ANISOTROPICO en las distintas direcciones.

Estos detalles hacen que el hueso no se pueda tratar como otros materiales en CalculiX, para esto (almenos por ahora) se decide usar la funcion *ELASTIC,TYPE=ENGINEERING CONSTANTS para ingresar al archivo de configuracion estas propiedades de este modo:
Bien, ahora para hacer la prueba se necesita algun hueso, para esto se cuenta con el diseño en 3D de un humero humano, basandonos en un poco de medicina para esto ; ) , se tiene un modelo almenos util para este ejemplo. La idea de usar este modelo es tratar de reconstruir una fractura de humero en base en la informacion recolectada usando las propiedades del hueso que ya se conocen, se debe conocer las dimensiones promedio del humero, tomando como base una altura de 1,75m para un hombre se obtiene la longitud del humero. en base a unos conceptos (muy basicos y no 100% seguros) de la dinamica de este hueso en el sistema esqueleto-muscolar se pueden tomar las uniones como puntos de apoyo para aplicar una fuerza y ver que resulta de esto.

Se quiere realizar el siguiente analisis:

*INCLUDE, INPUT=all.msh
*INCLUDE, INPUT=fijo.nam
*INCLUDE, INPUT=fijo2.nam

*BOUNDARY
Nfijo,1,3,0

*MATERIAL,NAME=EL
*ELASTIC,TYPE=ENGINEERING CONSTANTS
17000000.,11500000.,11500000.,.3,.11,.21,3600000.,3300000.,
3300000.,273.
*SOLID SECTION,ELSET=EALL,MATERIAL=EL

*STEP
*STATIC,DIRECT

*CLOAD
Nfijo2,3,-100.

*EL FILE
S, U
*END STEP
*Alguno de los valores puede que no coincidan con el original.

Con esto ya se tiene una base del manejo de materiales anisotropicos y una humilde introduccion al manejo de modelos biomecanicos, los archivos del analisis se pueden descargar de aca: humero2.zip

miércoles 29 de diciembre de 2010

Analisis de contacto con CalculiX y Blender en CAElinux

0 comentarios, Publicado por Sebastian Rodriguez en 17:41 ,
Ejercicio exitoso de diseño en Blender y enmallado en NET-Gen , analisis de contacto con valores inventados en CalculiX. El diseño muy simple hecho en Blender buscaba una geometri que encajara sin problemas un toroide y una esfera SEPARADAS, hay que resaltar que los elementos no estan conectados pero son del mismo material (pereza) , el toroide fijo y la esfera desplazandose a encajar con el este.

Lo curioso de este ejercicio es que solo representa el primer contacto que existe entre los objetos , en un lado del toroide ( esto debido a que no estaban bien centrados , #sry ) que recibe a la esfera, los dos se deforman al contacto y sufren su respectivo esfuerzo. Pero modificando el archivo .INP se puede analisar todo el contacto hasta que encajen perfectamente.

De nuevo = Los valores son inventados.
*HEADING
Model: Ejemplo3
*INCLUDE, INPUT=all.msh
*INCLUDE, INPUT=base.nam
*INCLUDE, INPUT=carga.nam
*INCLUDE, INPUT=nodosarriba.nam
*INCLUDE, INPUT=f2s1.sur
*MATERIAL, Name=sabradioscual
*ELASTIC
210000.0, .3
*DENSITY
7.8E-9
*SOLID SECTION, Elset=Eall, Material=sabradioscual

*SURFACE, NAME=Snodosarriba, TYPE=NODE
Nnodosarriba
*CONTACT PAIR, INTERACTION=SI1
Snodosarriba, Sf2s1

*SURFACE INTERACTION, NAME=SI1
*SURFACE BEHAVIOR, PRESSURE-OVERCLOSURE=EXPONENTIAL
1.0e-4,.5

*STEP
*STATIC
.01,1.
*BOUNDARY
Nbase,1,3,0
*CLOAD
Ncarga,3,-10000.

*EL FILE
S, U
*END STEP

 
Licencia Creative Commons
Blog SebastianGNU por Jhoan Sebastian Rodriguez se encuentra bajo una Licencia Creative Commons Atribución-CompartirIgual 3.0 Unported.
Basada en una obra en sebastiangnu.blogspot.com.
Permisos que vayan más allá de lo cubierto por esta licencia pueden encontrarse en http://sebastiangnu.blogspot.com/.