Relatório Final PIBIC/CNPq



Documentos relacionados
O ESPAÇO NULO DE A: RESOLVENDO AX = 0 3.2

x0 = 1 x n = 3x n 1 x k x k 1 Quantas são as sequências com n letras, cada uma igual a a, b ou c, de modo que não há duas letras a seguidas?

Utilização do SOLVER do EXCEL

a 1 x a n x n = b,

[a11 a12 a1n 4. SISTEMAS LINEARES 4.1. CONCEITO. Um sistema de equações lineares é um conjunto de equações do tipo

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO PROGRAMA DE EDUCAÇÃO TUTORIAL - MATEMÁTICA PROJETO FUNDAMENTOS DE MATEMÁTICA ELEMENTAR

6. Geometria, Primitivas e Transformações 3D

IBM1018 Física Básica II FFCLRP USP Prof. Antônio Roque Aula 6. O trabalho feito pela força para deslocar o corpo de a para b é dado por: = =

APLICAÇÕES DA DERIVADA

AS LEIS DE NEWTON PROFESSOR ANDERSON VIEIRA

Algoritmos e Estrutura de Dados III. Árvores

Figura Vista frontal dos vórtices da Figura Vedovoto et al. (2006).

As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem:

CAP. I ERROS EM CÁLCULO NUMÉRICO

Forças internas. Objetivos da aula: Mostrar como usar o método de seções para determinar as cargas internas em um membro.

IBM1018 Física Básica II FFCLRP USP Prof. Antônio Roque Aula 3

Dadas a base e a altura de um triangulo, determinar sua área.

Tópico 11. Aula Teórica/Prática: O Método dos Mínimos Quadrados e Linearização de Funções

Estudaremos métodos numéricos para resolução de sistemas lineares com n equações e n incógnitas. Estes podem ser:

Estudo Comparativo de Cálculo de Lajes Analogia de grelha x Tabela de Czerny

Exercícios Teóricos Resolvidos

Por que o quadrado de terminados em 5 e ta o fa cil? Ex.: 15²=225, 75²=5625,...

Objetivos. Apresentar as superfícies regradas e superfícies de revolução. Analisar as propriedades que caracterizam as superfícies regradas e

CÁLCULO DE ZEROS DE FUNÇÕES REAIS

Arquitetura de Rede de Computadores

1. Extremos de uma função

Cálculo Numérico Faculdade de Engenharia, Arquiteturas e Urbanismo FEAU

Modelagem no Domínio do Tempo. Carlos Alexandre Mello. Carlos Alexandre Mello 1

computador-cálculo numérico perfeita. As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem:

6 Construção de Cenários

Só Matemática O seu portal matemático FUNÇÕES

Somatórias e produtórias

Ivan Guilhon Mitoso Rocha. As grandezas fundamentais que serão adotadas por nós daqui em frente:

Método dos mínimos quadrados - ajuste linear

Organização e Arquitetura de Computadores I

Faculdade de Engenharia Optimização. Prof. Doutor Engº Jorge Nhambiu

E A D - S I S T E M A S L I N E A R E S INTRODUÇÃO

Feature-Driven Development

Departamento de Matemática - UEL Ulysses Sodré. Arquivo: minimaxi.tex - Londrina-PR, 29 de Junho de 2010.

Resolução de sistemas lineares

Faculdade Sagrada Família

Correlação e Regressão Linear

UNIVERSIDADE FEDERAL DA BAHIA INSTITUTO DE MATEMÁTICA 5 0 Encontro da RPM TRANSFORMAÇÕES NO PLANO

2 A Derivada. 2.1 Velocidade Média e Velocidade Instantânea

Estabilidade. Carlos Alexandre Mello. Carlos Alexandre Mello 1

Matemática - UEL Compilada em 18 de Março de Prof. Ulysses Sodré Matemática Essencial:

Guia Site Empresarial

REFLEXÃO DA LUZ: ESPELHOS 412EE TEORIA

Módulo 4. Construindo uma solução OLAP

PARTE 2 FUNÇÕES VETORIAIS DE UMA VARIÁVEL REAL

INTRODUÇÃO AOS MÉTODOS FACTORIAIS

SUPERESTRUTURA estrutura superestrutura infra-estrutura lajes

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas

UNIVERSIDADE GAMA FILHO Laboratório de Controle I - MATLAB

4.2 Produto Vetorial. Orientação sobre uma reta r

5 Equacionando os problemas

Lei de Gauss Origem: Wikipédia, a enciclopédia livre.

*Circuito proposto para a aula prática. Foram utilizados ao todo, no circuito, seis resistores com as seguintes propriedades:

Global T126 e GFS), executando para ambos os horários (00Z e 12Z), utilizando

Qual é Mesmo a Definição de Polígono Convexo?

FATEC Cruzeiro José da Silva. Ferramenta CRM como estratégia de negócios

Caracterização temporal de circuitos: análise de transientes e regime permanente. Condições iniciais e finais e resolução de exercícios.

Capítulo 1. x > y ou x < y ou x = y

Universidade Federal de Goiás Instituto de Informática Processamento Digital de Imagens

Vetores Lidando com grandezas vetoriais

Tutorial de Viga: Ansys - Beam3

POTENCIAL ELÉTRICO. por unidade de carga

MRP II. Planejamento e Controle da Produção 3 professor Muris Lage Junior

Capítulo 11 MOTORES ELÉTRICOS DE CORRENTE CONTÍNUA E UNIVERSAL. Introdução

CorelDRAW UM PROGRAMA DE DESIGN

Árvores Binárias Balanceadas

Premiação por Produtividade

PROCESSO DE DESENVOLVIMENTO DE SOFTWARE. Modelos de Processo de Desenvolvimento de Software

Projetos. Universidade Federal do Espírito Santo - UFES. Mestrado em Informática 2004/1. O Projeto. 1. Introdução. 2.

ficha 3 espaços lineares

Cálculo Numérico Aula 1: Computação numérica. Tipos de Erros. Aritmética de ponto flutuante

O Problema do Troco Principio da Casa dos Pombos. > Princípios de Contagem e Enumeração Computacional 0/48

Capítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho

Capítulo 5: Aplicações da Derivada

Dicas para a 6 a Lista de Álgebra 1 (Conteúdo: Homomorfismos de Grupos e Teorema do Isomorfismo para grupos) Professor: Igor Lima.

Projeção ortográfica da figura plana

MATERIAL MATEMÁTICA I

Capacidade = 512 x 300 x x 2 x 5 = ,72 GB

Equações do segundo grau

UNIVERSIDADE FEDERAL DE SANTA MARIA COLÉGIO TÉCNICO INDUSTRIAL DE SANTA MARIA Curso de Eletrotécnica

Investigação Operacional- 2009/10 - Programas Lineares 3 PROGRAMAS LINEARES

PROGRAMA AUTOTRUSS 2.0

Análise de Dados do Financeiro

Prof. Vinícius C. Patrizzi ESTRADAS E AEROPORTOS

6.3 Equivalência entre Autômatos com Pilha Não-Determinísticos e Gramáticas Livre do Contexto

UNIVERSIDADE DO ESTADO DE SANTA CATARINA CENTRO DE CIÊNCIAS TECNOLÓGICAS CCT CURSO DE TECNOLOGIA EM SISTEMAS DE INFORMAÇÃO


Informática no Ensino de Matemática Prof. José Carlos de Souza Junior

Material Teórico - Módulo de Divisibilidade. MDC e MMC - Parte 1. Sexto Ano. Prof. Angelo Papa Neto

Hoje estou elétrico!

A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande

Notas de Cálculo Numérico

Capítulo 2 - Problemas de Valores Fronteira para Equações Diferenciais Ordinárias

por séries de potências

O ENSINO DE CÁLCULO NUMÉRICO: UMA EXPERIÊNCIA COM ALUNOS DO CURSO DE CIÊNCIA DA COMPUTAÇÃO

Transcrição:

Relatório Final PIBIC/CNPq Método dos Elementos Finitos Generalizados: Implementação e Aplicações Orientado: Leandro Lima Rasmussen Orientador: Sergio Persival Baroncini Proença São Carlos, 15 de julho de 2010.

Índice Geral ÍNDICE DE FIGURAS... 3 ÍNDICE DE TABELAS... 4 ÍNDICE DE ESQUEMAS MATRICIAIS... 4 RESUMO DO PROJETO... 6 Capítulo 1. Fundamentação Teórica... 7 1.1 Método dos Elementos Finitos Convencional (FEM)... 7 1.2 Método dos Elementos Finitos Generalizados (MEFG)... 12 1.3 Elementos Finitos Triangulares CST... 16 1.4 Algoritmo de Perturbação para Resolução de Sistemas Lineares... 19 1.5 Integração Numérica pelo Método da Quadratura de Gauss... 21 1.6 Integração Numérica em Domínios Triangulares... 24 1.7 Cálculo das Tensões e Deformações... 26 1.8 Algoritmo de Organização da Matriz de Rigidez pelo MEFG... 28 Capítulo 2. O Aplicativo GiD... 56 2.1 GiD The Personal Pre and Post Processor... 56 2.2 Configurações dos Arquivos de Conexão... 59 Capítulo 3. O Programa Chapas2D e a sua Integração com a Ferramenta GiD... 65 3.1 O Programa de MEFG Chapas2D... 65 3.2 Inicialização do Módulo de Cálculo, Execução do Desenho Geométrico e Definição dos Parâmetros da Análise... 66 Capítulo 4. Análises Comparativas... 74 4.1 Primeira Etapa de Testes: Chapa Engastada com Estado Múltiplo de Solicitação e Viga Engastada Fletida... 74 4.2 Segunda Etapa de Testes: Viga Engastada com Flexão Composta, Viga Biapoiada com Carga Centrada e Viga Engastada Tracionada... 83 Capítulo 5. Código-Fonte do Programa Chapas2D... 92 5.1 Constantes, Vetores e Matrizes Importantes Utilizados no Programa e seus Significados... 92 5.2 Código-Fonte Comentado do Programa Chapas2D... 95 BIBLIOGRAFIA... 121 2

ÍNDICE DE FIGURAS Figura 1. Exemplo de Elemento Finito de Chapa... 7 Figura 2. Esquema Ilustrativo de Nuvens Dentro de um Domínio Qualquer... 12 Figura 3. Conceito de Nuvens sob a Ótica do MEFG... 13 Figura 4. Exemplo de Nuvem Associada à um Certo Nó e a Maior Distância Entre Dois Nós... 16 Figura 5. Representação dos Graus de Liberdade Presentes em um Elemento Finito Triangular CST... 18 Figura 6. Elemento Finito Triangular e a Representação das Coordenadas em Diversos Pontos no Sistema de Referência Local... 25 Figura 7. Tela de Abertura do Aplicativo GiD... 56 Figura 8. Exemplo de Análise de uma Roda Dentada Sendo Visualizada no GiD... 57 Figura 9. Esquema Mostrando o Funcionamento do Software GiD... 58 Figura 10. Esquema do Funcionamento do Sistema de Arquivos do GiD... 59 Figura 11. Inicialização do Programa Chapas 2D no GiD... 66 Figura 12. Comandos Oferecidos pelo GiD para Definição do Desenho Geométrico do Problema Estrutural sob Análise... 67 Figura 13. Desenho Geométrico Pronto da Estrutura a ser Solucionada... 67 Figura 14. Comando de Criar Superfícies NURBS... 68 Figura 15. Comando Para Gerar a Malha de Elementos Finitos... 68 Figura 16. Exemplo de Malha de Elementos Finitos Triangulares Gerada para a Análise de uma Roda Dentada... 69 Figura 17. Tela da Opção "Condições" para Entrada dos Valores das Cargas Nodais... 69 Figura 18. Tela da Opção "Condições" para Restrição dos Deslocamentos Nodais... 70 Figura 19. Tela da Opção "Condições" para Aplicação dos Refinamentos Nodais... 70 Figura 20. Tela da Opção "materiais" para Definição dos Parâmetros de cada Material... 71 Figura 21. Tela para a Definição dos Parâmetros Gerais da Análise a ser Realizada... 71 Figura 22. Comando para se Realizar o Cálculo do Problema Estrutural... 72 Figura 23. Comandos para Visualização Gráfica dos Resultados de Pós Processamento... 72 Figura 24. Comandos para Visualização Gráfica de Resultados Locais de Pós Processamento... 73 Figura 25. Comando para Listagem de Resultados de Pós Processamento... 73 Figura 26. Esquema da Primeira Análise... 75 Figura 27. Valores dos Deslocamentos Nodais, na Direção X, da Primeira Análise no GiD... 76 Figura 28. Valores dos Deslocamentos Nodais, na Direção X, da Primeira Análise no Ansys... 77 Figura 29. Valores dos Deslocamentos Nodais, na Direção Y, da Primeira Análise no GiD... 77 Figura 30. Valores dos Deslocamentos Nodais, na Direção Y, da Primeira Análise no Ansys... 78 Figura 31. Valores das Tensões Médias Nodais, na Direção X, da Primeira Análise no GiD... 78 Figura 32. Valores das Tensões Médias Nodais, na Direção X, da Primeira Análise no Ansys... 79 Figura 33. Valores das Tensões Médias Nodais, na Direção Y, da Primeira Análise no GiD... 79 Figura 34. Valores das Tensões Médias Nodais, na Direção Y, da Primeira Análise no Ansys... 80 Figura 35. Valores das Tensões de Cisalhamento Médias Nodais da Primeira Análise no GiD... 80 Figura 36. Valores das Tensões de Cisalhamento Médias Nodais da Primeira Análise no Ansys... 81 Figura 37. Esquema da Segunda Análise... 81 Figura 38. Seção da Viga Estudada na Segunda Análise... 82 Figura 39. Valores dos Deslocamentos Nodais, na Direção Y, da Segunda Análise no GiD... 82 Figura 40. Valores dos Deslocamentos Nodais, na Direção Y, da Segunda Análise no Ansys... 83 Figura 41. Esquema da viga Estudada na Terceira Análise... 84 Figura 42. Malha de Triângulos Feita no GiD para a Terceira Análise... 84 Figura 43. Malha de Quadrados Feita no Ansys para a Terceira Análise... 84 Figura 44. Valores dos Deslocamentos Nodais, na Direção X, da Terceira Análise no GiD... 85 Figura 45. Valores dos Deslocamentos Nodais, na Direção Y, da Terceira Análise no Ansys... 85 Figura 46. Valores dos Deslocamentos Nodais, na Direção Y, da Terceira Análise no GiD... 86 Figura 47. Valores dos Deslocamentos Nodais, na Direção Y, da Terceira Análise no Ansys... 86 Figura 48. Esquema da Quarta Análise... 87 3

Figura 49. Refinamento Adotado na Malha de Elementos Finitos da Quarta Análise... 87 Figura 50. Valores dos Deslocamentos Nodais, na Direção Y, da Quarta Análise no GiD... 87 Figura 51. Valores da Tensões Média Nodais, na Direção X, da Quarta Análise no GiD... 87 Figura 52. Valores dos Deslocamentos Nodais, na Direção Y, da Quinta Análise no GiD... 88 Figura 53. Valores da Tensões Média Nodais, na Direção X, da Quinta Análise no GiD... 88 Figura 54. Malha Mais Refinada de Elementos Finitos da Sexta Análise... 89 Figura 55. Esquema do Refinamento Local: Os Nós Refinados Estão Circulados em Vermelho e os Nós, Com os Quais os Resultados Foram Comparados, Estão Circulados em Verde... 90 Figura 56. Esquema da Sétima Análise... 91 ÍNDICE DE TABELAS Tabela 1. Pontos e Pesos da Quadratura de Gauss... 23 Tabela 2. Pontos e Pesos de Hammer para Integração Numérica em Domínios Triangulares... 25 Tabela 3. Significado de Todos os Valores da Matriz FuncoesMatrizB... 30 Tabela 4. Propriedades dos Materiais Utilizados na Primeira Análise... 75 Tabela 5. Propriedades dos Materiais Utilizados na Segunda Análise... 82 ÍNDICE DE ESQUEMAS MATRICIAIS Esquema Matricial 1. Matriz B Convencional... 28 Esquema Matricial 2. Primeiro Exemplo de Matriz B Expandida... 29 Esquema Matricial 3. Segundo Exemplo de Matriz B Expandida... 29 Esquema Matricial 4. Primeiro Exemplo de Posicionamento de Valores no MEF Convencional... 34 Esquema Matricial 5. Primeiro Exemplo de Posicionamento de Valores no MEF Convencional... 34 Esquema Matricial 6. Primeiro Exemplo de Posicionamento de Valores no MEF Convencional... 35 Esquema Matricial 7. Primeiro Exemplo de Posicionamento de Valores no MEF Convencional... 35 Esquema Matricial 8. Primeiro Exemplo de Posicionamento de Valores no MEF Convencional... 35 Esquema Matricial 9. Primeiro Exemplo de Posicionamento de Valores no MEF Convencional... 36 Esquema Matricial 10. Primeiro Exemplo de Posicionamento de Valores no MEF Convencional... 36 Esquema Matricial 11. Primeiro Exemplo de Posicionamento de Valores no MEF Convencional... 36 Esquema Matricial 12. Primeiro Exemplo de Posicionamento de Valores no MEF Convencional... 37 Esquema Matricial 13. Primeiro Exemplo de Posicionamento de Valores no MEFG... 38 Esquema Matricial 14. Primeiro Exemplo de Posicionamento de Valores no MEFG... 39 Esquema Matricial 15. Primeiro Exemplo de Posicionamento de Valores no MEFG... 39 Esquema Matricial 16. Primeiro Exemplo de Posicionamento de Valores no MEFG... 40 Esquema Matricial 17. Primeiro Exemplo de Posicionamento de Valores no MEFG... 40 Esquema Matricial 18. Primeiro Exemplo de Posicionamento de Valores no MEFG... 41 Esquema Matricial 19. Primeiro Exemplo de Posicionamento de Valores no MEFG... 41 Esquema Matricial 20. Primeiro Exemplo de Posicionamento de Valores no MEFG... 42 Esquema Matricial 21. Primeiro Exemplo de Posicionamento de Valores no MEFG... 42 Esquema Matricial 22. Segundo Exemplo de Posicionamento de Valores no MEFG... 43 Esquema Matricial 23. Segundo Exemplo de Posicionamento de Valores no MEFG... 43 Esquema Matricial 24. Segundo Exemplo de Posicionamento de Valores no MEFG... 44 Esquema Matricial 25. Segundo Exemplo de Posicionamento de Valores no MEFG... 44 Esquema Matricial 26. Segundo Exemplo de Posicionamento de Valores no MEFG... 44 Esquema Matricial 27. Segundo Exemplo de Posicionamento de Valores no MEFG... 45 Esquema Matricial 28. Segundo Exemplo de Posicionamento de Valores no MEFG... 45 Esquema Matricial 29. Segundo Exemplo de Posicionamento de Valores no MEFG... 45 Esquema Matricial 30. Segundo Exemplo de Posicionamento de Valores no MEFG... 46 4

Esquema Matricial 31. Exemplo de Posicionamento de Valores do Bloco Interno no MEFG... 47 Esquema Matricial 32. Exemplo de Posicionamento de Valores do Bloco Interno no MEFG... 47 Esquema Matricial 33. Exemplo de Posicionamento de Valores do Bloco Interno no MEFG... 48 Esquema Matricial 34. Exemplo de Posicionamento de Valores do Bloco Interno no MEFG... 48 Esquema Matricial 35. Exemplo de Posicionamento de Valores do Bloco Interno no MEFG... 49 Esquema Matricial 36. Exemplo de Posicionamento de Valores do Bloco Interno no MEFG... 49 Esquema Matricial 37. Exemplo de Posicionamento de Valores do Bloco Interno no MEFG... 50 Esquema Matricial 38. Exemplo de Posicionamento de Valores do Bloco Interno no MEFG... 50 Esquema Matricial 39. Exemplo de Posicionamento de Valores do Bloco Interno no MEFG... 51 Esquema Matricial 40. Exemplo de Posicionamento de Valores do Último Bloco Interno no MEFG... 51 Esquema Matricial 41. Exemplo de Posicionamento de Valores do Último Bloco Interno no MEFG... 52 Esquema Matricial 42. Exemplo de Posicionamento de Valores do Último Bloco Interno no MEFG... 52 Esquema Matricial 43. Exemplo de Posicionamento de Valores do Último Bloco Interno no MEFG... 53 5

RESUMO DO PROJETO O uso de ferramentas numéricas destinadas à previsão do comportamento de elementos estruturais sob diferentes condições de solicitação, vem sendo, ao longo dos últimos anos, cada vez mais utilizado por profissionais da área de projetos estruturais e estudado por pesquisadores do mundo acadêmico. Isto se deve, sobretudo, ao fato destes programas proporcionarem uma ampla gama de análises possíveis de serem efetuadas, as quais podem incluir problemas de grande complexidade como, por exemplo, o caso de estruturas sob regime não-linear. Atualmente, a grande maioria destes programas de cálculo são baseados no método dos elementos finitos convencional (MEF), o qual tem seu funcionamento fundamentado na divisão da geometria de um problema estrutural em elementos finitos, os quais sempre possuem as mesmas funções de forma atreladas às incógnitas nodais. Entretanto, por meio deste método, muitas das análises que são realizadas acabam por tornarem-se computacionalmente bastante onerosas, pois as aproximações que podem ser construídas com a forma convencional do MEF acabam por exigir um refinamento exagerado da malha de elementos finitos para a garantia de redução dos erros de aproximação à níveis aceitáveis. Para solucionar este problema e, ao mesmo tempo, dispensar o emprego de malhas de elementos finitos muito refinadas, foi desenvolvido o chamado método dos elementos finitos generalizados (MEFG), tema central do presente trabalho de iniciação científica. O método dos elementos finitos generalizados, ou MEFG, consiste, essencialmente, no método dos elementos finitos convencional, só que com funções de forma geradas a partir do conceito de enriquecimento da 'partição da unidade' por funções de interesse para a solução do problema. Como vantagens do método, destacam-se: a possibilidade de enriquecimento seletivo da aproximação, o emprego de redes de elementos finitos menos refinadas e a reduzida sensibilidade, tanto em relação à distorção de forma quanto ao travamento numérico dos elementos. Neste trabalho, em uma primeira etapa, foi realizado o desenvolvimento de um programa, o qual recebeu o nome de Chapas2D, para a aplicação do MEF convencional por meio de elementos finitos triangulares CST (de deformação constante) e a implementação de um algoritmo de perturbação para resolução de sistemas lineares. Em seguida, foi feita a implementação do MEFG nestes mesmo elementos finitos triangulares e foram realizadas diversas análises comparativas, as quais certificam a maior eficácia do MEFG em comparação ao MEF convencional comumente utilizado. Para finalizar, a metodologia adotada em todas as etapas do projeto buscou contemplar os fundamentos teóricos do método dos elementos finitos convencional e generalizado, o aprendizado do manuseio dos softwares Ansys e GiD assim como do processo de implementação computacional do MEF convencional e do MEFG em linguagem de programação FORTRAN. 6

Capítulo 1. Fundamentação Teórica Este primeiro capítulo tem como objetivo contemplar um resumo a respeito da teoria por trás do método dos elementos finitos convencional e generalizado, do elemento finito triangular CST, do algoritmo de perturbação para resolução de sistemas lineares, do método de integração numérica em domínios triangulares através dos pontos de Hammer, do método de cálculo de tensões e deformações utilizando os valores das incógnitas nodais e da lógica da organização da matriz de rigidez no MEFG. 1.1 Método dos Elementos Finitos Convencional (FEM) Seja u o vetor que contém as funções aproximadoras das componentes dos deslocamentos para cada elemento de uma análise plana por elementos finitos. Como o problema estudado é formado por elementos que têm deslocamentos apenas no seu plano, como mostra a figura 1, então: u T uv, (1.1.1) Figura 1. Exemplo de Elemento Finito de Chapa As funções aproximadoras podem ser escritas em função das componentes dos deslocamentos nodais do elemento finito, as quais serão denominados incógnitas nodais (já que nem todas as incógnitas nodais são deslocamentos). As incógnitas nodais serão representadas pelo vetor v. Do que foi dito, têm-se: u v (1.1.2) Contudo, estas mesmas funções aproximadoras podem ser escritas em função dos parâmetros nodais a: u Na (1.1.3) Em cada nó, o elemento finito tem as incógnitas. Se é o vetor das incógnitas nodais do elemento, pode-se escrever que: 7

v1 v2 v Aa... vi (1.1.4) Da igualdade acima, obtém-se: 1 a A v (1.1.5) É importante deixar claro que a matriz A tem que poder ser invertida. As relações entre as tensões e as deformações têm a forma: D (1.1.6) Sendo o lado esquerdo o vetor das tensões e o lado direito a matriz que contém os parâmetros elásticos, que caracterizam o material, multiplicado pelo vetor das deformações. No estado plano de tensões, tem-se: x 1 0 x E y 1 0 2 y 1 xy 1 xy 0 0 2 (1.1.7) Sendo E o módulo de Young e o coeficiente de Poisson. As deformações em função das componentes dos deslocamentos são representadas por: Lu (1.1.8) Sendo L uma matriz de operadores diferenciais. No caso da análise a ser feita no trabalho, por se tratar de um estudo de elementos planos, tem-se: Ficando em forma matricial: u x x (1.1.9) v εy y (1.1.10) u v y x (1.1.11) 8

Das equações acima, tem-se: 0 x x u y 0 (1.1.12) y v xy y x 1 1 L N A v A v (1.1.13) Sendo: LN Se as funções aproximadoras são da forma apresentada por u v, as deformações são obtidas diretamente em função das incógnitas nodais, não necessitando efetuar a inversão da matriz A. Ou seja, pode-se escrevê-las como B v Continuando, temos que a energia de deformação, no caso plano, é da forma: 1 U x x σy ε y xy xy dv 2 V (1.1.14) De modo geral, esta igualdade pode ser representada por: 1 T 1 T U dv dv 2 2 V V (1.1.15) O trabalho virtual realizado pelas forças volumétricas b e por ações externas p, cujas componentes estão dirigidas para as incógnitas nodais, tem a forma: T S T u b dv u pd S (1.1.16) Sendo S a região onde as ações estão aplicadas. A energia potencial total do elemento é posta como: V 1 T 1 T 1 T U dv u bdv u p ds (1.1.17) 2 2 2 V V S A minimização desse funcional resulta da nulidade da primeira variação da energia potencial total: 9

V V S T T T dv u bdv u p ds 0 (1.1.18) Ou: V V S T T T dv δ u bdv δ u p ds (1.1.19) A equação acima representa a igualdade entre os trabalhos virtuais internos e externos, e qualquer um dos lados da equação equivale às equações de equilíbrio do elemento. De tudo que já foi escrito anteriormente, pode-se escrever que a variação das incógnitas nodais é dada por: E também se pode escrever que: u Na (1.1.20) 1 Tendo, então, as incógnitas nodais a forma: Com algumas substituições, tem-se: a A v (1.1.21) 1 u N A v (1.1.22) Com tudo que foi supracitado, finalmente, obtém-se: 1 A v (1.1.23) 1 T 1 T 1 T T T T T T T v A dv v A N bdv v A N p ds (1.1.24) V V S por: Como os deslocamentos virtuais δv são arbitrários, a equação acima fica dada 1 T 1 T 1 T T T T A dv A N bdv A N p ds (1.1.25) V V S Trabalhando-a, essa última expressão assume a forma: T 1 T T T d N d B V A N b V p S (1.1.26) V V S 10

As tensões σ podem ainda ser substituídas pelas deformações: Resultando: DDB v (1.1.27) T 1 T T T B DBdVv A N bdv N p ds (1.1.28) V V S O termo entre parênteses do lado esquerdo da igualdade acima é a matriz de rigidez do elemento finito, representada por: T k B DB dv (1.1.29) V Se não se tem explicitada a matriz B, então k é obtida através de: T T D d k A 1 V A 1 (1.1.30) V As duas integrais do lado direito da igualdade (1.1.28) constituem o vetor de cargas nodais equivalentes: d d 1 T T T r A N b V N p S (1.1.31) V S Se as funções aproximadoras são escritas em função das incógnitas nodais, o vetor de cargas nodais equivalentes fica dado por: T T r bdv p ds (1.1.32) Concluindo, obtém-se o seguinte sistema de equações: V S kv r (1.1.33) Estendendo o sistema de equações para o problema todo, cuja matriz de rigidez é representada por K, o vetor das incógnitas nodais por V e o vetor das cargas nodais equivalentes por R, tem-se: KV R (1.1.34) 11

1.2 Método dos Elementos Finitos Generalizados (MEFG) Nesta seção, será apresentada a teoria do método dos elementos finitos generalizados, uma síntese sobre sua gênese assim como aspectos relacionados ao mesmo que o diferem do método dos elementos finitos convencional. O método dos elementos finitos generalizados não foi diretamente deduzido a partir do método dos elementos finitos convencional. O mesmo utiliza, como base teórica, os conceitos de outro método conhecido como método das nuvens. Assim, segue uma introdução a respeito desse método que serviu de ponto de partida para a origem do MEFG. Na figura 2, apresenta-se um certo domínio contido pela união de regiões circulares abertas, as quais serão chamadas de nuvens. Admite-se que cada nuvem defina o suporte para uma função de forma associada, ou seja, a função de forma apresenta valores não nulos dentro de sua nuvem. Num ponto x, coberto por um número qualquer de nuvens, as funções de forma associadas compõem o que é chamado de partição da unidade (PU) se a mesmas satisfazerem as seguintes propriedades: 1) Cada uma das funções de forma deve pertencer ao espaço C de funções contínuas, assumir valores não-nulos apenas no interior da correspondente nuvem e tender a valores nulos nos seus limites. 2) A somatória dos valores de todas as funções de forma associadas em uma nuvem na qual está contido um ponto x qualquer deve ser igual a 1. Esta condição é necessária para assegurar que as funções de forma sejam capazes de reproduzir uma constante. 3) Cada função de forma deve possuir valores positivos e não nulos dentro da região de sua nuvem. Figura 2. Esquema Ilustrativo de Nuvens Dentro de um Domínio Qualquer 12

