Steps of developing a calculation result analysis program¶
Abstract¶
Calculation result analysis program is a program that reads calculation result of a soler from a CGNS file, execute analysis or modify calculation result. Analysis result or modified calculation results can be output to another CGNS file.
The steps of developing a calculation result analysis program is basically the same to that of a solver (See Steps of developing a solver). The difference is that it handles multiple CGNS files.
List 12 shows the source code of sample calculation result analysis program.
1! (abbr.)
2
3! File opening and initialization
4call cg_iric_open(cgnsfile, IRIC_MODE_MODIFY, fin1, ier)
5
6! (abbr.)
7
8! Reading calculation condition etc.
9call cg_iric_read_functionalsize(fin1, 'func', param_func_size, ier)
10
11! (abbr.)
12
13! File opening and initialization for reading calculation result
14call cg_iric_open(param_inputfile, IRIC_MODE_READ, fin2, ier)
15
16! (abbr.)
17
18! Reading calculation result etc.
19call cg_iric_read_sol_count(fin2, solcount, ier)
20
21! (abbr.)
22
23! Calculation result analysis code
24
25! (abbr.)
26
27! Outputting analysis result
28call cg_iric_write_sol_time(fin1, t, ier)
29
30! (abbr.)
31
32! Closing files
33call cg_iric_close(fin1, ier)
34call cg_iric_close(fin2, ier)
35
36! (abbr.)
List 13 shows the source code the analysis program that reads calculation result from CGNS file, and executes fish habitat analysis.
1program SampleProgram2
2 use iric
3 implicit none
4
5 integer icount
6 character(len=300) cgnsfile
7
8 integer:: fin1, fin2, ier, istatus
9
10 character(len=300) param_inputfile
11 integer:: param_result
12 character(len=100) param_resultother
13 integer:: param_func_size
14 double precision, dimension(:), allocatable:: param_func_param
15 double precision, dimension(:), allocatable:: param_func_value
16 character(len=100) resultname
17
18 integer:: isize, jsize
19 double precision, dimension(:,:), allocatable:: grid_x, grid_y
20 double precision, dimension(:,:), allocatable:: target_result
21 double precision, dimension(:,:), allocatable:: analysis_result
22 double precision:: tmp_target_result
23 double precision:: tmp_analysis_result
24
25 integer:: i, j, f, solid, solcount, iter
26 double precision:: t
27
28 icount = nargs()
29 if (icount.eq.2) then
30 call getarg(1, cgnsfile, istatus)
31 else
32 write(*,*) "Input File not specified."
33 stop
34 end if
35
36 ! Opening CGNS file
37 call cg_iric_open(cgnsfile, IRIC_MODE_MODIFY, fin1, ier)
38 if (ier /=0) STOP "*** Open error of CGNS file ***"
39
40 ! Read analysis conditions
41 call cg_iric_read_string(fin1, 'inputfile', param_inputfile, ier)
42 call cg_iric_read_integer(fin1, 'result', param_result, ier)
43 call cg_iric_read_string(fin1, 'resultother', param_resultother, ier)
44
45 call cg_iric_read_functionalsize(fin1, 'func', param_func_size, ier)
46 allocate(param_func_param(param_func_size), param_func_value(param_func_size))
47 call cg_iric_read_functional(fin1, 'func', param_func_param, param_func_value, ier)
48
49 if (param_result .eq. 0) resultname = 'Depth(m)'
50 if (param_result .eq. 1) resultname = 'Elevation(m)'
51 if (param_result .eq. 2) resultname = param_resultother
52
53 ! Read grid from the specified CGNS file
54 call cg_iric_open(param_inputfile, IRIC_MODE_READ, fin2, ier)
55 if (ier /=0) STOP "*** Open error of CGNS file 2 ***"
56
57 ! Reads grid
58 call cg_iric_read_grid2d_str_size(fin2, isize, jsize, ier)
59 allocate(grid_x(isize, jsize), grid_y(isize, jsize))
60 call cg_iric_read_grid2d_coords(fin2, grid_x, grid_y, ier)
61
62 ! Output the grid to CGNS file
63 call cg_iric_write_grid2d_coords(fin1, isize, jsize, &
64 grid_x, grid_y, ier)
65
66 ! Allocate memory used for analysis
67 allocate(target_result(isize, jsize), analysis_result(isize, jsize))
68
69 ! Start analysis of calculation results
70 call cg_iric_read_sol_count(fin2, solcount, ier)
71
72 do solid = 1, solcount
73 ! Read calculation result
74 call cg_iric_read_sol_time(fin2, solid, t, ier)
75 call cg_iric_read_sol_node_real(fin2, solid, resultname, &
76 target_result, ier)
77
78 ! Do fish habitat analysis
79 do i = 1, isize
80 do j = 1, jsize
81 tmp_target_result = target_result(i, j)
82 do f = 1, param_func_size
83 if ( &
84 param_func_param(f) .le. tmp_target_result .and. &
85 param_func_param(f + 1) .gt. tmp_target_result) then
86 tmp_analysis_result = &
87 param_func_value(f) + &
88 (param_func_value(f + 1) - param_func_value(f)) / &
89 (param_func_param(f + 1) - param_func_param(f)) * &
90 (tmp_target_result - param_func_param(f))
91 endif
92 end do
93 analysis_result(i, j) = tmp_analysis_result
94 end do
95 end do
96
97 ! Output analysis result
98 call cg_iric_write_sol_time(fin1, t, ier)
99 call cg_iric_write_sol_node_real(fin1, 'fish_existence', analysis_result, ier)
100 end do
101
102 ! Close CGNS files
103 call cg_iric_close(fin1, ier)
104 call cg_iric_close(fin2, ier)
105 stop
106end program SampleProgram2