You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
397 lines
8.5 KiB
397 lines
8.5 KiB
2 years ago
|
C Copyright(C) 1999-2020 National Technology & Engineering Solutions
|
||
|
C of Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with
|
||
|
C NTESS, the U.S. Government retains certain rights in this software.
|
||
|
C
|
||
|
C See packages/seacas/LICENSE for details
|
||
|
|
||
|
program testwt
|
||
|
|
||
|
c This is a test program for the Fortran binding of the EXODUS II
|
||
|
c database write routines.
|
||
|
|
||
|
include 'exodusII.inc'
|
||
|
|
||
|
integer iin, iout
|
||
|
integer exoid, num_dim,num_nodes,elem_map(7),num_elem,num_elem_blk
|
||
|
integer num_elem_in_block(10), num_nodes_per_elem(10),numattr(10)
|
||
|
integer num_node_sets, num_side_sets
|
||
|
integer i, connect(37), nnpe(10)
|
||
|
integer ebids(10)
|
||
|
integer num_qa_rec, num_info
|
||
|
integer cpu_word_size, io_word_size
|
||
|
|
||
|
real x(100), y(100), z(100)
|
||
|
|
||
|
character*(MXSTLN) coord_names(3)
|
||
|
character*(MXSTLN) cname
|
||
|
character*(MXSTLN) qa_record(4,2)
|
||
|
character*(MXLNLN) inform(3)
|
||
|
|
||
|
data iin /5/, iout /6/
|
||
|
|
||
|
call exopts (EXABRT, ierr)
|
||
|
write (iout,'("after exopts, error = ", i4)') ierr
|
||
|
cpu_word_size = 0
|
||
|
io_word_size = 0
|
||
|
|
||
|
c create EXODUS II files
|
||
|
|
||
|
exoid = excre ("test-nsided.exo",
|
||
|
1 EXCLOB, cpu_word_size, io_word_size, ierr)
|
||
|
write (iout,'("after excre for test-nsided.exo, id: ", i8)') exoid
|
||
|
write (iout,'(" cpu word size: ",i4," io word size: ",i4)')
|
||
|
1 cpu_word_size, io_word_size
|
||
|
write (iout,'("after excre, error = ", i4)') ierr
|
||
|
|
||
|
c initialize file with parameters
|
||
|
|
||
|
num_dim = 3
|
||
|
num_nodes = 33
|
||
|
num_elem = 7
|
||
|
num_elem_blk = 1
|
||
|
num_node_sets = 0
|
||
|
num_side_sets = 0
|
||
|
|
||
|
call expini (exoid, "This is a test", num_dim, num_nodes,
|
||
|
1 num_elem, num_elem_blk, num_node_sets,
|
||
|
2 num_side_sets, ierr)
|
||
|
|
||
|
write (iout, '("after expini, error = ", i4)' ) ierr
|
||
|
|
||
|
if (ierr .ne. 0) then
|
||
|
call exclos(exoid,ierr)
|
||
|
call exit (0)
|
||
|
endif
|
||
|
|
||
|
c write nodal coordinates values and names to database
|
||
|
|
||
|
c Quad #1
|
||
|
x(1) = 0.0
|
||
|
x(2) = 1.0
|
||
|
x(3) = 1.0
|
||
|
x(4) = 0.0
|
||
|
|
||
|
y(1) = 0.0
|
||
|
y(2) = 0.0
|
||
|
y(3) = 1.0
|
||
|
y(4) = 1.0
|
||
|
|
||
|
z(1) = 0.0
|
||
|
z(2) = 0.0
|
||
|
z(3) = 0.0
|
||
|
z(4) = 0.0
|
||
|
|
||
|
c Quad #2
|
||
|
x(5) = 1.0
|
||
|
x(6) = 2.0
|
||
|
x(7) = 2.0
|
||
|
x(8) = 1.0
|
||
|
|
||
|
y(5) = 0.0
|
||
|
y(6) = 0.0
|
||
|
y(7) = 1.0
|
||
|
y(8) = 1.0
|
||
|
|
||
|
z(5) = 0.0
|
||
|
z(6) = 0.0
|
||
|
z(7) = 0.0
|
||
|
z(8) = 0.0
|
||
|
|
||
|
c Hex #1
|
||
|
x(9) = 0.0
|
||
|
x(10) = 10.0
|
||
|
x(11) = 10.0
|
||
|
x(12) = 1.0
|
||
|
x(13) = 1.0
|
||
|
x(14) = 10.0
|
||
|
x(15) = 10.0
|
||
|
x(16) = 1.0
|
||
|
|
||
|
y(9) = 0.0
|
||
|
y(10) = 0.0
|
||
|
y(11) = 0.0
|
||
|
y(12) = 0.0
|
||
|
y(13) = 10.0
|
||
|
y(14) = 10.0
|
||
|
y(15) = 10.0
|
||
|
y(16) = 10.0
|
||
|
|
||
|
z(9) = 0.0
|
||
|
z(10) = 0.0
|
||
|
z(11) =-10.0
|
||
|
z(12) =-10.0
|
||
|
z(13) = 0.0
|
||
|
z(14) = 0.0
|
||
|
z(15) =-10.0
|
||
|
z(16) =-10.0
|
||
|
|
||
|
c Tetra #1
|
||
|
x(17) = 0.0
|
||
|
x(18) = 1.0
|
||
|
x(19) = 10.0
|
||
|
x(20) = 7.0
|
||
|
|
||
|
y(17) = 0.0
|
||
|
y(18) = 0.0
|
||
|
y(19) = 0.0
|
||
|
y(20) = 5.0
|
||
|
|
||
|
z(17) = 0.0
|
||
|
z(18) = 5.0
|
||
|
z(19) = 2.0
|
||
|
z(20) = 3.0
|
||
|
|
||
|
c Wedge #1
|
||
|
x(21) = 3.0
|
||
|
x(22) = 6.0
|
||
|
x(23) = 0.0
|
||
|
x(24) = 3.0
|
||
|
x(25) = 6.0
|
||
|
x(26) = 0.0
|
||
|
|
||
|
y(21) = 0.0
|
||
|
y(22) = 0.0
|
||
|
y(23) = 0.0
|
||
|
y(24) = 2.0
|
||
|
y(25) = 2.0
|
||
|
y(26) = 2.0
|
||
|
|
||
|
z(21) = 6.0
|
||
|
z(22) = 0.0
|
||
|
z(23) = 0.0
|
||
|
z(24) = 6.0
|
||
|
z(25) = 2.0
|
||
|
z(26) = 0.0
|
||
|
|
||
|
C Tetra #2
|
||
|
x(27) = 2.7
|
||
|
x(28) = 6.0
|
||
|
x(29) = 5.7
|
||
|
x(30) = 3.7
|
||
|
|
||
|
y(27) = 1.7
|
||
|
y(28) = 1.7
|
||
|
y(29) = 1.7
|
||
|
y(30) = 0.0
|
||
|
|
||
|
z(27) = 2.7
|
||
|
z(28) = 3.3
|
||
|
z(29) = 1.7
|
||
|
z(30) = 2.3
|
||
|
|
||
|
C 3d Tri
|
||
|
x(31) = 0.0
|
||
|
x(32) = 10.0
|
||
|
x(33) = 10.0
|
||
|
|
||
|
y(31) = 0.0
|
||
|
y(32) = 0.0
|
||
|
y(33) = 10.0
|
||
|
|
||
|
z(31) = 0.0
|
||
|
z(32) = 0.0
|
||
|
z(33) = 10.0
|
||
|
|
||
|
call expcor (exoid, x, y, z, ierr)
|
||
|
write (iout, '("after expcor, error = ", i4)' ) ierr
|
||
|
if (ierr .ne. 0) then
|
||
|
call exclos(exoid,ierr)
|
||
|
call exit (0)
|
||
|
endif
|
||
|
|
||
|
coord_names(1) = "xcoor"
|
||
|
coord_names(2) = "ycoor"
|
||
|
coord_names(3) = "zcoor"
|
||
|
|
||
|
call expcon (exoid, coord_names, ierr)
|
||
|
write (iout, '("after expcon, error = ", i4)' ) ierr
|
||
|
call exupda(exoid,ierr)
|
||
|
if (ierr .ne. 0) then
|
||
|
call exclos(exoid,ierr)
|
||
|
call exit (0)
|
||
|
endif
|
||
|
|
||
|
c write element order map
|
||
|
|
||
|
do 10 i = 1, num_elem
|
||
|
elem_map(i) = i
|
||
|
10 continue
|
||
|
|
||
|
call expmap (exoid, elem_map, ierr)
|
||
|
write (iout, '("after expmap, error = ", i4)' ) ierr
|
||
|
if (ierr .ne. 0) then
|
||
|
call exclos(exoid,ierr)
|
||
|
call exit (0)
|
||
|
endif
|
||
|
|
||
|
c write element block parameters
|
||
|
|
||
|
num_elem_in_block(1) = 7
|
||
|
|
||
|
num_nodes_per_elem(1) = 37 ! This is total nodes per block
|
||
|
|
||
|
ebids(1) = 10
|
||
|
|
||
|
numattr(1) = 0
|
||
|
|
||
|
cname = "nsided"
|
||
|
|
||
|
call expelb (exoid,ebids(1),cname,num_elem_in_block(1),
|
||
|
1 num_nodes_per_elem(1),numattr(1),ierr)
|
||
|
write (iout, '("after expelb, error = ", i4)' ) ierr
|
||
|
if (ierr .ne. 0) then
|
||
|
call exclos(exoid,ierr)
|
||
|
call exit (0)
|
||
|
endif
|
||
|
|
||
|
c write element connectivity
|
||
|
|
||
|
connect( 1) = 1
|
||
|
connect( 2) = 2
|
||
|
connect( 3) = 3
|
||
|
connect( 4) = 4
|
||
|
nnpe(1) = 4
|
||
|
|
||
|
connect( 5) = 5
|
||
|
connect( 6) = 6
|
||
|
connect( 7) = 7
|
||
|
connect( 8) = 8
|
||
|
nnpe(2) = 4
|
||
|
|
||
|
connect( 9) = 9
|
||
|
connect(10) = 10
|
||
|
connect(11) = 11
|
||
|
connect(12) = 12
|
||
|
connect(13) = 13
|
||
|
connect(14) = 14
|
||
|
connect(15) = 15
|
||
|
connect(16) = 16
|
||
|
nnpe(3) = 8
|
||
|
|
||
|
connect(17) = 17
|
||
|
connect(18) = 18
|
||
|
connect(19) = 19
|
||
|
connect(20) = 20
|
||
|
nnpe(4) = 4
|
||
|
|
||
|
connect(21) = 21
|
||
|
connect(22) = 22
|
||
|
connect(23) = 23
|
||
|
connect(24) = 24
|
||
|
connect(25) = 25
|
||
|
connect(26) = 26
|
||
|
nnpe(5) = 6
|
||
|
|
||
|
connect(27) = 17
|
||
|
connect(28) = 18
|
||
|
connect(29) = 19
|
||
|
connect(30) = 20
|
||
|
connect(31) = 27
|
||
|
connect(32) = 28
|
||
|
connect(33) = 30
|
||
|
connect(34) = 29
|
||
|
nnpe(6) = 8
|
||
|
|
||
|
connect(35) = 31
|
||
|
connect(36) = 32
|
||
|
connect(37) = 33;
|
||
|
nnpe(7) = 3
|
||
|
|
||
|
call expelc (exoid, ebids(1), connect, ierr)
|
||
|
write (iout, '("after expelc, error = ", i4)' ) ierr
|
||
|
if (ierr .ne. 0) then
|
||
|
call exclos(exoid,ierr)
|
||
|
call exit (0)
|
||
|
endif
|
||
|
|
||
|
call expecpp(exoid, EXEBLK, ebids(1), nnpe, ierr)
|
||
|
write (iout, '("after expecpp, error = ", i4)' ) ierr
|
||
|
if (ierr .ne. 0) then
|
||
|
call exclos(exoid,ierr)
|
||
|
call exit (0)
|
||
|
endif
|
||
|
|
||
|
c write QA records
|
||
|
|
||
|
num_qa_rec = 2
|
||
|
|
||
|
qa_record(1,1) = "TESTWT fortran version"
|
||
|
qa_record(2,1) = "testwt"
|
||
|
qa_record(3,1) = "07/07/93"
|
||
|
qa_record(4,1) = "15:41:33"
|
||
|
qa_record(1,2) = "FASTQ"
|
||
|
qa_record(2,2) = "fastq"
|
||
|
qa_record(3,2) = "07/07/93"
|
||
|
qa_record(4,2) = "16:41:33"
|
||
|
|
||
|
call expqa (exoid, num_qa_rec, qa_record, ierr)
|
||
|
write (iout, '("after expqa, error = ", i4)' ) ierr
|
||
|
if (ierr .ne. 0) then
|
||
|
call exclos(exoid,ierr)
|
||
|
call exit (0)
|
||
|
endif
|
||
|
|
||
|
c write information records
|
||
|
|
||
|
num_info = 3
|
||
|
|
||
|
inform(1) = "This is the first information record."
|
||
|
inform(2) = "This is the second information record."
|
||
|
inform(3) = "This is the third information record."
|
||
|
|
||
|
call expinf (exoid, num_info, inform, ierr)
|
||
|
write (iout, '("after expinf, error = ", i4)' ) ierr
|
||
|
if (ierr .ne. 0) then
|
||
|
call exclos(exoid,ierr)
|
||
|
call exit (0)
|
||
|
endif
|
||
|
|
||
|
c ... Define and write some coordinate frames
|
||
|
call putfrm(exoid)
|
||
|
|
||
|
c close the EXODUS files
|
||
|
|
||
|
call exclos (exoid, ierr)
|
||
|
write (iout, '("after exclos, error = ", i4)' ) ierr
|
||
|
|
||
|
stop
|
||
|
end
|
||
|
|
||
|
subroutine putfrm(exoid)
|
||
|
implicit none
|
||
|
include 'exodusII.inc'
|
||
|
|
||
|
integer exoid, ierr, i
|
||
|
integer numfrm; ! Assumed to be 3 for remaining dimensions
|
||
|
integer cfids(3), tags(3)
|
||
|
real coord(27)
|
||
|
|
||
|
numfrm = 3
|
||
|
|
||
|
cfids(1) = 1
|
||
|
cfids(2) = 11
|
||
|
cfids(3) = 111
|
||
|
|
||
|
tags(1) = EXCFREC
|
||
|
tags(2) = EXCFCYL
|
||
|
tags(3) = EXCFSPH
|
||
|
|
||
|
! NOTE: These values may not be sensical; just used for testing.
|
||
|
do i=0,2
|
||
|
COORD(9*i+1) = i+0.1
|
||
|
COORD(9*i+2) = i+0.2
|
||
|
COORD(9*i+3) = i+0.3
|
||
|
COORD(9*i+4) = i+0.4
|
||
|
COORD(9*i+5) = i+0.5
|
||
|
COORD(9*i+6) = i+0.6
|
||
|
COORD(9*i+7) = i+0.7
|
||
|
COORD(9*i+8) = i+0.8
|
||
|
COORD(9*i+9) = i+0.9
|
||
|
end do
|
||
|
|
||
|
call expfrm(exoid, numfrm, cfids, coord, tags, ierr);
|
||
|
write (6,'("after expfrm, error = ", i4)') ierr
|
||
|
|
||
|
return
|
||
|
end
|