Deve-se notar que a condição 1 é bastante restritiva e é normalmente relaxada, no sentido de que se consideram como PU funções de suporte compacto até certa ordem de derivada. Também é importante ressaltar que, entre todas as condições arroladas, a segunda é a mais importante e, em termos de aplicação, somente ela tem sido exigida para a caracterização de uma PU. Um dos motivos da grande importância da segunda condição provém do fato que a mesma garante que no limite de uma discretização muito fina em número de nuvens, a aproximação resultante sobre todo o domínio apresente uma convergência para a função solução. Em suma, no método das nuvens propõe-se realizar o enriquecimento da função de forma atrelada a certa nuvem adicionando-se novos parâmetros nodais àqueles inicialmente existentes. Para tanto, realiza-se o produto da partição da unidade inicial por funções com boas propriedades de aproximação da solução do problema em análise. Dessa forma, tomando-se o método das nuvens como princípio teórico, MELENK & BABUSKA (1996) propuseram que as funções de forma típicas do MEF poderiam ser empregadas como partições da unidade, dando origem ao chamado método dos elementos finitos partição da unidade (MEFPU). Em uma natural associação com o método das nuvens, passou-se a empregar o conjunto de nós e malhas (elementos finitos) da rede para a definição de nuvens. Nesse caso, entende-se por nuvem o conjunto de elementos que dividem um nó comum. O passo seguinte decorreu da idéia de adicionar refinamentos hierárquicos ao conjunto de funções de forma atreladas a determinado nó, e o método resultado recebeu o nome de método dos elementos finitos generalizados (MEFG). Figura 3. Conceito de Nuvens sob a Ótica do MEFG O MEFG apresenta, resumidamente, as seguintes características: 1) Trata-se de um método que independe da rede (Mesh-Free), já que a mesma não é empregada no sentido clássico, isto é, com aproximação atrelada ao elemento. 2) O método é apresentado como uma forma de obter boas condições de aproximação local (no interior da nuvem), sendo que a partição da unidade permite combinar as aproximações locais de modo a assegurar a conformidade da aproximação global. Este aspecto é bastante importante, pois no MEF convencional a escolha de um espaço de funções com boas qualidades aproximativas locais pode 13

levar a que não se consiga impor a conformidade ou a continuidade nas linhas de fronteira entre elementos da rede. No MEFG, a continuidade da aproximação global possui grau atrelado ao grau de continuidade da PU. 3) As condições de contorno são facilmente impostas, como no MEF. 4) O método é robusto mesmo sob forte distorção da malha (resultante do fato de que o enriquecimento é feito sobre coordenadas espaciais). 5) Há um paralelo entre as versões h e p do MEF e o MEFG. Se todo o espaço das aproximações locais é ampliado e os suportes das funções partição de unidade são mantidos, tem-se uma situação equivalente ao refinamento p do MEF. Por outro lado, se o espaço das aproximações locais é mantido e a área de influência de cada suporte reduzida, tem-se um processo semelhante ao MEF com refinamento h. Sob o ponto de vista de programação, o MEFG permite aproveitar toda a estrutura das rotinas do MEF tanto para a geração da matriz de rigidez quanto do vetor de forças nodais. O enriquecimento implica simplesmente na adição de novas linhas e colunas nas matrizes e vetores convencionais. O programa desenvolvido, no presente trabalho, utiliza o MEFG tendo como pano de fundo o MEF convencional de elementos finitos triangulares CST. Assim, para os nós dos elementos finitos, estão programadas as seguintes funções de forma convencionais conhecidas: 1 NóLocal1 x2y3x3y2x y2 y3 y x3x2 2 A 1 NóLocal 2 x3y1x1y3xy3 y1 yx1x3 2 A (1.2.1) (1.2.2) 1 1 1 2 3 3 2 2 3 3 2 3 1 1 3 3 1 1 3 2A 2A NóLocal3 x y x y x y y y x x x y x y x y y y x x Sendo A a área do elemento finito, x1, x2, x3, y1, y2 e y3 as coordenadas dos nós locais. Agora, com o aplicativo atuando com o MEFG e com a possibilidade de haver refinamentos nodais, foram programados 3 funções diferentes de refinamento, as quais podem ser aplicadas a qualquer nó caso desejado. Estas funções, por possuírem a propriedade de apresentarem valores nulos nas coordenadas do próprio nó refinado, são chamadas de funções bolhas e possuem a vantagem de não destruírem o significado físico dos valores de deslocamentos obtidos para as incógnitas nodais após a resolução do sistema formado pela matriz de rigidez e o vetor de forças nodais. Porém, vale lembrar que outras funções, que não as bolhas, podem ser também utilizadas para atuarem como funções de refinamento. Primeira função de refinamento programada: multiplicação das funções convencionais pela variável x. * x x1 1, NóLocal1 NóLocal1 (1.2.4) h (1.2.3) 14

* x x2 1, NóLocal 2 NóLocal 2 h (1.2.5) * x x3 1, NóLocal3 NóLocal3 h (1.2.6) Segunda função de refinamento programada: multiplicação das funções convencionais pela variável y. * y y1 2, NóLocal1 NóLocal1 h (1.2.7) * y y2 2, NóLocal 2 NóLocal 2 h (1.2.8) * y y3 2, NóLocal3 NóLocal3 h (1.2.9) Terceira função de refinamento programada: multiplicação das funções convencionais pelas variáveis x e y multiplicadas entre si. xx1 y y1 h (1.2.10) xx2 y y2 2 NóLocal h (1.2.11) xx3 y y3 2 NóLocal h (1.2.12) * 3, NóLocal1 2 NóLocal1 * 3, NóLocal 2 2 * 3, NóLocal3 3 Sendo h, em todas as equações acima, a maior distância entre dois nós dentro da nuvem da função de forma. Para finalizar esta análise a respeito das funções de refinamentos implementadas no programa Chapas2D, é importante esclarecer o objetivo e critério adotado na obtenção do valor da constante h, mostrada acima, a qual está sempre presente no denominador das funções de refinamentos. Conforme foi supracitado, a variável h está associada com a maior distância entre dois nós dentro de uma nuvem associada à um determinado nó refinado. Assim, o programa escrito apresenta uma rotina que possui a meta de calcular essa maior distância em todas as nuvens associadas aos nós refinados da análise. Este valor é aplicado no cálculos das funções de forma, pois os mesmos promovem uma uniformidade nas grandezas obtidas nos cálculos efetuados pelo programa. Ou seja, tal procedimento evita que o programa acabe lidando com valores de ordem de grandeza muito diferentes durante os cálculos das matrizes de rigidez. 15

Figura 4. Exemplo de Nuvem Associada à um Certo Nó e a Maior Distância Entre Dois Nós 1.3 Elementos Finitos Triangulares CST Com a dedução mostrada na seção (1.1) da forma geral do MEF convencional, é possível apresentar a formulação do elemento finito bidimensional triangular CST, o qual serviu como base no programa desenvolvido para a implementação do MEFG. O programa Chapas2D visa analisar estruturas bidimensionais sob estado plano de tensão e de deformação. Segue uma breve análise a respeito dos dois tipos de problemas estrutural. O estado plano de tensão ocorre em sólidos cujas dimensões na direção z são muito pequenas. Um exemplo expressivo que pode ser citado é o de uma chapa solicitada em seu plano médio sem carregamento atuando perpendicularmente a ele. Para esse tipo de problema, as tensões xy e zx são nulas na superfície e z é nula ao longo da espessura. Nos problemas sob este estado, as deformações são determinadas mediantes as seguintes igualdades: Com a componente z calculada através da expressão: E com yz zx 0 Dessa forma, as equações constitutivas ficam sendo: u x x (1.3.1) v y y (1.3.2) u v xy y x (1.3.3) z x y (1.3.4) 1 16

σ υ ε x 1 0 x E σy υ ε υ 1 0 2 y 1 τ υ γ xy 1 xy 0 0 2 (1.3.5) Já o estado plano de deformação ocorre em estruturas longas, cuja geometria e estado de carregamento não mudam muito ao longo do seu eixo longitudinal. Alguns exemplo de sólidos sob estado plano de deformação são: muro de contenção, barragem, viga longa sobre base elástica, tubos enterrados, etc. Nesses casos, as deformações z, yz e zx são assumidas nulas, ficando o estado de deformações determinado por (1.3.1), (1.3.2) e (1.3.3). A tensão na direção do eixo z para esse tipo de problema fica determinada por: E as equações constitutivas ficam sendo: z ( x y) (1.3.6) σ 1- υ υ 0 ε x x E σy υ 1- υ 0 εy (1+ υ) (12υ) τ xy 1 2 υ γ xy 0 0 2 (1.3.7) Continuando, os dois casos apresentados podem ser tratados pelo método dos elementos finitos de maneira semelhante, já que as equações constitutivas podem ser expressas em termos de mesmas tensões e deformações. De modo geral, as igualdades (1.3.5) e (1.3.7) podem ser postas na mesma forma: E a matriz D assume a seguinte forma genérica: D (1.3.8) 1 υ` 0 E` D υ` 1 0 2 1 υ` 1 υ` 0 0 2 (1.3.9) E Sendo E` E e υ` υ para o estado plano de tensão e E` e ` 2 1 para o estado plano de deformação. 1 17

Tratando-se, agora, da aplicação dos elementos finitos triangulares CST à forma geral do MEF convencional, temos que estes possuem dois graus de liberdade por nó, os quais são os deslocamentos u e v respectivamente nas direções x e y. Figura 5. Representação dos Graus de Liberdade Presentes em um Elemento Finito Triangular CST Sejam definidos índices i, j, k de maneira que seus valores se alteram ciclicamente. Isto é: i = 1, j = 2, k = 3; i = 2, j = 3, k = 1 e i = 3, j = 1, k = 2. Fazendo: ai xk x j e bi y j y k a matriz B pode ser escrita da seguinte maneira: b1 0 b2 0 b3 0 1 B 0 a1 0 a2 0 a3 (1.3.10) 2 A a 1 b 1 a 2 b 2 a 3 b 3 Não obstante, é importante lembrar que essa forma para a matriz B só é válida no MEF convencional, ou seja, quando não há nenhum refinamento nodal aplicado na análise. Caso haja a opção de refinamento, então está se tratando do MEFG e a matriz B acaba por se tornar mais larga quanto mais refinamentos houverem nos nós locais dos elementos finitos. O assunto a respeito do efeito que o MEFG provoca nas matrizes B e de rigidez será apresentado na seção (1.8). Voltando à discussão de como é organizado o algoritmo do MEF convencional com elementos triangulares CST, segue como é calculada a matriz de rigidez para cada elemento finito: 1 υ 0 Ee T υ d B 2 1 0 1 B A (1.3.11) A 0 0 Sendo e a espessura do elemento e 1 2 18

Finalmente, substituindo B e integrando, tem-se a forma explícita de k: Onde: Ee k k (1.3.12) 4A 1 2 k 2 2 b1 a1 a1b1( ` ) b1b2 a1a2 `a2b1a1b2 b1b3 a1a3 `a3 b1a1b3 2 2 a1 b1 `a1b2 a2b1 a1a2 b1b2 `a1b3 a3 b1 a1a3 b1b3 2 2 b2 a2 a2b2( ` ) b2 b3 a2a3 `a3 b2 a2b3 2 2 a2 b2 `a2b3 a3 b2 a2a3 b2 b3 2 2 Simétrica b3 a3 a3 b3 ( ` ) 2 2 a3 b3 (1.3.13) Disso, é possível construir um algoritmo computacional que soluciona problemas estruturais sob estado plano de tensão e de deformação utilizando o elemento finito triangular CST. Novamente, é importante ressaltar que a matriz de rigidez dos elementos finitos pode ser maior no MEFG e que a mesma, neste caso, só pode ser calculada mediante integração numérica. 1.4 Algoritmo de Perturbação para Resolução de Sistemas Lineares Nesta seção segue uma explanação a respeito da teoria do método de resolução de sistemas lineares adotado no programa Chapas2D. O mesmo foi sugerido por Strouboulis, Babuska e Copps no artigo "The design and analysis of the generalized finite element method". O algoritmo de perturbação para resolução de sistemas lineares trata-se de uma das várias abordagens possíveis para se resolver um sistema linear da forma Ku = f, onde K é uma matriz que pode não ser positivo definida. A mesma baseia-se na imposição de pequena perturbação sobre a matriz do sistema escrita em forma escalonada. Assim sendo, numa primeira etapa do procedimento, o sistema na sua forma escalonada passa a ser representado como: ~ ~ ~ Ku f (1.4.1) Os elementos que aparecem na nova forma se relacionam com os originais mediante as seguintes relações: ~ K TKT (1.4.2) ~ 1 u T u (1.4.3) ~ f T f (1.4.4) 19

Sendo: T ij ij (1.4.5) K ij Na qual ij é o delta de Kronecker. A matriz ~ K apresenta valores unitários na sua diagonal principal. Esta forma escalonada pode, então, ser perturbada nos seus elementos da diagonal principal, conforme indica a relação seguinte: ~ ~ K KI 10 com 0 10 (1.4.6) Sendo I a matriz identidade. A matriz perturbada resulta positivo-definida e, portanto, pode ser invertida. A solução do sistema com a matriz perturbada fica expressa como: ~ ~ 1 ~ u K f 0 (1.4.7) Como não foi empregada a matriz escalonada original, aparece um resíduo determinado por: ~ ~ ~ 0 0 r fk u (1.4.8) A correção do resíduo, no sentido de anulá-lo, pode ser obtida de forma iterativa, isto é, reduzindo-o de forma progressiva. Por exemplo, definindo o erro no deslocamento como: ~ ~ e u u (1.4.9) 0 0 E aplicando sobre ambos os membros a matriz escalonada, obtém-se: ~ ~ ~ ~ ~ Ke Ku Ku r (1.4.10) 0 0 0 Empregando-se novamente ~ K em lugar de ~ K, por ser inversível é possível, da relação anterior, obter uma aproximação suficientemente precisa para o erro no deslocamento operando-se o seguinte cálculo: ~ 1 0 0 e K r (1.4.11) Com essa estimativa, é possível obter uma nova aproximação para a solução do sistema original: 20

~ ~ ~ 1 u u K r (1.4.12) 1 0 0 Com esta nova estimativa, pode-se atualizar o resíduo: ~ ~ ~ r fk u1 (1.4.13) 1 E prosseguir iterativamente, atualizando o erro de aproximação e atualizando a estimativa de solução. Em termos genéricos, pode-se escrever: i 1 ~ ri r0 Kej (1.4.14) i ~ ~ i 0 j 0 ~ 1 i i 1 e K r (1.4.15) u u e (1.4.16) Um critério de parada do processo iterativo pode ser baseado na norma relativa do erro da aproximação definida por: ~ ei Kei (1.4.17) ~ ~ ui K ui para i 1 O processo iterativo prossegue até que a norma seja menor ou igual a um valor suficientemente pequeno. Finalmente, após a convergência, a solução do sistema original passa a ser calculada mediante a seguinte transformação: ~ u T u (1.4.18) j 0 1.5 Integração Numérica pelo Método da Quadratura de Gauss O conceito básico por trás do método de Gauss para integração numérica é o de que uma integral pode ser aproximada pela seguinte somatória: b a α... α j F r dr 1F r1 2F r2 F r R (1.5.1) n n n Na qual α 1,..., n são chamados de pesos, r1,... r n os pontos amostrais e Rn o erro da aproximação. No sentido de se determinar o valor dos pesos assim como dos pontos amostrais, é utilizado o seguinte polinômio de interpolação: 21

n j j j 1 r F l r (1.5.2) Neste, os n pontos amostrais são ainda desconhecidos. Para a determinação dos mesmos, é definida a função P r :... P r r r1 r r2 r r n (1.5.3) O qual se trata de um polinômio de grau n. Deve ser notado que esse polinômio apresenta como raízes os valores dos pontos amostrais. Com os 2 polinômios mencionados acima, então pode ser escrita a seguinte igualdade: Integrando... F r r P r r r 2 0 1 2 (1.5.4) Fr, obtém-se: n j Frdr Fj lj rdrj r Pr dr j1 j0 b b b a a a (1.5.5) O que deve ser notado é que enquanto na primeira integral da direita somente polinômios de grau n 1 e inferiores é que são integrados, na segunda integral, que vem depois, polinômios de grau n e maior do que n é que o são. Os valores dos pontos amostrais desconhecidos podem, agora, ser determinados mediante o sistema formado através da equação: integral b a d,,,..., j r P r r 0parak 012 n1 (1.5.6) Assim, com os pontos amostrais calculados dessa maneira, isso significa que a b a F r d r vai ser aproximada por meio da integração de um polinômio de grau 2n 1. Ou seja, com a quadratura de Gauss é possível, utilizando n pontos amostrais, calcular exatamente a integral de um polinômio de grau 2n 1 através de um polinômio interpolador de grau n 1. Entretanto, o cálculo dos pontos amostrais e dos pesos depende do intervalo de integração em consideração. Para contornar este problema e tornar o uso do método de integração numérico generalizado, basta calcular os pontos amostrais e os pesos considerando o intervalo como sendo de -1 a 1. Dessa forma, sempre que for necessário um intervalo diferente, uma simples substituição de variáveis pode readequar o intervalo para qualquer outro desejado. 22

Para finalizar, segue a equação para o cálculo dos pesos assim como uma tabela mostrando os valores dos pesos e pontos amostrais para os casos nos quais são utilizados até 5 pontos amostrais. j 1 j 1 d ;,,..., l r r j 12 n (1.5.7) Tabela 1. Pontos e Pesos da Quadratura de Gauss Até então foi considerado um método de integração numérica de funções de uma só variável. Porém, para a análise de casos planos por elementos finitos, são necessários integrações em duas dimensões. Todo o desenvolvimento supracitado pode ser aproveitado para o caso de integrações duplas graças ao teorema de Fubini. Primeiro, em uma integral dupla, é feita a integração numérica considerando uma das duas variáveis como constante: 11 1, d d, F r s r s F r s ds (1.5.8) i 11 i 1 Depois, a integração numérica é novamente reaplicada na integral que restou: 11 11, d d i j i, j i, j i F r s r s F r s (1.5.9) 23

E assim pode ser obtida a equação para a integração numérica em integrais duplas. No entanto, os intervalos de integração, os quais podem ser diferentes dos usados acima, que vão de -1 a 1, podem ser determinados através do conjunto de operações que seguem abaixo. x g u, v e Seja o Jacobiano de uma transformação qualquer T, dado por, y h u v, definido conforme segue: x x xy, u v x y x y uv, y y u v v u u v (1.5.10) 1 Então, suponha que T seja uma transformação do tipo C cujo Jacobiano não é zero e que mapeie uma região S em um plano uv para uma região R em um plano xy. Suponha também que f seja uma função contínua em R e que S e R são regiões planas do tipo I ou II. Para finalizar, considere que T é um para um, exceto talvez nas bordas da região S. Dessa forma, com todas as considerações anteriores, pode ser escrito: xy, f x, yda f xu, v, yu, v dudv uv, R S (1.5.11) 1.6 Integração Numérica em Domínios Triangulares No programa desenvolvido, como são utilizados elementos finitos triangulares, foi necessário ser adotado um método de integração numérica para domínios triangulares. Várias são as fórmulas existentes que solucionam este tipo de problema, sendo que muitas das mais usadas foram deduzidas por Hammer, entre outros pesquisadores, e são do tipo Gaussiana e totalmente simétricas com respeito aos três vértices da área triangular que está sendo integrada. Geralmente, as fórmulas para integração numérica de uma determinada função f em um domínio triangular de área A são todos da forma: N i 1 fda A w f,, (1.6.1) i i i i onde i, i, i são as coordenadas, em domínio triangular, do ponto de integração de número i e w i é o peso associado à este ponto de integração. 24

Figura 6. Elemento Finito Triangular e a Representação das Coordenadas em Diversos Pontos no Sistema de Referência Local Os valores das coordenadas em domínio triangular assim como dos pesos associados podem ser encontrados em tabelas conhecidas como tabelas de pontos de Hammer. Seguem abaixo os valores utilizados no programa escrito, o qual permite que o usuário escolha entre utilizar 1, 3, 4 ou 6 pontos de integração de Hammer. Tabela 2. Pontos e Pesos de Hammer para Integração Numérica em Domínios Triangulares 25

Apesar de o método supracitado de integração em domínios triangulares ter sido deduzido para um triângulo equilátero, qualquer triângulo pode ser mapeado como correspondente a um equilátero por meio de transformações lineares de variáveis. As coordenadas em domínios triangulares, vistas acima, não variam com essas mudanças de variáveis e, por isso, o método pode ser aplicado para qualquer triângulo. Tratando-se do programa Chapas2D, a fórmula utilizada no mesmo para a integração numérica em domínios triangulares é: T K B ( ii, i) DB( ii, i) e J( ii, i) wh( ii, i) (1.6.2) i Sendo: 1, w H os pesos definidos pela regra de integração de Hammer para os pontos com coordenadas ( ii, i), e a espessura do elemento no ponto de integração e J( i i, i) o módulo do jacobiano dado por x2y3 x3 y2 x2y1x1y2 x1y3 x3 y1 com x1, x2, x3, y1, y2 e y3 sendo as coordenadas dos nós locais do elemento finito. 1.7 Cálculo das Tensões e Deformações Nesta seção será apresentado o método de cálculo adotado no programa Chapas2D para se obter os valores das tensões e deformações médias nodais, de forma que todos os resultados possam ser visualizados no aplicativo GiD de forma contínua. Conforme foi visto na seção (1.3), da teoria do método dos elementos finitos, tem-se que as deformações nas direções X, Y e de cisalhamento podem ser obtidas mediante a seguinte equação: B v (1.7.1) Sendo o vetor de deformações, B a matriz B da análise e v o vetor de incógnitas nodais. E as tensões nas direções X, Y e de cisalhamento podem ser obtidas mediante a seguinte equação: DBv D (1.7.2) Sendo D a matriz que contém os parâmetros elásticos que caracterizam o material do elemento finito. Dessa forma, estas equações foram programadas no Chapas2D para realizarem os cálculos das tensões e deformações nodais. No entanto, vale deixar claro que caso o programa apresente a função de refinamentos nodais ativada, as tensões e deformações são calculadas diretamente nas coordenadas de todos os nós locais de cada elemento finito e, depois, realiza-se a média dos valores obtidos em função do número de elementos finitos que apresentam um mesmo nó em comum. 26

Continuando, para o cálculo das tensões principais nodais, é possível mostrar que os valores numéricos dos mesmos podem ser obtidos através das raízes de um polinômio de terceiro grau conhecido como equação característica. Sendo: I 2 3 I 2I I 0 (1.7.3) P 1 P 2 P 3 I 1 x y z (1.7.4) x xy σy τyz σx τxz yx y τzy σz τzx σz (1.7.5) σx τxy τxz I3 τyx σy τyz (1.7.6) τ τ σ zx E a tensão de cisalhamento máxima pode ser obtida através da seguinte equação: zy z max max 1 2, 2 3, 3 1 2 2 2 (1.7.7) Para o cálculo das deformações principais nodais, as equações são semelhantes às citadas anteriormente. Novamente, as deformações principais podem ser obtidas através das raízes de um polinômio de terceiro grau também conhecido como equação característica. Sendo: I 2 3 I 2I I 0 (1.7.8) P 1 P 2 P 3 I 1 x y z (1.7.9) x xy y yz x xz yx y zy z zx z (1.7.10) x xy xz I3 yx y yz (1.7.11) zx E a deformação de cisalhamento máxima pode ser obtida através da seguinte equação: zy z 27

max 12 2 3 3 1 max,, 2 2 2 2 (1.7.12) 1.8 Algoritmo de Organização da Matriz de Rigidez pelo MEFG Conforme foi supracitado, o método dos elementos finitos generalizados permite obter, em regiões previamente determinadas, melhores resultados através do chamado refinamento local. Entretanto, embora a teoria seja simples de compreender, programála trata-se de um desafio complexo, já que o código do programa deve traduzir para o computador toda a lógica do posicionamento dos elementos da matriz de rigidez de cada elemento finito para a matriz de rigidez global da análise. Nesta seção, será feito, primeiramente, uma abordagem racional de como um programa de MEFG com elementos triangulares CST opera para organizar a sua matriz de rigidez global e, depois, será abordado o código dessa lógica em linguagem FORTRAN. De início, deve ser compreendido como que no MEFG para elementos finitos triangulares CST são organizadas as matrizes de rigidez de cada elemento finito. Abaixo, segue a explanação de uma possível solução para esta questão, porém vale recordar que outras formas de lidar com o mesmo problema existem. Antes de começar, é importante deixar claro a simbologia que será aqui utilizada para se referir às matrizes e ao seus vários elementos: Nx1, Nx2 e Nx3 são as derivadas, com relação à variável x, das funções de forma tradicionais associadas aos nós locais 1, 2 e 3; Ny1, Ny2 e Ny3 são as derivadas, com relação à variável y, das funções de forma tradicionais associadas aos nós locais 1, 2 e 3; DxYZ se trata da derivada, com relação à variável x, da função de forma atrelada ao nó de número Y enriquecida pelo enriquecimento de número Z; e DyYZ se trata da derivada, com relação à variável y, da função de forma atrelada ao nó de número Y enriquecida pelo enriquecimento de número Z. Primeiramente, é sabido que a matriz de rigidez local de um elemento finito é dado pela equação: T k B DBdV (1.8.1) V Assim, devem ser definidos cada um desses elementos da integração, a começar pela matriz B. Quando se trata do elemento finito CST tradicional, a matriz B sempre vale: Nx1 0 Nx2 0 Nx3 0 B = 0 Ny1 0 Ny2 0 Ny3 Ny1 Nx1 Ny2 Nx2 Ny3 Nx3 Esquema Matricial 1. Matriz B Convencional No entanto, caso haja refinamento em algum nó do elemento finito, como no nó 1, por exemplo, então a matriz B acaba sendo expandida para: 28

Nx1 0 Dx11 0 0 Nx2 0 Nx3 0 B = 0 Ny1 0 Dy11 Ny1 0 Ny2 0 Ny3 Ny1 Nx1 Dy11 Dx11 Nx1 Ny2 Nx2 Ny3 Nx3 Legenda: Novas Colunas que surgem Esquema Matricial 2. Primeiro Exemplo de Matriz B Expandida Ou seja, para cada refinamento que é adicionado a um nó local do elemento finito, a matriz B do elemento finito é expandido de duas colunas. Para melhor compreensão, um outro exemplo que pode ser dado é o do nó local 1 do elemento finito refinado por 2 funções de refinamento (que serão chamadas, só agora, de funções 1 e 2 de refinamento) e o nó local 3, deste mesmo elemento finito, refinado somente pela função 2 de refinamento: Nx1 0 Dx11 0 Dx12 0 0 Nx2 0 Nx3 0 Dx32 0 B = 0 Ny1 0 Dy11 0 Dy12 Ny1 0 Ny2 0 Ny3 0 Dy32 Ny1 Nx1 Dy11 Dx11 Dy12 Dx12 Nx1 Ny2 Nx2 Ny3 Nx3 Dy32 Dx32 Legenda: Novas Colunas que surgem Esquema Matricial 3. Segundo Exemplo de Matriz B Expandida Dessa forma, fica claro o efeito que os refinamentos dos nós produzem na matriz B. Para cada refinamento, surgirão colunas de derivadas ao lado das colunas associadas ao nó que está sendo refinado. Continuado, a matriz D não sofre alteração devido aos refinamentos dos nós e a integral pode ser calculada numericamente pelo método dos pontos de Hammer. Então, para a compreensão total do processo de montagem das matrizes de rigidez local, fica restando detalhar a lógica de programação dos conceitos mencionados acima. Para melhor organização, todas as derivadas das funções de forma normais e refinadas podem ser ajustadas em uma matriz retangular chamada de, por exemplo, FuncoesMatrizB. Então, a cada três linhas dessa matriz, são escritos os valores das derivadas da função de forma (refinada ou não) com relação a x, na coluna um, e com relação a y, na coluna dois, associadas aos nós locais 1, 2 e 3. Ou seja, FuncoesMatrizB(1,1) refere-se ao valor da derivada em x da função de forma normal associada ao nó 1 e FuncoesMatrizB(3,2) refere-se ao valor da derivada em y da função de forma normal associada ao nó 3. No entanto, FuncoesMatrizB(4,1) já se refere ao valor da derivada em x da primeira função de forma refinada associada ao nó local 1, assim como FuncoesMatrizB(11,2) refere-se ao valor da derivada em y da terceira função de forma refinada associada ao nó local 2. No sentido de simplificar o entendimento, os valores da FuncoesMatrizB, utilizado no programa Chapas2D, será apresentado com todos os seus significados: 29

