• Nenhum resultado encontrado

O modelo discreto a ser analisado ´e representado no projeto orientado a obje- tos do n´ucleo num´erico pela interface Model (Figura 5.7). A classe que implementa Model, para representar da forma mais geral poss´ıvel um modelo discreto, ´e cons- titu´ıda por listas de objetos inerentes a este modelo e cont´em m´etodos de acesso e manipula¸c˜ao destas listas.

br.ufmg.dees.insane.model pkg br.ufmg.dees.insane.model pkg ArrayList<ConstitutiveModel> ArrayList<Material> ArrayList<ContinuousPointModel> ArrayList<LoadCombination> ArrayList<Loading> + clean() : void + init() : void + initKeys() : void + notifyObservers() : void + hasChanged() : boolean

+ addObserver(arg0 : java.utilObserver) : void + update() : void - label : String FemModel - analysisModels 1 - shapes 1 - scalarFunctions 1 - nodes 1 - degenerations 1 - globalAnalysisModel 1 - elements 1 - probDriver 1 - loadCombinations 1 - continuousPointModels 1 - constitutiveModels 1 - loadings 1 - materials 1 ProblemDriver ArrayList<Element> AnalysisModel ArrayList<Degeneration> ArrayList<Node>

+ addObserver(arg0 : java.utilObserver) : void + clean() : void + update() : void + init() : void + getConstitutiveModelsList() : ArrayList<ConstitutiveModel> + getMaterialsList() : ArrayList<Material> + getDegenerationsList() : ArrayList<Degeneration> + getShapesList() : ArrayList<Shape> + getContinuousPointModelsList() : ArrayList<ContinuousPointModel> + getAnalysisModelsList() : ArrayList<AnalysisModel> + getNodesList() : ArrayList<Node> + getElementsList() : ArrayList<Element> + getLoadingList() : ArrayList<Loading> + getScalarFunctionsList() : ArrayList<ScalarFunction> + getLoadCombinationsList() : ArrayList<LoadCombination> <<interface>> Model ArrayList<ScalarFunction> ArrayList<Shape> ArrayList<AnalysisModel> java.util.Observable

Figura 5.7: Diagrama de classe para Model.

Model ´e implementada pela classe FemModel, que representa o modelo de ele- mentos finitos propriamente dito. Um objeto FemModel tem listas de n´os, elementos, fun¸c˜oes de forma, carregamentos, combina¸c˜oes de carregamento, fun¸c˜oes escalares, modelos de an´alise, materiais, modelos constitutivos e degenera¸c˜oes (o conceito de degenera¸c˜ao ser´a discutido adiante). Tem ainda dois atributos: um modelo de an´a- lise global do tipo AnalysisModel e um objeto ProblemDriver. FemModel estende tamb´em a classe Observable, pois ´e observada pela persistˆencia.

