Extensões por sub-rotinas de usuário¶
O FrontISTR fornece um conjunto de sub-rotinas de usuário para estender funcionalidades sem modificar o código-fonte principal. Elas abrangem implementações pelo usuário de leis constitutivas e a incorporação de cargas externas definidas pelo usuário. Este capítulo lista os pontos de extensão disponíveis e as palavras-chave do arquivo de controle da análise usadas para chamar cada um deles. Para detalhes sobre os argumentos das sub-rotinas e os procedimentos de recompilação, consulte Sub-rotinas de usuário (Guia de programação).
Visão geral das funções¶
Os pontos de extensão por sub-rotinas de usuário dividem-se em duas categorias: leis constitutivas de materiais e cargas externas. Para as leis constitutivas, há quatro caminhos de chamada — elasticidade linear, hiperelasticidade, elastoplasticidade e uma lei constitutiva de uso geral — cada um ativado por uma palavra-chave independente. Para cargas externas, há um caminho que lê informações de carga de um arquivo externo preparado pelo usuário e as adiciona ao vetor global de cargas e ao vetor de resíduos. Cada extensão torna-se disponível após editar o arquivo de modelo incluído na distribuição do FrontISTR e recompilar o programa principal.
| Categoria de extensão | Palavra-chave do controle da análise | Principais sub-rotinas de usuário | Modelo a editar |
|---|---|---|---|
| Elasticidade linear de usuário | !ELASTIC, TYPE=USER |
uElasticMatrix, uElasticUpdate |
fistr1/src/lib/user/uelastic.f90 |
| Hiperelasticidade de usuário | !HYPERELASTIC, TYPE=USER |
uElasticMatrix, uElasticUpdate |
fistr1/src/lib/user/uelastic.f90 |
| Elastoplasticidade de usuário (função de escoamento e mapeamento de retorno) | !PLASTIC, YIELD=USER |
uElastoPlasticMatrix, uBackwardEuler, uElastoPlasticNumStatus |
fistr1/src/lib/user/uyield.f90 |
| Lei constitutiva de usuário de uso geral | !USER_MATERIAL |
uMatlMatrix, uUpdate |
fistr1/src/lib/user/umat.f90 |
| Carga externa definida pelo usuário | !ULOAD, FILE=<fname> |
ureadload, uloading, uResidual |
fistr1/src/lib/user/uload.f90 |
Leis de encruamento definidas pelo usuário (um caminho que mantém a função de escoamento interna e substitui apenas a curva de encruamento por uma implementação do usuário) não são suportadas. Se for necessária uma curva de encruamento definida pelo usuário, selecione !PLASTIC, YIELD=USER e substitua toda a lei constitutiva elastoplástica por uma implementação do usuário. Condições de contorno de usuário e pontos de extensão para processamento de usuário durante reinicialização não são suportados.
!CREEP com TYPE=USER não é suportado. Use !USER_MATERIAL para implementar uma lei constitutiva dependente do tempo como extensão de usuário.
Leis constitutivas de usuário¶
As leis constitutivas de usuário fornecem um ponto de entrada para implementar, em uma sub-rotina externa, relações tensão-deformação que não podem ser representadas pelos modelos de material internos. Há quatro caminhos, de acordo com a estrutura da lei constitutiva interna correspondente: elasticidade linear de usuário, hiperelasticidade de usuário, elastoplasticidade de usuário e lei constitutiva de usuário de uso geral. Em cada caminho, no bloco !MATERIAL dos dados de controle da análise, especifique TYPE=USER ou YIELD=USER na palavra-chave correspondente. Podem ser especificadas até 100 constantes de usuário, que são passadas à sub-rotina.
Elasticidade linear de usuário¶
A elasticidade linear de usuário é o caminho em que o usuário calcula a matriz elástica no contexto de deformações infinitesimais. Quando !ELASTIC, TYPE=USER é especificado nos dados de controle da análise, o FrontISTR trata a implementação como uma lei constitutiva de deformações infinitesimais e chama uElasticMatrix (que retorna a matriz elástica \(D\)) durante o cálculo da rigidez do elemento e uElasticUpdate (que retorna a tensão) durante a atualização de tensões. Não a utilize em conjunto com um modelo hiperelástico ou elastoplástico existente.
Hiperelasticidade de usuário¶
A hiperelasticidade de usuário é o caminho para calcular tensão e rigidez tangente a partir das derivadas de uma função de energia de deformação, no contexto de grandes deformações (Total Lagrange). Especifique !HYPERELASTIC, TYPE=USER nos dados de controle da análise. As sub-rotinas chamadas são as mesmas uElasticMatrix e uElasticUpdate da elasticidade linear de usuário, e o mesmo modelo fistr1/src/lib/user/uelastic.f90 é compartilhado. Como a especificação da palavra-chave determina se o FrontISTR trata a implementação como deformação infinitesimal ou Total Lagrange, o mesmo modelo não pode ser usado simultaneamente para implementações de deformações infinitesimais e grandes deformações. Implemente-o como uma das duas leis constitutivas.
Elastoplasticidade de usuário¶
A elastoplasticidade de usuário é o caminho no qual o usuário implementa a função de escoamento e o procedimento de mapeamento de retorno. Especifique !PLASTIC, YIELD=USER nos dados de controle da análise. Isso seleciona um ramo independente das funções de escoamento internas de Mises, Mohr-Coulomb e Drucker-Prager. uElastoPlasticMatrix (que retorna a rigidez tangente elastoplástica \(D\)) é chamada durante o cálculo da rigidez do elemento, uBackwardEuler (que mapeia a tensão tentativa para a tensão verdadeira e atualiza as variáveis de estado) durante a atualização de tensões, e uElastoPlasticNumStatus (que retorna o número de variáveis de estado reais a manter) durante a inicialização dos pontos de Gauss. Não há suporte para substituir apenas a curva de encruamento por uma implementação do usuário. Mesmo quando somente uma curva de encruamento definida pelo usuário for necessária, use este caminho para substituir toda a lei constitutiva elastoplástica por uma implementação do usuário.
Lei constitutiva de usuário de uso geral¶
A lei constitutiva de usuário de uso geral é um caminho para implementar leis constitutivas que não se enquadram nas estruturas elástica, hiperelástica ou elastoplástica. Especifique !USER_MATERIAL nos dados de controle da análise. Por padrão, ela é tratada no contexto Updated Lagrange; quando KIRCHHOFF é especificado, é tratada como Total Lagrange. O número de variáveis de estado é especificado por NSTATUS. uMatlMatrix (que retorna a rigidez tangente \(D\)) é chamada durante o cálculo da rigidez do elemento, e uUpdate (que atualiza tensões e variáveis de estado) durante a atualização de tensões.
Passagem de constantes de usuário e variáveis de estado¶
Para cada um dos caminhos !ELASTIC, TYPE=USER, !HYPERELASTIC, TYPE=USER e !USER_MATERIAL, as constantes de usuário escritas nas linhas de dados do controle da análise (até 100) são passadas diretamente à sub-rotina pelo argumento matl. Para !PLASTIC, YIELD=USER, são passadas as constantes elásticas especificadas por !ELASTIC e as constantes de usuário fornecidas pelas linhas de dados de !PLASTIC.
Para a lei constitutiva de usuário de uso geral e !PLASTIC, YIELD=USER, informações de histórico da etapa anterior (como deformação plástica, tensão de retorno e dano) podem ser passadas à implementação do usuário pela variável de estado fstat e gravadas novamente ao final da etapa. O número de variáveis de estado é determinado, para a lei constitutiva de usuário de uso geral, por !USER_MATERIAL e seu NSTATUS e, para !PLASTIC, YIELD=USER, pelo valor retornado por uElastoPlasticNumStatus.
Cargas externas definidas pelo usuário¶
As cargas externas definidas pelo usuário fornecem um caminho para definir forças externas que não podem ser representadas pelas cargas concentradas, distribuídas ou de corpo internas. Quando !ULOAD, FILE=<fname> é escrito nos dados de controle da análise, o FrontISTR passa o nome de arquivo especificado para ureadload, e as informações lidas pela implementação do usuário são mantidas como dados de módulo.
As três sub-rotinas a seguir correspondem à chamada de !ULOAD.
ureadload: no início da análise, lê cargas definidas pelo usuário do arquivo externo especificado no arquivo de controle. A implementação do usuário abre o arquivo e armazena os dados necessários em variáveis de módulo.uloading: é chamada durante a montagem do vetor de cargas externas de cada etapa e adiciona a carga do usuário ao vetor global de cargas. O número da etapa atual e o fator de carga são passados como argumentos.uResidual: é chamada durante a montagem do vetor de resíduos em cada iteração e adiciona a contribuição da carga do usuário ao vetor global de resíduos. É chamada tanto nas iterações não lineares quanto nos cálculos de equilíbrio.
Não é fornecido ponto de extensão para condições de contorno de usuário (extensões de usuário para deslocamento prescrito ou condições de contato). Se for necessária uma extensão de usuário que não seja uma força externa, utilize a palavra-chave interna correspondente ou um caminho de lei constitutiva de usuário.
Procedimento para implementar sub-rotinas de usuário¶
Para usar uma sub-rotina de usuário, edite o arquivo de modelo incluído na distribuição do código-fonte do FrontISTR e, em seguida, recompile o FrontISTR. As sub-rotinas de usuário não podem ser substituídas nos binários distribuídos; portanto, o uso de uma extensão de usuário requer um ambiente no qual o FrontISTR possa ser compilado a partir do código-fonte.
Os modelos de sub-rotinas de usuário estão localizados em fistr1/src/lib/user/, com um arquivo específico a editar para cada categoria de extensão (consulte a tabela em Visão geral das funções para os nomes dos arquivos). Em seu estado inicial, os arquivos contêm corpos de sub-rotina vazios ou uma implementação de exemplo de elasticidade linear; o usuário adiciona sua própria lei constitutiva ou definição de carga. Após editar o modelo, recompile o FrontISTR normalmente com CMake e execute a análise com o executável fistr1 resultante.
Detalhes como o significado dos argumentos das sub-rotinas, o tratamento dos vetores de variáveis de estado e as precauções durante a recompilação são fornecidos nas páginas correspondentes do guia de programação.
- Sub-rotinas de usuário (Visão geral)
- Lei constitutiva de usuário de uso geral
umat.f - Elastoplasticidade de usuário
uyield.f - Carga externa definida pelo usuário
uload.f - Elasticidade linear de usuário e hiperelasticidade de usuário
uelastic.f
Consulte também¶
- Dados de material — opções de leis constitutivas e lista de modelos internos
- Condições de contorno e cargas — condições de contorno e cargas internas
- Sub-rotinas de usuário (Guia de programação) — especificações dos argumentos das sub-rotinas e convenções de implementação
- !USER_MATERIAL — sintaxe da palavra-chave para a lei constitutiva de usuário de uso geral
- !ELASTIC — palavra-chave de elasticidade linear, incluindo
TYPE=USER - !HYPERELASTIC — palavra-chave de hiperelasticidade, incluindo
TYPE=USER - !PLASTIC — palavra-chave de elastoplasticidade, incluindo
YIELD=USER