Tabela 3. Significado de Todos os Valores da Matriz FuncoesMatrizB Elemento da Matriz: Significado: FuncoesMatrizB(1,1) Valor da derivada em x da função de forma normal associada ao nó local 1 FuncoesMatrizB(1,2) Valor da derivada em y da função de forma normal associada ao nó local 1 FuncoesMatrizB(2,1) Valor da derivada em x da função de forma normal associada ao nó local 2 FuncoesMatrizB(2,2) Valor da derivada em y da função de forma normal associada ao nó local 2 FuncoesMatrizB(3,1) Valor da derivada em x da função de forma normal associada ao nó local 3 FuncoesMatrizB(3,2) Valor da derivada em y da função de forma normal associada ao nó local 3 FuncoesMatrizB(4,1) Valor da derivada em x da função de forma refinada 1 associada ao nó local 1 FuncoesMatrizB(4,2) Valor da derivada em y da função de forma refinada 1 associada ao nó local 1 FuncoesMatrizB(5,1) Valor da derivada em x da função de forma refinada 1 associada ao nó local 2 FuncoesMatrizB(5,2) Valor da derivada em y da função de forma refinada 1 associada ao nó local 2 FuncoesMatrizB(6,1) Valor da derivada em x da função de forma refinada 1 associada ao nó local 3 FuncoesMatrizB(6,2) Valor da derivada em y da função de forma refinada 1 associada ao nó local 3 FuncoesMatrizB(7,1) Valor da derivada em x da função de forma refinada 2 associada ao nó local 1 FuncoesMatrizB(7,2) Valor da derivada em y da função de forma refinada 2 associada ao nó local 1 FuncoesMatrizB(8,1) Valor da derivada em x da função de forma refinada 2 associada ao nó local 2 FuncoesMatrizB(8,2) Valor da derivada em y da função de forma refinada 2 associada ao nó local 2 FuncoesMatrizB(9,1) Valor da derivada em x da função de forma refinada 2 associada ao nó local 3 FuncoesMatrizB(9,2) Valor da derivada em y da função de forma refinada 2 associada ao nó local 3 FuncoesMatrizB(10,1) Valor da derivada em x da função de forma refinada 3 associada ao nó local 1 FuncoesMatrizB(10,2) Valor da derivada em y da função de forma refinada 3 associada ao nó local 1 FuncoesMatrizB(11,1) Valor da derivada em x da função de forma refinada 3 associada ao nó local 2 FuncoesMatrizB(11,2) Valor da derivada em y da função de forma refinada 3 associada ao nó local 2 FuncoesMatrizB(12,1) Valor da derivada em x da função de forma refinada 3 associada ao nó local 3 FuncoesMatrizB(12,2) Valor da derivada em y da função de forma refinada 3 associada ao nó local 3 Continuando, a matriz B, para os problemas estruturais planos, sempre terá 3 linhas, então basta que o programa organize dinamicamente as colunas para a montagem da mesma. Para isso, devem ser realizados dois loops, sendo que um se repete três vezes, e outro, mais interno, se repete tantas vezes quanto for o número de funções de refinamento que existem no programa. O objetivo do primeiro loop é o de organizar as colunas da matriz B em função do nó local o qual está sendo analisado. Ou seja, quando a repetição está no valor 1, está sendo organizado os valores das colunas da matriz B associadas ao nó local 1 e assim por diante (como o elemento finito do programa escrito se trata do triangular CST, então só há três nós e esse primeiro loop se repete três vezes). Outra função desse primeiro loop externo é o de também já posicionar as 2 colunas relacionadas às derivadas das funções de forma normais relacionadas ao nó que está sendo tratado. Já o segundo loop, o qual é interno ao primeiro, visa organizar as colunas relacionadas às derivadas das funções de forma dos refinamentos associadas ao nó local que está sendo tratado (o qual é ditado pelo loop externo). Dessa forma, o segundo loop verifica se o presente nó local está refinado por cada um dos refinamentos existentes no programa e, se o mesmo estiver, são acrescentadas duas colunas ao lado das colunas das derivadas das funções de forma normal do nó local que está sendo trabalhado. Para entender melhor toda a lógica supracitada, segue o código fonte da parte do programa que trata dessa organização da matriz B: 30

k=0 do m=1,3 MatrizB(i,1,2*m-1+2*k)=FuncoesMatrizB(m,1) MatrizB(i,1,2*m+2*k)=0 MatrizB(i,2,2*m-1+2*k)=0 MatrizB(i,2,2*m+2*k)=FuncoesMatrizB(m,2) MatrizB(i,3,2*m-1+2*k)=FuncoesMatrizB(m,2) MatrizB(i,3,2*m+2*k)=FuncoesMatrizB(m,1) do n=1,funcoesderefinamento if (RefinamentosDoRefinado(nosdoelem(w,m),n).eq.1) then k=k+1 MatrizB(i,1,2*m-1+2*k)=FuncoesMatrizB(m+n*3,1) MatrizB(i,1,2*m+2*k)=0 MatrizB(i,2,2*m-1+2*k)=0 MatrizB(i,2,2*m+2*k)=FuncoesMatrizB(m+n*3,2) MatrizB(i,3,2*m-1+2*k)=FuncoesMatrizB(m+n*3,2) MatrizB(i,3,2*m+2*k)=FuncoesMatrizB(m+n*3,1) endif Antes de mais nada, é importante dizer que a matriz B (chamada de MatrizB no programa Chapas2D) apresenta uma dimensão a mais, pois a mesma é produzida três vezes (o valor de i está associado a um loop o qual engloba todos) devido ao método de integração numérico utilizado. Contudo, sua existência não interfere em nada na lógica que está sendo explicada. Como pode ser notado, a matriz B, no primeiro loop, possui sua coluna referenciada pelo valor do próprio loop e pelo valor de k. O valor 2*m é devido à correção pelas duas colunas que todo o nó local sempre possui, no entanto 2*k está associado com a correção devido ao refinamento dos nós. Observando o segundo loop interno, ele só ocorre após ser satisfeita a condição de existência do refinamento e, dentro dele, a primeira ação do programa é acrescentar a k uma unidade. Agora, fica simples entender o que ocorre depois: com o valor de k acrescido de um, o código de posicionamento na MatrizB entende como se o nó tivesse naturalmente não duas, mas quatro colunas (e assim por diante se houverem mais refinamentos) e os valores das derivadas das função de refinamento são posicionadas seguindo a lógica da matriz FuncoesMatrizB. Novamente, para melhor entendimento, pode-se realizar uma simulação de como o programa trabalha para criar a matriz B de um elemento finito que possui o nó 1 refinado por 2 funções de refinamento e o nó 3 refinado somente pela segunda destas funções: Inicialmente m = 1, k = 0 e se está organizando o nó local 1. Logo de início, a matriz B recebe valores para as duas primeiras colunas (segue repetição do código FORTRAN mas com os valores numéricos já substituídos): MatrizB(i,1,1)=FuncoesMatrizB(1,1) MatrizB(i,1,2)=0 MatrizB(i,2,1)=0 MatrizB(i,2,2)=FuncoesMatrizB(1,2) MatrizB(i,3,1)=FuncoesMatrizB(1,2) 31

MatrizB(i,3,2)=FuncoesMatrizB(1,1) Em seguida, é iniciado o loop interno. Quando n = 1, a condição é satisfeita, pois o nó local 1 está refinado pela função de refinamento 1. Dessa forma, k passa a valer 1 e os seguintes valores são acrescidos na matriz B: k=1 MatrizB(i,1,3)=FuncoesMatrizB(4,1) MatrizB(i,1,4)=0 MatrizB(i,2,3)=0 MatrizB(i,2,4)=FuncoesMatrizB(4,2) MatrizB(i,3,3)=FuncoesMatrizB(4,2) MatrizB(i,3,4)=FuncoesMatrizB(4,1) Novamente, o loop interno é repetido para averiguar se o nó local 1 está também refinado pela segunda função de refinamento. Como isso é verdade, k passa a valer 2 e seguintes valores são acrescidos na matriz B: k=2 MatrizB(i,1,5)=FuncoesMatrizB(7,1) MatrizB(i,1,6)=0 MatrizB(i,2,5)=0 MatrizB(i,2,6)=FuncoesMatrizB(7,2) MatrizB(i,3,5)=FuncoesMatrizB(7,2) MatrizB(i,3,6)=FuncoesMatrizB(7,1) Prosseguindo com a simulação, agora o primeiro loop se repete novamente com m = 2. Conforme foi dito acima, obtém-se que a matriz B crescerá mais duas colunas devido às derivadas das funções normais de forma associadas ao nó 2, conforme segue abaixo: MatrizB(i,1,7)=FuncoesMatrizB(2,1) MatrizB(i,1,8)=0 MatrizB(i,2,7)=0 MatrizB(i,2,8)=FuncoesMatrizB(2,2) MatrizB(i,3,7)=FuncoesMatrizB(2,2) MatrizB(i,3,8)=FuncoesMatrizB(2,1) E o loop interno é chamado para verificar quais os refinamentos que existem no nó 2. Como não há nenhum, o loop se repete três vezes sem executar o procedimento dentro da condição e sem acrescentar nenhum valor à constante k. E então o programa retorna ao primeiro loop. Pela última vez o loop externo vai ser executado. Agora, os valores acrescidos nas duas novas colunas da matriz B são: MatrizB(i,1,9)=FuncoesMatrizB(3,1) MatrizB(i,1,10)=0 MatrizB(i,2,9)=0 MatrizB(i,2,10)=FuncoesMatrizB(3,2) MatrizB(i,3,9)=FuncoesMatrizB(3,2) MatrizB(i,3,10)=FuncoesMatrizB(3,1) 32

Para finalizar, o loop interno é chamado e verifica-se que o nó local 3 está refinado pela segunda função de refinamento. Então o valor de k passa a ser 3 e os valores acrescidos nas duas últimas colunas que surgem na matriz B são: MatrizB(i,1,11)=FuncoesMatrizB(9,1) MatrizB(i,1,12)=0 MatrizB(i,2,11)=0 MatrizB(i,2,12)=FuncoesMatrizB(9,2) MatrizB(i,3,11)=FuncoesMatrizB(9,2) MatrizB(i,3,12)=FuncoesMatrizB(9,1) Depois que todos os dois loops se encerram, o número de colunas da matriz B pode ser calculada através da equação: NColunas 62 k (1.8.2) E na simulação realizada, obtém-se o valor 12. Concluindo, a matriz de rigidez de cada elemento finito pode ser obtida pela integração numérica da multiplicação da Matriz B transposta com a matriz D e novamente com a matriz B. Agora que foi compreendido a maneira como o programa de MEFG faz a organização da matriz de rigidez local para cada elemento finito, é possível entender como a matriz de rigidez global é montada a partir das matrizes de rigidez de todos os elementos finitos do problema. Em um programa MEF convencional, o qual utiliza elementos finitos triangulares CST, é sabido que a matriz de rigidez final da análise é montada com a sobreposição das várias matrizes de rigidez dos elementos finitos, de forma que seja possível incluir na análise o efeito conjunto dos vários elementos finitos entre si. Antes de se dar continuidade à explicação é interessante recordar que, na matriz de rigidez local, os valores estão organizados seguindo a ordem da numeração dos nós locais. Ou seja, as 2 primeiras linhas e colunas estão relacionadas aos efeitos do nó 1 local da análise e assim por diante. Voltando para a ideia da matriz global, a organização das linhas e colunas desta é efetuada mediante o seguinte procedimento: com os valores globais dos nós locais do elemento finito, os valores das primeiras linhas e colunas associadas aos nós locais na matriz de rigidez local são copiados para a matriz de rigidez global ocupando a linha 2i 1 e coluna 2 j 1 e, depois, os valores das segundas linhas e colunas associadas aos nós locais na matriz de rigidez local são copiados para a matriz de rigidez global ocupando a linha 2 i e coluna 2 j, sendo i e j o valor global do nó o qual está sendo trabalhado. Normalmente, o procedimento consiste em transferir, em ordem, todos os valores das linhas relacionadas ao primeiro nó local, passando pelas colunas relacionadas a cada nó local, para, depois, partir para as linhas relacionadas ao segundo nó local e finalizar com as linhas do terceiro nó local. O problema pode ser analisado de uma forma mais simples se visualizado junto com a matriz de rigidez local. 33

Primeiro, as duas primeiras linhas e colunas relacionadas ao nó local 1 do elemento finito global 1 são copiados para a suas posições na matriz de rigidez global seguindo às equações descritas acima. Matriz de Rigidez Local: Nó Local 2 Nó Local 3 Nó Local 2 Nó Local 3 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 4. Primeiro Exemplo de Posicionamento de Valores no MEF Convencional Depois, as duas primeiras linhas e terceira e quarta coluna são copiadas para a matriz de rigidez global, e tais valores significam, localmente, a interferência que o nó local 1 produz no nó local 2. Matriz de Rigidez Local: Nó Local 2 Nó Local 3 Nó Local 2 Nó Local 3 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 5. Primeiro Exemplo de Posicionamento de Valores no MEF Convencional Seguindo essa lógica, obtém-se a seguinte ordem de transferência de valores: 34

Matriz de Rigidez Local: Nó Local 2 Nó Local 3 Nó Local 2 Nó Local 3 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 6. Primeiro Exemplo de Posicionamento de Valores no MEF Convencional Matriz de Rigidez Local: Nó Local 2 Nó Local 3 Nó Local 2 Nó Local 3 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 7. Primeiro Exemplo de Posicionamento de Valores no MEF Convencional Matriz de Rigidez Local: Nó Local 2 Nó Local 3 Nó Local 2 Nó Local 3 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 8. Primeiro Exemplo de Posicionamento de Valores no MEF Convencional 35

Matriz de Rigidez Local: Nó Local 2 Nó Local 3 Nó Local 2 Nó Local 3 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 9. Primeiro Exemplo de Posicionamento de Valores no MEF Convencional Matriz de Rigidez Local: Nó Local 2 Nó Local 3 Nó Local 2 Nó Local 3 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 10. Primeiro Exemplo de Posicionamento de Valores no MEF Convencional Matriz de Rigidez Local: Nó Local 2 Nó Local 3 Nó Local 2 Nó Local 3 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 11. Primeiro Exemplo de Posicionamento de Valores no MEF Convencional 36

Matriz de Rigidez Local: Nó Local 2 Nó Local 3 Nó Local 2 Nó Local 3 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 12. Primeiro Exemplo de Posicionamento de Valores no MEF Convencional Analisa-se, agora, o código que realiza esta organização no programa MEF convencional: do i=1,3 do j=1,3 Ni=NosDoElem(w,i) Nj=NosDoElem(w,j) Matrig(2*Ni-1,2*Nj-1)=Matrig(2*Ni-1,2*Nj-1)+ESTIF(2*i-1,2*j-1) Matrig(2*Ni-1,2*Nj)=Matrig(2*Ni-1,2*Nj)+ESTIF(2*i-1,2*j) Matrig(2*Ni,2*Nj-1)=Matrig(2*Ni,2*Nj-1)+ESTIF(2*i,2*j-1) Matrig(2*Ni,2*Nj)=Matrig(2*Ni,2*Nj)+ESTIF(2*i,2*j) Sendo aqui chamada de Matrig a matriz de rigidez global da análise, ESTIF a matriz de rigidez local do elemento finito e w o número global do elemento finito cuja matriz de rigidez local está sendo reposicionada. Novamente, pode-se realizar uma simulação da rotina para melhorar o entendimento do funcionamento da mesma. Então, pensando-se que está sendo posicionado os elementos da matriz de rigidez local de um elemento finito, tem-se, primeiramente, i = 1, j = 1, Ni com o valor global do nó local 1, o qual será, como exemplo, 21, e Nj com o valor global do nó local 2, o qual será, novamente como exemplo, 33. Disso, os valores posicionados pelo programa, com as contas já efetuadas, são: Matrig(41,65)=Matrig(41,65)+ESTIF(1,1) Matrig(41,66)=Matrig(41,66)+ESTIF(1,2) Matrig(42,65)=Matrig(42,65)+ESTIF(2,1) Matrig(42,66)=Matrig(42,66)+ESTIF(2,2) Como é possível perceber, o primeiro quadrante de valores foi corrigido. Com i = 1 no loop externo, temos que as linhas associadas ao nó local 1 serão trabalhadas (sendo, no caso, a primeira e a segunda linha) enquanto o loop interno altera o valor de j, o qual dita as duas colunas associadas ao nó local j e que serão trabalhadas. Com a 37

continuação da simulação, é possível obter a lógica que foi esquematizada acima: em seguida, mais um novo quadrante de 4 valores, imediatamente à direita do quadrante anterior, será corrigida e assim por diante até o final da matriz de rigidez local. Compreendido como o programa MEF convencional organiza a matriz de rigidez global, agora é possível generalizar a análise desta organização quando o programa possui a opção de haver refinamentos locais nos nós. A matriz de rigidez final da análise por MEFG, assim como na convencional por MEF, é organizada a partir das matrizes de rigidez de cada elemento finito da malha através de um loop externo que passa por todos eles. Contido neste loop, está a chamada para a subrotina que produz a matriz de rigidez do elemento finito (a qual foi explanada acima) assim como todo o código de transferência dos elementos da matriz de rigidez local para a matriz de rigidez global. Este código de transferência em muito se assemelha ao detalhado acima para o programa FEM convencional com elementos triangulares CST, com somente o porém de que, agora, há o uso de contadores e vetores que corrigem a posição dos elementos devido aos vários refinamentos passíveis de existirem. Antes de ser introduzida a lógica do código de organização, é interessante observar, através de esquemas matriciais, como o programa MEFG trabalha quando seleciona os valores a serem copiados da matriz de rigidez local dos elementos finitos. De início, pode ser tratado, para servir de exemplo, do caso simples de um elemento finito com somente 1 refinamento presente no nó local 1. Segue a ordem de como os valores são copiados: Refinado Nó Local 2 Matriz de Rigidez Local com o Nó 1 Local Refinado: Refinado Nó Local 2 Nó Local 3 Nó Local 3 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 13. Primeiro Exemplo de Posicionamento de Valores no MEFG 38

Matriz de Rigidez Local com o Nó 1 Local Refinado: Refinado Nó Local 2 Nó Local 3 Refinado Nó Local 2 Nó Local 3 Legenda: Esquema Matricial 14. Primeiro Exemplo de Posicionamento de Valores no MEFG Refinado Nó Local 2 Bloco de valores que está sendo transferido Matriz de Rigidez Local com o Nó 1 Local Refinado: Refinado Nó Local 2 Nó Local 3 Nó Local 3 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 15. Primeiro Exemplo de Posicionamento de Valores no MEFG 39

Matriz de Rigidez Local com o Nó 1 Local Refinado: Refinado Nó Local 2 Nó Local 3 Nó Local 1 f Nó Local 2 Nó Local 3 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 16. Primeiro Exemplo de Posicionamento de Valores no MEFG Refinado Nó Local 2 Matriz de Rigidez Local com o Nó 1 Local Refinado: Refinado Nó Local 2 Nó Local 3 Nó Local 3 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 17. Primeiro Exemplo de Posicionamento de Valores no MEFG 40

Matriz de Rigidez Local com o Nó 1 Local Refinado: Refinado Nó Local 2 Nó Local 3 Refinado Nó Local 2 Nó Local 3 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 18. Primeiro Exemplo de Posicionamento de Valores no MEFG Nó Local 1 f Nó Local 2 Matriz de Rigidez Local com o Nó 1 Local Refinado: Refinado Nó Local 2 Nó Local 3 Nó Local 3 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 19. Primeiro Exemplo de Posicionamento de Valores no MEFG 41

Matriz de Rigidez Local com o Nó 1 Local Refinado: Refinado Nó Local 2 Nó Local 3 Nó Local 1 f Nó Local 2 Nó Local 3 Legenda: Esquema Matricial 20. Primeiro Exemplo de Posicionamento de Valores no MEFG Refinado Nó Local 2 Bloco de valores que está sendo transferido Matriz de Rigidez Local com o Nó 1 Local Refinado: Refinado Nó Local 2 Nó Local 3 Nó Local 3 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 21. Primeiro Exemplo de Posicionamento de Valores no MEFG Então, como foi possível perceber, a matriz de rigidez local é copiada em blocos (assim como era as matrizes de rigidez locais do MEF convencional com elementos triangulares CST), sendo que o bloco se torna maior caso o mesmo esteja associado às nós que possuam refinamentos locais. Para um maior detalhamento e compreensão, seguem os passos da transferência de valores para um elemento finito que possua o nó local 1 refinado com a função de refinamento 3, o nó local 2 sem refinamento e o nó local 3 refinado com as funções de refinamento 2 e 4: 42

Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 22. Segundo Exemplo de Posicionamento de Valores no MEFG Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 23. Segundo Exemplo de Posicionamento de Valores no MEFG 43

Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 24. Segundo Exemplo de Posicionamento de Valores no MEFG Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 25. Segundo Exemplo de Posicionamento de Valores no MEFG Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 26. Segundo Exemplo de Posicionamento de Valores no MEFG 44

Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 27. Segundo Exemplo de Posicionamento de Valores no MEFG Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 28. Segundo Exemplo de Posicionamento de Valores no MEFG com Refinamento 3 Nó Local 2 Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Nó Local 2 Nó Local 3 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 29. Segundo Exemplo de Posicionamento de Valores no MEFG 45

Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Esquema Matricial 30. Segundo Exemplo de Posicionamento de Valores no MEFG Novamente, como é possível perceber, o bloco de valores a ser copiado começa com as linha associadas ao nó local 1, passando pelas colunas dos nós locais 1, 2 e 3, para, depois, serem copiados os valores das linhas associadas ao nó local 2 e novamente as colunas associadas aos nós locais 1, 2 e 3 e finalizando com as linhas associadas ao nó local 3 e as colunas associadas aos nós locais 1, 2 e 3. É importante deixar claro que, quando se refere às linhas e colunas associadas à um certo nó local, também estão inclusas as linhas e colunas dos refinamentos presentes neste nó. Com a explicação de como a matriz de rigidez local possui seus elementos selecionados para serem transferidos para a matriz de rigidez global, fica faltando entender como que esses valores são corretamente posicionados. Em suma, o processo do posicionamento segue uma lógica semelhante ao do posicionamento no MEF convencional. O mesmo depende do valor global dos nós locais, só que, agora, também depende do número de refinamentos diferentes em cada nó, já que os mesmos irão provocar ampliação no número de linhas e de colunas da matriz de rigidez global. O que ocorre é que dentro do loop externo, o qual passa por cada elemento finito, existem seis loops internos, sendo que a função dos dois primeiros é o de definir o bloco de linhas e colunas (nesta ordem) associadas ao nó local que está sendo reposicionado, depois, a função dos dois seguintes é o de copiar este bloco quando o mesmo está expandido devido à presença de refinamentos nos nós locais, e a função dos dois últimos loops é o de copiar cada valor individual dos blocos em função do número de graus de liberdade dos nós da análise abordada. Dentro do quarto loop interno, há a verificação de uma condição que, quando satisfeita, executa a cópia de um bloco quadrado de quatro valores, o qual está dentro do bloco maior que está sendo transferido para a matriz de rigidez global do problema. No sentido de ajudar a entender o que são esses blocos mais internos e a sequência na qual os mesmos são copiados, seguem esquemas matriciais para o último bloco da análise que foi dada como exemplo acima, de um elemento finito que possui nó local 1 refinado com a função de refinamento 3, nó local 2 sem refinamento e nó local 3 refinado com as funções de refinamento 2 e 4: 46

Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Bloco interno que está sendo copiado Esquema Matricial 31. Exemplo de Posicionamento de Valores do Bloco Interno no MEFG Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Bloco interno que está sendo copiado Esquema Matricial 32. Exemplo de Posicionamento de Valores do Bloco Interno no MEFG 47

Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Bloco interno que está sendo copiado Esquema Matricial 33. Exemplo de Posicionamento de Valores do Bloco Interno no MEFG Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Bloco interno que está sendo copiado Esquema Matricial 34. Exemplo de Posicionamento de Valores do Bloco Interno no MEFG 48

Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Bloco interno que está sendo copiado Esquema Matricial 35. Exemplo de Posicionamento de Valores do Bloco Interno no MEFG Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Bloco interno que está sendo copiado Esquema Matricial 36. Exemplo de Posicionamento de Valores do Bloco Interno no MEFG 49

Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Bloco interno que está sendo copiado Esquema Matricial 37. Exemplo de Posicionamento de Valores do Bloco Interno no MEFG Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Bloco interno que está sendo copiado Esquema Matricial 38. Exemplo de Posicionamento de Valores do Bloco Interno no MEFG 50

Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Bloco interno que está sendo copiado Esquema Matricial 39. Exemplo de Posicionamento de Valores do Bloco Interno no MEFG Deve ficar claro que a rotina de organização da matriz de rigidez global executa somente um comando que copia um valor por vez. No entanto, com o uso dos loops, é possível que se copie todo o bloco interno de valores associados aos nós locais para, depois, ser copiado o bloco maior associados aos nós locais que estão sendo tratados e, finalizando, a matriz de rigidez local completa. Conforme foi dito, o programa somente copia um valor por vez. Então, no caso apresentado acima, o bloco de quatro valores mais interno é copiado mediante dois loops internos da rotina. A sequência na qual esta cópia é feita está esquematizada abaixo usando como exemplo a penúltima etapa do esquema matricial mostrado acima para a copia dos blocos. Vale lembrar que este bloco interno poderia ser maior, dependendo do número de graus de liberdade por nó (como, por exemplo, em uma análise tridimensional com elementos finitos CST, na qual há também o deslocamento z como incógnita nodal). com Refinamento 3 Nó Local 2 Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Nó Local 2 Nó Local 3 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Bloco interno que está sendo copiado Valor que está sendo copiado Esquema Matricial 40. Exemplo de Posicionamento de Valores do Último Bloco Interno no MEFG 51

Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Nó Local 2 Nó Local 3 com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Bloco interno que está sendo copiado Valor que está sendo copiado Esquema Matricial 41. Exemplo de Posicionamento de Valores do Último Bloco Interno no MEFG com Refinamento 3 Nó Local 2 Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Nó Local 2 Nó Local 3 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Bloco interno que está sendo copiado Valor que está sendo copiado Esquema Matricial 42. Exemplo de Posicionamento de Valores do Último Bloco Interno no MEFG 52

Matriz de Rigidez Local com o Nó 1 Local com Refinamento 3, Nó 2 Local sem Refinamento e Nó 3 Local com Refinamentos 2 e 4: com Nó Local 2 Nó Local 3 com Refinamento 3 Nó Local 2 Nó Local 3 Refinamento 2 Refinamento 4 Legenda: Bloco de valores que está sendo transferido Bloco interno que está sendo copiado Valor que está sendo copiado Esquema Matricial 43. Exemplo de Posicionamento de Valores do Último Bloco Interno no MEFG Antes de ser analisado o código-fonte do programa que executa toda essa organização da matriz de rigidez global no MEFG, é importante apresentar algumas matrizes e variáveis que são fundamentais para o funcionamento do código (porém, as mesmas serão discutidas com mais detalhes no capítulo que concerne o código-fonte do programa Chapas2D): CorrecaoNoMatrig(x): Este vetor possui como função dar o número de refinamentos presentes em todos os nós anteriores ao nó global o qual está sendo inserido no vetor. Trata-se de um vetor importante, pois é o mesmo que promoverá a correção de posicionamento devido às ampliações que a matriz de rigidez global sofre devido à presença de refinamentos nos diversos nós da análise; FuncoesDeRefinamento: Trata-se da constante que conta o número de refinamentos diferentes que existem no programa MEFG; GrausDeLiberdade: Trata-se da constante que conta o número de graus de liberdade presentes nos nós da análise; RefinamentosDoRefinado(x,y): Matriz que diz se há o refinamento de número y no nó global x. O mesmo retorna valor 1 caso verdadeiro e 0 se falso; NosDoElem(x,y): Retorna o valor global do nó local de número y do elemento finito de número x; Matrig(x,y): Matriz de rigidez global da análise; ESTIF(x,y): Matriz de rigidez local do elemento finito. Finalmente, analisando o código-fonte do programa Chapas2D, obtém-se: do w=1,nef call MatrizDeRigidez(ESTIF,PontosDeHammer,MaxOrdemB,FuncoesDeRefinamento,& &RefinamentosDoRefinado,OrdemMatrizB,MaiorDistNosRef,NosRefinados,Nrefinados,& &Nef,Nnos,Nmats,materiais,material,area,nosdoElem,cord,MatrizBEsp,w) CondicaoRef=0 k=0 h=0 Auxh=0 Auxh2=0 53

Auxk=0 Auxk2=0 do p=1,3 do n=1,3 aux1no=nosdoelem(w,p) aux2no=nosdoelem(w,n) do u=1,(funcoesderefinamento+1) do t=1,(funcoesderefinamento+1) if ((RefinamentosDoRefinado(aux1no,u).eq.1).and.& &(RefinamentosDoRefinado(aux2no,t).eq.1)) then do Gll=1,GrausDeLiberdade do Glc=1,GrausDeLiberdade Matrig(2*aux1no-GrausDeLiberdade+Gll+2*(CorrecaoNoMatrig& &(aux1no)+k),2*aux2no-grausdeliberdade+glc+2*& &(CorrecaoNoMatrig(aux2no)+h))=Matrig(2*aux1no-& &GrausDeLiberdade+Gll+2*(CorrecaoNoMatrig(aux1no)+k),& &2*aux2no-GrausDeLiberdade+Glc+2*(CorrecaoNoMatrig& &(aux2no)+h))+estif(2*p+2*(k+auxk2)-2+gll,2*n+2*& &(h+auxh2)-2+glc) CondicaoRef=1 h=h+1 endif if (CondicaoRef.eq.1) then k=k+1 endif CondicaoRef=0 Auxh=h h=0 Auxh2=Auxh2+Auxh-1 Auxk=k k=0 Auxk2=Auxk2+Auxk-1 Auxh2=0 Analisando-se a parte mais interna da rotina, tem-se o seguinte comando para a transferência de valores da matriz de rigidez local para a global: Matrig(2*aux1no-GrausDeLiberdade+Gll+2*(CorrecaoNoMatrig& &(aux1no)+k),2*aux2no-grausdeliberdade+glc+2*& &(CorrecaoNoMatrig(aux2no)+h))=Matrig(2*aux1no-& &GrausDeLiberdade+Gll+2*(CorrecaoNoMatrig(aux1no)+k),& &2*aux2no-GrausDeLiberdade+Glc+2*(CorrecaoNoMatrig& &(aux2no)+h))+estif(2*p+2*(k+auxk2)-2+gll,2*n+2*& &(h+auxh2)-2+glc) Como pode ser observado, no fim do comando, há a presença do código que pomove a cópia do valor da matriz de rigidez local ESTIF, sendo o seu endereçamento dado por: ESTIF(2*p+2*(k+Auxk2)-2+Gll,2*n+2*(h+Auxh2)-2+Glc) Esse comando traduz que o valor a ser copiado da matriz de rigidez local depende dos valores dos nós locais os quais estão sendo estudados seus efeitos, do valor das variáveis k e Auxk2, as quais corrigem os valores das linhas em função dos refinamentos existentes, dos valores de h e Auxh2, as quais possuem a mesma função 54

