Materiais fractais

O assunto

Quando se trata de descobrir um modo de fazer, o ser humano é normalmente mais rápido do que para entender. Grande parte das práticas e tecnologias usadas ainda hoje é milenar (por exemplo, na cerâmica, nas ligas metálicas, na lubrificação, na produção do vidro, e muitas outras) e só muito recentemente nos aventuramos a tentar entender, de forma incompleta, os fundamentos destas tecnologias. É assim que, sem conhecer ou considerar apropriadamente a fractalidade de certos materiais, o homem muitas vezes os empregou pelos efeitos práticos que podia observar (sem entender). Nesta aula vamos considerar materiais hoje estudados como fractais. Vamos também exemplificar a diferença que a fractalidade de um material pode ter na prática construindo um eletrodo de oxigênio e utilizando-o para fazer funcionar uma célula combustível de alumínio. Nosso eletrodo só é capaz de conduzir oxigênio suficiente para a produção de eletricidade em quantidade, por causa da fractalidade.

Temas da aula

  1. Seção de perguntas e respostas.
  2. Modelos fractais para superfícies rugosas e materiais porosos.
  3. O carvão ativado e suas curiosas propriedades.
  4. Uma pilha feita com sal de cozinha.
  5. Construindo uma célula a combustível.

Superfícies rugosas

// Autor: Prof. Deilson Tavares
// Para o curso "Fractais e Caos na Ciência e na Tecnologia"
 
function [M,y] = deposicao_balistica(K,L,N)
 
  M=zeros(K,L); // Tamanho do sistema max compac.: K ligações atômicas na vertical, L na horizontal. 
  M(1,:)=32*ones(1,L); // A primeira camada é homogênea.
  y = ones(1,L); // Só a primeira camada está preenchida.
  for i = 1:N // Começa a deposição de N átomos.
    x = ceil(L*rand()); // Escolha uma trajetória vertical de deposição ao acaso.
    ys = y(x); // Verifique qual o sítio ativo naquela coluna.
    M(ys,x)=32; // Ligue o novo átomo nesta posição.
    y(x)=ys+1; // O novo sítio ativo está uma camada acima. 
    if x>1 & ys>y(x-1) then // Se o sítio ativo à esqueda é mais baixo
      y(x-1)=ys; // então coloque-o na mesma altura.
    end
    if x<L & ys>y(x+1) then // Se o sítio à direita é mais baixo
      y(x+1)=ys; // então coloque-o na mesma altura.
    end
  end  // Termina a deposição de N átomos.
  M = M([K:-1:1],:); // Reverta a matriz que guarda o aglomerado (melhora a visualização).
endfunction

O programa acima simula um processo chamado deposição balística. Na deposição balística, átomos são depositados sobre uma superfície regular, chamada substrato, após seguirem uma trajetória vertical até passarem pela vizinhança de um átomo do substrato ou de um átomo já depositado. Quando isto acontece, este fica "colado" neste ponto, que chamaremos de ponto ativo. Por este processo, é claro que a superfície vai crescendo e se tornando irregular, rugosa. As imagens abaixo mostram o resultado de uma simulação usando o programa. Para obter imagens semelhantes você precisa do programa "separa_elementos", que se encontra no fim da página.

aglomerado_deposicao_balistica.png
superficie_rugosa.png

Meios porosos

// Autor: Prof. Deilson Tavares
// Para o curso "Fractais e Caos na Ciência e na Tecnologia".
function M = aglomerado_percolacao_2d(L,p)
 
  M = rand(L,L); // Sorteie um número aleatório entre 0 e 1 para cada volume do sistema (probabilidade uniforme).
  x = find(M<=p); // Veja quais volumes estão associados a números menores ou iguais a p e guarde-os no vetor x.
  M = 32*ones(L,L); // Coloque matéria em todas as posições (convencionamos o código 32 para indicar matéria).
  M(x)=0; // Faça um vazio nas posições designadas pelo vetor x (convencionamos o códico 0 para indicar vazio).
 
endfunction
 
// Observe que o resultado final desta função é preencher a matriz M com 32 ou 0. Os valores 0 aparecem
// com probabilidade p.

