Value defined at particles (groups supported)¶
When you output value defined at particles, please use the functions in Table 75.
Using the functions explained here, you can output multiple groups of particles. To output data please call cg_iric_write_sol_particlegroup_groupbegin_f and cg_iric_write_sol_particlegroup_groupend_f, before and after outputting data.
List 107 shows an example of the process to output value defined at particles.
Note
In functions explained here, data for one particle is output with each function call.
Subroutine |
Remarks |
|---|---|
cg_iric_write_sol_particlegroup_groupbegin_f |
Start outputting calculation result defined at particles. |
cg_iric_write_sol_particlegroup_groupend_f |
Finish outputting calculation result defined at particles. |
cg_iric_write_sol_particlegroup_pos2d_f |
Outputs particle positions (two-dimensions) |
cg_iric_write_sol_particlegroup_pos3d_f |
Outputs particle positions (three-dimensions) |
cg_iric_write_sol_particlegroup_integer_f |
Outputs integer-type calculation results, giving a value for each particle. |
cg_iric_write_sol_particlegroup_real_f |
Outputs double-precision real-type calculation results, giving a value for each particle. |
1program SampleProgram
2 implicit none
3 include 'cgnslib_f.h'
4
5 integer:: fin, ier, isize, jsize
6 integer:: canceled
7 integer:: locked
8 double precision:: time
9 double precision, dimension(:,:), allocatable::grid_x, grid_y
10 integer:: numparticles = 10
11 double precision, dimension(:), allocatable:: particle_x, particle_y,
12 double precision, dimension(:), allocatable:: velocity_x, velocity_y, temperature
13 integer:: i
14 integer:: status = 1
15 character(len=20):: condFile
16
17 condFile = 'test.cgn'
18
19 ! Open CGNS file
20 call cg_open_f(condFile, CG_MODE_MODIFY, fin, ier)
21 if (ier /=0) STOP "*** Open error of CGNS file ***"
22
23 ! Initialize iRIClib
24 call cg_iric_init_f(fin, ier)
25 if (ier /=0) STOP "*** Initialize error of CGNS file ***"
26
27 ! Check the grid size
28 call cg_iric_gotogridcoord2d_f(isize, jsize, ier)
29 ! Allocate memory for loading the grid
30 allocate(grid_x(isize, jsize), grid_y(isize, jsize))
31 ! Allocate memory for calculation result.
32 allocate(particle_x(numparticles), particle_y(numparticles))
33 allocate(velocity_x(numparticles), velocity_y(numparticles), temperature(numparticles))
34
35 ! Read the grid into memory
36 call cg_iric_getgridcoord2d_f(grid_x, grid_y, ier)
37
38 ! Output the initial state information.
39 time = 0
40 call cg_iric_write_sol_time_f(time, ier)
41
42 call cg_iric_write_sol_particlegroup_groupbegin_f('driftwood', ier)
43 do i = 1, numparticles
44 ! (Input values to particle_x, particle_x, velocity_x, velocity_y, temperature here)
45 call cg_iric_write_sol_particlegroup_pos2d_f(particle_x(i), particle_y(i), ier)
46 call cg_iric_write_sol_particlegroup_real_f('VelocityX', velocity_x(i), ier)
47 call cg_iric_write_sol_particlegroup_real_f('VelocityY', velocity_y(i), ier)
48 call cg_iric_write_sol_particlegroup_real_f('Temperature', temperature(i), ier)
49 end do
50 call cg_iric_write_sol_particlegroup_groupend_f(ier)
51
52 do
53 time = time + 10.0
54
55 ! (Perform calculation here)
56
57 call iric_check_cancel_f(canceled)
58 if (canceled == 1) exit
59
60 ! Output calculation results
61 call iric_write_sol_start_f(condFile, ier)
62 call cg_iric_write_sol_time_f(time, ier)
63 call cg_iric_write_sol_particlegroup_groupbegin_f('driftwood', ier)
64 do i = 1, numparticles
65 ! (Input values to particle_x, particle_x, velocity_x, velocity_y, temperature here)
66 call cg_iric_write_sol_particlegroup_pos2d_f(particle_x(i), particle_y(i), ier)
67 call cg_iric_write_sol_particlegroup_real_f('VelocityX', velocity_x(i), ier)
68 call cg_iric_write_sol_particlegroup_real_f('VelocityY', velocity_y(i), ier)
69 call cg_iric_write_sol_particlegroup_real_f('Temperature', temperature(i), ier)
70 end do
71 call cg_iric_write_sol_particlegroup_groupend_f(ier)
72
73 if (time > 1000) exit
74 end do
75
76 ! Close CGNS file
77 call cg_close_f(fin, ier)
78 stop
79end program SampleProgram