que k e Auk2 só que para as colunas, e de Gll e Glc, os quais corrigem o valor copiado do bloco mais interno em função do número de graus de liberdade dos nós. Continuando na mesma linha de código, tem-se que o valor da matriz de rigidez local, endereçado pelo código acima, é copiado para a matriz de rigidez global através do seguinte endereçamento: Matrig(2*aux1no-GrausDeLiberdade+Gll+2*(CorrecaoNoMatrig& &(aux1no)+k),2*aux2no-grausdeliberdade+glc+2*& &(CorrecaoNoMatrig(aux2no)+h)) Esse comando traduz exatamente a mesma ideia da lógica para a captura dos valores da matriz de rigidez local. A diferença reside só no fato de que, agora, esses valores vão ser direcionados para posições que depende dos valores globais dos nós locais assim como do número de refinamentos que já existiam nos nós anteriores à estes. Para finalizar a análise dos códigos apresentados, existem alguns esclarecimentos que devem ser feitos. Primeiramente, os loops de verifricação do enriquecimento dos nós partem da função de refinamento de número 1 e vão até o número de funções de refinamentos que existem mais 1. Isso ocorre pois foi considerado que as funções de forma tradicionais da análise tradicional também são funções de refinamento (o que promove uma generalização maior do método). Também é importante denotar que, fora dos últimos loops, as contantes Auxk2 e Auxh2 são agregados dos valores Auxk e Auxh e subtraídos de 1, sendo que esta subtração ocorre porque tanto k quanto h sempre possuem um valor de uma unidade maior do que deveriam possuir pelo fato de o comando que promove essa soma estar ao final dos loops que tratam dos refinamentos existentes nos nós locais do elemento finito que está sendo tratado. Observando o funcionamento do código apresentado através de simulações com exemplos de casos simples com um ou poucos elementos finitos, fica simples observar que, no fim, o que ocorre é exatamente tudo o que foi apresentado nos esquemas matriciais das seções anteriores. 55

Capítulo 2. O Aplicativo GiD Neste capítulo, será apresentado uma introdução ao programa GiD. O principal objetivo, do texto a seguir, é o de oferecer uma abordagem inicial à forma como os diversos arquivos de sistema do mesmo funcionam e como estes devem ser configurados no sentido de haver a integração do programa GiD com um módulo de cálculo qualquer (no presente caso, o programa Chapas2D). A versão utilizada do mesmo foi a 9.0.4. Figura 7. Tela de Abertura do Aplicativo GiD 2.1 GiD The Personal Pre and Post Processor O software GiD se trata de um aplicativo computacional desenvolvido com o objetivo de ser uma ferramenta amigável e de fácil uso para tratar da parte de modelação geométrica, definição dos dados e visualização dos resultados de um problema de análise numérica. Ou seja, o mesmo tem como função servir de estrutura CAD para programas que fazem estes tipos de análises, sendo que podem ser dados, como exemplos, programas de simulação de fluidos e de estruturas estáticas. 56

Figura 8. Exemplo de Análise de uma Roda Dentada Sendo Visualizada no GiD Dessa forma, o GiD é muito utilizado por universidades, empresas e centros de pesquisas pela facilidade oferecida em realizar a troca de dados entre a parte gráfica e física de uma análise qualquer e o software de cálculo numérico. Para esta interação, a forma como os dados geométricos saem do GiD para o módulo de cálculo e como as informações de pós-processamento são acessadas podem ser livremente configuradas pelo usuário através de arquivos que definem a lógica dessa comunicação. No GiD, são cinco os arquivos a serem configurados: Arquivo *.Mat: Atribui a configuração quanto aos diferentes tipos de materiais passíveis de serem aplicados na análise assim como as suas propriedades. Trata-se de um arquivo o qual pode ser modificado dentro do próprio GiD para a definição de novos materiais quando necessário. Arquivo *.Prb: Configura os parâmetros gerais do problema que está sendo estudado como, por exemplo, o título da análise, a definição do método de resolução de sistemas lineares, et cetera. Arquivo *.Cnd: Define as condições que podem ser atribuídas à análise como, por exemplo, os diferentes tipos de carregamentos, restrições aos deslocamentos e refinamentos nodais. Sendo que estas condições podem também ser configuradas para serem aplicadas sobre um determinado tipo de elemento do problema, como um nó, uma superfície, um volume, etc. Arquivo *.Bas: Trata-se do arquivo responsável por definir a forma como os dados geométricos e as condições físicas da análise serão gravadas em um arquivo do tipo texto, o qual possui extensão *.Dat, para subsequente leitura pelo módulo de cálculo. Arquivo *.Bat: Trata-se da rotina responsável por executar o módulo de cálculo após o GiD ter passado todos os dados do problema para o arquivo *.Dat. 57

Contudo, para o completo funcionamento do programa, há a necessidade de mais arquivos serem definidos, os quais, apesar de não estarem diretamente ligados com a configuração do GiD, estão relacionados com o módulo de cálculo. São eles: Arquivo *.Dat: Gerado pelo GiD, contém todos os dados físicos e geométricos do problema que está sendo estudado, sendo o mesmo escrito de forma a ser compreendido pelo módulo de cálculo. Arquivo *.Exe: Trata-se do módulo de cálculo a ser executado pelo arquivo *.Bat e responsável pela geração de todos os resultados. Arquivo *.Post.Res: Arquivo gerado pelo módulo de cálculo, capaz de ser lido pelo GiD e que contém todas as informações sobre a análise feita. Em suma, o funcionamento do GiD com relação à análise dos problemas numéricos e à forma como os arquivos de configuração são utilizados, se baseia nos seguintes raciocínios esquematizados abaixo: Figura 9. Esquema Mostrando o Funcionamento do Software GiD 58

Figura 10. Esquema do Funcionamento do Sistema de Arquivos do GiD 2.2 Configurações dos Arquivos de Conexão Assim, por todas as características supracitadas, o GiD se trata de uma excelente ferramenta para o estudo e elaboração de um programa de método numérico. E por esse motivo, o mesmo foi implementado no presente programa desenvolvido. Para a interligação entre o programa Chapas2D e a ferramenta GiD, cada um dos cinco arquivos citados anteriormente foram configurados conforme o indicado nas tabelas que se seguem, sendo que os mesmos apresentam comentários, entre parênteses, para ser possível o acompanhamento da lógica de cada um. A última tabela se trata de um exemplo de arquivo *.Post.Res gerado pelo programa desenvolvido para uma análise simples com poucos elementos finitos. ARQUIVO *.MAT: (Entrada das propriedades dos materiais que podem ser usados no programa) MATERIAL: Aço1 QUESTION: Young-Modulos 59

VALUE: 200000000 QUESTION: Poisson VALUE: 0.3 QUESTION: Espessura VALUE: 1 END MATERIAL MATERIAL: Aço2 QUESTION: Young-Modulos VALUE: 210000000 QUESTION: Poisson VALUE: 0.25 QUESTION: Espessura VALUE: 1.5 END MATERIAL (Fim do arquivo) ARQUIVO *.PRB: (O programa vai apresentar ao usuário as opções de configuração do problema estrutural que forem aqui definidas. No presente caso, o usuário tem a opção de definir: um título para a análise, uma entre três tipos de elementos finitos, o tipo problema estrutural a ser solucionado, o método de resolução do sistema linear, quantos pontos de Hammer devem ser usados na integração numérica e a precisão do método de perturbação para resolução de sistemas lineares) PROBLEM DATA QUESTION: Titulo VALUE: Título HELP: Nome do Problema QUESTION: Elementos-Finitos#CB#(Triangulares-Refinados,Triangulares,Quadrilaterais) VALUE: Triangulares-Refinados HELP: Elementos Finitos Utilizados QUESTION: Problema-Estrutural#CB#(EPT,EPD) VALUE: EPT HELP: Tipo de Problema Estrutural QUESTION: Metodo-Usado#CB#(Gauss,Perturbacao) Value: Perturbacao HELP: Método de Resolução de Sistemas Lineares Utilizado QUESTION: Pontos-de-Hammer#CB#(1,3,4,6) Value: 6 HELP: Quantos Pontos Deseja-se Usar para a Integração Numérica QUESTION: Precisao VALUE: 0.000001 HELP: Precisão do Método de Perturbação END PROBLEM DATA (Fim do arquivo) ARQUIVO *.CND: (Definição das configurações com relação às definições físicas do problema estrutural) (Nome do gênero de condições físicas) CONDITION: Cargas-Nos 60

(Com relação aos elementos finitos, deve ser definido onde a condição física será aplicada. No presente caso, está definido que será sobre os nós dos elementos finitos) CONDTYPE: over points CONDMESHTYPE: over nodes (Nome da condição física aplicável na estrutura) QUESTION: Carga em x VALUE: 0 HELP: Digite o Valor da Carga na direção x QUESTION: Carga em y VALUE: 0 (Caso o usuário tenha dúvidas, é possível programar um texto que o direcione ao correto manuseio do programa) HELP: Digite o Valor da Carga na direção y END CONDITION CONDITION: Restricoes (Esta condição física, assim como a condição de refinamento nodal, não possui um valor numérico associado, somente um valor que indica uma condição de verdadeiro ou falso, os quais foram associados aos valores inteiros 1 e 0) CONDTYPE: over points CONDMESHTYPE: over nodes QUESTION: Restricao-X#CB#(0,1) VALUE: 0 QUESTION: Restricao-Y#CB#(0,1) VALUE: 0 END CONDITION CONDITION: Refinamento-de-Nos CONDTYPE: over points CONDMESHTYPE: over nodes QUESTION: Refinar-X#CB#(0,1) VALUE: 0 QUESTION: Refinar-Y#CB#(0,1) VALUE: 0 QUESTION: Refinar-XY#CB#(0,1) VALUE: 0 END CONDITION (Fim do arquivo) ARQUIVO *.BAS: (Arquivo principal de configuração das informações a serem lidas pelo módulo de cálculo) (Nas linhas abaixo, GenData se refere às informações definidas durante a configuração do problema estrutural) *GenData(Titulo) *GenData(Elementos-Finitos) *GenData(Problema-Estrutural) *GenData(Metodo-Usado) *GenData(Pontos-de-Hammer) *GenData(precisao) 61

(Número de nós, de elementos finitos, de materiais, de nós com restrição, de nós com refinamento nodal e de nós com carga aplicada) *npoin *nelem *nmats *Set Cond restricoes *nodes *CondNumEntities(int) *Set Cond refinamento-de-nos *nodes *CondNumEntities(int) *Set Cond cargas-nos *nodes *CondNumEntities(int) (Refinamentos dos nós) *Set Cond refinamento-de-nos *nodes (Número do nó) (Presença dos refinamentos 1, 2 e 3) *loop nodes *onlyincond *nodesnum *cond(1) *cond(2) *cond(3) *end nodes (Coordenadas dos nós) (Número do nó) (Coordenada X) (Coordenada Y) *loop nodes *nodesnum *nodescoord(1,real) *nodescoord(2,real) *end nodes (Restrições dos nós) (Numero do nó) (Restrição em X) (Restrição em Y) *Set Cond restricoes *nodes *loop nodes *onlyincond *nodesnum *cond(1) *cond(2) *end nodes (Cargas nos nós) (Numero do nó) (Força Aplicada em X) (Força Aplicada em Y) *Set Cond cargas-nos *nodes *loop nodes *onlyincond *nodesnum *cond(1) *cond(2) *end nodes (Materiais existentes) (Número do material) (Módulo de Young) (Coeficiente de Poisson) (Espessura) *loop materials *matnum *Matprop(Young-Modulos,real) *Matprop(Poisson,real) *Matprop(espessura,real) *end materials (Elementos finitos) (Número do elemento) (Nós do elemento) (Número do material do elemento) *loop elems *ElemsNum *ElemsConec *ElemsMat *end elems (Fim do arquivo) ARQUIVO *.BAT: (Programação, em código Batch, para a execução do módulo de cálculo) 62

@ECHO OFF rem OutputFile: %2\%1.boh rem ErrorFile: %2\%1.err %3\Chapas2D.exe %2\%1 (Fim do arquivo) A próxima tabela trata-se somente de um exemplo de arquivo *.Post.Res gerado para uma análise de uma estrutura sob estado plano de tensão com o uso de nove elementos finitos, o qual possui todos os resultados do estudo numérico realizado e os quais podem ser lidos pelo GiD para ser feita a apresentação e visualização dos mesmos. ARQUIVO *.POST.RES: GiD Post Results File 1.0 Result "Deslocamentos Nodais" "TIME ANALYSIS" 1e-008 Vector OnNodes ComponentNames "Deslocamento X", "Deslocamento Y" Values 1 0.01223960 0.06420333 2 0.00926830 0.05751464 3 0.01430203 0.06317116 4 0.01312209 0.05242584 5 0.00457418 0.04675465 6 0.02273120 0.06297846 7 0.02263899 0.05558118 8 0.01094305 0.03910148 9-0.00040968 0.03258028 End values Result "Tensões Médias Nodais" "TIME ANALYSIS" 1e-008 Vector OnNodes ComponentNames "Tensão X", "Tensão Y", "Tensão Z", "Cisalhamento XY" Values 1 2.619444 1.211999 0.000000 1.656667 2 2.535828 1.293719 0.000000 1.672727 3 1.121665 0.747612 0.000000 0.775878 4 1.767395 0.869759 0.000000 1.198557 5 3.489715 1.264710 0.000000 2.189259 6 0.103603 0.149188 0.000000 0.124324 7 0.418905 0.357227 0.000000 0.257520 8 2.835942 0.865430 0.000000 1.956809 9 3.743701 1.215832 0.000000 2.716854 End values Result "Deformações Médias Nodais" "TIME ANALYSIS" 1e-008 Vector OnNodes ComponentNames "Def X", "Def Y", "Def Z", "Def XY" Values 1 0.002377 0.000688-0.000766 0.003976 2 0.002277 0.000787-0.000766 0.004015 3 0.000972 0.000523-0.000374 0.001862 4 0.001593 0.000516-0.000527 0.002877 5 0.003237 0.000567-0.000951 0.005254 6 0.000074 0.000128-0.000051 0.000298 7 0.000347 0.000273-0.000155 0.000618 8 0.002663 0.000298-0.000740 0.004696 63

9 0.003501 0.000467-0.000992 0.006520 End values Result "Tensões Principais Nodais" "TIME ANALYSIS" 1e-008 Vector OnNodes ComponentNames "Tensão Máx", "Tensão Mín", "Cisalhamento XY Máx" Values 1 3.71565815 0.11578462 1.79993676 2 3.69907298 0.13047404 1.78429947 3 1.73273926 0.13653725 0.79810101 4 2.59841139 0.03874254 1.27983442 5 4.83292397-0.07849832 2.45571114 6 0.25279132 0.00000000 0.12639566 7 0.64742632 0.12870555 0.25936039 8 4.04153718-0.34016516 2.19085117 9 5.47623566-0.51670267 2.99646916 End values Result "Deformações Principais Nodais" "TIME ANALYSIS" 1e-008 Vector OnNodes ComponentNames "Def P1", "Def P2", "Def P3", "Def Máx" Values 1 0.005597-0.000766-0.002532 0.008129 2 0.005615-0.000766-0.002551 0.008166 3 0.002623-0.000374-0.001128 0.003751 4 0.003981-0.000527-0.001872 0.005853 5 0.007323-0.000951-0.003519 0.010842 6 0.000401-0.000051-0.000199 0.000599 7 0.000930-0.000155-0.000309 0.001238 8 0.006323-0.000740-0.003362 0.009686 9 0.008678-0.000992-0.004711 0.013389 End values 64

Capítulo 3. O Programa Chapas2D e a sua Integração com a Ferramenta GiD Neste capítulo, será apresentado uma abordagem a respeito do programa de MEFG desenvolvido Chapas2D assim como uma síntese sobre a forma de inicializar e utilizar o mesmo em conjunto com a ferramenta GID. Será mostrado, em detalhes, como que se deve proceder para realizar as análises desejadas, mediante a correta configuração do problema estrutural, o qual está sendo estudado, dentro da ferramenta GiD. Também será mostrado como averiguar os resultados, depois de obtidos, através das diversas opções de visualização oferecidas pelo GiD. 3.1 O Programa de MEFG Chapas2D Conforme já vem sendo discutido no presente trabalho, o programa Chapas2D se trata de uma aplicativo desenvolvido em linguagem FORTRAN, o qual foi concebido com o objetivo principal de apresentar algumas das mais importantes propriedades do chamado método dos elementos finitos generalizados assim como de mostrar sua maior eficácia, em variadas situações de análises estruturais, quando comparado com o método dos elementos finitos convencional. O programa feito, cujo código-fonte segue comentado ao final do capítulo 5, permite realizar análises planas sob estado plano de tensão ou de deformação, sendo que o mesmo trabalha com materiais isotrópicos e possui a função de permitir valores de espessuras diferentes para os diversos elementos finitos de uma análise. Além de poder serem aplicados elementos finitos triangulares CST com a opção de refinamento nodal, o programa também permite que se realizem análises com elementos finitos quadrilaterais, porém sem haver refinamentos nodais. Como resultados de pós-processamento, o programa calcula os valores dos deslocamentos nodais nas direções X e Y assim como as tensões e deformações médias nodais na direções X e Y e os valores das tensões e deformações nas direções principais. Nas opções de configuração do programa, é possível ajustar o número de pontos de Hammer a ser empregado na integração numérica em domínio triangular, os quais podem variar entre 1 a 6, assim como o método de solucionamento de sistemas lineares, o qual pode ser o clássico de Gauss ou o de perturbação, que permite que sistemas lineares nas quais a matriz de coeficientes não seja positiva definida possam ser resolvidas. Para finalizar, o programa Chapas2D foi escrito utilizando como ambiente de desenvolvimento o Visual Studio 2008 Shell e como compilador o Intel Visual Fortran na versão 11.1.048. No sentido de obter uma melhor a performance do programa, com respeito ao tempo de processamento que o mesmo gasta quando realiza as suas operações, o mesmo foi compilado com a opção de otimização O3 ativada. 65

3.2 Inicialização do Módulo de Cálculo, Execução do Desenho Geométrico e Definição dos Parâmetros da Análise Para inicializar o programa Chapas2D dentro do GiD, os arquivos de configuração devem ser lidos através da chamada do problema-tipo, o qual foi configurado com os arquivos explanados no capítulo 2. Figura 11. Inicialização do Programa Chapas 2D no GiD Após inicializado o módulo de cálculo, o próximo passo é o de produzir o desenho geométrico da estrutura a ser analisada por meio das ferramentas CAD oferecidas pelo GID ou através da importação do desenho de outro aplicativo como, por exemplo, do AutoCad. Utilizando o programa GID, os comandos, à esquerda, permitem desenhar linhas, círculos e outras figuras geométricas mais complexas. 66

Figura 12. Comandos Oferecidos pelo GiD para Definição do Desenho Geométrico do Problema Estrutural sob Análise Figura 13. Desenho Geométrico Pronto da Estrutura a ser Solucionada Depois de esquematizada a geometria do problema estrutural, deve-se selecionar a área a qual será dividida em elementos finitos. Isso pode ser feito mediante o comando de criar áreas NURBS, conforme mostrado na Figura 14. 67

Figura 14. Comando de Criar Superfícies NURBS Depois de definidas as áreas, a malha de elementos finitos é criada por meio do comando generate mesh (ou gerar malha). É importante deixar claro que o GiD permite que sejam escolhidos diversos elementos finitos diferentes para a criação da malha assim como o grau de refinamento geral da mesma. Figura 15. Comando Para Gerar a Malha de Elementos Finitos 68

Figura 16. Exemplo de Malha de Elementos Finitos Triangulares Gerada para a Análise de uma Roda Dentada Continuando, com os arquivos de configuração inicializados e o desenho geométrico da análise efetuado com sua respectiva malha de elementos finitos, tornase possíveis acessar a três opções do programa, os quais definem os parâmetros e as condições de contorno da análise a ser realizada. Seguem os detalhes de cada uma dessas opções: 1 opção - Conditions ou condições da análise: Parte do programa onde há a possibilidade de se definir as cargas nodais em cada uma das direções X e Y, as restrições aos deslocamentos nodais na mesmas direções e também os refinamentos que atuarão nos nós. Figura 17. Tela da Opção "Condições" para Entrada dos Valores das Cargas Nodais 69

Figura 18. Tela da Opção "Condições" para Restrição dos Deslocamentos Nodais Figura 19. Tela da Opção "Condições" para Aplicação dos Refinamentos Nodais 2 opção - Materials ou materiais da análise: Parte do programa onde são definidas as propriedades dos materiais que serão empregados na análise. Como o programa Chapas2D só trabalha com materiais isotrópicos, então essas propriedades são módulo de Young, coeficiente de Poisson e espessura do elemento finito. 70

Figura 20. Tela da Opção "materiais" para Definição dos Parâmetros de cada Material 3 opção Problem Data ou dados da análise: Parte do programa onde é especificado um título para a análise, o tipo de elementos finitos a ser utilizado (triangulares, triangulares com refinamentos nodais ou quadrilaterais), o problema plano a ser solucionado (EPT Estado plano de tensão ou EPD Estado plano de deformação), o método a ser usado para a resolução do sistema linear (perturbação ou gauss), o número de pontos de Hammer a ser usado na integração numérica e a precisão do método de perturbação, caso este seja o escolhido para resolver o sistema linear. Figura 21. Tela para a Definição dos Parâmetros Gerais da Análise a ser Realizada Definidos todos os parâmetros da análise e as condições de contorno do problema estrutural, resta somente realizar os cálculos por meio do comando calculate e observar os resultados de pós-processamento. 71

Figura 22. Comando para se Realizar o Cálculo do Problema Estrutural Para analisar os resultados por meio de gráficos de cores, basta ativar o comando à esquerda, mostrado na figura Figura 23, e decidir que tipo de resultado se deseja visualizar. Figura 23. Comandos para Visualização Gráfica dos Resultados de Pós-Processamento Também é possível de se averiguar os resultados em pontos específicos do problema, ou mesmo através de uma linha de pontos, por meio dos comandos à esquerda, na parte inferior da tela. 72

Figura 24. Comandos para Visualização Gráfica de Resultados Locais de Pós-Processamento No entanto, caso seja desejado saber os valores exatos dos resultados de pósprocessamento, é possível listá-los por meio do comando de listar resultados filtrados, conforme mostra a Figura 25. Figura 25. Comando para Listagem de Resultados de Pós-Processamento 73

Capítulo 4. Análises Comparativas Com o objetivo de ser feita a verificação da presença de erros de programação cometidos durante a síntese do programa Chapas2D, foram realizadas análises comparativas entre os resultados obtidos com o uso do mesmo e o software Ansys (na versão 12) para alguns problemas de estruturas planas sob estado plano de tensão. Também foram realizados testes no sentido de mostrar a maior eficácia do MEFG em comparação com o MEF convencional. Os testes que seguem explanados neste capítulo foram divididos em duas etapas. A primeira etapa tem como objetivo averiguar se o programa feito consegue utilizar todas as suas ferramentas sem cometer erros devido à equívocos cometidos durante a fase de programação. Desta forma, para ser possível comparar os resultados com o software Ansys e ter certeza de que os mesmo estão corretos, não foram utilizados refinamentos nodais nesta etapa. A segunda etapa visa analisar se a opção de refinamento dos nós da análise realmente produz resultados coerentes com a teoria além de certificar a maior eficácia no uso do MEFG para se obter melhores resultados. As análises realizadas na primeira etapa foram, mais especificamente, de uma chapa de poucos elementos finitos, com cargas concentradas aplicadas em alguns nós e com dois materiais diferentes e de uma chapa engastada de largura e altura unitária, se tratando de um problema clássico de viga engastada para o qual há solução analítica. Na segunda etapa, foram analisados três problemas clássicos, os quais se tratam de uma viga engastada com 2 materiais diferentes e que passa por um estado de flexão composta, uma viga bi-apoiada com a aplicação de uma carga vertical concentrada no meio do vão e de uma viga engastada tracionada. Vale lembrar que, para todos estes casos, há soluções analíticas e que, em várias das análises, as mesmas foram aproveitadas no sentido de se garantir a validade dos resultados. 4.1 Primeira Etapa de Testes: Chapa Engastada com Estado Múltiplo de Solicitação e Viga Engastada Fletida A primeira análise da primeira etapa de testes serviu para verificar se todas as opções de configuração do programa funcionam conforme o esperado. Assim, todas estas foram testadas em um único problema estrutural. É importante lembrar que, nesta primeira etapa de testes, não foram utilizados refinamentos nodais e que todos os cálculos foram realizados utilizando o elemento finito triangular CST. Segue um esquema do problema com os elementos, propriedades e as cargas adotadas: 74

Figura 26. Esquema da Primeira Análise Com relação às propriedades adotadas para os elementos finitos, cada uma está relacionada com diferentes valores de Módulo de Young, Coeficiente de Poisson e de espessura. A tabela abaixo mostra cada valor adotado: Tabela 4. Propriedades dos Materiais Utilizados na Primeira Análise Propriedades 1: Módulo de Young [N/m²]: 1000 Coeficiente de Poisson: 0.2 Espessura [m]: 1.5 Propriedades 2: Módulo de Young [N/m²]: 1000 Coeficiente de Poisson: 0.2 Espessura [m]: 1 Propriedades 3: Módulo de Young [N/m²]: 500 Coeficiente de Poisson: 0.1 Espessura [m]: 1 Após as simulações, foi verificado que o programa está efetuando todos os cálculos corretamente, já que os resultados da análise de comparação entre os valores obtidos pelo programas Chapas2D e pelo Ansys deram iguais. No total, foram 75

efetuadas cinco comparações de resultados, sendo eles: os deslocamentos nodais na direção X e Y, as tensões médias nodais nas direções X e Y e as tensões médias nodais de cisalhamento. Uma ressalva que deve ser feita é com relação aos valores das tensões obtidas na primeira análise, as quais diferiram um pouco em ambos os programas. Tal discrepância existiu pelo fato de que enquanto o programa desenvolvido calcula as tensões nodais por meio da média das tensões obtidas nos nós dos elementos finitos, o software Ansys produz os mesmos resultados através de uma extrapolação em função do material que está sendo empregado em cada elemento finito. Entretanto, a forma de cálculo adotada no programa é correta e sugerida por vários textos que tratam do assunto, como, por exemplo, o livro Introdução ao Método dos Elementos Finitos, de autoria do professor do departamento de engenharia de estruturas da EESC-USP Dr. Walter Savassi. Seguem todos os resultados obtidos: Figura 27. Valores dos Deslocamentos Nodais, na Direção X, da Primeira Análise no GiD 76

Figura 28. Valores dos Deslocamentos Nodais, na Direção X, da Primeira Análise no Ansys Figura 29. Valores dos Deslocamentos Nodais, na Direção Y, da Primeira Análise no GiD 77

Figura 30. Valores dos Deslocamentos Nodais, na Direção Y, da Primeira Análise no Ansys Os valores das tensões médias nodais foram um pouco diferentes em ambas as análises. Entretanto, em todos os casos, estes oscilaram próximos uns aos outros, conforme fica visível nas apresentações dos resultados de cada um: Figura 31. Valores das Tensões Médias Nodais, na Direção X, da Primeira Análise no GiD 78

Figura 32. Valores das Tensões Médias Nodais, na Direção X, da Primeira Análise no Ansys Figura 33. Valores das Tensões Médias Nodais, na Direção Y, da Primeira Análise no GiD 79

Figura 34. Valores das Tensões Médias Nodais, na Direção Y, da Primeira Análise no Ansys Figura 35. Valores das Tensões de Cisalhamento Médias Nodais da Primeira Análise no GiD 80

Figura 36. Valores das Tensões de Cisalhamento Médias Nodais da Primeira Análise no Ansys A segunda e última análise da primeira etapa de testes consistiu em um problema clássico de viga engastada, sendo que há solução analítica para o mesmo. Segue um esquema do problema estudado: Figura 37. Esquema da Segunda Análise 81

Figura 38. Seção da Viga Estudada na Segunda Análise Para as propriedades adotadas na estrutura, foram consideradas as seguintes constantes: Tabela 5. Propriedades dos Materiais Utilizados na Segunda Análise Propriedades 1: Módulo de Young [N/m²]: 2.10E+10 Coeficiente de Poisson: 0.2 Espessura [m]: 1 Os resultados obtidos para a análise, nos programas Chapas2D e Ansys, podem ser visualizados abaixo: Figura 39. Valores dos Deslocamentos Nodais, na Direção Y, da Segunda Análise no GiD 82

Figura 40. Valores dos Deslocamentos Nodais, na Direção Y, da Segunda Análise no Ansys Da mecânica dos sólidos, a flecha para o problema acima pode ser calculada da seguinte forma: Sendo P a carga aplicada na extremidade livre, E o módulo de Young e I o momento de inércia. Ou seja, comparando os três resultados obtidos, tem-se que a ordem do erro, com relação à equação analítica, foi de 1.5% para a flecha calculada com o programa desenvolvido e de 1.8% para a flecha obtida por meio do software Ansys. Dessa forma, fica claro que o módulo de cálculo desenvolvido está realizando as operações matemáticas coerentemente, sendo os erros obtidos explicados pelo refinamento da malha de elementos finita adotada (a qual, quanto mais refinada for, mais próximo da teoria serão os resultados). 4.2 Segunda Etapa de Testes: Viga Engastada com Flexão Composta, Viga Bi-apoiada com Carga Centrada e Viga Engastada Tracionada Na segunda etapa de testes, objetivou-se verificar o correto funcionamento da opção de refinamento nodal assim como de certificar a maior eficácia do mesmo, com 83

relação à obtenção de melhores resultados, em comparação ao método do refinamento da malha de elementos finitos comumente adotado no MEF convencional. A primeira análise da segunda etapa de testes, a qual será aqui chamada de terceira análise, no sentido de seguir a ordem da numeração global das análises, consistiu em uma viga engastada, a qual apresenta carga horizontal e vertical aplicadas na extremidade e dois materiais com propriedades totalmente diferentes. Tal problema estrutural também foi esquematizado no aplicativo Ansys, de forma que fosse possível comparar os resultados obtidos. Segue esquema da viga analisada: Figura 41. Esquema da viga Estudada na Terceira Análise Tanto no programa GiD quanto no Ansys, foi realizado um alto refinamento da malha de elementos finitos e, no GiD, todos os elementos foram refinados com as três funções de refinamento existentes no programa Chapas2D. O objetivo foi de verificar a igualdade de resultados do campo de deslocamentos na direção X e Y obtidos tanto pelo programa Chapas2D quanto pelo Ansys. Figura 42. Malha de Triângulos Feita no GiD para a Terceira Análise Figura 43. Malha de Quadrados Feita no Ansys para a Terceira Análise 84

