diff --git a/src/element.f90 b/src/element.f90 index 3a1e3f5a3..6d8702832 100644 --- a/src/element.f90 +++ b/src/element.f90 @@ -22,6 +22,8 @@ module element NcellnodesPerCell, & nIPs, & nIPneighbors + character(len=:), allocatable :: & + vtkType integer, dimension(:,:), allocatable :: & Cell, & !< intra-element (cell) nodes that constitute a cell IPneighbor, & @@ -36,10 +38,10 @@ module element end type tElement - integer, parameter, private :: & + integer, parameter :: & NELEMTYPE = 13 - integer, dimension(NELEMTYPE), parameter, private :: NNODE = & + integer, dimension(NELEMTYPE), parameter :: NNODE = & [ & 3, & ! 2D 3node 1ip 6, & ! 2D 6node 3ip @@ -57,7 +59,7 @@ module element 20 & ! 3D 20node 27ip ] !< number of nodes that constitute a specific type of element - integer, dimension(NELEMTYPE), parameter, public :: GEOMTYPE = & + integer, dimension(NELEMTYPE), parameter :: GEOMTYPE = & [ & 1, & 2, & @@ -74,7 +76,7 @@ module element 10 & ] !< geometry type of particular element type - integer, dimension(maxval(GEOMTYPE)), parameter, private :: NCELLNODE = & + integer, dimension(maxval(GEOMTYPE)), parameter :: NCELLNODE = & [ & 3, & 7, & @@ -88,7 +90,7 @@ module element 64 & ] !< number of cell nodes in a specific geometry type - integer, dimension(maxval(GEOMTYPE)), parameter, private :: NIP = & + integer, dimension(maxval(GEOMTYPE)), parameter :: NIP = & [ & 1, & 3, & @@ -102,7 +104,7 @@ module element 27 & ] !< number of IPs in a specific geometry type - integer, dimension(maxval(GEOMTYPE)), parameter, private :: CELLTYPE = & + integer, dimension(maxval(GEOMTYPE)), parameter :: CELLTYPE = & [ & 1, & ! 2D 3node 2, & ! 2D 4node @@ -116,7 +118,7 @@ module element 4 & ! 3D 8node ] !< cell type that is used by each geometry type - integer, dimension(maxval(CELLTYPE)), parameter, private :: NIPNEIGHBOR = & + integer, dimension(maxval(CELLTYPE)), parameter :: NIPNEIGHBOR = & [ & 3, & ! 2D 3node 4, & ! 2D 4node @@ -124,7 +126,7 @@ module element 6 & ! 3D 8node ] !< number of ip neighbors / cell faces in a specific cell type - integer, dimension(maxval(CELLTYPE)), parameter, private :: NCELLNODEPERCELLFACE = & + integer, dimension(maxval(CELLTYPE)), parameter :: NCELLNODEPERCELLFACE = & [ & 2, & ! 2D 3node 2, & ! 2D 4node @@ -132,7 +134,7 @@ module element 4 & ! 3D 8node ] !< number of cell nodes in a specific cell type - integer, dimension(maxval(CELLTYPE)), parameter, private :: NCELLNODEPERCELL = & + integer, dimension(maxval(CELLTYPE)), parameter :: NCELLNODEPERCELL = & [ & 3, & ! 2D 3node 4, & ! 2D 4node @@ -146,27 +148,27 @@ module element ! Positive integers denote an intra-element IP identifier. ! Negative integers denote the interface behind which the neighboring (extra-element) IP will be located. - integer, dimension(nIPneighbor(cellType(1)),nIP(1)), parameter, private :: IPneighbor1 = & + integer, dimension(NIPNEIGHBOR(CELLTYPE(1)),NIP(1)), parameter :: IPNEIGHBOR1 = & reshape([& -2,-3,-1 & - ],[nIPneighbor(cellType(1)),nIP(1)]) + ],shape(IPNEIGHBOR1)) - integer, dimension(nIPneighbor(cellType(2)),nIP(2)), parameter, private :: IPneighbor2 = & + integer, dimension(NIPNEIGHBOR(CELLTYPE(2)),NIP(2)), parameter :: IPNEIGHBOR2 = & reshape([& 2,-3, 3,-1, & -2, 1, 3,-1, & 2,-3,-2, 1 & - ],[nIPneighbor(cellType(2)),nIP(2)]) + ],shape(IPNEIGHBOR2)) - integer, dimension(nIPneighbor(cellType(3)),nIP(3)), parameter, private :: IPneighbor3 = & + integer, dimension(NIPNEIGHBOR(CELLTYPE(3)),NIP(3)), parameter :: IPNEIGHBOR3 = & reshape([& 2,-4, 3,-1, & -2, 1, 4,-1, & 4,-4,-3, 1, & -2, 3,-3, 2 & - ],[nIPneighbor(cellType(3)),nIP(3)]) + ],shape(IPNEIGHBOR3)) - integer, dimension(nIPneighbor(cellType(4)),nIP(4)), parameter, private :: IPneighbor4 = & + integer, dimension(NIPNEIGHBOR(CELLTYPE(4)),NIP(4)), parameter :: IPNEIGHBOR4 = & reshape([& 2,-4, 4,-1, & 3, 1, 5,-1, & @@ -177,22 +179,22 @@ module element 8,-4,-3, 4, & 9, 7,-3, 5, & -2, 8,-3, 6 & - ],[nIPneighbor(cellType(4)),nIP(4)]) + ],shape(IPNEIGHBOR4)) - integer, dimension(nIPneighbor(cellType(5)),nIP(5)), parameter, private :: IPneighbor5 = & + integer, dimension(NIPNEIGHBOR(CELLTYPE(5)),NIP(5)), parameter :: IPNEIGHBOR5 = & reshape([& -1,-2,-3,-4 & - ],[nIPneighbor(cellType(5)),nIP(5)]) + ],shape(IPNEIGHBOR5)) - integer, dimension(nIPneighbor(cellType(6)),nIP(6)), parameter, private :: IPneighbor6 = & + integer, dimension(NIPNEIGHBOR(CELLTYPE(6)),NIP(6)), parameter :: IPNEIGHBOR6 = & reshape([& 2,-4, 3,-2, 4,-1, & -2, 1, 3,-2, 4,-1, & 2,-4,-3, 1, 4,-1, & 2,-4, 3,-2,-3, 1 & - ],[nIPneighbor(cellType(6)),nIP(6)]) + ],shape(IPNEIGHBOR6)) - integer, dimension(nIPneighbor(cellType(7)),nIP(7)), parameter, private :: IPneighbor7 = & + integer, dimension(NIPNEIGHBOR(CELLTYPE(7)),NIP(7)), parameter :: IPNEIGHBOR7 = & reshape([& 2,-4, 3,-2, 4,-1, & -3, 1, 3,-2, 5,-1, & @@ -200,14 +202,14 @@ module element 5,-4, 6,-2,-5, 1, & -3, 4, 6,-2,-5, 2, & 5,-4,-3, 4,-5, 3 & - ],[nIPneighbor(cellType(7)),nIP(7)]) + ],shape(IPNEIGHBOR7)) - integer, dimension(nIPneighbor(cellType(8)),nIP(8)), parameter, private :: IPneighbor8 = & + integer, dimension(NIPNEIGHBOR(CELLTYPE(8)),NIP(8)), parameter :: IPNEIGHBOR8 = & reshape([& -3,-5,-4,-2,-6,-1 & - ],[nIPneighbor(cellType(8)),nIP(8)]) + ],shape(IPNEIGHBOR8)) - integer, dimension(nIPneighbor(cellType(9)),nIP(9)), parameter, private :: IPneighbor9 = & + integer, dimension(NIPNEIGHBOR(CELLTYPE(9)),NIP(9)), parameter :: IPNEIGHBOR9 = & reshape([& 2,-5, 3,-2, 5,-1, & -3, 1, 4,-2, 6,-1, & @@ -217,9 +219,9 @@ module element -3, 5, 8,-2,-6, 2, & 8,-5,-4, 5,-6, 3, & -3, 7,-4, 6,-6, 4 & - ],[nIPneighbor(cellType(9)),nIP(9)]) + ],shape(IPNEIGHBOR9)) - integer, dimension(nIPneighbor(cellType(10)),nIP(10)), parameter, private :: IPneighbor10 = & + integer, dimension(NIPNEIGHBOR(CELLTYPE(10)),NIP(10)), parameter :: IPNEIGHBOR10 = & reshape([& 2,-5, 4,-2,10,-1, & 3, 1, 5,-2,11,-1, & @@ -248,17 +250,17 @@ module element 26,-5,-4,22,-6,16, & 27,25,-4,23,-6,17, & -3,26,-4,24,-6,18 & - ],[nIPneighbor(cellType(10)),nIP(10)]) + ],shape(IPNEIGHBOR10)) - integer, dimension(nNode(1),NcellNode(geomType(1))), parameter :: cellNodeParentNodeWeights1 = & + integer, dimension(NNODE(1),NCELLNODE(GEOMTYPE(1))), parameter :: CELLNODEPARENTNODEWEIGHTS1 = & reshape([& 1, 0, 0, & 0, 1, 0, & 0, 0, 1 & - ],[nNode(1),NcellNode(geomType(1))]) !< 2D 3node 1ip + ],shape(CELLNODEPARENTNODEWEIGHTS1)) !< 2D 3node 1ip - integer, dimension(nNode(2),NcellNode(geomType(2))), parameter :: cellNodeParentNodeWeights2 = & + integer, dimension(NNODE(2),NCELLNODE(GEOMTYPE(2))), parameter :: CELLNODEPARENTNODEWEIGHTS2 = & reshape([& 1, 0, 0, 0, 0, 0, & 0, 1, 0, 0, 0, 0, & @@ -267,9 +269,9 @@ module element 0, 0, 0, 0, 1, 0, & 0, 0, 0, 0, 0, 1, & 1, 1, 1, 2, 2, 2 & - ],[nNode(2),NcellNode(geomType(2))]) !< 2D 6node 3ip + ],shape(CELLNODEPARENTNODEWEIGHTS2)) !< 2D 6node 3ip - integer, dimension(nNode(3),NcellNode(geomType(3))), parameter :: cellNodeParentNodeWeights3 = & + integer, dimension(NNODE(3),NCELLNODE(GEOMTYPE(3))), parameter :: CELLNODEPARENTNODEWEIGHTS3 = & reshape([& 1, 0, 0, 0, & 0, 1, 0, 0, & @@ -280,9 +282,9 @@ module element 0, 0, 1, 1, & 1, 0, 0, 1, & 1, 1, 1, 1 & - ],[nNode(3),NcellNode(geomType(3))]) !< 2D 6node 3ip + ],shape(CELLNODEPARENTNODEWEIGHTS3)) !< 2D 6node 3ip - integer, dimension(nNode(4),NcellNode(geomType(4))), parameter :: cellNodeParentNodeWeights4 = & + integer, dimension(NNODE(4),NCELLNODE(GEOMTYPE(4))), parameter :: CELLNODEPARENTNODEWEIGHTS4 = & reshape([& 1, 0, 0, 0, 0, 0, 0, 0, & 0, 1, 0, 0, 0, 0, 0, 0, & @@ -300,9 +302,9 @@ module element 1, 4, 1, 1, 8, 8, 2, 2, & 1, 1, 4, 1, 2, 8, 8, 2, & 1, 1, 1, 4, 2, 2, 8, 8 & - ],[nNode(4),NcellNode(geomType(4))]) !< 2D 8node 9ip + ],shape(CELLNODEPARENTNODEWEIGHTS4)) !< 2D 8node 9ip - integer, dimension(nNode(5),NcellNode(geomType(5))), parameter :: cellNodeParentNodeWeights5 = & + integer, dimension(NNODE(5),NCELLNODE(GEOMTYPE(5))), parameter :: CELLNODEPARENTNODEWEIGHTS5 = & reshape([& 1, 0, 0, 0, 0, 0, 0, 0, & 0, 1, 0, 0, 0, 0, 0, 0, & @@ -313,17 +315,17 @@ module element 0, 0, 0, 0, 0, 0, 1, 0, & 0, 0, 0, 0, 0, 0, 0, 1, & 1, 1, 1, 1, 2, 2, 2, 2 & - ],[nNode(5),NcellNode(geomType(5))]) !< 2D 8node 4ip + ],shape(CELLNODEPARENTNODEWEIGHTS5)) !< 2D 8node 4ip - integer, dimension(nNode(6),NcellNode(geomType(6))), parameter :: cellNodeParentNodeWeights6 = & + integer, dimension(NNODE(6),NcellNode(GEOMTYPE(6))), parameter :: CELLNODEPARENTNODEWEIGHTS6 = & reshape([& 1, 0, 0, 0, & 0, 1, 0, 0, & 0, 0, 1, 0, & 0, 0, 0, 1 & - ],[nNode(6),NcellNode(geomType(6))]) !< 3D 4node 1ip + ],shape(CELLNODEPARENTNODEWEIGHTS6)) !< 3D 4node 1ip - integer, dimension(nNode(7),NcellNode(geomType(7))), parameter :: cellNodeParentNodeWeights7 = & + integer, dimension(NNODE(7),NCELLNODE(GEOMTYPE(7))), parameter :: CELLNODEPARENTNODEWEIGHTS7 = & reshape([& 1, 0, 0, 0, 0, & 0, 1, 0, 0, 0, & @@ -340,9 +342,9 @@ module element 0, 1, 1, 1, 0, & 1, 0, 1, 1, 0, & 0, 0, 0, 0, 1 & - ],[nNode(7),NcellNode(geomType(7))]) !< 3D 5node 4ip + ],shape(CELLNODEPARENTNODEWEIGHTS7)) !< 3D 5node 4ip - integer, dimension(nNode(8),NcellNode(geomType(8))), parameter :: cellNodeParentNodeWeights8 = & + integer, dimension(NNODE(8),NCELLNODE(GEOMTYPE(8))), parameter :: CELLNODEPARENTNODEWEIGHTS8 = & reshape([& 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, & 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, & @@ -359,9 +361,9 @@ module element 0, 1, 1, 1, 0, 2, 0, 0, 2, 2, & 1, 0, 1, 1, 0, 0, 2, 2, 0, 2, & 3, 3, 3, 3, 4, 4, 4, 4, 4, 4 & - ],[nNode(8),NcellNode(geomType(8))]) !< 3D 10node 4ip + ],shape(CELLNODEPARENTNODEWEIGHTS8)) !< 3D 10node 4ip - integer, dimension(nNode(9),NcellNode(geomType(9))), parameter :: cellNodeParentNodeWeights9 = & + integer, dimension(NNODE(9),NCELLNODE(GEOMTYPE(9))), parameter :: CELLNODEPARENTNODEWEIGHTS9 = & reshape([& 1, 0, 0, 0, 0, 0, & 0, 1, 0, 0, 0, 0, & @@ -384,9 +386,9 @@ module element 1, 0, 1, 1, 0, 1, & 0, 0, 0, 1, 1, 1, & 1, 1, 1, 1, 1, 1 & - ],[nNode(9),NcellNode(geomType(9))]) !< 3D 6node 6ip + ],shape(CELLNODEPARENTNODEWEIGHTS9)) !< 3D 6node 6ip - integer, dimension(nNode(10),NcellNode(geomType(10))), parameter :: cellNodeParentNodeWeights10 = & + integer, dimension(NNODE(10),NCELLNODE(GEOMTYPE(10))), parameter :: CELLNODEPARENTNODEWEIGHTS10 = & reshape([& 1, 0, 0, 0, 0, 0, 0, 0, & 0, 1, 0, 0, 0, 0, 0, 0, & @@ -396,9 +398,9 @@ module element 0, 0, 0, 0, 0, 1, 0, 0, & 0, 0, 0, 0, 0, 0, 1, 0, & 0, 0, 0, 0, 0, 0, 0, 1 & - ],[nNode(10),NcellNode(geomType(10))]) !< 3D 8node 1ip + ],shape(CELLNODEPARENTNODEWEIGHTS10)) !< 3D 8node 1ip - integer, dimension(nNode(11),NcellNode(geomType(11))), parameter :: cellNodeParentNodeWeights11 = & + integer, dimension(NNODE(11),NCELLNODE(GEOMTYPE(11))), parameter :: CELLNODEPARENTNODEWEIGHTS11 = & reshape([& 1, 0, 0, 0, 0, 0, 0, 0, & ! 0, 1, 0, 0, 0, 0, 0, 0, & ! @@ -427,9 +429,9 @@ module element 1, 0, 0, 1, 1, 0, 0, 1, & ! 25 0, 0, 0, 0, 1, 1, 1, 1, & ! 1, 1, 1, 1, 1, 1, 1, 1 & ! - ],[nNode(11),NcellNode(geomType(11))]) !< 3D 8node 8ip + ],shape(CELLNODEPARENTNODEWEIGHTS11)) !< 3D 8node 8ip - integer, dimension(nNode(12),NcellNode(geomType(12))), parameter :: cellNodeParentNodeWeights12 = & + integer, dimension(NNODE(12),NCELLNODE(GEOMTYPE(12))), parameter :: CELLNODEPARENTNODEWEIGHTS12 = & reshape([& 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & ! 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & ! @@ -458,9 +460,9 @@ module element 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 2, 2, 0, 0, 2, & ! 25 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 2, 2, 2, 2, 0, 0, 0, 0, & ! 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 & ! - ],[nNode(12),NcellNode(geomType(12))]) !< 3D 20node 8ip + ],shape(CELLNODEPARENTNODEWEIGHTS12)) !< 3D 20node 8ip - integer, dimension(nNode(13),NcellNode(geomType(13))), parameter :: cellNodeParentNodeWeights13 = & + integer, dimension(NNODE(13),NCELLNODE(GEOMTYPE(13))), parameter :: CELLNODEPARENTNODEWEIGHTS13 = & reshape([& 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & ! 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & ! @@ -526,30 +528,30 @@ module element 4, 8, 4, 3, 8,24, 8, 4, 12,12, 4, 4, 32,32,12,12, 12,32,12, 4, & ! 3, 4, 8, 4, 4, 8,24, 8, 4,12,12, 4, 12,32,32,12, 4,12,32,12, & ! 4, 3, 4, 8, 8, 4, 8,24, 4, 4,12,12, 12,12,32,32, 12, 4,12,32 & ! - ],[nNode(13),NcellNode(geomType(13))]) !< 3D 20node 27ip + ],shape(CELLNODEPARENTNODEWEIGHTS13)) !< 3D 20node 27ip - integer, dimension(NCELLNODEPERCELL(CELLTYPE(1)),NIP(1)), parameter :: CELL1 = & + integer, dimension(NCELLNODEPERCELL(CELLTYPE(1)),NIP(1)), parameter :: CELL1 = & reshape([& 1,2,3 & - ],[NCELLNODEPERCELL(CELLTYPE(1)),NIP(1)]) + ],shape(CELL1)) - integer, dimension(NCELLNODEPERCELL(CELLTYPE(2)),NIP(2)), parameter :: CELL2 = & + integer, dimension(NCELLNODEPERCELL(CELLTYPE(2)),NIP(2)), parameter :: CELL2 = & reshape([& 1, 4, 7, 6, & 2, 5, 7, 4, & 3, 6, 7, 5 & - ],[NCELLNODEPERCELL(CELLTYPE(2)),NIP(2)]) + ],shape(CELL2)) - integer, dimension(NCELLNODEPERCELL(CELLTYPE(3)),NIP(3)), parameter :: CELL3 = & + integer, dimension(NCELLNODEPERCELL(CELLTYPE(3)),NIP(3)), parameter :: CELL3 = & reshape([& 1, 5, 9, 8, & 5, 2, 6, 9, & 8, 9, 7, 4, & 9, 6, 3, 7 & - ],[NCELLNODEPERCELL(CELLTYPE(3)),NIP(3)]) + ],shape(CELL3)) - integer, dimension(NCELLNODEPERCELL(CELLTYPE(4)),NIP(4)), parameter :: CELL4 = & + integer, dimension(NCELLNODEPERCELL(CELLTYPE(4)),NIP(4)), parameter :: CELL4 = & reshape([& 1, 5,13,12, & 5, 6,14,13, & @@ -560,22 +562,22 @@ module element 11,16,10, 4, & 16,15, 9,10, & 15, 8, 3, 9 & - ],[NCELLNODEPERCELL(CELLTYPE(4)),NIP(4)]) + ],shape(CELL4)) - integer, dimension(NCELLNODEPERCELL(CELLTYPE(5)),NIP(5)), parameter :: CELL5 = & + integer, dimension(NCELLNODEPERCELL(CELLTYPE(5)),NIP(5)), parameter :: CELL5 = & reshape([& 1, 2, 3, 4 & - ],[NCELLNODEPERCELL(CELLTYPE(5)),NIP(5)]) + ],shape(CELL5)) - integer, dimension(NCELLNODEPERCELL(CELLTYPE(6)),NIP(6)), parameter :: CELL6 = & + integer, dimension(NCELLNODEPERCELL(CELLTYPE(6)),NIP(6)), parameter :: CELL6 = & reshape([& 1, 5,11, 7, 8,12,15,14, & 5, 2, 6,11,12, 9,13,15, & 7,11, 6, 3,14,15,13,10, & 8,12,15, 4, 4, 9,13,10 & - ],[NCELLNODEPERCELL(CELLTYPE(6)),NIP(6)]) + ],shape(CELL6)) - integer, dimension(NCELLNODEPERCELL(CELLTYPE(7)),NIP(7)), parameter :: CELL7 = & + integer, dimension(NCELLNODEPERCELL(CELLTYPE(7)),NIP(7)), parameter :: CELL7 = & reshape([& 1, 7,16, 9,10,17,21,19, & 7, 2, 8,16,17,11,18,21, & @@ -583,14 +585,14 @@ module element 10,17,21,19, 4,13,20,15, & 17,11,18,21,13, 5,14,20, & 19,21,18,12,15,20,14, 6 & - ],[NCELLNODEPERCELL(CELLTYPE(7)),NIP(7)]) + ],shape(CELL7)) - integer, dimension(NCELLNODEPERCELL(CELLTYPE(8)),NIP(8)), parameter :: CELL8 = & + integer, dimension(NCELLNODEPERCELL(CELLTYPE(8)),NIP(8)), parameter :: CELL8 = & reshape([& 1, 2, 3, 4, 5, 6, 7, 8 & - ],[NCELLNODEPERCELL(CELLTYPE(8)),NIP(8)]) + ],shape(CELL8)) - integer, dimension(NCELLNODEPERCELL(CELLTYPE(9)),NIP(9)), parameter :: CELL9 = & + integer, dimension(NCELLNODEPERCELL(CELLTYPE(9)),NIP(9)), parameter :: CELL9 = & reshape([& 1, 9,21,12,13,22,27,25, & 9, 2,10,21,22,14,23,27, & @@ -600,7 +602,7 @@ module element 22,14,23,27,17, 6,18,26, & 25,27,24,16,20,26,19, 8, & 27,23,15,24,26,18, 7,19 & - ],[NCELLNODEPERCELL(CELLTYPE(9)),NIP(9)]) + ],shape(CELL9)) integer, dimension(NCELLNODEPERCELL(CELLTYPE(10)),NIP(10)), parameter :: CELL10 = & reshape([& @@ -631,7 +633,7 @@ module element 51,64,50,24,31,56,30, 8, & 64,63,49,50,56,55,29,30, & 63,48,23,49,55,28, 7,29 & - ],[NCELLNODEPERCELL(CELLTYPE(10)),NIP(10)]) + ],shape(CELL10)) integer, dimension(NCELLNODEPERCELLFACE(1),NIPNEIGHBOR(1)), parameter :: CELLFACE1 = & @@ -639,7 +641,7 @@ module element 2,3, & 3,1, & 1,2 & - ],[NCELLNODEPERCELLFACE(1),NIPNEIGHBOR(1)]) !< 2D 3node, VTK_TRIANGLE (5) + ],shape(CELLFACE1)) !< 2D 3node, VTK_TRIANGLE (5) integer, dimension(NCELLNODEPERCELLFACE(2),NIPNEIGHBOR(2)), parameter :: CELLFACE2 = & reshape([& @@ -647,7 +649,7 @@ module element 4,1, & 3,4, & 1,2 & - ],[NCELLNODEPERCELLFACE(2),NIPNEIGHBOR(2)]) !< 2D 4node, VTK_QUAD (9) + ],shape(CELLFACE2)) !< 2D 4node, VTK_QUAD (9) integer, dimension(NCELLNODEPERCELLFACE(3),NIPNEIGHBOR(3)), parameter :: CELLFACE3 = & reshape([& @@ -655,7 +657,7 @@ module element 1,2,4, & 2,3,4, & 1,4,3 & - ],[NCELLNODEPERCELLFACE(3),NIPNEIGHBOR(3)]) !< 3D 4node, VTK_TETRA (10) + ],shape(CELLFACE3)) !< 3D 4node, VTK_TETRA (10) integer, dimension(NCELLNODEPERCELLFACE(4),NIPNEIGHBOR(4)), parameter :: CELLFACE4 = & reshape([& @@ -665,114 +667,124 @@ module element 1,2,6,5, & 5,6,7,8, & 1,4,3,2 & - ],[NCELLNODEPERCELLFACE(4),NIPNEIGHBOR(4)]) !< 3D 8node, VTK_HEXAHEDRON (12) + ],shape(CELLFACE4)) !< 3D 8node, VTK_HEXAHEDRON (12) contains + +!--------------------------------------------------------------------------------------------------- +!> define properties of an element +!--------------------------------------------------------------------------------------------------- subroutine tElement_init(self,elemType) - class(tElement) :: self - integer, intent(in) :: elemType - self%elemType = elemType - - self%Nnodes = Nnode (self%elemType) - self%geomType = geomType (self%elemType) - select case (self%elemType) - case(1) - self%cellNodeParentNodeWeights = cellNodeParentNodeWeights1 - case(2) - self%cellNodeParentNodeWeights = cellNodeParentNodeWeights2 - case(3) - self%cellNodeParentNodeWeights = cellNodeParentNodeWeights3 - case(4) - self%cellNodeParentNodeWeights = cellNodeParentNodeWeights4 - case(5) - self%cellNodeParentNodeWeights = cellNodeParentNodeWeights5 - case(6) - self%cellNodeParentNodeWeights = cellNodeParentNodeWeights6 - case(7) - self%cellNodeParentNodeWeights = cellNodeParentNodeWeights7 - case(8) - self%cellNodeParentNodeWeights = cellNodeParentNodeWeights8 - case(9) - self%cellNodeParentNodeWeights = cellNodeParentNodeWeights9 - case(10) - self%cellNodeParentNodeWeights = cellNodeParentNodeWeights10 - case(11) - self%cellNodeParentNodeWeights = cellNodeParentNodeWeights11 - case(12) - self%cellNodeParentNodeWeights = cellNodeParentNodeWeights12 - case(13) - self%cellNodeParentNodeWeights = cellNodeParentNodeWeights13 - case default - call IO_error(0,ext_msg='invalid element type') - end select - - - self%NcellNodes = NcellNode (self%geomType) - self%nIPs = nIP (self%geomType) - self%cellType = cellType (self%geomType) - - select case (self%geomType) - case(1) - self%IPneighbor = IPneighbor1 - self%cell = CELL1 - case(2) - self%IPneighbor = IPneighbor2 - self%cell = CELL2 - case(3) - self%IPneighbor = IPneighbor3 - self%cell = CELL3 - case(4) - self%IPneighbor = IPneighbor4 - self%cell = CELL4 - case(5) - self%IPneighbor = IPneighbor5 - self%cell = CELL5 - case(6) - self%IPneighbor = IPneighbor6 - self%cell = CELL6 - case(7) - self%IPneighbor = IPneighbor7 - self%cell = CELL7 - case(8) - self%IPneighbor = IPneighbor8 - self%cell = CELL8 - case(9) - self%IPneighbor = IPneighbor9 - self%cell = CELL9 - case(10) - self%IPneighbor = IPneighbor10 - self%cell = CELL10 - end select - - self%NcellnodesPerCell = NCELLNODEPERCELL(self%cellType) + class(tElement) :: self + integer, intent(in) :: elemType - select case(self%cellType) - case(1) - self%cellFace = CELLFACE1 - case(2) - self%cellFace = CELLFACE2 - case(3) - self%cellFace = CELLFACE3 - case(4) - self%cellFace = CELLFACE4 - end select - - self%nIPneighbors = size(self%IPneighbor,1) - - write(6,'(/,a)') ' <<<+- element_init -+>>>' - - write(6,*) ' element type: ',self%elemType - write(6,*) ' geom type: ',self%geomType - write(6,*) ' cell type: ',self%cellType - write(6,*) ' # node: ',self%Nnodes - write(6,*) ' # IP: ',self%nIPs - write(6,*) ' # cellnode: ',self%Ncellnodes - write(6,*) ' # cellnode/cell: ',self%NcellnodesPerCell - write(6,*) ' # IP neighbor: ',self%nIPneighbors - + self%elemType = elemType + + self%Nnodes = NNODE (self%elemType) + self%geomType = GEOMTYPE(self%elemType) + + select case (self%elemType) + case(1) + self%cellNodeParentNodeWeights = CELLNODEPARENTNODEWEIGHTS1 + case(2) + self%cellNodeParentNodeWeights = CELLNODEPARENTNODEWEIGHTS2 + case(3) + self%cellNodeParentNodeWeights = CELLNODEPARENTNODEWEIGHTS3 + case(4) + self%cellNodeParentNodeWeights = CELLNODEPARENTNODEWEIGHTS4 + case(5) + self%cellNodeParentNodeWeights = CELLNODEPARENTNODEWEIGHTS5 + case(6) + self%cellNodeParentNodeWeights = CELLNODEPARENTNODEWEIGHTS6 + case(7) + self%cellNodeParentNodeWeights = CELLNODEPARENTNODEWEIGHTS7 + case(8) + self%cellNodeParentNodeWeights = CELLNODEPARENTNODEWEIGHTS8 + case(9) + self%cellNodeParentNodeWeights = CELLNODEPARENTNODEWEIGHTS9 + case(10) + self%cellNodeParentNodeWeights = CELLNODEPARENTNODEWEIGHTS10 + case(11) + self%cellNodeParentNodeWeights = CELLNODEPARENTNODEWEIGHTS11 + case(12) + self%cellNodeParentNodeWeights = CELLNODEPARENTNODEWEIGHTS12 + case(13) + self%cellNodeParentNodeWeights = CELLNODEPARENTNODEWEIGHTS13 + case default + call IO_error(0,ext_msg='invalid element type') + end select + + + self%NcellNodes = NCELLNODE(self%geomType) + self%nIPs = NIP (self%geomType) + self%cellType = CELLTYPE (self%geomType) + + select case (self%geomType) + case(1) + self%IPneighbor = IPNEIGHBOR1 + self%cell = CELL1 + case(2) + self%IPneighbor = IPNEIGHBOR2 + self%cell = CELL2 + case(3) + self%IPneighbor = IPNEIGHBOR3 + self%cell = CELL3 + case(4) + self%IPneighbor = IPNEIGHBOR4 + self%cell = CELL4 + case(5) + self%IPneighbor = IPNEIGHBOR5 + self%cell = CELL5 + case(6) + self%IPneighbor = IPNEIGHBOR6 + self%cell = CELL6 + case(7) + self%IPneighbor = IPNEIGHBOR7 + self%cell = CELL7 + case(8) + self%IPneighbor = IPNEIGHBOR8 + self%cell = CELL8 + case(9) + self%IPneighbor = IPNEIGHBOR9 + self%cell = CELL9 + case(10) + self%IPneighbor = IPNEIGHBOR10 + self%cell = CELL10 + end select + + self%NcellnodesPerCell = NCELLNODEPERCELL(self%cellType) + + select case(self%cellType) + case(1) + self%cellFace = CELLFACE1 + self%vtkType = 'TRIANGLE' + case(2) + self%cellFace = CELLFACE2 + self%vtkType = 'QUAD' + case(3) + self%cellFace = CELLFACE3 + self%vtkType = 'TETRA' + case(4) + self%cellFace = CELLFACE4 + self%vtkType = 'HEXAHEDRON' + end select + + self%nIPneighbors = size(self%IPneighbor,1) + + write(6,'(/,a)') ' <<<+- element_init -+>>>'; flush(6) + + write(6,*) ' element type: ',self%elemType + write(6,*) ' geom type: ',self%geomType + write(6,*) ' cell type: ',self%cellType + write(6,*) ' # node: ',self%Nnodes + write(6,*) ' # IP: ',self%nIPs + write(6,*) ' # cellnode: ',self%Ncellnodes + write(6,*) ' # cellnode/cell: ',self%NcellnodesPerCell + write(6,*) ' # IP neighbor: ',self%nIPneighbors + end subroutine tElement_init end module element