Juntamente `a interface Model est˜ao implementadas as classes Node, Element e ProblemDriver. A figura 5.8 mostra o diagrama de classe para Node. Esta possui um label e uma cole¸c˜ao de valores do tipo java.util.HashMap que armazena as va- ri´aveis do n´o como, por exemplo, deslocamentos e for¸cas. Al´em de estender a classe

IPoint3d e conseq¨uentemente possuir todos os m´etodos e atributos desta classe, Node tem tamb´em como atributo um objeto deste tipo representando um ponto no espa¸co. Os m´etodos herdados s˜ao sobrecarregados para que acessem diretamente o objeto IPoint3d, e n˜ao os atributos herdados. Por exemplo, o m´etodo getCoords() de Node acessa o objeto do tipo IPoint3d e invoca seu m´etodo getCoords(), obtendo diretamente as coordenadas do ponto no espa¸co que representa o n´o. Este encade- amento permite a reutiliza¸c˜ao do c´odigo e simplifica a manipula¸c˜ao de um objeto Node.

br.ufmg.dees.insane.model.femModel.node

pkg

+ init(dofLabels : PointValues) : void + getCoords() : double[]

+ getNodeValues(key : String) : PointValues - angle : double - nodeLabels : HashMap<String,String> - label : String Node + getCoords() : double[] ElementNode - nodeValues - elementNodeValues - point 0..1 - node 0..1 + distanceSquared(p1 : IPoint3d) : double + distance(p1 : IPoint3d) : double + getCoords() : double[] + getZ() : double + getY() : double + getX() : double - z : double - y : double - x : double IPoint3d HashMap<String,Object> HashMap<String,Object>

Figura 5.8: Diagrama de classe para Node.

Da mesma forma, como especializa¸c˜ao do n´o, a classe ElementNode (Figura 5.8) estende Node e tamb´em possui um objeto Node, al´em de uma cole¸c˜ao de valores do tipo HashMap, que armazena os atributos nodais espec´ıficos de um elemento, como as libera¸c˜oes nas extremidades de elementos de barra. ElementNode sobrecarrega os m´etodos herdados, acessando diretamente os atributos de seu objeto Node. Como

exemplo, seu m´etodo getCoords() invoca o m´etodo getCoords() de seu objeto Node, obtendo, atrav´es do encadeamento, as coordenadas do n´o.

A classe Element representa os elementos finitos e ´e estendida pelas classes ParametricElement e sub-classes, FrameElement e ThinPlateElement, que repre- sentam, respectivamente, os elementos finitos param´etricos, de barras e de placas finas, como mostrado na figura 5.9. Um objeto Element tem como atributos uma lista de ElementNode, que representa sua incidˆencia, uma lista de Degeneration, que representa seus pontos de integra¸c˜ao e sua constitui¸c˜ao geom´etrica e f´ısica, um objeto AnalysisModel, que representa seu modelo de an´alise, um objeto Shape, que representa sua fun¸c˜ao de forma, um objeto ConstitutiveModel, que representa seu modelo constitutivo, e um objeto ProblemDriver, que armazena informa¸c˜oes relativas ao tipo de problema que o elemento modela.

br.ufmg.dees.insane.model.femModel.element

pkg

HashMap<String,Object>

FrameElement

Bar Quadrilateral TriangularThinPlate

ArrayList<ElementNode> Triangular Tetrahedral ParametricElement - analysisModel - shape 1 - problemDriver 1 - constitutiveModel 1 - degenerations 1 - incidence 1 - elementValues 1 ArrayList<Degeneration> Hexahedral ThinPlateElement

+ getNaturalCoords(aPoint : IPoint3d) : IPoint3d + getElementValues() : HashMap<String,Object> + getStateVariables() : double[] + getElmCoefficient() : double + getIncrementalC() : IMatrix + getIncrementalB() : IMatrix + getIncrementalA() : IMatrix + getF() : IVector + getE() : IVector + getC() : IMatrix + getB() : IMatrix + getA() : IMatrix + init() : void + update() : void

+ extrapolatesToNodes(a : ArrayList<INaturalCoords>, d : ArrayList<Double>) : IVector

- label : String Element ConstitutiveModel ProblemDriver Shape AnalysisModel 1

Figura 5.9: Diagrama de classe para Element.

A classe ParametricElement possui, al´em dos atributos de Element, um objeto IntegrationOrder que representa a sua ordem para integra¸c˜ao num´erica. O valor de IntegrationOrder ´e, por default, automaticamente preenchido pela fun¸c˜ao de

forma do elemento, mas pode ser sobrescrito pelo usu´ario (o que permite a utiliza- ¸c˜ao de ordens de integra¸c˜ao reduzidas). Na hierarquia da classe ParametricEle- ment est˜ao as classes que representam os elementos finitos param´etricos, separadas de acordo com sua geometria: elementos param´etricos unidimensionais, elementos planos triangulares e quadrilaterais, e elementos s´olidos tetra´edricos e hexa´edricos. Estas sub-classes implementam os m´etodos relativos `a integra¸c˜ao num´erica (addDe- generations( Degeneration) e initDegenerations()). A classe ThinPlateElement, necess´aria para formula¸c˜oes com integra¸c˜ao anal´ıtica, ´e estendida por Triangu- larThinPlate, que representa os elementos finitos de placa fina triangulares.

br.ufmg.dees.insane.model.femModel.problemDriver pkg SolidMech KirchhoffThinPlate FluidFlow FieldProblem PhysicallyNonLinear ReissnerMindlinThinPlate + getCoefficientCLabel() : String + getCoefficientBLabel() : String + getCoefficientALabel() : String + getUnknownDualVariableLabel() : String + getInternalDualVariableLabel() : String + getInternalVariableLabel() : String + getIncrementalC(e : Element) : IMatrix + getIncrementalB(e : Element) : IMatrix + getIncrementalA(e : Element) : IMatrix + getF(e : Element) : IVector + getE(e : Element) : IVector + getC(e : Element) : IMatrix + getB(e : Element) : IMatrix + getA(e : Element) : IMatrix ProblemDriver GeometricallyNonLinearUL NonLinearHeatTransfer GeometricallyNonLinearTL Frame RMThinPlateSubstituteShearStrain Parametric

Figura 5.10: Diagrama de classe para ProblemDriver.

A interface ProblemDriver (Figura 5.10) possui os m´etodos necess´arios para informar a Assembler as parcelas de cada elemento na equa¸c˜ao do modelo, sejam elas incrementais ou totais. Em sua hierarquia s˜ao representados diversos tipos de

problemas e formula¸c˜oes de modelos discretos. Desta maneira, a classe Element ´e uma classe bastante geral, independente do problema que representa. Entretanto, todas as informa¸c˜oes solicitadas a um objeto Element s˜ao obtidas atrav´es de con- sulta direta ao objeto ProblemDriver do mesmo. Por exemplo, se a classe Assem- bler solicita a um objeto Element o c´alculo da matriz C na forma incremental (m´etodo getIncrementalC() na figura 5.9), o mesmo repassa a tarefa para o objeto ProblemDrivercorrespondente. Se este objeto for uma instˆancia da classe Geome- tricallyNonLinearTL (Figura 5.10), a matriz de rigidez incremental da formula¸c˜ao correspondente ser´a calculada.

Documentos relacionados