Seguem imagens com os resultados dos campos de deslocamentos: Figura 44. Valores dos Deslocamentos Nodais, na Direção X, da Terceira Análise no GiD Figura 45. Valores dos Deslocamentos Nodais, na Direção Y, da Terceira Análise no Ansys 85

Figura 46. Valores dos Deslocamentos Nodais, na Direção Y, da Terceira Análise no GiD Figura 47. Valores dos Deslocamentos Nodais, na Direção Y, da Terceira Análise no Ansys Como foi possível verificar, os resultados obtidos foram praticamente os mesmos, o que mostra a validade do programa Chapas2D quando é utilizada a opção de refinamentos nodais. Continuando, a segunda análise da segunda etapa de testes, ou quarta análise global, consistiu em uma viga bi-apoiada com carga concentrada no meio do vão. Os objetivos centrais desse problema estrutural foram: comparar os resultados obtidos pelo programa Chapas2D com os obtidos por meio do cálculo analítico e provar a maior eficácia no uso da ferramenta de refinamentos nodais, como forma de melhorar os resultados, em comparação ao método do refinamento da malha de elementos finitos. 86

Segue o esquema da análise: Figura 48. Esquema da Quarta Análise Na figura Figura 49 é possível ver a malha de elementos finitos adotada para essa análise. A mesma é composta por 144 elementos triangulares, divididos de forma estruturada ao longo da chapa. Figura 49. Refinamento Adotado na Malha de Elementos Finitos da Quarta Análise Então, inicialmente, foram refinados todos os elementos finitos com todas as funções de refinamentos existentes no programa Chapas2D e averiguado as respostas com as soluções analíticas. Seguem os resultados obtidos para o campo de deslocamentos na direção Y assim como para o campo das tensões médias nodais na direção X: Figura 50. Valores dos Deslocamentos Nodais, na Direção Y, da Quarta Análise no GiD Figura 51. Valores da Tensões Média Nodais, na Direção X, da Quarta Análise no GiD 87

Da teoria, tem-se que a flecha, no meio do vão, é dada mediante a seguinte equação: Flecha 3 PL 48 EI (1.8.3) Aplicando-a, obtém-se que a flecha teórica é de 0.0003 metros. Ou seja, comparando-a com o resultado obtido pelo programa Chapas2D, obtém-se que o valor calculado pelo programa difere do teórico por 5.41%. Também, da teoria, tem-se que a tensão na parte inferior da viga, na seção central, é dada por: M x x,max (1.8.4) Wx Aplicando-a, obtém-se que a tensão teórica é de 900 kn. Ou seja, comparandoa com o valor obtido pelo Chapas2D, obtém-se que o mesmo difere do teórico por 2 m 4.4%. Com as diferenças entre os resultados teóricos e numéricos calculados, agora repete-se a mesma análise (a qual se tratará de uma análise nova que será chamada de quinta análise), só que utilizando elementos finitos triangulares CST sem refinamento nodal algum. Seguem os resultados obtidos para essa nova análise: Figura 52. Valores dos Deslocamentos Nodais, na Direção Y, da Quinta Análise no GiD Figura 53. Valores da Tensões Média Nodais, na Direção X, da Quinta Análise no GiD 88

Fazendo-se novamente a comparação entre os resultados teóricos e numéricos, a diferença de resultados para o deslocamento em Y, no meio do vão, foi de 50.8% e para a tensão, na direção X, na parte inferior da viga, no meio do vão, foi de 48.01%. Dessa forma, com estes resultados fica evidente o grande efeito positivo que os refinamentos nodais provocam nos resultados obtidos. Já que, em duas análises realizadas, sendo que a única diferença entre ambas foi a presença dos refinamentos nodais, houveram diferenças tão significativas de resultados. No sentido de mostrar outros aspectos positivos dos refinamentos nodais, e do MEFG de forma geral, realiza-se mais uma vez a mesma análise, só que, dessa vez, com uma malha de elementos finitos triangulares CST suficientemente refinada de forma a atingir os mesmos resultados obtidos anteriormente com a malha de elementos finitos menos refinada mas com a presença de refinamentos nodais. Com uma malha composta de 1680 triângulos, ou seja, cerca de 11.6 vezes mais refinada que a malha da quarta análise, foi possível obter um deslocamento, na direção Y, no meio do vão, de 0.0002803 metros, o qual está próximo do obtido para a malha menos refinada de elementos finitos mas com refinamentos nodais aplicados. Entretanto, devido à necessidade da uma malha exageradamente refinada de elementos finitos, o tempo de processamento para essa última análise foi de 42 segundos, ou seja, cerca de 10.5 vezes maior do que os 4 segundos da quarta análise. Um outro aspecto interessante e esperado dessa sexta análise se trata do valor obtido para a tensão, na direção X, na parte inferior da viga, no meio do vão. A mesma foi de 1064 kn 2 m e apresenta uma diferença com relação à solução teórica da ordem de 18.22%. Assim, tanto os resultados dos campos de deslocamentos nodais quanto do campo de tensões nodais, na sexta análise, foram piores que os obtidos na quarta análise. Figura 54. Malha Mais Refinada de Elementos Finitos da Sexta Análise Um último estudo que pode ser feito, ainda com o mesmo problema estrutural mostrado acima, e que apresenta uma outra vantagem do MEFG, está relacionado com a busca por melhores resultados de forma localizada. Com a mesma malha de elementos finitos utilizada na quarta análise, foi realizado o refinamento nodal, com todas as funções de forma existentes no programa Chapas2D, apenas no trecho circulado em vermelho, conforme está representado na figura Figura 55. O objetivo desta análise foi de comparar os valores das tensões, na direção X, na linha de nós vertical que está no centro do círculo em vermelho, com os valores da tensão, na direção X, só que na linha de nós circulada em verde. A ideia é a de que, como o problema estrutural é simétrico, todos estes nós deveriam apresentar os mesmos resultados de acordo com a teoria clássica da resistência dos materiais, porém os nós refinados apresentarão resultados mais próximos do teórico. 89

Figura 55. Esquema do Refinamento Local: Os Nós Refinados Estão Circulados em Vermelho e os Nós, Com os Quais os Resultados Foram Comparados, Estão Circulados em Verde Continuando com a análise, os resultados obtidos foram (todos na unidade de kn ), para os nós circulados em verde, de baixo para cima: 116.50, 44.57, -52.68 e - 2 m 113.64; e para os nós no centro do círculo vermelho (os quais são simétricos com relação aos nós circulados em verdes), de baixo para cima: 207.58, 71.49, -76.65 e - 225.51. Da teoria, temos os seguintes valores: 300, 100, -100 e -300. Dessa forma, obtém-se que os resultados nos nós circulados em verde diferem dos valores teóricos por: 61.16%, 55.43%, 47.32% e 62.12%. Já os resultados dos nós no centro do círculo em vermelho diferem dos valores teóricos por: 30.8%, 28.51%, 23.35% e 24.83%. Ou seja, com o MEFG é possível obter melhores resultados para uma análise de forma local, sem a necessidade de haver refinamento em todos os nós do problema. A conclusão a ser obtida de todos estes resultados é o fato de que, realmente, o refinamento nodal se mostra como uma ferramenta mais eficaz, em oposição ao método de refinamento da malha de elementos finitos, quando está se tratando de obter melhores resultados para uma análise estrutural. Continuando com as análises da segunda etapa de testes, a próxima análise tem como objetivo central apresentar uma das principais qualidades do MEFG, a qual é a capacidade do mesmo de melhorar uma análise associada à um determinado tipo de resultado. No presente caso que se segue, uma chapa engastada, a qual está tracionada, terá suas tensões, na direção X, calculadas de duas formas diferentes na base do engaste. Na primeira delas, todos os nós da análise serão refinadas por uma função de refinamento a qual aumenta a ordem da variável Y e, depois, a mesma análise é realizada, só que com os nós refinados por uma função de refinamento o qual aumenta a ordem da variável X. Os resultados, uma vez obtidos, são então comparados. Segue o esquema da análise (que se trata da sétima na numeração global) com a malha de elementos finitos adotada para a mesma: 90

Figura 56. Esquema da Sétima Análise Com os quatro nós refinados pela função de enriquecimento que aumenta a ordem da variável Y, obtém-se os seguintes valores das tensões, na direção X, na base do engaste: 14.35 kn 2 m e 14.47 kn. Agora, com estes mesmos nós refinados pela 2 m função de enriquecimento que aumenta a ordem da variável X, obtém-se como novos resultados: 13.01 kn 2 m e 13.36 kn 2 m. Da teoria clássica da resistência dos materiais, é sabido que o valor exato da tensão, na direção X, na base do engaste, é de 13.33 kn. Dessa forma, comparando-o 2 m aos valores obtidos na análise realizada, tem-se que, no primeiro caso (do refinamento em Y), os valores diferem do teórico em 7.65% no primeiro valor e 8.55% no segundo valor. Já no segundo caso, os valores diferem do teórico em 2.4% no primeiro valor e 0.23% no segundo valor. Ou seja, como pode ser visto, o refinamento em X apresentou melhores resultados para a análise das tensões, na direção X, que o refinamento em Y. Assim, conclui-se que o MEFG também pode ser empregado no sentido de melhorar determinados resultados de uma análise, os quais, antes, seriam pobres com o uso do MEF convencional ou requereriam uma malha de elementos finitos muito refinada. Um exemplo clássico de análise desse tipo é o cálculo dos valores das tensões nas micro-fissuras presentes em uma estrutura de concreto. Por meio do MEFG, é possível utilizar enriquecimentos com funções de forma relacionadas às equações da mecânica da fratura e obter melhores resultados das tensões em trechos localizados. 91

Capítulo 5. Código-Fonte do Programa Chapas2D Neste capítulo, segue o código-fonte (com comentários em verde) do programa Chapas2D. O mesmo foi estruturado e, depois, compilado utilizando a linguagem computacional Formula Translator ou FORTRAN. Esta linguagem de programação foi a escolhida por se tratar de uma linguagem simples e prática, sendo a mesma muito usada e conhecida no mundo acadêmico. 5.1 Constantes, Vetores e Matrizes Importantes Utilizados no Programa e Seus Significados No programa Chapas2D, muitas foram as constantes, vetores e matrizes declaradas e utilizadas no decorrer do código-fonte. Nesta seção, serão explicadas as mais importantes para a compreensão da lógica de como o programa trabalha na aplicação do MEF e do MEFG. Inicialmente, serão explanadas as constantes centrais para, depois, se detalhar os vetores e, finalmente, as matrizes fundamentais. As constantes primordiais para o funcionamento do programa Chapas2D são: FuncoesDeRefinamento: Número de funções de refinamento diferentes possíveis de serem aplicados aos nós dos elementos finitos da malha do problema estrutural; GrausDeLiberdade: Grau de liberdade dos nós do elemento finito utilizado sem refinamento; MaxOrdemB: Máximo número de colunas que uma matriz B da análise pode chegar a apresentar; Ncarga: Número de nós que sofrem ação de carga concentrada; Nef: Número de elementos finitos da análise; Nmats: Número de materiais diferentes da análise; Nnos: Número de nós da análise; Nrefinados: Número de nós refinados; Nrestri: Número de nós com restrições de deslocamento; Ordem: Ordem da matriz de rigidez global do problema; OrdemMatrizB: Número real de colunas da matriz B. PontosDeHammer: Número de pontos de Hammer a ser usado na integração numérica dos domínios triangulares; Continuando, os vetores mais importantes são: Area(x) com alocação dinâmica dada por (Nef): Guarda o valor da área de cada elemento finito da análise; ContadorDeRefinamentos(x) com alocação dinâmica dada por (Nnos): Indica o número de refinamentos presentes em um determinado nó da análise. Vale ressaltar que, como no presente programa as funções de forma convencionais foram 92

consideradas como pertencentes à família das funções de refinamento, este vetor sempre retornará valor 1, mesmo se não houver refinamento algum no nó. CorrecaoNoMatrig(x) com alocação dinâmica dada por (Nnos+1): Este vetor possui como função dar o número de refinamentos presentes em todos os nós anteriores ao nó global cujo valor está sendo inserido na variável x. MaiorDistNosRef(x) com alocação dinâmica dada por (Nrefinados): Guarda o valor da maior distância entre 2 nós contidos dentro de cada nuvem formada por todos os nós refinados do problema. A variável x está associada com a numeração dos próprios nós refinados. Material(x) com alocação dinâmica dada por (Nef): Indica o valor do material de cada elemento finito da análise; MatForcas(x) com alocação dinâmica dada por (Ordem): Vetor de forças nodais equivalentes da análise; NosRefinados(x) com alocação dinâmica dada por (Nrefinados): Guarda o valor global do nó refinado em função da numeração associada aos mesmos. Sol(x) com alocação dinâmica dada por (Ordem): Salva a solução do sistema formado pela matriz de rigidez e o vetor de forças nodais equivalentes e, depois, os valores das incógnitas nodais com significados físicos; SolConvertido(x) com alocação dinâmica dada por (2*Nnos): Mantém somente os valores das incógnitas nodais que apresentam significado físico para, depois, serem novamente transferidos para o vetor Sol quando este for realocado para possuir 2*Nnos valores; Agora, as matrizes mais importantes do programa são: Cconc(x,y) com alocação dinâmica dada por (Ncarga,3): Guarda as condições de forças concentradas aplicadas para cada nó da malha. A variável x está associada ao valor do nó com carga concentrada, com relação à numeração associadas somente aos nós que apresentam esse tipo de condição, e y está associada, quando 1, à força no sentido do eixo x, quando 2, à força no sentido do eixo y e, quando 3, ao valor global do nó que apresenta as forças concentradas; Cord(x,y) com alocação dinâmica dada por (Nnos,2): Guarda os valores das coordenadas de cada nó do problema, sendo x o valor global do nó e y a sua coordenada x, quando igual a 1, ou sua coordenada y, quando igual a 2; Estif(x,y) com alocação dinâmica dada por (MaxOrdemB,MaxOrdemB): Matriz de rigidez local dos elementos finitos; FuncoesMatrizB(x,y): Mantém os valores numéricos das derivadas das funções de formas convencionais e refinadas com as variáveis já substituídas pelos pontos de Hammer. A variável x varia de 1 até 12, sendo que, quando possui valor entre 1 e 3, representa as derivadas das funções de forma convencionais para os nós locais 1, 2 e 3, quando possui valor entre 4 e 6, representa as derivadas das funções de forma com o primeiro enriquecimento para os nós locais 1, 2 e 3, quando possui valor entre 7 e 9, representa as derivadas das funções de forma com o segundo enriquecimento para os nós locais 1, 2 e 3 e, quando possui valor entre 10 e 12, representa as derivadas das funções de forma com o terceiro enriquecimento para os nós locais 1, 2 e 3. A variável y varia entre 1 e 2 e representa a variável da derivação, sendo 1 para x e 2 para y. 93

Ires(x,y) com alocação dinâmica dada por (Nrestri,3): Guarda as condições de restrição para cada nó da malha. A variável x está associada ao valor do nó restringido, com relação à numeração associadas somente aos nós que apresentam esse tipo de condição, e y está associada, quando 1, à condição de restrição ao deslocamento no sentido do eixo x, quando 2, à condição de restrição ao deslocamento no sentido do eixo y e, quando 3, ao valor global do nó restringido; Materiais(x,y) com alocação dinâmica dada por (Nmats,3): Guarda os valores dos parâmetros para cada material existente na análise. A variável x guarda o valor do material e y o parâmetro associado ao mesmo, os quais são: 1 para módulo de Young, 2 para coeficiente de Poisson e 3 para a espessura do elemento finito; Matrig(x,y) com alocação dinâmica dada por (Ordem,Ordem): Matriz de rigidez global do problema, quando tratada no programa central, e matriz de rigidez local, quando tratada na subrotina de integração numérica. MatrizB(x,y,z) com alocação dinâmica dada por (PontosDeHammer, 3,MaxOrdemB): Representa a matriz B da integral para o cálculo da matriz de rigidez. Com a dimensão x, são guardados os valores da matriz para x pontos de Hammer utilizados na integração numérica. As dimensões y e z se tratam das linhas e colunas da matriz B. MatrizBEsp(x,y,z,v) com alocação dinâmica dada por (Nef,3,3,MaxOrdemB): Representa a matriz B de um elemento finito para o cálculo das suas tensões e deformações nodais. A dimensão x guarda o valor do elemento finito, a dimensão y é responsável por identificar o nó local cujas coordenadas estão sendo utilizadas no cálculo da matriz B, a dimensão z referencia as linhas da matriz B e a dimensão v as suas colunas. MatrizD(x,y) com alocação dada por (3,3): Representa a matriz D da integral para o cálculo da matriz de rigidez; NosAoRedor(x,y) com alocação dinâmica dada por (Nrefinados,500): Guarda os valores globais dos nós que estão ao redor de cada nó refinado. A variável x está associada com o número do nó refinado, na numeração própria dos mesmos, e a variável y está associada com cada nó ao redor do nó refinado (dessa forma, no presente programa, é possível que hajam até 500 nós ao redor de um nó refinado). NosDoElem(x,y) com alocação dinâmica dada por (Nef,3): Guarda os valores globais dos 3 nós locais de cada elemento finito, mantendo a correta ordem da numeração local. A variável x se refere ao valor global do elemento finito e a variáveis y se refere à cada um dos 3 nós locais; RefinamentosDoRefinado(x,y) com alocação dinâmica dada por (Nnos,FuncoesDeRefinamento+1): Matriz que indica a condição de existência de determinada função de refinamento em cada nó da análise. A variável x está relacionada com cada nó, na sua numeração global, e a variável y com a função de enriquecimento, sendo 1 para a primeira, 2 para a segunda, etc. Caso o nó esteja refinado por uma determinada função de refinamento, a matriz retorna o valor 1, caso contrário, retorna 0. É importante dizer que a variável y não finaliza na última função de enriquecimento e, sim, no próximo valor, sendo o motivo disso o fato de que as funções convencionais também são consideradas como pertencentes à classe das funções de refinamento, possuindo seu valor, na numeração das funções de refinamento, o último valor acrescentado de uma unidade. Uma consequência disso é que todos os nós da 94

análise sempre estão refinados pela função de refinamento de número FuncoesDeRefinamento + 1 (que se trata das funções de forma convencionais). 5.2 Código-Fonte Comentado do Programa Chapas2D!Início do programa Program Chapas2D!Declaração de todos os vetores, matrizes e constantes a serem usadas no programa!todas as variáveis de cálculo são declaradas como sendo de dupla precisão para tornarem!mais precisos os resultados finais IMPLICIT INTEGER*4 (a-z) real*8 Cord[ALLOCATABLE](:,:),sol[ALLOCATABLE](:), solconvertido[allocatable](:) real*8 Cconc[ALLOCATABLE](:,:), matrig[allocatable](:,:) real*8 Tensao[ALLOCATABLE](:,:), deformacao[allocatable](:,:), TensaoP[ALLOCATABLE](:,:) real*8 DeformacaoP[ALLOCATABLE](:,:), Raizes[ALLOCATABLE](:) real*8 matforcas[allocatable](:), verificacao[allocatable](:), FuncoesMatrizB[ALLOCATABLE](:,:) real*8 Materiais[ALLOCATABLE](:,:), soltensoes[allocatable](:), MatrizBEsp[ALLOCATABLE](:,:,:,:) real*8 ESTIF[ALLOCATABLE](:,:), MatrizDB[ALLOCATABLE](:,:,:,:), MatrizD(3,3) real*8 POSGP[ALLOCATABLE](:),WEIGP[ALLOCATABLE](:), DefLocal(3,3) real*8 area[allocatable](:), MaiorDistNosRef[ALLOCATABLE](:) real*8 precisao, auxa, auxb, aux,aux1, aux2,aux3,aux4,aux5,aux6,w1,w2,w3,n1,n2,n3,n4,mi,fator real*8 A, B, C, D, Ep1, x1,x2,x3,y1,y2,y3,x,y integer*4 nosdoelemq[allocatable](:,:), Material[ALLOCATABLE](:), nosdoelem[allocatable](:,:) integer*4 ires[allocatable](:,:), NosRefinados[ALLOCATABLE](:) integer*4 NosAoRedor[ALLOCATABLE](:,:), CorrecaoNoMatrig[ALLOCATABLE](:) integer*4 ContadorRefinamentos[ALLOCATABLE](:), RefinamentosDoRefinado[ALLOCATABLE](:,:) character*40 filen, filen2, TipoDeFEM, TipoDeProblema, TituloDoProblema, MetodoDeResolucao!Procedimento de criação e execução de um arquivo em código batch para permitir que!as análises realizadas no GiD possam ser salvas com qualquer nome open (unit = 1, file = "convert.bat") write(1,*)'copy *.dat *.post.res' write(1,*)'dir /b *.dat > filename1.inf' write(1,*)'dir /b *.post.res > filename2.inf' write(1,*)'del *.post.res' close(1,status='keep') call system('convert.bat') open (unit = 1, file = "filename1.inf") read(1,*) filen close(1,status='keep') open (unit = 1, file = "filename2.inf") read(1,*) filen2 close(1,status='keep') open (unit = 1, file = "armag.bat") write(1,*)'del *.inf' write(1,*)'del *.bat' close(1,status='keep') call system('armag.bat')!abertura do arquivo.dat (gerado pelo GiD) da análise!desse arquivo, primeiramente, é feita a leitura do título da análise, na sequência,!é guardado o tipo de elemento finito utilizado, o tipo de problema estrutural,!o método de resolução de sistema linear, o número de pontos de Hammer!a ser usado na integração numérica e a precisão desejada para o algoritmo de!perturbação para resolução de sistemas lineares open (unit = 7, file = filen) read (7,*) TituloDoProblema read (7,*) TipoDeFEM read (7,*) TipoDeProblema read (7,*) MetodoDeResolucao read (7,*) PontosDeHammer read (7,*) Precisao!Em seguida, são lidas as entradas principais do programa: read (7,*) Nnos, Nef, Nmats read (7,*) Nrestri read (7,*) Nrefinados read (7,*) Ncarga FuncoesDeRefinamento=3 GrausDeLiberdade=2 95

!Inicialização dos vetores e matrizes do programa, cálculo da correta ordem!das matrizes caso a opção de refinamentos seja ativada e início das rotinas de captura das!informações a partir do arquivo.dat da análise ALLOCATE (RefinamentosDoRefinado(Nnos,FuncoesDeRefinamento+1)) ALLOCATE (ContadorRefinamentos(Nnos)) ALLOCATE (NosRefinados(Nrefinados)) CALL ZerarMatrizQuadradaINT(RefinamentosDoRefinado,Nnos,FuncoesDeRefinamento) CALL ZerarMatrizLinhaINT(ContadorRefinamentos,Nnos)!Primeira sequência de dados: refinamentos existentes em cada nó do i=1, nrefinados read (7,*) val, RefinamentosDoRefinado(val,1), & &RefinamentosDoRefinado(val,2), RefinamentosDoRefinado(val,3) NosRefinados(i)=val do i=1, Nnos RefinamentosDoRefinado(i,FuncoesDeRefinamento+1)=1 auxcontadorref=0 do i=1,nnos do j=1,(funcoesderefinamento+1) if (RefinamentosDoRefinado(i,j).eq.1) then auxcontadorref=auxcontadorref + 1 ContadorRefinamentos(i)=ContadorRefinamentos(i)+1 endif if (TipoDeFEM.eq.'Triangulares-Refinados') then ALLOCATE (solconvertido(2*nnos)) ordem=2*(auxcontadorref) MaxOrdemB=3*2*(FuncoesDeRefinamento+1) ALLOCATE (MatrizBEsp(Nef,3,3,MaxOrdemB)) else ordem=2*nnos endif ALLOCATE (Cord(nnos,2)) ALLOCATE (area(nef)) ALLOCATE (materiais(nmats,3)) ALLOCATE (material(nef)) ALLOCATE (tensao(nnos,4)) ALLOCATE (deformacao(nnos,4)) ALLOCATE (tensaop(nnos,4)) ALLOCATE (deformacaop(nnos,4)) ALLOCATE (Raizes(4)) ALLOCATE (verificacao(nnos)) ALLOCATE (Ires(Nrestri,3)) ALLOCATE (Cconc(Ncarga,3)) ALLOCATE (matrig(ordem,ordem)) ALLOCATE (matforcas(ordem)) ALLOCATE (sol(ordem)) ALLOCATE (soltensoes(ordem)) ALLOCATE (CorrecaoNoMatrig(Nnos+1)) CALL ZerarMatrizLinhaINT (CorrecaoNoMatrig,Nnos+1) CALL ZerarMatrizQuadrada (Matrig,ordem,ordem) CALL ZerarMatrizQuadrada (Tensao,Nnos,4) CALL ZerarMatrizQuadrada (Deformacao,Nnos,4) CALL ZerarMatrizQuadrada (TensaoP,Nnos,4) CALL ZerarMatrizQuadrada (DeformacaoP,Nnos,4) CALL ZerarMatrizLinha (Verificacao,Nnos) CALL ZerarMatrizLinha (MatForcas,ordem) CALL ZerarMatrizLinha (Sol,ordem)!Segunda sequência de dados: coordenadas dos nós do i=1, nnos read (7,*) val, cord(val,1), cord(val,2)!terceira sequência de dados: restrições nos nós do i=1,nrestri read (7,*) Ires(i,3), Ires(i,1), Ires(i,2)!Quarta sequência de dados: cargas concentradas aplicadas nos nós do i=1, ncarga 96

read (7,*) Cconc(i,3), Cconc(i,1), Cconc(i,2)!Quinta sequência de dados: materiais existentes na análise!é importante ressaltar que, nesta etapa do programa, automaticamente são feitas as devidas!correções caso o problema estrutural seja do tipo EPD if ((TipoDeProblema.eq.'EPD'.and. TipoDeFEM.eq.'Triangulares-Refinados').or.& &(TipoDeProblema.eq.'EPD'.and. TipoDeFEM.eq.'Triangulares')) then do i=1, nmats read (7,*) val, materiais(val,1), materiais(val,2), materiais(val,3) materiais(val,1) = materiais(val,1) / (1 - materiais(val,2)**2) materiais(val,2) = materiais(val,2) / (1 - materiais(val,2)) else do i=1, nmats read (7,*) val, materiais(val,1), materiais(val,2), materiais(val,3) endif!verificação do tipo de elemento finito utilizado e chamada da rotina para!a montagem da matriz de rigidez if (TipoDeFEM.eq.'Quadrilaterais') then CALL MalhaQuadrilateral elseif (TipoDeFEM.eq.'Triangulares') then CALL MalhaTriangular elseif (TipoDeFEM.eq.'Triangulares-Refinados') then CALL MalhaTriangularRefinada endif!procedimento para a montagem do vetor de forças nodais em função da cargas!nodais concentradas aplicadas do i=1, ncarga j=cconc(i,3) AuxCorrecao=CorrecaoNoMatrig(j) matforcas(2*j-1+2*auxcorrecao)=matforcas(2*j-1+2*auxcorrecao)+cconc(i,1) matforcas(2*j+2*auxcorrecao)=matforcas(2*j+2*auxcorrecao)+cconc(i,2)!imposição das condições de contorno relacionadas às restrições aos deslocamentos nodais do i=1, nrestri k=ires(i,3) If (Ires(i,1).NE.0) then do m=1,(contadorrefinamentos(k)) AuxCorrecao=CorrecaoNoMatrig(k)-1+m do j=1,ordem matrig(2*k-1+2*auxcorrecao,j)=0 Matrig(j,2*k-1+2*AuxCorrecao)=0 Matrig(2*k-1+2*AuxCorrecao,2*k-1+2*AuxCorrecao)=1 matforcas(2*k-1+2*auxcorrecao)=0 endif If (Ires(i,2).NE.0) then do m=1,(contadorrefinamentos(k)) AuxCorrecao=CorrecaoNoMatrig(k)-1+m do j=1,ordem matrig(2*k+2*auxcorrecao,j)=0 Matrig(j,2*k+2*AuxCorrecao)=0 Matrig(2*k+2*AuxCorrecao,2*k+2*AuxCorrecao)=1 matforcas(2*k+2*auxcorrecao)=0 endif!chamada do método escolhido pelo usuário para a resolução de sistemas lineares if (MetodoDeResolucao.eq.'Gauss') then call GAUSS(ordem,matrig,matforcas,sol) elseif (MetodoDeResolucao.eq.'Perturbacao') then call SolucaoMetodoK(ordem,matrig,matforcas,sol,precisao) endif 97

!Organização do vetor de incógnitas nodais. Pelo fato de terem sido!utilizadas funções bolhas como funções de forma para os refinamentos,!as incógnitas nodais associadas às funções de forma convencionais!mantém seus significados físicos de deslocamento e as outras incógnitas!são somente necessárias para o cálculo das tensões e deformações do i=1,ordem SolTensoes(i)=sol(i) if (TipoDeFEM.eq.'Triangulares-Refinados') then do i=1,nnos AuxCorrecao=CorrecaoNoMatrig(i) solconvertido(2*i-1) = sol(2*i-1+2*auxcorrecao) solconvertido(2*i) = sol(2*i+2*auxcorrecao) DEALLOCATE(sol) ALLOCATE(sol(2*nnos)) do i=1,nnos AuxCorrecao=CorrecaoNoMatrig(i) sol(2*i-1) = solconvertido(2*i-1) sol(2*i) = solconvertido(2*i) endif!chamada da rotina para o cálculo das tensões e deformações da análise em função do tipo!de elemento finito utilizado if (TipoDeFEM.eq.'Quadrilaterais') then CALL CalcularTDQuadrilateral elseif (TipoDeFEM.eq.'Triangulares') then CALL CalcularTDTriangular elseif (TipoDeFEM.eq.'Triangulares-Refinados') then CALL CalcularTDTriRefinado endif!finalizando o programa, gera-se o arquivo *.Post.Res com todos os resultados de!tensões, deformações e deslocamentos nodais para posterior visualização no GiD 10 format(i5,x,f15.6,x,f15.6,x,f15.6,f15.6) 12 format(i5,x,f20.8,x,f20.8,x,f20.8) 13 format(i5,x,f20.8,x,f20.8) open (unit = 1, file = filen2) write(1,*)'gid Post Results File 1.0' write(1,*)'result "Deslocamentos Nodais" "TIME ANALYSIS" 1e-008 Vector OnNodes' write(1,*)'componentnames "Deslocamento X", "Deslocamento Y"' write(1,*)'values' do i=1, nnos write(1,13) i, sol(2*i-1), sol(2*i) write(1,*)'end values' write(1,*) '' write(1,*)'result "Tensões Médias Nodais" "TIME ANALYSIS" 1e-008 Vector OnNodes' write(1,*)'componentnames "Tensão X", "Tensão Y", "Tensão Z", "Cisalhamento XY"' write(1,*)'values' do i=1, nnos write(1,10) i, tensao(i,1), tensao(i,2), tensao(i,4), tensao(i,3) write(1,*)'end values' write(1,*) '' write(1,*)'result "Deformações Médias Nodais" "TIME ANALYSIS" 1e-008 Vector OnNodes' write(1,*)'componentnames "Def X", "Def Y", "Def Z", "Def XY"' write(1,*)'values' do i=1, nnos write(1,10) i, deformacao(i,1), deformacao(i,2), deformacao(i,4), deformacao(i,3) write(1,*)'end values' if (TipoDeProblema.eq.'EPD') then write(1,*) '' write(1,*)'result "Tensões Principais Nodais" "TIME ANALYSIS" 1e-008 Vector OnNodes' write(1,*)'componentnames "Tensao P1", "Tensao P2", "Tensao P3", "Cisalhamento Máx"' write(1,*)'values' do i=1, nnos write(1,10) i, TensaoP(i,1), TensaoP(i,2), TensaoP(i,4), TensaoP(i,3) 98

