1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: $RCSfile: itkFEMElement3DMembraneTest.cxx,v $
Language: C++
Date: $Date: 2003-12-12 14:58:00 $
Version: $Revision: 1.4 $
Copyright (c) Insight Software Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
// disable debug warnings in MS compiler
#ifdef _MSC_VER
#pragma warning(disable: 4786)
#endif
#include "itkFEMElement3DC0LinearHexahedronMembrane.h"
#include "itkFEMElementBase.h"
#include <iostream>
//
int itkFEMElement3DMembraneTest(int, char *[])
{
typedef itk::fem::Node NodeType;
typedef itk::fem::Element ElementType;
NodeType::Pointer n0,n1,n2,n3,n4,n5,n6,n7;
ElementType::VectorType pt(3);
n0=NodeType::New();
pt[0]=0.;
pt[1]=0.;
pt[2]=0.;
n0->SetCoordinates(pt);
n1=NodeType::New();
pt[0]=1.;
pt[1]=0.;
pt[2]=0.;
n1->SetCoordinates(pt);
n2=NodeType::New();
pt[0]=1.;
pt[1]=1.;
pt[2]=0.;
n2->SetCoordinates(pt);
n3=NodeType::New();
pt[0]=0.;
pt[1]=1.;
pt[2]=0.;
n3->SetCoordinates(pt);
n4=NodeType::New();
pt[0]=0.;
pt[1]=0.;
pt[2]=1.;
n4->SetCoordinates(pt);
n5=NodeType::New();
pt[0]=1.;
pt[1]=0.;
pt[2]=1.;
n5->SetCoordinates(pt);
n6=NodeType::New();
pt[0]=1.;
pt[1]=1.;
pt[2]=1.;
n6->SetCoordinates(pt);
n7=NodeType::New();
pt[0]=0.;
pt[1]=1.;
pt[2]=1.;
n7->SetCoordinates(pt);
typedef itk::fem::MaterialLinearElasticity ElasticityType;
ElasticityType::Pointer m = ElasticityType::New();
m->GN=0;
m->E=10000.0;
m->A=0.02;
m->I=0.004;
m->nu=0.4;
typedef itk::fem::Element3DC0LinearHexahedronMembrane ElementMembraneType;
ElementMembraneType::Pointer e0 = ElementMembraneType::New();
e0->GN=0;
e0->SetNode(0, &*n0);
e0->SetNode(1, &*n1);
e0->SetNode(2, &*n2);
e0->SetNode(3, &*n3);
e0->SetNode(4, &*n4);
e0->SetNode(5, &*n5);
e0->SetNode(6, &*n6);
e0->SetNode(7, &*n7);
e0->m_mat=dynamic_cast< ElasticityType * >(&*m);
ElementType::MatrixType D, Me;
e0->GetMassMatrix(Me);
e0->GetMaterialMatrix(D);
std::cout << "Mass matrix: " << std::endl << Me << std::endl;
std::cout << "Material matrix: " << std::endl << D << std::endl;
std::cout << "#dof per node = " << e0->GetNumberOfDegreesOfFreedomPerNode() << std::endl;
#ifndef FEM_USE_SMART_POINTERS
delete e0;
delete m;
delete n0;
delete n1;
delete n2;
delete n3;
delete n4;
delete n5;
delete n6;
delete n7;
#endif
std::cout << "Test PASSED!" << std::endl;;
return EXIT_SUCCESS;
}
|