2 #include "petsc/finclude/petsc.h" 13 SUBROUTINE check_list(communicator, file_list, check)
15 CHARACTER(LEN=200),
DIMENSION(:),
POINTER :: file_list
16 CHARACTER(LEN=200),
DIMENSION(:),
POINTER :: dummy_list
17 INTEGER,
DIMENSION(SIZE(file_list)) :: check_mylist
18 INTEGER :: check, n, count
20 mpi_comm :: communicator
21 petscmpiint :: rank, nb_procs
22 petscerrorcode :: ierr
23 CALL mpi_comm_rank(communicator, rank, ierr)
24 CALL mpi_comm_size(communicator, nb_procs, ierr)
26 CALL mpi_allgather(check, 1, mpi_integer, check_mylist, 1, &
27 mpi_integer, communicator, ierr)
30 DO n = 1,
SIZE(file_list)
31 IF (check_mylist(n)==0) cycle
34 ALLOCATE(dummy_list(count))
36 DO n = 1,
SIZE(file_list)
37 IF (check_mylist(n)==0) cycle
39 dummy_list(count) = file_list(n)
42 ALLOCATE(file_list(count))
43 file_list = dummy_list
48 CHARACTER(*),
DIMENSION(:),
INTENT(IN) :: file_list
49 CHARACTER(*),
INTENT(IN) :: file_header, what
50 INTEGER,
INTENT(IN) :: time_step
51 INTEGER :: unit_file=789, j
52 CHARACTER(len=5) :: tit, tit_part
55 OPEN (unit=unit_file, file=file_header//
'.pvd',
form =
'formatted', &
56 access =
'append', status =
'replace')
57 WRITE(unit_file,
'(A)')
'<?xml version="1.0"?>' 58 WRITE(unit_file,
'(A)')
'<VTKFile type="Collection" version="0.1"'// &
59 ' byte_order="LittleEndian" compressor="vtkZLibDataCompressor">' 60 WRITE(unit_file,
'(A)')
'<Collection>' 62 OPEN (unit=unit_file, file=file_header//
'.pvd',
form =
'formatted', &
63 access =
'append', status =
'old')
67 WRITE(tit,
'(I5)') time_step
68 DO j = 1,
SIZE(file_list)
69 WRITE(tit_part,
'(I5)') j
70 WRITE(unit_file,
'(A)')
'<DataSet timestep="'//trim(adjustl(tit))//&
71 '" group="" part="'// &
72 trim(adjustl(tit_part))//
'" file="./'//trim(adjustl(file_list(j)))//&
75 WRITE(unit_file,
'(A)')
'</Collection>' 76 WRITE(unit_file,
'(A)')
'</VTKFile>' 87 REAL(KIND=8),
DIMENSION(:),
INTENT(IN) :: field
88 CHARACTER(*),
INTENT(IN) :: file_name, field_name
89 INTEGER :: unit_file=789, m, n, type_cell
90 REAL(KIND=4),
DIMENSION(3*mesh%np) :: r4_threed_xml_field
91 INTEGER(KIND=4),
DIMENSION(mesh%gauss%n_w*mesh%me) :: i4_threed_xml_field
92 INTEGER(KIND=4),
DIMENSION(mesh%me) :: i4_xml_field
93 INTEGER(KIND=1),
DIMENSION(mesh%me) :: i1_xml_field
94 CHARACTER(LEN=200) :: ascii_or_binary
96 IF (
SIZE(field)==0)
RETURN 99 ascii_or_binary =
'binary' 100 OPEN (unit=unit_file, file=file_name//
'.vtu', status =
'unknown')
101 WRITE(unit_file,
'(A)')
'<?xml version="1.0" ?>' 102 WRITE(unit_file,
'(A)', advance=
"no")
'<VTKFile type="UnstructuredGrid" version="0.1" ' 103 WRITE(unit_file,
'(A)')
'compressor="vtkZLibDataCompressor" byte_order="LittleEndian">' 105 ascii_or_binary =
'ascii' 106 OPEN (unit=unit_file, file=file_name//
'.vtu',&
107 form =
'formatted', status =
'unknown')
108 WRITE(unit_file,
'(A)')
'<VTKFile type="UnstructuredGrid" version="0.1"'// &
109 ' byte_order="LittleEndian">' 112 WRITE(unit_file,
'(A)')
'<UnstructuredGrid>' 113 WRITE(unit_file,
'(A,I9,A,I9,A)')
'<Piece NumberOfPoints="', mesh%np, &
114 '" NumberOfCells="', mesh%me,
'">' 117 WRITE(unit_file,
'(A)')
'<PointData Scalars="truc">' 118 WRITE(unit_file,
'(A)')
'<DataArray type="Float32" Name="'&
119 //trim(adjustl(field_name))//
'" format="'//trim(adjustl(ascii_or_binary))//
'">' 121 CALL write_compressed_block(unit_file,
REAL(field(1:mesh%np),4))
124 WRITE(unit_file,
'(e14.7)') field(n)
127 WRITE(unit_file,
'(A)')
'</DataArray>' 128 WRITE(unit_file,
'(A)')
'</PointData>' 132 WRITE(unit_file,
'(A)')
'<CellData>' 133 WRITE(unit_file,
'(A)')
'</CellData>' 137 WRITE(unit_file,
'(A)')
'<Points>' 138 WRITE(unit_file,
'(A)')
'<DataArray type="Float32" Name="Points" '//&
139 'NumberOfComponents="3" format="'//trim(adjustl(ascii_or_binary))//
'">' 142 r4_threed_xml_field(3*(n-1)+1) =
REAL(mesh%rr(1,n),4)
143 r4_threed_xml_field(3*(n-1)+2) =
REAL(0.,4)
144 r4_threed_xml_field(3*(n-1)+3) =
REAL(mesh%rr(2,n),4)
146 CALL write_compressed_block(unit_file, r4_threed_xml_field(1:3*mesh%np))
149 WRITE(unit_file,
'(3(e14.7,x))') mesh%rr(1,n), 0.d0 , mesh%rr(3,n)
152 WRITE(unit_file,
'(A)')
'</DataArray>' 153 WRITE(unit_file,
'(A)')
'</Points>' 157 IF (mesh%gauss%n_w==3)
THEN 159 ELSE IF (mesh%gauss%n_w==6)
THEN 162 WRITE(unit_file,
'(A)')
'<Cells>' 163 WRITE(unit_file,
'(A)')
'<DataArray type="Int32" Name="connectivity" format="'&
164 //trim(adjustl(ascii_or_binary))//
'">' 167 i4_threed_xml_field(mesh%gauss%n_w*(m-1)+1) = int(mesh%jj(1,m)-1,4)
168 i4_threed_xml_field(mesh%gauss%n_w*(m-1)+2) = int(mesh%jj(2,m)-1,4)
169 i4_threed_xml_field(mesh%gauss%n_w*(m-1)+3) = int(mesh%jj(3,m)-1,4)
170 IF (type_cell==22)
THEN 171 i4_threed_xml_field(mesh%gauss%n_w*(m-1)+4) = int(mesh%jj(6,m)-1,4)
172 i4_threed_xml_field(mesh%gauss%n_w*(m-1)+5) = int(mesh%jj(4,m)-1,4)
173 i4_threed_xml_field(mesh%gauss%n_w*(m-1)+6) = int(mesh%jj(5,m)-1,4)
176 CALL write_compressed_block(unit_file, i4_threed_xml_field)
179 WRITE(unit_file,
'(3(I8,1x))') mesh%jj(1:3,m)-1
180 IF (type_cell==22)
THEN 181 WRITE(unit_file,
'(3(I8,1x))') mesh%jj(6,m)-1 , mesh%jj(4,m)-1 , mesh%jj(5,m)-1
185 WRITE(unit_file,
'(A)')
'</DataArray>' 187 WRITE(unit_file,
'(A)')
'<DataArray type="Int32" Name="offsets" format="'&
188 //trim(adjustl(ascii_or_binary))//
'">' 191 i4_xml_field(m) = int(mesh%gauss%n_w*m,4)
193 CALL write_compressed_block(unit_file, i4_xml_field)
196 WRITE(unit_file,
'(I8)') m*mesh%gauss%n_w
199 WRITE(unit_file,
'(A)')
'</DataArray>' 201 WRITE(unit_file,
'(A)')
'<DataArray type="UInt8" Name="types" format="'&
202 //trim(adjustl(ascii_or_binary))//
'">' 205 i1_xml_field(m) = int(type_cell,1)
207 CALL write_compressed_block(unit_file, i1_xml_field)
210 WRITE(unit_file,
'(I8)') type_cell
213 WRITE(unit_file,
'(A)')
'</DataArray>' 214 WRITE(unit_file,
'(A)')
'</Cells>' 217 WRITE(unit_file,
'(A)')
'</Piece>' 218 WRITE(unit_file,
'(A)')
'</UnstructuredGrid>' 219 WRITE(unit_file,
'(A)')
'</VTKFile>' 230 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: field
231 CHARACTER(*),
INTENT(IN) :: file_name
232 INTEGER :: unit_file=789, m, n, type_cell
233 CHARACTER(*),
OPTIONAL,
INTENT(IN) :: opt_st
234 CHARACTER(LEN=200) :: field_name
235 REAL(KIND=4),
DIMENSION(3*mesh%np) :: r4_threed_xml_field
236 INTEGER(KIND=4),
DIMENSION(mesh%gauss%n_w*mesh%me) :: i4_threed_xml_field
237 INTEGER(KIND=4),
DIMENSION(mesh%me) :: i4_xml_field
238 INTEGER(KIND=1),
DIMENSION(mesh%me) :: i1_xml_field
239 CHARACTER(LEN=200) :: ascii_or_binary
241 IF (
PRESENT(opt_st))
THEN 247 IF (
SIZE(field)==0)
RETURN 250 ascii_or_binary =
'binary' 251 OPEN (unit=unit_file, file=file_name//
'.vtu', status =
'unknown')
252 WRITE(unit_file,
'(A)')
'<?xml version="1.0" ?>' 253 WRITE(unit_file,
'(A)', advance=
"no")
'<VTKFile type="UnstructuredGrid" version="0.1" ' 254 WRITE(unit_file,
'(A)')
'compressor="vtkZLibDataCompressor" byte_order="LittleEndian">' 256 ascii_or_binary =
'ascii' 257 OPEN (unit=unit_file, file=file_name//
'.vtu',&
258 form =
'formatted', status =
'unknown')
259 WRITE(unit_file,
'(A)')
'<VTKFile type="UnstructuredGrid" version="0.1"'// &
260 ' byte_order="LittleEndian">' 263 WRITE(unit_file,
'(A)')
'<UnstructuredGrid>' 264 WRITE(unit_file,
'(A,I9,A,I9,A)')
'<Piece NumberOfPoints="', mesh%np, &
265 '" NumberOfCells="', mesh%me,
'">' 268 WRITE(unit_file,
'(A)')
'<PointData>' 269 WRITE(unit_file,
'(A)')
'<DataArray type="Float32" Name="'//trim(adjustl(field_name))//&
270 '_cos" format="'//trim(adjustl(ascii_or_binary))//
'" NumberOfComponents="3">' 273 r4_threed_xml_field(3*(n-1)+1:3*n) =
REAL(field(n,1:5:2),4)
275 CALL write_compressed_block(unit_file, r4_threed_xml_field(1:3*mesh%np))
278 WRITE(unit_file,
'(3(e14.7,x))') field(n,1), field(n,2), field(n,3)
281 WRITE(unit_file,
'(A)')
'</DataArray>' 282 WRITE(unit_file,
'(A)')
'<DataArray type="Float32" Name="'//trim(adjustl(field_name))//&
283 '_sin" format="'//trim(adjustl(ascii_or_binary))//
'" NumberOfComponents="3">' 286 r4_threed_xml_field(3*(n-1)+1:3*n) =
REAL(field(n,2:6:2),4)
288 CALL write_compressed_block(unit_file, r4_threed_xml_field(1:3*mesh%np))
291 WRITE(unit_file,
'(3(e14.7,x))') field(n,2), field(n,4), field(n,6)
294 WRITE(unit_file,
'(A)')
'</DataArray>' 295 WRITE(unit_file,
'(A)')
'</PointData>' 299 WRITE(unit_file,
'(A)')
'<CellData>' 300 WRITE(unit_file,
'(A)')
'</CellData>' 304 WRITE(unit_file,
'(A)')
'<Points>' 305 WRITE(unit_file,
'(A)')
'<DataArray type="Float32" Name="Points" '//&
306 'NumberOfComponents="3" format="'//trim(adjustl(ascii_or_binary))//
'">' 309 r4_threed_xml_field(3*(n-1)+1) =
REAL(mesh%rr(1,n),4)
310 r4_threed_xml_field(3*(n-1)+2) =
REAL(0.,4)
311 r4_threed_xml_field(3*(n-1)+3) =
REAL(mesh%rr(2,n),4)
313 CALL write_compressed_block(unit_file, r4_threed_xml_field(1:3*mesh%np))
316 WRITE(unit_file,
'(3(e14.7,x))') mesh%rr(1,n), 0.d0 , mesh%rr(3,n)
319 WRITE(unit_file,
'(A)')
'</DataArray>' 320 WRITE(unit_file,
'(A)')
'</Points>' 324 IF (mesh%gauss%n_w==3)
THEN 326 ELSE IF (mesh%gauss%n_w==6)
THEN 329 WRITE(unit_file,
'(A)')
'<Cells>' 330 WRITE(unit_file,
'(A)')
'<DataArray type="Int32" Name="connectivity" format="'&
331 //trim(adjustl(ascii_or_binary))//
'">' 334 i4_threed_xml_field(mesh%gauss%n_w*(m-1)+1) = int(mesh%jj(1,m)-1,4)
335 i4_threed_xml_field(mesh%gauss%n_w*(m-1)+2) = int(mesh%jj(2,m)-1,4)
336 i4_threed_xml_field(mesh%gauss%n_w*(m-1)+3) = int(mesh%jj(3,m)-1,4)
337 IF (type_cell==22)
THEN 338 i4_threed_xml_field(mesh%gauss%n_w*(m-1)+4) = int(mesh%jj(6,m)-1,4)
339 i4_threed_xml_field(mesh%gauss%n_w*(m-1)+5) = int(mesh%jj(4,m)-1,4)
340 i4_threed_xml_field(mesh%gauss%n_w*(m-1)+6) = int(mesh%jj(5,m)-1,4)
343 CALL write_compressed_block(unit_file, i4_threed_xml_field)
346 WRITE(unit_file,
'(3(I8,1x))') mesh%jj(1:3,m)-1
347 IF (type_cell==22)
THEN 348 WRITE(unit_file,
'(3(I8,1x))') mesh%jj(6,m)-1 , mesh%jj(4,m)-1 , mesh%jj(5,m)-1
353 WRITE(unit_file,
'(A)')
'</DataArray>' 354 WRITE(unit_file,
'(A)')
'<DataArray type="Int32" Name="offsets" format="'&
355 //trim(adjustl(ascii_or_binary))//
'">' 358 i4_xml_field(m) = int(mesh%gauss%n_w*m,4)
360 CALL write_compressed_block(unit_file, i4_xml_field)
363 WRITE(unit_file,
'(I8)') m*mesh%gauss%n_w
367 WRITE(unit_file,
'(A)')
'</DataArray>' 368 WRITE(unit_file,
'(A)')
'<DataArray type="UInt8" Name="types" format="'&
369 //trim(adjustl(ascii_or_binary))//
'">' 372 i1_xml_field(m) = int(type_cell,1)
374 CALL write_compressed_block(unit_file, i1_xml_field)
377 WRITE(unit_file,
'(I8)') type_cell
380 WRITE(unit_file,
'(A)')
'</DataArray>' 381 WRITE(unit_file,
'(A)')
'</Cells>' 384 WRITE(unit_file,
'(A)')
'</Piece>' 385 WRITE(unit_file,
'(A)')
'</UnstructuredGrid>' 386 WRITE(unit_file,
'(A)')
'</VTKFile>' 398 CHARACTER(*),
INTENT(IN) :: header
399 CHARACTER(*),
INTENT(IN) :: field_name, what
400 INTEGER,
INTENT(IN) :: num_vp
401 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: field
402 CHARACTER(LEN=200),
DIMENSION(1) :: file_list
403 CHARACTER(LEN=3) :: st_rank
405 petscerrorcode :: ierr
406 petscmpiint :: rank, nb_procs
407 mpi_comm :: communicator
408 CALL mpi_comm_rank(communicator, rank, ierr)
409 CALL mpi_comm_size(communicator, nb_procs, ierr)
411 WRITE(st_rank,
'(I3)') num_vp
412 file_list(1) = trim(header)//
'_eigen_'//trim(adjustl(st_rank))
417 IF (
SIZE(field,2) == 6)
THEN 420 ELSE IF (
SIZE(field,2) == 1)
THEN 422 ELSE IF (
SIZE(field,2) .GT. 0)
THEN 425 CALL error_petsc(
'Bug in make_vtu_file_arpack: field needs at least one component')
434 REAL(KIND=8),
DIMENSION(:,:,:),
INTENT(IN) :: field
435 CHARACTER(*),
INTENT(IN) :: file_name
436 CHARACTER(*),
OPTIONAL,
INTENT(IN) :: opt_st
437 CHARACTER(LEN=200) :: field_name
438 REAL(KIND=8) :: theta, pi, dtheta
439 INTEGER :: unit_file=789, m, i, type_cell, &
442 IF (
SIZE(field,2)==0)
RETURN 444 IF (
PRESENT(opt_st))
THEN 450 nb_angle =
SIZE(field,1)
452 dtheta = 2*pi/nb_angle
454 OPEN (unit=unit_file, file=file_name//
'.vtu',&
455 form =
'formatted', status =
'unknown')
457 WRITE(unit_file,
'(A)')
'<VTKFile type="UnstructuredGrid" version="0.1"'// &
458 ' byte_order="LittleEndian">' 459 WRITE(unit_file,
'(A)')
'<UnstructuredGrid>' 461 WRITE(unit_file,
'(A,I9,A,I9,A)')
'<Piece NumberOfPoints="', nb_angle*mesh%np, &
462 '" NumberOfCells="', nb_angle*mesh%me,
'">' 464 WRITE(unit_file,
'(A)')
'<PointData Scalars="truc">' 466 IF (
SIZE(field,2)==1)
THEN 467 WRITE(unit_file,
'(A)')
'<DataArray type="Float32" Name="'//trim(adjustl(field_name))//&
471 WRITE(unit_file,
'(e14.7)') field(k, 1, i)
475 WRITE(unit_file,
'(A)')
'<DataArray type="Float32" Name="'//trim(adjustl(field_name))//&
476 '" format="ascii" NumberOfComponents="3">' 479 WRITE(unit_file,
'(3(e14.7,x))') field(k, 1, i), field(k, 2, i), field(k, 3, i)
484 WRITE(unit_file,
'(A)')
'</DataArray>' 485 WRITE(unit_file,
'(A)')
'</PointData>' 489 WRITE(unit_file,
'(A)')
'<CellData>' 490 WRITE(unit_file,
'(A)')
'</CellData>' 494 WRITE(unit_file,
'(A)')
'<Points>' 495 WRITE(unit_file,
'(A)')
'<DataArray type="Float32" Name="Points" '//&
496 'NumberOfComponents="3" format="ascii">' 500 WRITE(unit_file,
'(3(e14.7,2x))') mesh%rr(1,i)*cos(theta), &
501 mesh%rr(1,i)*sin(theta), mesh%rr(2,i)
504 WRITE(unit_file,
'(A)')
'</DataArray>' 505 WRITE(unit_file,
'(A)')
'</Points>' 510 WRITE(unit_file,
'(A)')
'<Cells>' 511 WRITE(unit_file,
'(A)')
'<DataArray type="Int64" Name="connectivity" format="ascii">' 514 WRITE(unit_file,
'(3(I8,1x))') mesh%jj(1:3,m)-1+(k-1)*mesh%np
515 WRITE(unit_file,
'(3(I8,1x))') mesh%jj(1:3,m)-1+k*mesh%np
520 WRITE(unit_file,
'(3(I8,1x))') mesh%jj(1:3,m)-1+(k-1)*mesh%np
521 WRITE(unit_file,
'(3(I8,1x))') mesh%jj(1:3,m)-1
523 WRITE(unit_file,
'(A)')
'</DataArray>' 524 WRITE(unit_file,
'(A)')
'<DataArray type="Int64" Name="offsets" format="ascii">' 525 DO m = 1, nb_angle*mesh%me
526 WRITE(unit_file,
'(I8)') 6*m
528 WRITE(unit_file,
'(A)')
'</DataArray>' 529 WRITE(unit_file,
'(A)')
'<DataArray type="UInt8" Name="types" format="ascii">' 530 DO m = 1, nb_angle*mesh%me
531 WRITE(unit_file,
'(I8)') type_cell
533 WRITE(unit_file,
'(A)')
'</DataArray>' 534 WRITE(unit_file,
'(A)')
'</Cells>' 537 WRITE(unit_file,
'(A)')
'</Piece>' 538 WRITE(unit_file,
'(A)')
'</UnstructuredGrid>' 539 WRITE(unit_file,
'(A)')
'</VTKFile>' 545 field, field_name, what, opt_it)
550 CHARACTER(*),
INTENT(IN) :: header
551 CHARACTER(*),
INTENT(IN) :: field_name, what
552 INTEGER,
OPTIONAL,
INTENT(IN) :: opt_it
553 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: field
555 CHARACTER(LEN=200),
DIMENSION(:),
POINTER :: file_list
556 CHARACTER(LEN=3) :: st_rank, st_it
558 petscerrorcode :: ierr
559 petscmpiint :: rank, nb_procs
560 mpi_comm :: communicator
561 CALL mpi_comm_rank(communicator, rank, ierr)
562 CALL mpi_comm_size(communicator, nb_procs, ierr)
563 ALLOCATE(file_list(nb_procs))
565 IF (
PRESENT(opt_it))
THEN 567 WRITE(st_it,
'(I3)') it
569 WRITE(st_rank,
'(I3)') j
570 file_list(j) = trim(header)//
'_proc_'//trim(adjustl(st_rank))//&
571 '_it_'//trim(adjustl(st_it))
575 WRITE(st_rank,
'(I3)') j
576 file_list(j) = trim(header)//
'_proc_'//trim(adjustl(st_rank))
580 CALL check_list(communicator, file_list, mesh%np)
582 IF (
PRESENT(opt_it))
THEN 607 REAL(KIND=8),
DIMENSION(:,:),
INTENT(IN) :: field
608 CHARACTER(*),
INTENT(IN) :: file_name
609 CHARACTER(*),
OPTIONAL,
INTENT(IN) :: opt_st
610 CHARACTER(LEN=200) :: field_name
611 INTEGER :: unit_file=789, m, n, type_cell, stride
612 REAL(KIND=4),
DIMENSION(3*mesh%np) :: r4_threed_xml_field
613 INTEGER(KIND=4),
DIMENSION(mesh%gauss%n_w*mesh%me) :: i4_threed_xml_field
614 INTEGER(KIND=4),
DIMENSION(mesh%me) :: i4_xml_field
615 INTEGER(KIND=1),
DIMENSION(mesh%me) :: i1_xml_field
616 CHARACTER(LEN=200) :: ascii_or_binary
618 IF (
SIZE(field,2)==0)
RETURN 620 IF (
SIZE(mesh%jj,1)==6)
THEN 623 ELSE IF (
SIZE(mesh%jj,1)==15)
THEN 629 CALL error_petsc(
'Bug in create_vtu_file_3D: SIZE(mesh%jj,1) is wrong')
632 IF (
PRESENT(opt_st))
THEN 639 ascii_or_binary =
'binary' 640 OPEN (unit=unit_file, file=file_name//
'.vtu', status =
'unknown')
641 WRITE(unit_file,
'(A)')
'<?xml version="1.0" ?>' 642 WRITE(unit_file,
'(A)', advance=
"no")
'<VTKFile type="UnstructuredGrid" version="0.1" ' 643 WRITE(unit_file,
'(A)')
'compressor="vtkZLibDataCompressor" byte_order="LittleEndian">' 645 ascii_or_binary =
'ascii' 646 OPEN (unit=unit_file, file=file_name//
'.vtu',&
647 form =
'formatted', status =
'unknown')
648 WRITE(unit_file,
'(A)')
'<VTKFile type="UnstructuredGrid" version="0.1"'// &
649 ' byte_order="LittleEndian">' 652 WRITE(unit_file,
'(A)')
'<UnstructuredGrid>' 653 WRITE(unit_file,
'(A,I9,A,I9,A)')
'<Piece NumberOfPoints="', mesh%np, &
654 '" NumberOfCells="', mesh%me,
'">' 657 WRITE(unit_file,
'(A)')
'<PointData Scalars="truc">' 658 IF (
SIZE(field,1)==1)
THEN 659 WRITE(unit_file,
'(A)')
'<DataArray type="Float32" Name="'//trim(adjustl(field_name))//&
660 '" format="'//trim(adjustl(ascii_or_binary))//
'">' 662 CALL write_compressed_block(unit_file,
REAL(field(1,1:mesh%np),4))
665 WRITE(unit_file,
'(e14.7)') field(1,n)
669 WRITE(unit_file,
'(A)')
'<DataArray type="Float32" Name="'//trim(adjustl(field_name))//&
670 '" format="'//trim(adjustl(ascii_or_binary))//
'" NumberOfComponents="3">' 673 r4_threed_xml_field(3*(n-1)+1:3*n) =
REAL(field(1:3,n),4)
675 CALL write_compressed_block(unit_file, r4_threed_xml_field(1:3*mesh%np))
678 WRITE(unit_file,
'(3(e14.7,x))') field(1,n), field(2,n), field(3,n)
682 WRITE(unit_file,
'(A)')
'</DataArray>' 683 WRITE(unit_file,
'(A)')
'</PointData>' 687 WRITE(unit_file,
'(A)')
'<CellData>' 688 WRITE(unit_file,
'(A)')
'</CellData>' 692 WRITE(unit_file,
'(A)')
'<Points>' 693 WRITE(unit_file,
'(A)')
'<DataArray type="Float32" Name="Points" '//&
694 'NumberOfComponents="3" format="'//trim(adjustl(ascii_or_binary))//
'">' 697 r4_threed_xml_field(3*(n-1)+1:3*n) =
REAL(mesh%rr(1:3,n),4)
699 CALL write_compressed_block(unit_file, r4_threed_xml_field(1:3*mesh%np))
702 WRITE(unit_file,
'(3(e14.7,x))') mesh%rr(1,n), mesh%rr(2,n), mesh%rr(3,n)
705 WRITE(unit_file,
'(A)')
'</DataArray>' 706 WRITE(unit_file,
'(A)')
'</Points>' 710 WRITE(unit_file,
'(A)')
'<Cells>' 711 WRITE(unit_file,
'(A)')
'<DataArray type="Int32" Name="connectivity" format="'&
712 //trim(adjustl(ascii_or_binary))//
'">' 715 i4_threed_xml_field(mesh%gauss%n_w*(m-1)+1:mesh%gauss%n_w*m) = int(mesh%jj(1:mesh%gauss%n_w,m)-1,4)
717 CALL write_compressed_block(unit_file, i4_threed_xml_field)
720 WRITE(unit_file,
'(15(I8,1x))') mesh%jj(:,m)-1
724 WRITE(unit_file,
'(A)')
'</DataArray>' 725 WRITE(unit_file,
'(A)')
'<DataArray type="Int32" Name="offsets" format="'&
726 //trim(adjustl(ascii_or_binary))//
'">' 729 i4_xml_field(m) = int(stride*m,4)
731 CALL write_compressed_block(unit_file, i4_xml_field)
734 WRITE(unit_file,
'(I8)') stride*m
738 WRITE(unit_file,
'(A)')
'</DataArray>' 739 WRITE(unit_file,
'(A)')
'<DataArray type="UInt8" Name="types" format="'&
740 //trim(adjustl(ascii_or_binary))//
'">' 743 i1_xml_field(m) = int(type_cell,1)
745 CALL write_compressed_block(unit_file, i1_xml_field)
748 WRITE(unit_file,
'(I8)') type_cell
751 WRITE(unit_file,
'(A)')
'</DataArray>' 752 WRITE(unit_file,
'(A)')
'</Cells>' 755 WRITE(unit_file,
'(A)')
'</Piece>' 756 WRITE(unit_file,
'(A)')
'</UnstructuredGrid>' 757 WRITE(unit_file,
'(A)')
'</VTKFile>' subroutine, public create_vtu_file_axi3d(field, mesh, file_name, opt_st)
subroutine, public check_list(communicator, file_list, check)
subroutine error_petsc(string)
subroutine, public make_vtu_file_arpack(communicator, mesh, header, field, field_name, what, num_vp)
subroutine, public create_xml_vtu_scal_file(field, mesh, file_name, field_name)
subroutine create_xml_vtu_file_3d(field, mesh, file_name, opt_st)
subroutine, public create_pvd_file(file_list, file_header, time_step, what)
subroutine, public make_vtu_file_3d(communicator, mesh, header, field, field_name, what, opt_it)
subroutine, public create_xml_vtu_vect_file(field, mesh, file_name, opt_st)
section doc_intro_frame_work_num_app Numerical approximation subsection doc_intro_fram_work_num_app_Fourier_FEM Fourier Finite element representation The SFEMaNS code uses a hybrid Fourier Finite element formulation The Fourier decomposition allows to approximate the problem’s solutions for each Fourier mode modulo nonlinear terms that are made explicit The variables are then approximated on a meridian section of the domain with a finite element method The numerical approximation of a function f $f f is written in the following generic form