write(1,*)'end values' write(1,*) '' write(1,*)'result "Deformações Principais Nodais" "TIME ANALYSIS" 1e-008 Vector OnNodes' write(1,*)'componentnames "Def Máx", "Def Mín", "Def XY Máx"' write(1,*)'values' do i=1, nnos write(1,12) i, DeformacaoP(i,1), DeformacaoP(i,2), DeformacaoP(i,3) write(1,*)'end values' elseif (TipoDeProblema.eq.'EPT') then write(1,*) '' write(1,*)'result "Tensões Principais Nodais" "TIME ANALYSIS" 1e-008 Vector OnNodes' write(1,*)'componentnames "Tensão Máx", "Tensão Mín", "Cisalhamento XY Máx"' write(1,*)'values' do i=1, nnos write(1,12) i, TensaoP(i,1), TensaoP(i,2), TensaoP(i,3) write(1,*)'end values' write(1,*) '' write(1,*)'result "Deformações Principais Nodais" "TIME ANALYSIS" 1e-008 Vector OnNodes' write(1,*)'componentnames "Def P1", "Def P2", "Def P3", "Def Máx"' write(1,*)'values' do i=1, nnos write(1,10) i, DeformacaoP(i,1), DeformacaoP(i,2), DeformacaoP(i,4), DeformacaoP(i,3) write(1,*)'end values' endif close(1,status='keep')!definição das rotinas internas do programa principal CONTAINS!Subrotina para análise por meio do MEFG com elementos finitos triangulares CST SUBROUTINE MalhaTriangularRefinada!Inicialização de matrizes e vetores exclusivos para análises por MEFG ALLOCATE (NosAoRedor(Nrefinados,500)) ALLOCATE (MaiorDistNosRef(Nrefinados)) ALLOCATE (ESTIF(MaxOrdemB,MaxOrdemB)) ALLOCATE (nosdoelem(nef,3))!leitura dos nós e do material de todos os elementos finitos do i=1, nef read (7,*) x, nosdoelem(x,1), nosdoelem(x,2), nosdoelem(x,3), y material(i) = y!cálculo das áreas de cada elemento finito por meio da regra prática do agrimensor do i=1, Nef Ni=nosdoelem(i,1) Nj=nosdoelem(i,2) Nk=nosdoelem(i,3) Area(i) = (Dabs(cord(ni,1)*cord(nj,2)+cord(nj,1)*cord(nk,2)+cord(nk,1)*cord(ni,2)-& &cord(ni,2)*cord(nj,1)-cord(nj,2)*cord(nk,1)-cord(nk,2)*cord(ni,1)))/2!procedimento para a montagem da matriz que informa o numéro de nós ao redor de cada nó!da malha da análise k=2 do i=1,nrefinados do j=1, Nef auxnorefinado = NosRefinados(i) if (NosdoElem(j,1).eq.auxNorefinado.or. NosdoElem(j,2).eq.auxNorefinado.or. & &NosdoElem(j,3).eq.auxNorefinado) then NosAoRedor(i,k) = NosdoElem(j,1) k=k+1 NosAoRedor(i,k) = NosdoElem(j,2) k=k+1 NosAoRedor(i,k) = NosdoElem(j,3) k=k+1 endif k=k-2 99

NosAoRedor(i,1) = k k=2!armazenamento em vetor da maior distância possível entre 2 nós dentro de cada nuvem!presente no problema em estudo aux=0 do i=1,nrefinados do j=1,nosaoredor(i,1) do k=j,nosaoredor(i,1) auxno1=nosaoredor(i,j+1) auxno2=nosaoredor(i,k+1) aux1=dsqrt((cord(auxno1,1)-cord(auxno2,1))**2+(cord(auxno1,2)-cord(auxno2,2))**2) if (aux1.ge.aux) then aux=aux1 endif MaiorDistNosRef(i)=aux aux=0!montagem do vetor de correção de posicionamento para a cópia dos valores das matrizes de!rigidez local dos elementos finitos para a matriz de rigidez global da análise k=0 do i=1,nnos do l=1,funcoesderefinamento if (RefinamentosDoRefinado(i,l).eq.1) then k=k+1 endif CorrecaoNoMatrig(i+1)=k!Loop para a organização da matriz de rigidez final da análise por MEFG em função das!matrizes de rigidez locais dos elementos finitos do w=1,nef!chamada da rotina para a montagem da matriz de rigidez local do elemento finito!o qual está sendo trabalhado call MatrizDeRigidez(ESTIF,PontosDeHammer,MaxOrdemB,FuncoesDeRefinamento,& &RefinamentosDoRefinado,OrdemMatrizB,MaiorDistNosRef,NosRefinados,Nrefinados,& &Nef,Nnos,Nmats,materiais,material,area,nosdoElem,cord,MatrizBEsp,w) CondicaoRef=0 k=0 h=0 Auxh=0 Auxh2=0 Auxk=0 Auxk2=0 do p=1,3 do n=1,3 aux1no=nosdoelem(w,p) aux2no=nosdoelem(w,n) do u=1,(funcoesderefinamento+1) do t=1,(funcoesderefinamento+1) if ((RefinamentosDoRefinado(aux1no,u).eq.1).and.& &(RefinamentosDoRefinado(aux2no,t).eq.1)) then do Gll=1,GrausDeLiberdade do Glc=1,GrausDeLiberdade Matrig(2*aux1no-GrausDeLiberdade+Gll+2*(CorrecaoNoMatrig& &(aux1no)+k),2*aux2no-grausdeliberdade+glc+2*& &(CorrecaoNoMatrig(aux2no)+h))=Matrig(2*aux1no-& &GrausDeLiberdade+Gll+2*(CorrecaoNoMatrig(aux1no)+k),& &2*aux2no-GrausDeLiberdade+Glc+2*(CorrecaoNoMatrig& &(aux2no)+h))+estif(2*p+2*(k+auxk2)-2+gll,2*n+2*& &(h+auxh2)-2+glc) CondicaoRef=1 h=h+1 endif if (CondicaoRef.eq.1) then k=k+1 100

endif CondicaoRef=0 Auxh=h h=0 Auxh2=Auxh2+Auxh-1 Auxk=k k=0 Auxk2=Auxk2+Auxk-1 Auxh2=0 END SUBROUTINE!Subrotina para análise por meio do MEF convencional com elementos finitos triangulares CST SUBROUTINE MalhaTriangular ALLOCATE (nosdoelem(nef,3))!leitura dos nós e do material de todos os elementos finitos do i=1, nef read (7,*) x, nosdoelem(x,1), nosdoelem(x,2), nosdoelem(x,3), y material(i) = y!cálculo das áreas de cada elemento finito por meio da regra prática do agrimensor do i=1, Nef Ni=nosdoelem(i,1) Nj=nosdoelem(i,2) Nk=nosdoelem(i,3) Area(i) = (Dabs(cord(ni,1)*cord(nj,2)+cord(nj,1)*cord(nk,2)+cord(nk,1)*cord(ni,2)-& &cord(ni,2)*cord(nj,1)-cord(nj,2)*cord(nk,1)-cord(nk,2)*cord(ni,1)))/2!montagem da matriz de rigidez final por meio de cada elemento finito do problema em estudo do i=1, Nef Ni=nosdoelem(i,1) Nj=nosdoelem(i,2) Nk=nosdoelem(i,3) j=material(i) w1=cord(nj,2)-cord(nk,2) w2=cord(nk,2)-cord(ni,2) w3=cord(ni,2)-cord(nj,2) n1=cord(nk,1)-cord(nj,1) n2=cord(ni,1)-cord(nk,1) n3=cord(nj,1)-cord(ni,1) mi=0.5-0.5*materiais(j,2) Fator = (materiais(j,3)*materiais(j,1))/(4*area(i)*(1-materiais(j,2)**2))!sim = Valor simétrico Matrig(2*ni-1,2*ni-1)=Matrig(2*ni-1,2*ni-1)+Fator*(w1**2+mi*n1**2) Matrig(2*ni-1,2*ni)=Matrig(2*ni-1,2*ni)+Fator*(materiais(j,2)*w1*n1+mi*w1*n1) Matrig(2*ni-1,2*nj-1)=Matrig(2*ni-1,2*nj-1)+Fator*(w1*w2+mi*n1*n2) Matrig(2*ni-1,2*nj)=Matrig(2*ni-1,2*nj)+Fator*(materiais(j,2)*w1*n2+mi*w2*n1) Matrig(2*ni-1,2*nk-1)=Matrig(2*ni-1,2*nk-1)+Fator*(w1*w3+mi*n1*n3) Matrig(2*ni-1,2*nk)=Matrig(2*ni-1,2*nk)+Fator*(materiais(j,2)*w1*n3+mi*w3*n1) Matrig(2*ni,2*ni-1)=Matrig(2*ni,2*ni-1)+Fator*(materiais(j,2)*w1*n1+mi*w1*n1)!sim Matrig(2*ni,2*ni)=Matrig(2*ni,2*ni)+Fator*(n1**2+mi*w1**2) Matrig(2*ni,2*nj-1)=Matrig(2*ni,2*nj-1)+Fator*(materiais(j,2)*w2*n1+mi*w1*n2) Matrig(2*ni,2*nj)=Matrig(2*ni,2*nj)+Fator*(n1*n2+mi*w2*w1) Matrig(2*ni,2*nk-1)=Matrig(2*ni,2*nk-1)+Fator*(materiais(j,2)*w3*n1+mi*w1*n3) Matrig(2*ni,2*nk)=Matrig(2*ni,2*nk)+Fator*(n1*n3+mi*w1*w3) Matrig(2*nj-1,2*ni-1)=Matrig(2*nj-1,2*ni-1)+Fator*(w1*w2+mi*n1*n2)!sim Matrig(2*nj-1,2*ni)=Matrig(2*nj-1,2*ni)+Fator*(materiais(j,2)*w2*n1+mi*w1*n2)!sim Matrig(2*nj-1,2*nj-1)=Matrig(2*nj-1,2*nj-1)+Fator*(w2**2+mi*n2**2) Matrig(2*nj-1,2*nj)=Matrig(2*nj-1,2*nj)+Fator*(materiais(j,2)*w2*n2+mi*w2*n2) Matrig(2*nj-1,2*nk-1)=Matrig(2*nj-1,2*nk-1)+Fator*(w2*w3+mi*n2*n3) Matrig(2*nj-1,2*nk)=Matrig(2*nj-1,2*nk)+Fator*(materiais(j,2)*n3*w2+mi*w3*n2) Matrig(2*nj,2*ni-1)=Matrig(2*nj,2*ni-1)+Fator*(materiais(j,2)*w1*n2+mi*w2*n1)!sim Matrig(2*nj,2*ni)=Matrig(2*nj,2*ni)+Fator*(n1*n2+mi*w2*w1)!sim Matrig(2*nj,2*nj-1)=Matrig(2*nj,2*nj-1)+Fator*(materiais(j,2)*w2*n2+mi*w2*n2)!sim Matrig(2*nj,2*nj)=Matrig(2*nj,2*nj)+Fator*(n2**2+mi*w2**2) Matrig(2*nj,2*nk-1)=Matrig(2*nj,2*nk-1)+Fator*(materiais(j,2)*n2*w3+mi*w2*n3) Matrig(2*nj,2*nk)=Matrig(2*nj,2*nk)+Fator*(n2*n3+mi*w2*w3) Matrig(2*nk-1,2*ni-1)=Matrig(2*nk-1,2*ni-1)+Fator*(w1*w3+mi*n1*n3)!sim 101

Matrig(2*nk-1,2*ni)=Matrig(2*nk-1,2*ni)+Fator*(materiais(j,2)*w3*n1+mi*w1*n3)!sim Matrig(2*nk-1,2*nj-1)=Matrig(2*nk-1,2*nj-1)+Fator*(w2*w3+mi*n2*n3)!sim Matrig(2*nk-1,2*nj)=Matrig(2*nk-1,2*nj)+Fator*(materiais(j,2)*n2*w3+mi*w2*n3)!sim Matrig(2*nk-1,2*nk-1)=Matrig(2*nk-1,2*nk-1)+Fator*(w3**2+mi*n3**2) Matrig(2*nk-1,2*nk)=Matrig(2*nk-1,2*nk)+Fator*(materiais(j,2)*w3*n3+mi*w3*n3) Matrig(2*nk,2*ni-1)=Matrig(2*nk,2*ni-1)+Fator*(materiais(j,2)*w1*n3+mi*w3*n1)!sim Matrig(2*nk,2*ni)=Matrig(2*nk,2*ni)+Fator*(n1*n3+mi*w1*w3)!sim Matrig(2*nk,2*nj-1)=Matrig(2*nk,2*nj-1)+Fator*(materiais(j,2)*n3*w2+mi*w3*n2)!sim Matrig(2*nk,2*nj)=Matrig(2*nk,2*nj)+Fator*(n2*n3+mi*w2*w3)!sim Matrig(2*nk,2*nk-1)=Matrig(2*nk,2*nk-1)+Fator*(materiais(j,2)*w3*n3+mi*w3*n3)!sim Matrig(2*nk,2*nk)=Matrig(2*nk,2*nk)+Fator*(n3**2+mi*w3**2) END SUBROUTINE!Subrotina para análise por meio do MEF convencional com elementos finitos quadrilaterais SUBROUTINE MalhaQuadrilateral!Inicialização de matrizes e vetores exclusivos para análises por MEF com elementos!finitos quadrilaterais ALLOCATE (nosdoelemq(nef,4)) ALLOCATE (ESTIF(8,8)) ALLOCATE (WEIGP(2)) ALLOCATE (POSGP(2)) ALLOCATE (MatrizDB(2,Nef,3,8))!Leitura dos nós e do material de todos os elementos finitos do i=1, nef read (7,*) x, nosdoelemq(x,1), nosdoelemq(x,2), nosdoelemq(x,3), nosdoelemq(x,4), y material(i) = y!definição dos pontos e dos pesos para integração numérica em domínios quadrilaterais POSGP(1)=-0.577350269189626 WEIGP(1)=1.0 POSGP(2)=0.577350269189626 WEIGP(2)=1.0!Montagem da matriz de rigidez final por meio de cada elemento finito do problema em estudo do i=1, Nef!Chamada da rotina para a montagem da matriz de rigidez local do elemento finito!o qual está sendo trabalhado em função do tipo do problema estrutural if (TipoDeProblema.eq.'EPT') then Call STIFFP(cord,nosdoelemQ,material,Nmats,Nnos,Nef,2,POSGP,materiais,WEIGP,Nef,& &1,ESTIF,i,MatrizDB) elseif (TipoDeProblema.eq.'EPD') then Call STIFFP(cord,nosdoelemQ,material,Nmats,Nnos,Nef,2,POSGP,materiais,WEIGP,Nef,& &2,ESTIF,i,MatrizDB) end if Ni=nosdoelemQ(i,1) Nj=nosdoelemQ(i,2) Nk=nosdoelemQ(i,3) Nw=nosdoelemQ(i,4)!Sim = Valor simétrico Matrig(2*ni-1,2*ni-1)=Matrig(2*ni-1,2*ni-1)+ ESTIF(1,1) Matrig(2*ni-1,2*ni)=Matrig(2*ni-1,2*ni)+ESTIF(1,2) Matrig(2*ni-1,2*nj-1)=Matrig(2*ni-1,2*nj-1)+ESTIF(1,3) Matrig(2*ni-1,2*nj)=Matrig(2*ni-1,2*nj)+ESTIF(1,4) Matrig(2*ni-1,2*nk-1)=Matrig(2*ni-1,2*nk-1)+ESTIF(1,5) Matrig(2*ni-1,2*nk)=Matrig(2*ni-1,2*nk)+ESTIF(1,6) Matrig(2*ni-1,2*nw-1)=Matrig(2*ni-1,2*nw-1)+ESTIF(1,7) Matrig(2*ni-1,2*nw)=Matrig(2*ni-1,2*nw)+ESTIF(1,8) Matrig(2*ni,2*ni-1)=Matrig(2*ni,2*ni-1)+ ESTIF(2,1)!sim Matrig(2*ni,2*ni)=Matrig(2*ni,2*ni)+ ESTIF(2,2) Matrig(2*ni,2*nj-1)=Matrig(2*ni,2*nj-1)+ ESTIF(2,3) Matrig(2*ni,2*nj)=Matrig(2*ni,2*nj)+ESTIF(2,4) Matrig(2*ni,2*nk-1)=Matrig(2*ni,2*nk-1)+ESTIF(2,5) Matrig(2*ni,2*nk)=Matrig(2*ni,2*nk)+ESTIF(2,6) Matrig(2*ni,2*nw-1)=Matrig(2*ni,2*nw-1)+ESTIF(2,7) Matrig(2*ni,2*nw)=Matrig(2*ni,2*nw)+ESTIF(2,8) Matrig(2*nj-1,2*ni-1)=Matrig(2*nj-1,2*ni-1)+ESTIF(3,1)!sim Matrig(2*nj-1,2*ni)=Matrig(2*nj-1,2*ni)+ ESTIF(3,2)!sim Matrig(2*nj-1,2*nj-1)=Matrig(2*nj-1,2*nj-1)+ESTIF(3,3) Matrig(2*nj-1,2*nj)=Matrig(2*nj-1,2*nj)+ESTIF(3,4) Matrig(2*nj-1,2*nk-1)=Matrig(2*nj-1,2*nk-1)+ESTIF(3,5) Matrig(2*nj-1,2*nk)=Matrig(2*nj-1,2*nk)+ESTIF(3,6) 102

Matrig(2*nj-1,2*nw-1)=Matrig(2*nj-1,2*nw-1)+ESTIF(3,7) Matrig(2*nj-1,2*nw)=Matrig(2*nj-1,2*nw)+ESTIF(3,8) Matrig(2*nj,2*ni-1)=Matrig(2*nj,2*ni-1)+ ESTIF(4,1)!sim Matrig(2*nj,2*ni)=Matrig(2*nj,2*ni)+ESTIF(4,2)!sim Matrig(2*nj,2*nj-1)=Matrig(2*nj,2*nj-1)+ESTIF(4,3)!sim Matrig(2*nj,2*nj)=Matrig(2*nj,2*nj)+ESTIF(4,4) Matrig(2*nj,2*nk-1)=Matrig(2*nj,2*nk-1)+ESTIF(4,5) Matrig(2*nj,2*nk)=Matrig(2*nj,2*nk)+ESTIF(4,6) Matrig(2*nj,2*nw-1)=Matrig(2*nj,2*nw-1)+ESTIF(4,7) Matrig(2*nj,2*nw)=Matrig(2*nj,2*nw)+ESTIF(4,8) Matrig(2*nk-1,2*ni-1)=Matrig(2*nk-1,2*ni-1)+ ESTIF(5,1)!sim Matrig(2*nk-1,2*ni)=Matrig(2*nk-1,2*ni)+ESTIF(5,2)!sim Matrig(2*nk-1,2*nj-1)=Matrig(2*nk-1,2*nj-1)+ESTIF(5,3)!sim Matrig(2*nk-1,2*nj)=Matrig(2*nk-1,2*nj)+ ESTIF(5,4)!sim Matrig(2*nk-1,2*nk-1)=Matrig(2*nk-1,2*nk-1)+ESTIF(5,5) Matrig(2*nk-1,2*nk)=Matrig(2*nk-1,2*nk)+ESTIF(5,6) Matrig(2*nk-1,2*nw-1)=Matrig(2*nk-1,2*nw-1)+ESTIF(5,7) Matrig(2*nk-1,2*nw)=Matrig(2*nk-1,2*nw)+ESTIF(5,8) Matrig(2*nk,2*ni-1)=Matrig(2*nk,2*ni-1)+ ESTIF(6,1)!sim Matrig(2*nk,2*ni)=Matrig(2*nk,2*ni)+ESTIF(6,2)!sim Matrig(2*nk,2*nj-1)=Matrig(2*nk,2*nj-1)+ ESTIF(6,3)!sim Matrig(2*nk,2*nj)=Matrig(2*nk,2*nj)+ESTIF(6,4)!sim Matrig(2*nk,2*nk-1)=Matrig(2*nk,2*nk-1)+ ESTIF(6,5)!sim Matrig(2*nk,2*nk)=Matrig(2*nk,2*nk)+ESTIF(6,6) Matrig(2*nk,2*nw-1)=Matrig(2*nk,2*nw-1)+ ESTIF(6,7) Matrig(2*nk,2*nw)=Matrig(2*nk,2*nw)+ESTIF(6,8) Matrig(2*nw-1,2*ni-1)=Matrig(2*nw-1,2*ni-1)+ ESTIF(7,1)!sim Matrig(2*nw-1,2*ni)=Matrig(2*nw-1,2*ni)+ESTIF(7,2)!sim Matrig(2*nw-1,2*nj-1)=Matrig(2*nw-1,2*nj-1)+ESTIF(7,3)!sim Matrig(2*nw-1,2*nj)=Matrig(2*nw-1,2*nj)+ESTIF(7,4)!sim Matrig(2*nw-1,2*nk-1)=Matrig(2*nw-1,2*nk-1)+ESTIF(7,5)!sim Matrig(2*nw-1,2*nk)=Matrig(2*nw-1,2*nk)+ESTIF(7,6)!sim Matrig(2*nw-1,2*nw-1)=Matrig(2*nw-1,2*nw-1)+ESTIF(7,7) Matrig(2*nw-1,2*nw)=Matrig(2*nw-1,2*nw)+ESTIF(7,8) Matrig(2*nw,2*ni-1)=Matrig(2*nw,2*ni-1)+ ESTIF(8,1)!sim Matrig(2*nw,2*ni)=Matrig(2*nw,2*ni)+ESTIF(8,2)!sim Matrig(2*nw,2*nj-1)=Matrig(2*nw,2*nj-1)+ESTIF(8,3)!sim Matrig(2*nw,2*nj)=Matrig(2*nw,2*nj)+ESTIF(8,4)!sim Matrig(2*nw,2*nk-1)=Matrig(2*nw,2*nk-1)+ESTIF(8,5)!sim Matrig(2*nw,2*nk)=Matrig(2*nw,2*nk)+ESTIF(8,6)!sim Matrig(2*nw,2*nw-1)=Matrig(2*nw,2*nw-1)+ESTIF(8,7)!sim Matrig(2*nw,2*nw)=Matrig(2*nw,2*nw)+ESTIF(8,8) END SUBROUTINE!Rotina para o cálculo de tensões e deformações nodais em problemas que utilizam!elementos finitos quadrilaterais SUBROUTINE CalcularTDQuadrilateral do i=1, nef j=material(i) Ni=nosdoelemQ(i,1) Nj=nosdoelemQ(i,2) Nk=nosdoelemQ(i,3) Nw=nosdoelemQ(i,4) aux1=matrizdb(1,i,1,1)*sol(2*ni-1)+matrizdb(1,i,1,2)*sol(2*ni)+matrizdb(1,i,1,3)*& &sol(2*nj-1)+matrizdb(1,i,1,4)*sol(2*nj)+matrizdb(1,i,1,5)*sol(2*nk-1)+& &MatrizDB(1,i,1,6)*sol(2*nk)+MatrizDB(1,i,1,7)*sol(2*nw-1)+MatrizDB(1,i,1,8)*sol(2*nw) aux2=matrizdb(1,i,2,1)*sol(2*ni-1)+matrizdb(1,i,2,2)*sol(2*ni)+matrizdb(1,i,2,3)*& &sol(2*nj-1)+matrizdb(1,i,2,4)*sol(2*nj)+matrizdb(1,i,2,5)*sol(2*nk-1)+& &MatrizDB(1,i,2,6)*sol(2*nk)+MatrizDB(1,i,2,7)*sol(2*nw-1)+MatrizDB(1,i,2,8)*sol(2*nw) aux3=matrizdb(1,i,3,1)*sol(2*ni-1)+matrizdb(1,i,3,2)*sol(2*ni)+matrizdb(1,i,3,3)*& &sol(2*nj-1)+matrizdb(1,i,3,4)*sol(2*nj)+matrizdb(1,i,3,5)*sol(2*nk-1)+& &MatrizDB(1,i,3,6)*sol(2*nk)+MatrizDB(1,i,3,7)*sol(2*nw-1)+MatrizDB(1,i,3,8)*sol(2*nw) aux4=matrizdb(2,i,1,1)*sol(2*ni-1)+matrizdb(2,i,1,2)*sol(2*ni)+matrizdb(2,i,1,3)*& &sol(2*nj-1)+matrizdb(2,i,1,4)*sol(2*nj)+matrizdb(2,i,1,5)*sol(2*nk-1)+& &MatrizDB(2,i,1,6)*sol(2*nk)+MatrizDB(2,i,1,7)*sol(2*nw-1)+MatrizDB(2,i,1,8)*sol(2*nw) aux5=matrizdb(2,i,2,1)*sol(2*ni-1)+matrizdb(2,i,2,2)*sol(2*ni)+matrizdb(2,i,2,3)*& &sol(2*nj-1)+matrizdb(2,i,2,4)*sol(2*nj)+matrizdb(2,i,2,5)*sol(2*nk-1)+& &MatrizDB(2,i,2,6)*sol(2*nk)+MatrizDB(2,i,2,7)*sol(2*nw-1)+MatrizDB(2,i,2,8)*sol(2*nw) aux6=matrizdb(2,i,3,1)*sol(2*ni-1)+matrizdb(2,i,3,2)*sol(2*ni)+matrizdb(2,i,3,3)*& &sol(2*nj-1)+matrizdb(2,i,3,4)*sol(2*nj)+matrizdb(2,i,3,5)*sol(2*nk-1)+& 103

&MatrizDB(2,i,3,6)*sol(2*nk)+MatrizDB(2,i,3,7)*sol(2*nw-1)+MatrizDB(2,i,3,8)*sol(2*nw) tensao(ni,1)=tensao(ni,1)+aux1 tensao(ni,2)=tensao(ni,2)+aux2 tensao(ni,3)=tensao(ni,3)+aux3 deformacao(ni,1) = deformacao(ni,1)+aux4 deformacao(ni,2) = deformacao(ni,2)+aux5 deformacao(ni,3) = deformacao(ni,3)+aux6 verificacao(ni)=verificacao(ni)+1 tensao(nj,1)=tensao(nj,1)+aux1 tensao(nj,2)=tensao(nj,2)+aux2 tensao(nj,3)=tensao(nj,3)+aux3 deformacao(nj,1) = deformacao(nj,1)+aux4 deformacao(nj,2) = deformacao(nj,2)+aux5 deformacao(nj,3) = deformacao(nj,3)+aux6 verificacao(nj)=verificacao(nj)+1 tensao(nk,1)=tensao(nk,1)+aux1 tensao(nk,2)=tensao(nk,2)+aux2 tensao(nk,3)=tensao(nk,3)+aux3 deformacao(nk,1) = deformacao(nk,1)+aux4 deformacao(nk,2) = deformacao(nk,2)+aux5 deformacao(nk,3) = deformacao(nk,3)+aux6 verificacao(nk)=verificacao(nk)+1 tensao(nw,1)=tensao(nw,1)+aux1 tensao(nw,2)=tensao(nw,2)+aux2 tensao(nw,3)=tensao(nw,3)+aux3 deformacao(nw,1) = deformacao(nw,1)+aux4 deformacao(nw,2) = deformacao(nw,2)+aux5 deformacao(nw,3) = deformacao(nw,3)+aux6 verificacao(nw)=verificacao(nw)+1 if (TipoDeProblema.eq.'EPT') then Deformacao(ni,4) = deformacao(ni,4)+(-materiais(j,2)/(1-materiais(j,2)))*(aux4+aux5) Deformacao(nj,4) = deformacao(nj,4)+(-materiais(j,2)/(1-materiais(j,2)))*(aux4+aux5) Deformacao(nk,4) = deformacao(nk,4)+(-materiais(j,2)/(1-materiais(j,2)))*(aux4+aux5) Deformacao(nw,4) = deformacao(nw,4)+(-materiais(j,2)/(1-materiais(j,2)))*(aux4+aux5) elseif (TipoDeProblema.eq.'EPD') then Tensao(ni,4) = Tensao(ni,4)+materiais(j,2)*(aux1+aux2) Tensao(nj,4) = Tensao(nj,4)+materiais(j,2)*(aux1+aux2) Tensao(nk,4) = Tensao(nk,4)+materiais(j,2)*(aux1+aux2) Tensao(nw,4) = Tensao(nw,4)+materiais(j,2)*(aux1+aux2) endif do i=1,nnos tensao(i,1)=tensao(i,1)/verificacao(i) tensao(i,2)=tensao(i,2)/verificacao(i) tensao(i,3)=tensao(i,3)/verificacao(i) tensao(i,4)=tensao(i,4)/verificacao(i) deformacao(i,1)=deformacao(i,1)/verificacao(i) deformacao(i,2)=deformacao(i,2)/verificacao(i) deformacao(i,3)=deformacao(i,3)/verificacao(i) deformacao(i,4)=deformacao(i,4)/verificacao(i) if (TipoDeProblema.eq.'EPT') then do i=1,nnos TensaoP(i,1) = (Tensao(i,1)+Tensao(i,2))/2 + DSQRT(((Tensao(i,1)-Tensao(i,2))/2)& &**2+Tensao(i,3)**2) TensaoP(i,2) = (Tensao(i,1)+Tensao(i,2))/2 - DSQRT(((Tensao(i,1)-Tensao(i,2))/2)& &**2+Tensao(i,3)**2) TensaoP(i,3) = DSQRT(((Tensao(i,1)-Tensao(i,2))/2)**2+Tensao(i,3)**2) A = 1 B = -(deformacao(i,1)+deformacao(i,2)+deformacao(i,4)) C = deformacao(i,1)*deformacao(i,2)+deformacao(i,2)*deformacao(i,4)+& &deformacao(i,1)*deformacao(i,4)-deformacao(i,3)**2 D = -(deformacao(i,1)*deformacao(i,2)*deformacao(i,4)-deformacao(i,4)*& &(deformacao(i,3)**2)) CALL EQTerceiroGrau (A,B,C,D,Raizes) DeformacaoP(i,1) = Raizes(1) DeformacaoP(i,2) = Raizes(2) DeformacaoP(i,3) = 2*Raizes(4) DeformacaoP(i,4) = Raizes(3) Enddo Elseif (TipoDeProblema.eq.'EPD') then 104

