Reading calculation grid

Reads a calculation grid from the CGNS file. iRIClib offers subroutines for reading structured grids only.

Table 62 Subroutine to use
Subroutine Remarks
cg_iric_gotogridcoord2d_f Makes preparations for reading a 2D structured grid
cg_iric_getgridcoord2d_f Reads a 2D structured grid
cg_iric_gotogridcoord3d_f Makes preparations for reading a 3D structured grid
cg_iric_getgridcoord3d_f Reads a 3D structured grid
cg_iric_read_grid_integer_node_f Reads the integer attribute values defined for grid nodes
cg_iric_read_grid_real_node_f Reads the double-precision attribute values defined for grid nodes
cg_iric_read_grid_integer_cell_f Reads the integer attribute values defined for cells
cg_iric_read_grid_real_cell_f Reads the double-precision attribute values defined for cells
cg_iric_read_complex_count_f Reads the number of groups of complex type grid attribute
cg_iric_read_complex_integer_f Reads the integer attribute values of complex type grid attribute
cg_iric_read_complex_real_f Reads the double precision attribute values of complex type grid attribute
cg_iric_read_complex_realsingle_f Reads the single precision attribute values of complex type grid attribute
cg_iric_read_complex_string_f Reads the string attribute values of complex type grid attribute
cg_iric_read_complex_functionalsize_f Checks the size of a functional-type attribute of complex type grid attribute
cg_iric_read_complex_functional_f Reads functional attribute data of complex type grid attribute
cg_iric_read_complex_functionalwithname_f Reads functional attribute of complex type grid attribute (with multiple values)
cg_iric_read_complex_functional_realsingle_f Reads functional attribute data of complex type grid attribute
cg_iric_read_grid_complex_node_f Reads the complex attribute values defined at grid nodes
cg_iric_read_grid_complex_cell_f Reads the complex attribute values defined at grid cells
cg_iric_read_grid_functionaltimesize_f Reads the number of values of dimension “Time” for functional grid attribute
cg_iric_read_grid_functionaltime_f Reads the values of dimension “Time” for functional grid attribute
cg_iric_read_grid_functionaldimensionsize_f Reads the number of values of dimension for functional grid attribute
cg_iric_read_grid_functionaldimension_integer_f Reads the values of integer dimension for functional grid attribute
cg_iric_read_grid_functionaldimension_real_f Reads the values of double-precision dimension for functional grid attribute
cg_iric_read_grid_functional_integer_node_f Reads the values of functional integer grid attribute with dimension “Time” definied at grid nodes.
cg_iric_read_grid_functional_real_node_f Reads the values of functional double-precision grid attribute with dimension “Time” definied at grid nodes.
cg_iric_read_grid_functional_integer_cell_f Reads the values of functional integer grid attribute with dimension “Time” definied at grid cells.
cg_iric_read_grid_functional_real_cell_f Reads the values of functional double-precision grid attribute with dimension “Time” definied at grid cells.

The same subroutines for getting attributes such as cg_iric_read_grid_integer_node_f can be used both for two-dimensional structured grids and three-dimensional structured grids.

An example description for reading a two-dimensional structured grid is shown in List 95.

List 95 Example of source code to read a grid
 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
program Sample3
  implicit none
  include 'cgnslib_f.h'

  integer:: fin, ier, discharge_size, i, j
  integer:: isize, jsize
  double precision, dimension(:,:), allocatable:: grid_x, grid_y
  double precision, dimension(:,:), allocatable:: elevation
  integer, dimension(:,:), allocatable:: obstacle
  integer:: rain_timeid
  integer:: rain_timesize
  double precision, dimension(:), allocatable:: rain_time
  double precision, dimension(:,:), allocatable:: rain

  ! Open CGNS file
  call cg_open_f('test.cgn', CG_MODE_MODIFY, fin, ier)
  if (ier /=0) STOP "*** Open error of CGNS file ***"

  ! Initialize iRIClib
  call cg_iric_init_f(fin, ier)
  if (ier /=0) STOP "*** Initialize error of CGNS file ***"

  ! Check the grid size
  call cg_iric_gotogridcoord2d_f(isize, jsize, ier)

  ! Allocate memory for loading the grid
  allocate(grid_x(isize,jsize), grid_y(isize,jsize))
  ! Read the grid into memory
  call cg_iric_getgridcoord2d_f(grid_x, grid_y, ier)

  if (ier /=0) STOP "*** No grid data ***"
  ! (Output)
  print *, 'grid x,y: isize, jsize=', isize, jsize
  do i = 1, min(isize,5)
    do j = 1, min(jsize,5)
      print *, ' (',i,',',j,')=(',grid_x(i,j),',',grid_y(i,j),')'
    end do
  end do

  ! Allocate memory for elevation attribute values that are defined for grid nodes.
  allocate(elevation(isize, jsize))
  ! Read the attribute values.
  call cg_iric_read_grid_real_node_f('Elevation', elevation, ier)
  print *, 'Elevation: isize, jsize=', isize, jsize
  do i = 1, min(isize,5)
    do j = 1, min(jsize,5)
      print *, ' (',i,',',j,')=(',elevation(i,j),')'
    end do
  end do

  ! Allocate memory for the obstacle attribute that is defined for cells. The size is (isize-1) * (jsize-1) since it is cell attribute.
  allocate(obstacle(isize-1, jsize-1))
  ! Read the attribute values in.
  call cg_iric_read_grid_integer_cell_f('Obstacle', obstacle, ier)
  print *, 'Obstacle: isize -1, jsize-1=', isize-1, jsize-1
  do i = 1, min(isize-1,5)
    do j = 1, min(jsize-1,5)
      print *, ' (',i,',',j,')=(',obstacle(i,j),')'
    end do
  end do
  ! Read the number of times for Rain
  call cg_iric_read_grid_functionaltimesize_f('Rain', rain_timesize);
  ! Allocate memory for time values of Rain
  allocate(rain_time(rain_timesize))

  ! Allocate memory for the rain attribute that is defined for cells. The size is (isize-1) * (jsize-1) since it is cell attribute.  allocate(rain(isize-1, jsize-1))
  ! Read the attribute at Time = 1
  rain_timeid = 1
  call cg_iric_read_grid_functional_real_cell_f('Rain', rain_timeid, rain, ier)
  print *, 'Rain: isize -1, jsize-1=', isize-1, jsize-1
  do i = 1, min(isize-1,5)
    do j = 1, min(jsize-1,5)
      print *, ' (',i,',',j,')=(',rain(i,j),')'
    end do
  end do

  ! Deallocate memory that has been allocated
  deallocate(grid_x, grid_y, elevation, obstacle, rain_time, rain)

  ! Close CGNS file
  call cg_close_f(fin, ier)
  stop
end program Sample3

Processing for a three-dimensional grid can be described in the same manner.