O programa acima simula a distribuição de vazios e preenchimento em um material poroso (modelo em duas dimensões). Por esta simulação o material tem uma certa porosidade medida pelo parâmetro p. Observe que, no modelo, a porosidade é representada pela probabilidade de encontrarmos um vazio quando escolhemos ao acaso um volume dentro do material. Usando a função "separa_elementos", que se encontra no final da página, podemos visualizar a distribuição de vazios, de material e também os pontos de fronteira. Uma mostra para p=0.4, p=0.6 e p=0.7 é vista nas figuras abaixo, com os volumes dentro do material poroso representados em uma matriz 200x200. Veja que na situação intermediária, há um conjunto de vazios (visualizado em azul) que se espalha por toda a extensão do material. Há também, e isso é muito importante, uma fronteira, formada por material em contato com o vazio, que também se espalha por todo o material, embora, neste modelo, as partes desta fronteira não sejam conectadas. Usando uma representação de tamanho 2000X2000 eu calculei a dimensão fractal desta fronteira, dando o valor d_f\approx1,89. Pelo que já sabemos de fractais isto significa que o comprimento desta fronteira deve ir para infinito quando refinamos o detalhamento mais e mais. De forma análoga, em materiais porosos com porosidade fractal, existe uma superfície de fronteira entre a matéria e o vazio. Esta superfície cresce indefinidamente com o aumento do detalhamento. É por isso que 1 grama de carvão ativado pode ter até mais de mil metros quadrados de área nos seus poros.

baixa_porosidade.png
porosidade_critica.png
porosidade_super_critica.png
dim_frac_fronteira_perc.png

Carvão ativado

Veja na figura abaixo qual a área da superfície dos poros por grama de uma certa marca de carvão ativado que se compra em lojas de aquários.

prop_carvao_ativado.jpg

Função para animação e figuras coloridas dos elementos formando as estruturas complexas

// Autor: Prof. Deilson Tavares
// Para o curso "Fractais e Caos na Ciência e na Tecnologia"
// Esta função separa os elementos de uma matriz M preenchida com 0 e 32 em três categorias:
// -- Os zeros são convertidos em 16.
// -- Os elementos 32 que têm contato com um zero são convertidos em 4.
// -- Os elementos 32 que não têm contato com um zero permanecem 32.
// Convencionaremos chamar 16 de vazio, 4 de fronteira ou superfície e 32 de material.
 
function R = separa_elementos(M,g)
// Quando g vale 1 a função mostra uma animação do processo de
// classificação.
 
  if g==1 then
   figure;
   set(gca(),"auto_clear","on")
  end
 
  [k,l]=size(M); // Determine o tamanho da matriz.
  R=M; // Inicialize a matriz resultado R igual a M.
  L=[[1:l]' ones(l,1)]; // Coloque todos os pontos na linha 1 como pontos de sondagem.
  N = l; // O número de pontos de sondagem é o número de colunas.
  while N>0 // Enquanto existirem pontos de sondagem procure classificar seus vizinhos
    Lp=[]; // A lista dos próximos pontos de sondagem é vazia.
    for i = 1:N // Começe a sondagem usando a lista L.
      x = L(i,1);y=L(i,2); // Retire as coordenadas do ponto atual de sondagem da linha i de L.
 
      if x>1 & R(y,x-1)==0 then  //Se o ponto à esqueda de (x,y) for vazio
        R(y,x-1)=16;Lp=[Lp;[x-1 y]]; // então marque-o com 16 e coloque-o na lista de próximos pontos de sondagem.
      elseif x>1 & R(y,x-1)==32 // Se o ponto à esquerda de (x,y) contiver material
        R(y,x-1)=4; // então marque-o como de fronteira.
      end
 
      if x<l & R(y,x+1)==0 then // Exercício: interprete este e os demais testes de condições
        R(y,x+1)=16;Lp=[Lp;[x+1 y]]; // análogos que aparecem até o fim da função
      elseif x<l & R(y,x+1)==32 // de acordo com o modelo que escrevi
        R(y,x+1)=4; // no teste anterior.
      end
 
      if y>1 & R(y-1,x)==0 then
        R(y-1,x)=16;Lp=[Lp;[x y-1]];
      elseif y>1 & R(y-1,x)==32
        R(y-1,x)=4;
      end
 
      if y<k & R(y+1,x)==0 then
        R(y+1,x)=16;Lp=[Lp;[x y+1]];
      elseif y<k & R(y+1,x)==32
        R(y+1,x)=4;
      end
 
    end
    if g==1 then  
      mtlb_image(R);
    end
    L = Lp;
    [N,fake] = size(L);
  end
endfunction