do i=1,nnos DeformacaoP(i,1) = (Deformacao(i,1)+Deformacao(i,2))/2 + DSQRT(((Deformacao(i,1)& &-Deformacao(i,2))/2)**2+(Deformacao(i,3)/2)**2) DeformacaoP(i,2) = (Deformacao(i,1)+Deformacao(i,2))/2 - DSQRT(((Deformacao(i,1)& &-Deformacao(i,2))/2)**2+(Deformacao(i,3)/2)**2) DeformacaoP(i,3) = 2*DSQRT(((Deformacao(i,1)-Deformacao(i,2))/2)**2+& &(Deformacao(i,3)/2)**2) A = 1 B = -(tensao(i,1)+tensao(i,2)+tensao(i,4)) C = tensao(i,1)*tensao(i,2)+tensao(i,2)*tensao(i,4)+tensao(i,1)*tensao(i,4)-& &tensao(i,3)**2 D = -(tensao(i,1)*tensao(i,2)*tensao(i,4)-tensao(i,4)*(tensao(i,3)**2)) CALL EQTerceiroGrau (A,B,C,D,Raizes) TensaoP(i,1) = Raizes(1) TensaoP(i,2) = Raizes(2) TensaoP(i,3) = Raizes(4) TensaoP(i,4) = Raizes(3) Enddo Endif END SUBROUTINE!Rotina para o cálculo de tensões e deformações nodais em problemas que utilizam elementos!finitos triangulares cujos nós possam ser refinados SUBROUTINE CalcularTDTriRefinado do i=1, Nef j=material(i) Fator = (materiais(j,1))/(1-materiais(j,2)**2) CALL MatrizDTriangular(MatrizD,j,materiais,Nmats) CALL ZerarMatrizQuadrada (DefLocal,3,3) Ni=nosdoelem(i,1) Nj=nosdoelem(i,2) Nk=nosdoelem(i,3) verificacao(ni)=verificacao(ni)+1 verificacao(nj)=verificacao(nj)+1 verificacao(nk)=verificacao(nk)+1 do li=1,3 k=0 do m=1,3 h=0 Naux=nosdoelem(i,m) DefLocal(1,li) = DefLocal(1,li) + MatrizBEsp(i,1,li,2*m-1+2*k)*& &soltensoes(2*naux-1+2*correcaonomatrig(naux)) DefLocal(1,li) = DefLocal(1,li) + MatrizBEsp(i,1,li,2*m+2*k)*& &soltensoes(2*naux+2*correcaonomatrig(naux)) DefLocal(2,li) = DefLocal(2,li) + MatrizBEsp(i,2,li,2*m-1+2*k)*& &soltensoes(2*naux-1+2*correcaonomatrig(naux)) DefLocal(2,li) = DefLocal(2,li) + MatrizBEsp(i,2,li,2*m+2*k)*& &soltensoes(2*naux+2*correcaonomatrig(naux)) DefLocal(3,li) = DefLocal(3,li) + MatrizBEsp(i,3,li,2*m-1+2*k)*& &soltensoes(2*naux-1+2*correcaonomatrig(naux)) DefLocal(3,li) = DefLocal(3,li) + MatrizBEsp(i,3,li,2*m+2*k)*& &soltensoes(2*naux+2*correcaonomatrig(naux)) do n=1,funcoesderefinamento if (RefinamentosDoRefinado(nosdoelem(i,m),n).eq.1) then k=k+1 h=h+1 DefLocal(1,li) = DefLocal(1,li) + MatrizBEsp(i,1,li,2*m& &-1+2*k)*solTensoes(2*Naux-1+2*(CorrecaoNoMatrig(Naux)+h)) DefLocal(1,li) = DefLocal(1,li) + MatrizBEsp(i,1,li,2*m& &+2*k)*solTensoes(2*Naux+2*(CorrecaoNoMatrig(Naux)+h)) DefLocal(2,li) = DefLocal(2,li) + MatrizBEsp(i,2,li,2*m& &-1+2*k)*solTensoes(2*Naux-1+2*(CorrecaoNoMatrig(Naux)+h)) DefLocal(2,li) = DefLocal(2,li) + MatrizBEsp(i,2,li,2*m& &+2*k)*solTensoes(2*Naux+2*(CorrecaoNoMatrig(Naux)+h)) DefLocal(3,li) = DefLocal(3,li) + MatrizBEsp(i,3,li,2*m& &-1+2*k)*solTensoes(2*Naux-1+2*(CorrecaoNoMatrig(Naux)+h)) DefLocal(3,li) = DefLocal(3,li) + MatrizBEsp(i,3,li,2*m& &+2*k)*solTensoes(2*Naux+2*(CorrecaoNoMatrig(Naux)+h)) endif 105

deformacao(ni,li)=deformacao(ni,li)+deflocal(1,li) deformacao(nj,li)=deformacao(nj,li)+deflocal(2,li) deformacao(nk,li)=deformacao(nk,li)+deflocal(3,li) if (TipoDeProblema.eq.'EPT') then Deformacao(ni,4) = deformacao(ni,4)+(-materiais(j,2)/(1-materiais(j,2)))*& &(DefLocal(1,li)+DefLocal(2,li)) Deformacao(nj,4) = deformacao(nj,4)+(-materiais(j,2)/(1-materiais(j,2)))*& &(DefLocal(1,li)+DefLocal(2,li)) Deformacao(nk,4) = deformacao(nk,4)+(-materiais(j,2)/(1-materiais(j,2)))*& &(DefLocal(1,li)+DefLocal(2,li)) endif do li=1,3 tensao(ni,li)=tensao(ni,li)+fator*matrizd(li,1)*deflocal(1,1)+fator*matrizd(li,2)*& &DefLocal(1,2)+Fator*MatrizD(li,3)*DefLocal(1,3) tensao(nj,li)=tensao(nj,li)+fator*matrizd(li,1)*deflocal(2,1)+fator*matrizd(li,2)*& &DefLocal(2,2)+Fator*MatrizD(li,3)*DefLocal(2,3) tensao(nk,li)=tensao(nk,li)+fator*matrizd(li,1)*deflocal(3,1)+fator*matrizd(li,2)*& &DefLocal(3,2)+Fator*MatrizD(li,3)*DefLocal(3,3) if (TipoDeProblema.eq.'EPD') then aux4=fator*matrizd(li,1)*deflocal(1,li)+fator*matrizd(li,2)*deflocal(2,li)+& &Fator*MatrizD(li,3)*DefLocal(3,li) aux5=fator*matrizd(li,1)*deflocal(1,li)+fator*matrizd(li,2)*deflocal(2,li)+& &Fator*MatrizD(li,3)*DefLocal(3,li) Tensao(ni,4) = Tensao(ni,4)+materiais(j,2)*(aux4+aux5) Tensao(nj,4) = Tensao(nj,4)+materiais(j,2)*(aux4+aux5) Tensao(nk,4) = Tensao(nk,4)+materiais(j,2)*(aux4+aux5) endif do li=1,3 do i=1,nnos deformacao(i,li)=deformacao(i,li)/verificacao(i) tensao(i,li)=tensao(i,li)/verificacao(i) if (TipoDeProblema.eq.'EPT') then do i=1,nnos TensaoP(i,1) = (Tensao(i,1)+Tensao(i,2))/2 + DSQRT(((Tensao(i,1)-Tensao(i,2))/2)& &**2+Tensao(i,3)**2) TensaoP(i,2) = (Tensao(i,1)+Tensao(i,2))/2 - DSQRT(((Tensao(i,1)-Tensao(i,2))/2)& &**2+Tensao(i,3)**2) TensaoP(i,3) = DSQRT(((Tensao(i,1)-Tensao(i,2))/2)**2+Tensao(i,3)**2) A = 1 B = -(deformacao(i,1)+deformacao(i,2)+deformacao(i,4)) C = deformacao(i,1)*deformacao(i,2)+deformacao(i,2)*deformacao(i,4)+& &deformacao(i,1)*deformacao(i,4)-deformacao(i,3)**2 D = -(deformacao(i,1)*deformacao(i,2)*deformacao(i,4)-deformacao(i,4)*& &(deformacao(i,3)**2)) CALL EQTerceiroGrau (A,B,C,D,Raizes) DeformacaoP(i,1) = Raizes(1) DeformacaoP(i,2) = Raizes(2) DeformacaoP(i,3) = 2*Raizes(4) DeformacaoP(i,4) = Raizes(3) Enddo Elseif (TipoDeProblema.eq.'EPD') then do i=1,nnos DeformacaoP(i,1) = (Deformacao(i,1)+Deformacao(i,2))/2 + DSQRT(((Deformacao(i,1)& &-Deformacao(i,2))/2)**2+(Deformacao(i,3)/2)**2) DeformacaoP(i,2) = (Deformacao(i,1)+Deformacao(i,2))/2 - DSQRT(((Deformacao(i,1)& &-Deformacao(i,2))/2)**2+(Deformacao(i,3)/2)**2) DeformacaoP(i,3) = 2*DSQRT(((Deformacao(i,1)-Deformacao(i,2))/2)**2+& &(Deformacao(i,3)/2)**2) A = 1 B = -(tensao(i,1)+tensao(i,2)+tensao(i,4)) C = tensao(i,1)*tensao(i,2)+tensao(i,2)*tensao(i,4)+tensao(i,1)*tensao(i,4)& &-tensao(i,3)**2 D = -(tensao(i,1)*tensao(i,2)*tensao(i,4)-tensao(i,4)*(tensao(i,3)**2)) CALL EQTerceiroGrau (A,B,C,D,Raizes) TensaoP(i,1) = Raizes(1) TensaoP(i,2) = Raizes(2) 106

TensaoP(i,3) = Raizes(4) TensaoP(i,4) = Raizes(3) Enddo Endif END SUBROUTINE!Rotina para o cálculo de tensões e deformações nodais em problemas que utilizam elementos!finitos triangulares CST SUBROUTINE CalcularTDTriangular do i=1, nef j=material(i) Ni=nosdoelem(i,1) Nk=nosdoelem(i,3) Nj=nosdoelem(i,2) w1=cord(nj,2)-cord(nk,2) w2=cord(nk,2)-cord(ni,2) w3=cord(ni,2)-cord(nj,2) n1=cord(nk,1)-cord(nj,1) n2=cord(ni,1)-cord(nk,1) n3=cord(nj,1)-cord(ni,1) aux1=(w1*sol(2*ni-1)+w2*sol(2*nj-1)+w3*sol(2*nk-1))/(2*area(i)) aux2=(n1*sol(2*ni)+n2*sol(2*nj)+n3*sol(2*nk))/(2*area(i)) aux3=(n1*sol(2*ni-1)+w1*sol(2*ni)+n2*sol(2*nj-1)+w2*sol(2*nj)+n3*sol(2*nk-1)+w3*& &sol(2*nk))/(2*area(i)) aux4=((materiais(j,1)/(1-materiais(j,2)**2))*(aux1+materiais(j,2)*aux2)) aux5=((materiais(j,1)/(1-materiais(j,2)**2))*(aux2+materiais(j,2)*aux1)) aux6=(materiais(j,1)/(2*(1+materiais(j,2))))*aux3 deformacao(ni,1) = deformacao(ni,1)+aux1 deformacao(ni,2) = deformacao(ni,2)+aux2 deformacao(ni,3) = deformacao(ni,3)+aux3 tensao(ni,1)=tensao(ni,1)+aux4 tensao(ni,2)=tensao(ni,2)+aux5 tensao(ni,3)=tensao(ni,3)+aux6 verificacao(ni)=verificacao(ni)+1 deformacao(nj,1) = deformacao(nj,1)+aux1 deformacao(nj,2) = deformacao(nj,2)+aux2 deformacao(nj,3) = deformacao(nj,3)+aux3 tensao(nj,1)=tensao(nj,1)+aux4 tensao(nj,2)=tensao(nj,2)+aux5 tensao(nj,3)=tensao(nj,3)+aux6 verificacao(nj)=verificacao(nj)+1 deformacao(nk,1) = deformacao(nk,1)+aux1 deformacao(nk,2) = deformacao(nk,2)+aux2 deformacao(nk,3) = deformacao(nk,3)+aux3 tensao(nk,1)=tensao(nk,1)+aux4 tensao(nk,2)=tensao(nk,2)+aux5 tensao(nk,3)=tensao(nk,3)+aux6 verificacao(nk)=verificacao(nk)+1 if (TipoDeProblema.eq.'EPT') then Deformacao(ni,4) = deformacao(ni,4)+(-materiais(j,2)/(1-materiais(j,2)))*(aux1+aux2) Deformacao(nj,4) = deformacao(nj,4)+(-materiais(j,2)/(1-materiais(j,2)))*(aux1+aux2) Deformacao(nk,4) = deformacao(nk,4)+(-materiais(j,2)/(1-materiais(j,2)))*(aux1+aux2) elseif (TipoDeProblema.eq.'EPD') then Tensao(ni,4) = Tensao(ni,4)+materiais(j,2)*(aux4+aux5) Tensao(nj,4) = Tensao(nj,4)+materiais(j,2)*(aux4+aux5) Tensao(nk,4) = Tensao(nk,4)+materiais(j,2)*(aux4+aux5) endif do i=1,nnos tensao(i,1)=tensao(i,1)/verificacao(i) tensao(i,2)=tensao(i,2)/verificacao(i) tensao(i,3)=tensao(i,3)/verificacao(i) tensao(i,4)=tensao(i,4)/verificacao(i) deformacao(i,1)=deformacao(i,1)/verificacao(i) deformacao(i,2)=deformacao(i,2)/verificacao(i) deformacao(i,3)=deformacao(i,3)/verificacao(i) deformacao(i,4)=deformacao(i,4)/verificacao(i) if (TipoDeProblema.eq.'EPT') then do i=1,nnos TensaoP(i,1) = (Tensao(i,1)+Tensao(i,2))/2 + DSQRT(((Tensao(i,1)-Tensao(i,2))/2)& 107

&**2+Tensao(i,3)**2) TensaoP(i,2) = (Tensao(i,1)+Tensao(i,2))/2 - DSQRT(((Tensao(i,1)-Tensao(i,2))/2)& &**2+Tensao(i,3)**2) TensaoP(i,3) = DSQRT(((Tensao(i,1)-Tensao(i,2))/2)**2+Tensao(i,3)**2) A = 1 B = -(deformacao(i,1)+deformacao(i,2)+deformacao(i,4)) C = deformacao(i,1)*deformacao(i,2)+deformacao(i,2)*deformacao(i,4)+& &deformacao(i,1)*deformacao(i,4)-deformacao(i,3)**2 D = -(deformacao(i,1)*deformacao(i,2)*deformacao(i,4)-deformacao(i,4)*& &(deformacao(i,3)**2)) CALL EQTerceiroGrau (A,B,C,D,Raizes) DeformacaoP(i,1) = Raizes(1) DeformacaoP(i,2) = Raizes(2) DeformacaoP(i,3) = 2*Raizes(4) DeformacaoP(i,4) = Raizes(3) Enddo Elseif (TipoDeProblema.eq.'EPD') then do i=1,nnos DeformacaoP(i,1) = (Deformacao(i,1)+Deformacao(i,2))/2 + DSQRT(((Deformacao(i,1)& &-Deformacao(i,2))/2)**2+(Deformacao(i,3)/2)**2) DeformacaoP(i,2) = (Deformacao(i,1)+Deformacao(i,2))/2 - DSQRT(((Deformacao(i,1)& &-Deformacao(i,2))/2)**2+(Deformacao(i,3)/2)**2) DeformacaoP(i,3) = 2*DSQRT(((Deformacao(i,1)-Deformacao(i,2))/2)**2+& &(Deformacao(i,3)/2)**2) A = 1 B = -(tensao(i,1)+tensao(i,2)+tensao(i,4)) C = tensao(i,1)*tensao(i,2)+tensao(i,2)*tensao(i,4)+tensao(i,1)*tensao(i,4)& &-tensao(i,3)**2 D = -(tensao(i,1)*tensao(i,2)*tensao(i,4)-tensao(i,4)*(tensao(i,3)**2)) CALL EQTerceiroGrau (A,B,C,D,Raizes) TensaoP(i,1) = Raizes(1) TensaoP(i,2) = Raizes(2) TensaoP(i,3) = Raizes(4) TensaoP(i,4) = Raizes(3) Enddo Endif END SUBROUTINE end program!rotina para zerar matrizes de valores reais SUBROUTINE ZerarMatrizQuadrada (Matriz, NLinhas, NColunas) integer*4 i,j, NLinhas, NColunas Real*8 Matriz(NLinhas,NColunas) do i=1, NLinhas do j=1, NColunas Matriz(i,j) = 0 Enddo Enddo END SUBROUTINE!Rotina para zerar matrizes de valores inteiros SUBROUTINE ZerarMatrizQuadradaINT (Matriz, NLinhas, NColunas) integer*4 i,j, NLinhas, NColunas, Matriz(NLinhas,NColunas) do i=1, NLinhas do j=1, NColunas Matriz(i,j) = 0 Enddo Enddo END SUBROUTINE!Rotina para zerar vetores de valores reais SUBROUTINE ZerarMatrizLinha (Matriz, NColunas) integer*4 i, NColunas Real*8 Matriz(NColunas) do i=1, NColunas Matriz(i) = 0 Enddo END SUBROUTINE!Rotina para zerar vetores de valores inteiros SUBROUTINE ZerarMatrizLinhaINT (Matriz, NColunas) 108

integer*4 i, NColunas, Matriz(NColunas) do i=1, NColunas Matriz(i) = 0 Enddo END SUBROUTINE!Procedimento que soluciona as três raízes de equações polinomiais do terceiro grau SUBROUTINE EQTerceiroGrau (a,b,c,d,x) IMPLICIT REAL*8 (a-z) real*8 x(4) pi=3.14159265358979 number=3 p = c/a - b*b/a/a/3. q = (2.*b*b*b/a/a/a - 9.*b*c/a/a + 27.*d/a) / 27. DD = p*p*p/27. + q*q/4. if(dd.lt. 0.)then phi = Dacos(-q/2./Dsqrt(Dabs(p*p*p)/27.)) temp1=2.*dsqrt(dabs(p)/3.) y1 = temp1*dcos(phi/3.) y2 = -temp1*dcos((phi+pi)/3.) y3 = -temp1*dcos((phi-pi)/3.) else temp1 = -q/2. + Dsqrt(DD) temp2 = -q/2. - Dsqrt(DD) u = Dabs(temp1)**(1./3.) v = Dabs(temp2)**(1./3.) if(temp1.lt. 0.) u=-u if(temp2.lt. 0.) v=-v y1 = u + v y2r = -(u+v)/2. y2i = (u-v)*dsqrt(number)/2. endif temp1 = b/a/3. y1 = y1-temp1 y2 = y2-temp1 y3 = y3-temp1 y2r=y2r-temp1 aux1=y1 aux2=y2 aux3=y3 if (y1.ge.y2.and. y1.ge.y3.and. y3.ge.y2) then y1=aux1 y2=aux3 y3=aux2 elseif (y2.ge.y1.and. y2.ge.y3.and. y3.ge.y1) then y1=aux2 y2=aux3 y3=aux1 elseif (y2.ge.y1.and. y2.ge.y3.and. y1.ge.y3) then y1=aux2 y2=aux1 y3=aux3 elseif (y3.ge.y1.and. y3.ge.y2.and. y2.ge.y1) then y1=aux3 y2=aux2 y3=aux1 elseif (y3.ge.y1.and. y3.ge.y2.and. y1.ge.y2) then y1=aux3 y2=aux1 y3=aux2 end if aux1 = DABS(y1-y2) aux2 = DABS(y2-y3) aux3 = DABS(y3-y1) if (aux1.ge.aux2.and. aux1.ge.aux3) then aux = aux1/2 elseif (aux2.ge.aux1.and. aux2.ge.aux3) then aux = aux2/2 elseif (aux3.ge.aux1.and. aux3.ge.aux2) then aux = aux3/2 endif 109

if(dd.lt. 0.)then x(1) = y1 x(2) = y2 x(3) = y3 x(4) = aux elseif(dd.eq. 0.)then x(1) = y1 x(2) = y2r x(3) = y2r x(4) = aux endif end subroutine!método de Gauss para a resolução de sistemas lineares de autoria do professor Dr. Walter!Savassi da EESC-USP subroutine GAUSS (NEQ,KES,FES,D) IMPLICIT INTEGER*4 (a-z) real*8 KES(neq,neq), FES(neq), D(neq), FAT, FE[ALLOCATABLE](:), KE[ALLOCATABLE](:,:) Allocate (KE(neq,neq)) Allocate (FE(neq)) do i=1,neq FE(i)=FES(i) do j=1,neq KE(i,j)=KES(i,j) do 20 K=2,NEQ do 20 L=K,NEQ FAT=KE(L,K-1)/KE(K-1,K-1) FE(L)=FE(L) - FAT * FE(K-1) do 20 J=K,NEQ 20 KE(L,J)=KE(L,J) - FAT * KE(K-1,J) D(NEQ)=FE(NEQ)/KE(NEQ,NEQ) do 40 K=NEQ-1,1,-1 D(K)=FE(K) do 30 J=K+1,NEQ 30 D(K) = D(K) - KE(K,J) * D(J) 40 D(K) = D(K)/KE(K,K) Deallocate(FE) Deallocate(KE) end subroutine!rotinas para a resolução de sistemas lineares por meio do método de perturbação subroutine SolucaoMetodoK (ordem, matrig, matforcas, sol, precisao) IMPLICIT INTEGER*4 (a-z) real*8 matrig(ordem,ordem), matforcas(ordem), sol(ordem), soma1[allocatable](:) real*8 soma2[allocatable](:), ri[allocatable](:),ei[allocatable](:) real*8 u0[allocatable](:), e0[allocatable](:), r0[allocatable](:) real*8 erro, numerador, denominador, precisao, matrizktilepsilon[allocatable](:,:) real*8 aux[allocatable](:),aux2[allocatable](:),matriztij[allocatable](:,:) real*8 ui[allocatable](:), matrizktil[allocatable](:,:), matrizftil[allocatable](:) Allocate (soma1(ordem)) Allocate (soma2(ordem)) Allocate (ei(ordem)) Allocate (ri(ordem)) Allocate (e0(ordem)) Allocate (r0(ordem)) Allocate (u0(ordem)) Allocate (ui(ordem)) Allocate (aux(ordem)) Allocate (aux2(ordem)) Allocate (matrizktilepsilon(ordem,ordem)) Allocate (MatrizFtil(ordem)) Allocate (MatrizKtil(ordem, ordem)) Allocate (MatrizTij(ordem,ordem)) CALL RMatrizTij(matrizTij) CALL RMatrizKtil(matrizKTil) CALL RMatrizFtil(matrizFtil) CALL RMatrizKtilEpsilon(matrizKtilepsilon) CALL GAUSS(ordem,matrizKtilepsilon,MatrizFtil,aux) CALL ZerarMatrizLinha (u0,ordem) 110

do i=1, ordem u0(i) = u0(i) + aux(i) CALL ZerarMatrizLinha (r0,ordem) do i=1, ordem r0(i) = r0(i) + MatrizFtil(i) do j=1, ordem r0(i) = r0(i) - MatrizKtil(i,j)*u0(j) call GAUSS(ordem,matrizKtilepsilon,r0,aux) CALL ZerarMatrizLinha (e0,ordem) do i=1, ordem e0(i) = e0(i) + aux(i) CALL ZerarMatrizLinha (soma1,ordem) do i=1, ordem do j=1, ordem soma1(i) = soma1(i) + matrizktil(i,j)*e0(j) do i=1, ordem soma2(i) = e0(i) erro=precisao+1 do while (erro.ge.precisao) do i=1, ordem ri(i) = r0(i) - soma1(i) call GAUSS(ordem,matrizKtilepsilon,ri,aux) CALL ZerarMatrizLinha (ei,ordem) do i=1, ordem ei(i) = ei(i) + aux(i) do i=1, ordem do j=1, ordem soma1(i) = soma1(i) + matrizktil(i,j)*ei(j) do i=1, ordem ui(i) = u0(i) - soma2(i) do i=1, ordem soma2(i) = soma2(i) + ei(i) CALL ZerarMatrizLinha (aux,ordem) do i=1, ordem do j=1, ordem aux(i) = aux(i) + matrizktil(i,j)*ei(j) do i=1, ordem numerador=0 numerador=numerador+aux(i)*ei(i) numerador=dabs(numerador) CALL ZerarMatrizLinha (aux2,ordem) do i=1, ordem do j=1, ordem aux2(i) = aux2(i) + matrig(i,j)*ui(j) do i=1,ordem denominador=0 denominador=denominador+aux2(i)*ui(i) denominador=dabs(denominador) erro=numerador/denominador CALL ZerarMatrizLinha (sol,ordem) do i=1, ordem 111

do j=1, ordem sol(i) = sol(i) + matriztij(i,j)*ui(j)!rotinas internas da subrotina de resolução de sistemas lineares pelo método de perturbação CONTAINS subroutine RMatrizFtil (matrizftil) real*8 matrizftil(ordem) CALL ZerarMatrizLinha (MatrizFtil,ordem) do i=1,ordem do j=1,ordem matrizftil(i)= matrizftil(i)+matriztij(i,j)*matforcas(j) end SUBROUTINE SUBROUTINE RMatrizKtilEpsilon(matrizKtilepsilon) real*8 matrizktilepsilon(ordem,ordem) do i=1, ordem do j=1, ordem if (j.eq.i) then matrizktilepsilon(i,j) = matrizktil(i,j)+0.00000000000001 else matrizktilepsilon(i,j) = matrizktil(i,j) endif end SUBROUTINE subroutine RMatrizTij (matriztij) real*8 matriztij(ordem,ordem) do i=1, ordem do j=1, ordem if (i.eq.j) then matriztij(i,j)=1/(dsqrt(matrig(i,j))) else matriztij(i,j)=0 endif end SUBROUTINE subroutine RMatrizKtil (matrizktil) real*8 matrizktil(ordem,ordem) real*8 MatrizSubs[ALLOCATABLE](:,:), aux Allocate (MatrizSubs(ordem,ordem)) CALL ZerarMatrizQuadrada (MatrizSubs,Ordem,Ordem) CALL ZerarMatrizQuadrada (MatrizKtil,Ordem,Ordem) auxo=0 do j=1, ordem do k=1, ordem aux=matrig(k,j) do i=1, ordem matrizsubs(i,j) = matrizsubs(i,j)+matriztij(i,k)*aux do j=1, ordem do k=1, ordem aux=matriztij(k,j) do i=1, ordem matrizktil(i,j) = matrizktil(i,j)+matrizsubs(i,k)*aux deallocate (matrizsubs) end subroutine end SUBROUTINE!Rotina para a montagem da matriz D 112

Subroutine MatrizDTriangular(MatrizD,j,materiais,Nmats) integer*4 j, Nmats real*8 MatrizD(3,3), Materiais(Nmats,3) MatrizD(1,1)=1 MatrizD(1,2)=materiais(j,2) MatrizD(1,3)=0 MatrizD(2,1)=materiais(j,2) MatrizD(2,2)=1 MatrizD(2,3)=0 MatrizD(3,1)=0 MatrizD(3,2)=0 MatrizD(3,3)=0.5-0.5*materiais(j,2) End subroutine!rotina para a montagem da matriz de ridigez local dos elementos finitos com a teoria do MEFG Subroutine MatrizDeRigidez(Matrig,PontosDeHammer,MaxOrdemB,FuncoesDeRefinamento,& &RefinamentosDoRefinado,OrdemMatrizB,MaiorDistNosRef,NosRefinados,Nrefinados, Nef,& &Nnos,Nmats,materiais,material,area,nosdoElem, cord,matrizbesp,w) integer*4 PontosDeHammer,MaxOrdemB, FuncoesDeRefinamento, NRefinados, Nef,Nmats integer*4 nosdoelem(nef,3), material(nef), w, NoLocal(3) integer*4 RefinamentosDoRefinado(Nnos,FuncoesDeRefinamento+1), NosRefinados(Nrefinados) integer*4 OrdemMatrizB, CordLocal[ALLOCATABLE](:,:) real*8 MatrizD(3,3), MatrizValoresGauss[ALLOCATABLE](:,:,:), PontosGauss[ALLOCATABLE](:,:) real*8 PesosGauss[ALLOCATABLE](:), MatrizB(PontosDeHammer,3,MaxOrdemB), materiais(nmats,3) real*8 area(nef), cord(nnos,2), MaiorDistNosRef(Nrefinados), MatrizBEsp(Nef,3,3,MaxOrdemB) real*8 Matrig(MaxOrdemB,MaxOrdemB), Mult1(PontosDeHammer,MaxOrdemB,3) real*8 FuncoesMatrizB((3+3*FuncoesDeRefinamento),2), Mult2(PontosDeHammer,MaxOrdemB,MaxOrdemB) real*8 Ep1, Ep2, x1,x2,x3,y1,y2,y3,x,y, aux, h Ni=nosdoelem(w,1) Nj=nosdoelem(w,2) Nk=nosdoelem(w,3) x1=cord(ni,1) x2=cord(nj,1) x3=cord(nk,1) y1=cord(ni,2) y2=cord(nj,2) y3=cord(nk,2) j=material(w) Fator = (materiais(j,3)*materiais(j,1))/(1-materiais(j,2)**2) CALL ZerarMatrizQuadrada(Matrig,MaxOrdemB,MaxOrdemB) CALL PontosPesosGauss CALL MatrizDTriangular(MatrizD,j,materiais,Nmats) CALL MatrizBTriangular do i=1,pontosdehammer do k=1,3 do j=1,ordemmatrizb Mult1(i,j,k) = matrizb(i,1,j)*matrizd(1,k)+matrizb(i,2,j)*matrizd(2,k)+& &matrizb(i,3,j)*matrizd(3,k) do i=1,pontosdehammer do j=1,ordemmatrizb do k=1,ordemmatrizb Mult2(i,j,k) = Mult1(i,j,1)*MatrizB(i,1,k)+Mult1(i,j,2)*MatrizB(i,2,k)+& &Mult1(i,j,3)*MatrizB(i,3,k) do i=1,ordemmatrizb do j=1,ordemmatrizb do k=1,pontosdehammer Matrig(i,j)=Matrig(i,j)+PesosGauss(k)*Fator*Mult2(k,i,j)*DABS((x2 * y3 - x3 * & &y2 - x2 * y1 + x1 * y2 - x1 * y3 + x3 * y1))!dabs(x2 * y3 - x3 * y2 - x2 * y1 + x1 * y2 - x1 * y3 + x3 * y1) = Jacobiano!Definição das rotinas internas da subrotina de cálculo das matrizes de rigidez locais!pelo MEFG 113

CONTAINS!Rotina para a montagem do vetor de pesos e pontos de Hammer para a integração numérica!em domínios triangulares Subroutine PontosPesosGauss ALLOCATE(CordLocal(3,2)) CordLocal(1,1)=1 CordLocal(1,2)=0 CordLocal(2,1)=0 CordLocal(2,2)=1 CordLocal(3,1)=0 CordLocal(3,2)=0 ALLOCATE(PontosGauss(PontosDeHammer,2)) ALLOCATE(PesosGauss(PontosDeHammer)) ALLOCATE(MatrizValoresGauss(PontosDeHammer,PontosDeHammer,3))!1 Ponto de Hammer if (PontosDeHammer.eq.1) then MatrizValoresGauss(1,1,1)=0.3333333333 MatrizValoresGauss(1,1,2)=0.3333333333 MatrizValoresGauss(1,1,3)=0.5!Peso!3 Pontos de Hammer elseif (PontosDeHammer.eq.3) then MatrizValoresGauss(3,1,1)=0.666666666666666 MatrizValoresGauss(3,1,2)=0.166666666666666 MatrizValoresGauss(3,1,3)=0.166666666666666 MatrizValoresGauss(3,2,1)=0.166666666666666 MatrizValoresGauss(3,2,2)=0.666666666666666 MatrizValoresGauss(3,2,3)=0.166666666666666 MatrizValoresGauss(3,3,1)=0.166666666666666 MatrizValoresGauss(3,3,2)=0.166666666666666 MatrizValoresGauss(3,3,3)=0.166666666666666!4 Pontos de Hammer elseif (PontosDeHammer.eq.4) then MatrizValoresGauss(4,1,1)=0.3333333333 MatrizValoresGauss(4,1,2)=0.3333333333 MatrizValoresGauss(4,1,3)=-0.28125000 MatrizValoresGauss(4,2,1)=0.6 MatrizValoresGauss(4,2,2)=0.2 MatrizValoresGauss(4,2,3)=0.26041666 MatrizValoresGauss(4,3,1)=0.2 MatrizValoresGauss(4,3,2)=0.6 MatrizValoresGauss(4,3,3)=0.26041666 MatrizValoresGauss(4,4,1)=0.2 MatrizValoresGauss(4,4,2)=0.2 MatrizValoresGauss(4,4,3)=0.26041666!6 Pontos de Hammer elseif (PontosDeHammer.eq.6) then MatrizValoresGauss(6,1,1)=0.81684757 MatrizValoresGauss(6,1,2)=0.09157621 MatrizValoresGauss(6,1,3)=0.05497587 MatrizValoresGauss(6,2,1)=0.09157621 MatrizValoresGauss(6,2,2)=0.81684757 MatrizValoresGauss(6,2,3)=0.05497587 MatrizValoresGauss(6,3,1)=0.09157621 MatrizValoresGauss(6,3,2)=0.09157621 MatrizValoresGauss(6,3,3)=0.05497587 MatrizValoresGauss(6,4,1)=0.10810301 MatrizValoresGauss(6,4,2)=0.44594849 MatrizValoresGauss(6,4,3)=0.11169079 MatrizValoresGauss(6,5,1)=0.44594849 MatrizValoresGauss(6,5,2)=0.10810301 MatrizValoresGauss(6,5,3)=0.11169079 MatrizValoresGauss(6,6,1)=0.44594849 MatrizValoresGauss(6,6,2)=0.44594849 MatrizValoresGauss(6,6,3)=0.11169079 endif do i=1,pontosdehammer PontosGauss(i,1)=MatrizValoresGauss(PontosDeHammer,i,1) PontosGauss(i,2)=MatrizValoresGauss(PontosDeHammer,i,2) PesosGauss(i)=MatrizValoresGauss(PontosDeHammer,i,3) End subroutine 114

!Rotina para o cálculo das matrizes B a serem usadas na integração numérica em função dos!pontos de Hammer aplicados Subroutine MatrizBTriangular do l=1,nrefinados if (nosrefinados(l).eq.ni) then h1=maiordistnosref(l) endif if (nosrefinados(l).eq.nj) then h2=maiordistnosref(l) endif if (nosrefinados(l).eq.nk) then h3=maiordistnosref(l) endif do i=1,pontosdehammer Ep1=PontosGauss(i,1) Ep2=PontosGauss(i,2) x=ep1*x1+ep2*x2+(1-ep1-ep2)*x3 y=ep1*y1+ep2*y2+(1-ep1-ep2)*y3 aux=1/(2*area(w))!derivadas das funções de forma convencionais FuncoesMatrizB(1,1)=aux*(y2-y3) FuncoesMatrizB(1,2)=aux*(x3-x2) FuncoesMatrizB(2,1)=aux*(y3-y1) FuncoesMatrizB(2,2)=aux*(x1-x3) FuncoesMatrizB(3,1)=aux*(y1-y2) FuncoesMatrizB(3,2)=aux*(x2-x1)!Derivadas da primeira função de enriquecimento (função de forma convencional vezes X) FuncoesMatrizB(4,1)=(aux/h1)*(x2 * y3 - x3 * y2 + 2 * x * y2-2 * x * y3 + y * x3 -& & x2 * y - x1 * y2 + x1 * y3) FuncoesMatrizB(4,2)=-(aux/h1)*((x - x1) * (-x3 + x2)) FuncoesMatrizB(5,1)=-(aux/h2)*(-x3 * y1 + x1 * y3-2 * x * y3 + 2 * x * y1 - y * x1& & + y * x3 + x2 * y3 - x2 * y1) FuncoesMatrizB(5,2)=(aux/h2)*((x - x2) * (x1 - x3)) FuncoesMatrizB(6,1)=(aux/h3)*(2 * area(w) - x2 * y3 + 2 * x3 * y2-2 * x * y2 +& & x2 * y - 2 * x3 * y1 + x1 * y3 + 2 * x * y1 - y * x1) FuncoesMatrizB(6,2)=-(aux/h3)*((x - x3) * (-x2 + x1))!derivadas da segunda função de enriquecimento (função de forma convencional vezes Y) FuncoesMatrizB(7,1)=(aux/h1)*((y - y1) * (y2 - y3)) FuncoesMatrizB(7,2)=(aux/h1)*(x2 * y3 - x3 * y2 + x * y2 - x * y3 + 2 * y * x3 -& & 2 * y * x2 - x3 * y1 + y1 * x2) FuncoesMatrizB(8,1)=(aux/h2)*((y - y2) * (y3 - y1)) FuncoesMatrizB(8,2)=-(aux/h2)*(-x3 * y1 + x1 * y3 - x * y3 + x * y1-2 * y * x1 +& & 2 * y * x3 + y2 * x1 - x3 * y2) FuncoesMatrizB(9,1)=(aux/h3)*((y - y3) * (-y2 + y1)) FuncoesMatrizB(9,2)=(aux/h3)*(2 * area(w) - 2 * x2 * y3 + x3 * y2 - x * y2 + 2 * y& & * x2 - x3 * y1 + 2 * x1 * y3 + x * y1-2 * y * x1)!derivadas da terceira função de enriquecimento (função de forma convencional vezes XY) FuncoesMatrizB(10,1)=(aux/(h1**2))*((y - y1) * (x2 * y3 - x3 * y2 + 2 * x * y2-2 *& & x * y3 + y * x3 - y * x2 - x1 * y2 + x1 * y3)) FuncoesMatrizB(10,2)=(aux/(h1**2))*((x - x1) * (x2 * y3 - x3 * y2 + x * y2 - x * y3 & &+ 2 * y * x3-2 * y * x2 - x3 * y1 + y1 * x2)) FuncoesMatrizB(11,1)=-(aux/(h2**2))*((y - y2) * (-x3 * y1 + x1 * y3-2 * x * y3 + & &2 * x * y1 - y * x1 + y * x3 + x2 * y3 - y1 * x2)) FuncoesMatrizB(11,2)=-(aux/(h2**2))*((x - x2) * (-x3 * y1 + x1 * y3 - x * y3 + x *& & y1-2 * y * x1 + 2 * y * x3 + x1 * y2 - x3 * y2)) FuncoesMatrizB(12,1)=(aux/(h3**2))*((y - y3) * (2 * area(w) - x2 * y3 + 2 * x3 * y2& & - 2 * x * y2 + y * x2-2 * x3 * y1 + x1 * y3 + 2 * x * y1 - y * x1)) FuncoesMatrizB(12,2)=(aux/(h3**2))*((x - x3) * (2 * area(w) - 2 * x2 * y3 + x3 * y2& & - x * y2 + 2 * y * x2 - x3 * y1 + 2 * x1 * y3 + x * y1-2 * y * x1))!montagem da matriz B levando-se em conta a possibilidade de haver refinamentos!nodais aplicados no elemento finito k=0 do m=1,3 MatrizB(i,1,2*m-1+2*k)=FuncoesMatrizB(m,1) MatrizB(i,1,2*m+2*k)=0 MatrizB(i,2,2*m-1+2*k)=0 MatrizB(i,2,2*m+2*k)=FuncoesMatrizB(m,2) MatrizB(i,3,2*m-1+2*k)=FuncoesMatrizB(m,2) MatrizB(i,3,2*m+2*k)=FuncoesMatrizB(m,1) 115

do n=1,funcoesderefinamento if (RefinamentosDoRefinado(nosdoelem(w,m),n).eq.1) then k=k+1 MatrizB(i,1,2*m-1+2*k)=FuncoesMatrizB(m+n*3,1) MatrizB(i,1,2*m+2*k)=0 MatrizB(i,2,2*m-1+2*k)=0 MatrizB(i,2,2*m+2*k)=FuncoesMatrizB(m+n*3,2) MatrizB(i,3,2*m-1+2*k)=FuncoesMatrizB(m+n*3,2) MatrizB(i,3,2*m+2*k)=FuncoesMatrizB(m+n*3,1) endif OrdemMatrizB=6+2*k!Procedimento para armazenar os valores da matriz B com as coordenadas nos nós do elemento!finito com o objetivo de se realizar o posterior cálculo das tensões e deformações do i=1,3 Ep1=CordLocal(i,1) Ep2=CordLocal(i,2) x=ep1*x1+ep2*x2+(1-ep1-ep2)*x3 y=ep1*y1+ep2*y2+(1-ep1-ep2)*y3 aux=1/(2*area(w))!derivadas das funções de forma convencionais FuncoesMatrizB(1,1)=aux*(y2-y3) FuncoesMatrizB(1,2)=aux*(x3-x2) FuncoesMatrizB(2,1)=aux*(y3-y1) FuncoesMatrizB(2,2)=aux*(x1-x3) FuncoesMatrizB(3,1)=aux*(y1-y2) FuncoesMatrizB(3,2)=aux*(x2-x1)!Derivadas da primeira função de enriquecimento (função de forma convencional vezes X) FuncoesMatrizB(4,1)=(aux/h1)*(x2 * y3 - x3 * y2 + 2 * x * y2-2 * x * y3 + y * x3& & - x2 * y - x1 * y2 + x1 * y3) FuncoesMatrizB(4,2)=-(aux/h1)*((x - x1) * (-x3 + x2)) FuncoesMatrizB(5,1)=-(aux/h2)*(-x3 * y1 + x1 * y3-2 * x * y3 + 2 * x * y1 - y *& & x1 + y * x3 + x2 * y3 - x2 * y1) FuncoesMatrizB(5,2)=(aux/h2)*((x - x2) * (x1 - x3)) FuncoesMatrizB(6,1)=(aux/h3)*(2 * area(w) - x2 * y3 + 2 * x3 * y2-2 * x * y2 +& & x2 * y - 2 * x3 * y1 + x1 * y3 + 2 * x * y1 - y * x1) FuncoesMatrizB(6,2)=-(aux/h3)*((x - x3) * (-x2 + x1))!derivadas da segunda função de enriquecimento (função de forma convencional vezes Y) FuncoesMatrizB(7,1)=(aux/h1)*((y - y1) * (y2 - y3)) FuncoesMatrizB(7,2)=(aux/h1)*(x2 * y3 - x3 * y2 + x * y2 - x * y3 + 2 * y * x3-2& & * y * x2 - x3 * y1 + y1 * x2) FuncoesMatrizB(8,1)=(aux/h2)*((y - y2) * (y3 - y1)) FuncoesMatrizB(8,2)=-(aux/h2)*(-x3 * y1 + x1 * y3 - x * y3 + x * y1-2 * y * x1 + 2& & * y * x3 + y2 * x1 - x3 * y2) FuncoesMatrizB(9,1)=(aux/h3)*((y - y3) * (-y2 + y1)) FuncoesMatrizB(9,2)=(aux/h3)*(2 * area(w) - 2 * x2 * y3 + x3 * y2 - x * y2 + 2 * y& & * x2 - x3 * y1 + 2 * x1 * y3 + x * y1-2 * y * x1)!derivadas da terceira função de enriquecimento (função de forma convencional vezes XY) FuncoesMatrizB(10,1)=(aux/(h1**2))*((y - y1) * (x2 * y3 - x3 * y2 + 2 * x * y2-2& & * x * y3 + y * x3 - y * x2 - x1 * y2 + x1 * y3)) FuncoesMatrizB(10,2)=(aux/(h1**2))*((x - x1) * (x2 * y3 - x3 * y2 + x * y2 - x * y3& & + 2 * y * x3-2 * y * x2 - x3 * y1 + y1 * x2)) FuncoesMatrizB(11,1)=-(aux/(h2**2))*((y - y2) * (-x3 * y1 + x1 * y3-2 * x * y3 + 2& & * x * y1 - y * x1 + y * x3 + x2 * y3 - y1 * x2)) FuncoesMatrizB(11,2)=-(aux/(h2**2))*((x - x2) * (-x3 * y1 + x1 * y3 - x * y3 + x *& & y1-2 * y * x1 + 2 * y * x3 + x1 * y2 - x3 * y2)) FuncoesMatrizB(12,1)=(aux/(h3**2))*((y - y3) * (2 * area(w) - x2 * y3 + 2 * x3 * y2& & - 2 * x * y2 + y * x2-2 * x3 * y1 + x1 * y3 + 2 * x * y1 - y * x1)) FuncoesMatrizB(12,2)=(aux/(h3**2))*((x - x3) * (2 * area(w) - 2 * x2 * y3 + x3 * y2& & - x * y2 + 2 * y * x2 - x3 * y1 + 2 * x1 * y3 + x * y1-2 * y * x1))!montagem da matriz B para o cálculo de tensões e deformações levando-se em conta a!possibilidade de haver refinamentos nodais aplicados no elemento finito k=0 do m=1,3 MatrizBEsp(w,i,1,2*m-1+2*k)=FuncoesMatrizB(m,1) MatrizBEsp(w,i,1,2*m+2*k)=0 MatrizBEsp(w,i,2,2*m-1+2*k)=0 MatrizBEsp(w,i,2,2*m+2*k)=FuncoesMatrizB(m,2) MatrizBEsp(w,i,3,2*m-1+2*k)=FuncoesMatrizB(m,2) 116

MatrizBEsp(w,i,3,2*m+2*k)=FuncoesMatrizB(m,1) do n=1,funcoesderefinamento if (RefinamentosDoRefinado(nosdoelem(w,m),n).eq.1) then k=k+1 MatrizBEsp(w,i,1,2*m-1+2*k)=FuncoesMatrizB(m+n*3,1) MatrizBEsp(w,i,1,2*m+2*k)=0 MatrizBEsp(w,i,2,2*m-1+2*k)=0 MatrizBEsp(w,i,2,2*m+2*k)=FuncoesMatrizB(m+n*3,2) MatrizBEsp(w,i,3,2*m-1+2*k)=FuncoesMatrizB(m+n*3,2) MatrizBEsp(w,i,3,2*m+2*k)=FuncoesMatrizB(m+n*3,1) endif End subroutine End subroutine!as rotinas que se encontram abaixo estão relacionadas ao cálculo do MEF convencional com!elementos finitos quadrilaterais. Estas, são de autoria do professor da EESC-USP!Dr. Sergio Persival Baroncini Proença da EESC-USP e foram implementadas no programa no!sentido de se obter resultados de análises estruturais com elementos diferentes dos!triangulares!esta SUBROTINA CALCULA FUNÇÕES DE FORMA DO ELEMENTO QUADRANGULAR MESTRE DE QUATRO NÓS E SUAS!DERIVADAS SUBROUTINE SFR2(DERIV,ETASP,EXISP, SHAPEE) real*8 DERIV(2,4),SHAPEE(4), EXISP, ETASP!VARIÁVEIS!SHAPE: FUNÇÃO DE FORMA ATRELADA AO NÓ DO ELEMENTO MESTRE!DERIV: DERIVADA DA FUNÇÃO DE FORMA S=EXISP T=ETASP ST=S*T!FUNÇÕES DE FORMA SHAPEE(1)=(1-T-S+ST)*0.25 SHAPEE(2)=(1-T+S-ST)*0.25 SHAPEE(3)=(1+T+S+ST)*0.25 SHAPEE(4)=(1+T-S-ST)*0.25!DERIVADAS DAS FUNÇÕES DE FORMA DERIV(1,1)=(-1+T)*0.25 DERIV(1,2)=(+1-T)*0.25 DERIV(1,3)=(+1+T)*0.25 DERIV(1,4)=(-1-T)*0.25 DERIV(2,1)=(-1+S)*0.25 DERIV(2,2)=(-1-S)*0.25 DERIV(2,3)=(+1+S)*0.25 DERIV(2,4)=(+1-S)*0.25 RETURN END!ESTA SUBORTINA CALCULA A MATRIZ JACOBIANA, SEU DETERMINANTE, SUA INVERSA E AS DERIVADAS!CARTESIANAS DAS FUNÇÕES DE FORMA SUBROUTINE JACOB2(CARTD,DERIV,DJACB,ELCOD,GPCOD,IELEM,KGASP,SHAPEE) Real*8 CARTD(2,4),DERIV(2,4),ELCOD(2,4),GPCOD(2,4),SHAPEE(4),XJACI(2,2),XJACM(2,2)!VARIÁVEIS!ELCOD: COORDENADAS CARTESIANAS DOS NÓS DO ELEMENTO!GPCOD: COORDENADAS CARTESIANAS DOS PONTOS DE GAUSS DO ELEMENTO!XJACM: MATRIZ JACOBIANA!XJACI: INVERSA DA MATRIZ JACOBIANA!CARTD: DERIVADAS CARTESIANAS DAS FUÇÕES DE FORMA!CÁLCULO DAS COORDENADAS CARTESIANAS DO PONTO DE GAUSS DO ELEMENTO DO 2 IDIME=1,2 GPCOD(IDIME,KGASP)=0 DO 2 INODE=1,4 GPCOD(IDIME,KGASP)=GPCOD(IDIME,KGASP)+ELCOD(IDIME,INODE)*SHAPEE(INODE) 2 CONTINUE!MATRIZ JACOBIANA XJACM DO 4 IDIME=1,2 DO 4 JDIME=1,2 XJACM(IDIME,JDIME)=0.0 DO 4 INODE=1,4 117

XJACM(IDIME,JDIME)=XJACM(IDIME,JDIME)+DERIV(IDIME,INODE)*ELCOD(JDIME,INODE) 4 CONTINUE!CÁLCULO DO DETERMINANTE E DA INVERSA DA MATRIZ JACOBIANA DJACB=XJACM(1,1)*XJACM(2,2)-XJACM(1,2)*XJACM(2,1) IF(DJACB)6,6,8 6 WRITE(3,600)IELEM STOP 8 CONTINUE XJACI(1,1)=XJACM(2,2)/DJACB XJACI(2,2)=XJACM(1,1)/DJACB XJACI(1,2)=-XJACM(1,2)/DJACB XJACI(2,1)=-XJACM(2,1)/DJACB!CÁLCULO DAS DERIVADAS CARTESIANAS DO 10 IDIME=1,2 DO 10 INODE=1,4 CARTD(IDIME,INODE)=0.0 DO 10 JDIME=1,2 CARTD(IDIME,INODE)=CARTD(IDIME,INODE)+XJACI(IDIME,JDIME)*DERIV(JDIME,INODE) 10 CONTINUE 600 FORMAT(//,36H PROGRAM HALTED IN SUBROUTINE JACOB2,/,11X,22H ZERO OR NEGATIVE AREA,/,& &10X,16H ELEMENT NUMBER,I5) RETURN END!ESTA SUBROTINA CALCULA A MATRIZ CONSTITUTIVA D SUBROUTINE MODPS(DMATX,LPROP,MMATS,NTYPE,PROPS) real*8 DMATX(3,3),PROPS(MMATS,3)!VARIÁVEIS!DMATX: MATRIZ CONSTITUTIVA!PROPS: PROPRIEDADES ELÁSTICAS (MÓD. ELASTIC., COEF. POISSON) YOUNG=PROPS(LPROP,1) POISS=PROPS(LPROP,2) DO 10 ISTR1=1,3 DO 10 JSTR1=1,3 10 DMATX(ISTR1,JSTR1)=0!NTYPE=1 INDICA E.P.T.; NTYPE=2 INDICA E.P.D.!MATRIZ-D PARA O CASO DE ESTADO PLANO DE TENSÃO CONST=YOUNG/(1.0-POISS*POISS) DMATX(1,1)=CONST DMATX(2,2)=CONST DMATX(1,2)=CONST*POISS DMATX(2,1)=CONST*POISS DMATX(3,3)=(1.0-POISS)*CONST/2.0 RETURN end!esta SUBROTINA MONTA A MATRIZ B SUBROUTINE BMATPS(BMATX,CARTD, SHAPEE,GPCOD,NTYPE,KGASP) real*8 BMATX(3,8),CARTD(2,4),SHAPEE(4),GPCOD(2,4)!VARIÁVEIS!BMATX: MATRIX B NGASH=0 DO 10 INODE=1,4 MGASH=NGASH+1 NGASH=MGASH+1 BMATX(1,MGASH)=CARTD(1,INODE) BMATX(1,NGASH)=0.0 BMATX(2,MGASH)=0.0 BMATX(2,NGASH)=CARTD(2,INODE) BMATX(3,MGASH)=CARTD(2,INODE) BMATX(3,NGASH)=CARTD(1,INODE) 10 CONTINUE RETURN END!ESTA SUBROTINA MULTIPLICA A MATRIZ CONSTITUTIVA D PELA MATRIZ B SUBROUTINE DBE(BMATX,DBMAT,DMATX) real*8 BMATX(3,8),DBMAT(3,8),DMATX(3,3)!VARIÁVEIS!DBMAT: MATRIX D B DO 2 ISTRE=1,3 118

DO 2 IEVAB=1,8 DBMAT(ISTRE,IEVAB)=0.0 DO 2 JSTRE=1,3 DBMAT(ISTRE,IEVAB)=DBMAT(ISTRE,IEVAB)+DMATX(ISTRE,JSTRE)*BMATX(JSTRE,IEVAB) 2 CONTINUE RETURN END!ESTA SUBROTINA CALCULA A MATRIZ DE RIGIDEZ DE CADA ELEMENTO POR INTEGRAÇÃO NUMÉRICA SUBROUTINE STIFFP(COORD,LNODS,MATNO,MMATS,MPOIN,NELEM,NGAUS,POSGP,PROPS,WEIGP,MELEM,NTYPE,& &ESTIF,IELEM,MatrizDB) real*8 BMATX(3,8),CARTD(2,4), MatrizDB(2,NELEM,3,8),DBMAT(3,8),DERIV(2,4),DMATX(3,3),ELCOD(2,4) real*8 ESTIF(8,8),COORD(MPOIN,2),POSGP(4),WEIGP(9),PROPS(MMATS,3) real*8 DVOLU, EXISP, ETASP, GPCOD(2,4) real*8 SHAPEE[ALLOCATABLE](:), aux1, aux2, aux3, Ni, Nj, Nk, Nw integer*4 MATNO(MELEM), LNODS(MELEM,4) ALLOCATE (SHAPEE(4))!VARIÁVEIS!MATNO:material VETOR QUE INDENTIFICA O TIPO DE MATERIAL DO ELEMENTO!COORD:cord MATRIZ QUE IDENTIFICA A COORDENADA CARTESIANA DO NÓ DO ELEMENTO!LNODS:NosdoelemQ MATRIZ QUE IDENTIFICA O NÚMERO GLOBAL DO NÓ DO ELEMENTO!POSGP: VETOR QUE IDENTIFICA A POSIÇÃO DO PONTO DE GAUSS DO ELEMENTO MESTRE KGAUS=0 LPROP=MATNO(IELEM)!RECUPERAÇÃO DAS COORDENADAS DOS NÓS DO ELEMENTO DO 10 INODE=1,4 LNODE=IABS(LNODS(IELEM,INODE)) IPOSN=(LNODE-1)*2 DO 10 IDIME=1,2 IPOSN=IPOSN+1 10 ELCOD(IDIME,INODE)=COORD(LNODE,IDIME) THICK=PROPS(LPROP,3)!INICIALIZAÇÃO DA MATRIZ DE RIGIDEZ DO ELEMENTO DO 20 IEVAB=1,8 DO 20 JEVAB=1,8 20 ESTIF(IEVAB,JEVAB)=0 KGASP=0!LOOP SOBRE OS PONTOS DE GAUSS PARA INTEGRAÇÃO NUMÉRICA DO 50 IGAUS=1,NGAUS EXISP=POSGP(IGAUS) DO 50 JGAUS=1,NGAUS ETASP=POSGP(JGAUS) KGASP=KGASP+1 KGAUS=KGAUS+1!CÁLCULO DA MATRIZ-D CALL MODPS(DMATX,LPROP,MMATS,NTYPE,PROPS)!CÁLCULO DAS FUNÇÕES DE FORMA, VOLUME DO ELEMENTO,ETC CALL SFR2(DERIV,ETASP,EXISP,SHAPEE) CALL JACOB2(CARTD,DERIV,DJACB,ELCOD,GPCOD,IELEM,KGASP,SHAPEE) DVOLU=DJACB*WEIGP(IGAUS)*WEIGP(JGAUS) IF(THICK.NE.0)DVOLU=DVOLU*THICK!CÁLCULO DAS MATRIZES B E DB CALL BMATPS(BMATX,CARTD, SHAPEE,GPCOD,NTYPE,KGASP) CALL DBE(BMATX,DBMAT,DMATX) do i=1,3 do j=1,8 MatrizDB(1,IELEM,i,j)=DBMAT(i,j) MatrizDB(2,IELEM,i,j)=BMATX(i,j)!CÁLCULO DA MATRIZ DE RIGIDEZ DO ELEMENTO (SIMETRIA) DO 30 IEVAB=1,8 DO 30 JEVAB=IEVAB,8 DO 30 ISTRE=1,3 30 ESTIF(IEVAB,JEVAB)=ESTIF(IEVAB,JEVAB)+BMATX(ISTRE,IEVAB)*DBMAT(ISTRE,JEVAB)*DVOLU 50 CONTINUE!CONSTRUÇÃO POR SIMETRIA DA PARTE INFERIOR DA MATRIZ DO 60 IEVAB=1,8 DO 60 JEVAB=IEVAB,8 60 ESTIF(JEVAB,IEVAB)=ESTIF(IEVAB,JEVAB) RETURN 119

END!Fim do programa 120

BIBLIOGRAFIA ASSAN, A. Metodo dos elementos finitos primeiros passos. 2nd ed. Campinas: Ed. da UNICAMP, 2003. BATHE, K. Finite element procedures. Englewood Cliffs N.J.: Prentice Hall, 1996. BEER, F. Mechanics of materials. 4th ed. Boston: McGraw-Hill Higher Education, 2006. PROENÇA, S. Introdução aos métodos numéricos. Notas de aulas. Departamento de Engenharia de Estruturas, EESC/USP., 2003. SAVASSI, W. Introdução ao método dos elementos finitos. Serviço Gráfico da EESC/USP, 2000. STROUBOULIS, T. The design and analysis of the Generalized Finite Element Method. Computer Methods in Applied Mechanics and Engineering, v. 181, n. 1-3, p. 43-69. doi: 10.1016/S0045-7825(99)00072-9, 2000. 121