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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
! { dg-do compile }
!
! Test the fix for PR40737 as part of the overall fix for PR34640.
!
! Contributed by David Hough <dh458@oakapple.net>
!
module testmod
integer, parameter :: standard_integer = 1
integer, parameter :: int = KIND( standard_integer)
integer, parameter :: i8 = selected_int_kind(12)
integer, parameter :: i4 = selected_int_kind(8)
integer, parameter :: i2 = selected_int_kind(4)
integer, parameter :: standard_real = 1.
integer, parameter :: std_real = KIND( standard_real)
integer, parameter :: r8 = selected_real_kind(12)
integer, parameter :: r4 = selected_real_kind(6)
integer, parameter :: double = selected_real_kind(20)
integer, parameter :: name_string_length = 40
integer, parameter :: file_name_length = 60
integer, parameter :: text_string_length = 80
integer, parameter :: max_kwd_lgth = file_name_length
integer(int) :: bytes_per_int = 4
integer(int) :: bytes_per_real = 8
integer(int) :: workcomm, spincomm
integer(int), parameter :: nb_directions = 3, &
direction_x = 1, &
direction_y = 2, &
direction_z = 3, &
nb_ghost_cells = 5 ! might be different for the lagrange step?
integer(int), parameter :: ends = 4, &
lower_ghost = 1, &
lower_interior = 2, &
upper_interior = 3, &
upper_ghost = 4
! Neighbors
integer(int), parameter :: side = 2, &
lower_end = 1, &
upper_end = 2
integer(int), parameter :: nb_variables = 5, &
ro_var = 1, &
ets_var = 2, &
u_var = 3, &
up1_var = 4, &
up2_var = 5, &
eis_var = 6, &
ecs_var = 7, &
p_var = 8, &
c_var = 9, &
nb_var_sortie = 9
type :: VARIABLES_LIGNE
sequence
real, pointer, dimension( :, :) :: l
end type VARIABLES_LIGNE
type VARIABLES_MAILLE
sequence
real(r8), dimension( nb_variables) :: cell_var
end type VARIABLES_MAILLE
integer(int), dimension( nb_directions) :: &
first_real_cell, & ! without ghost cells
last_real_cell, & !
nb_real_cells, & !
first_work_cell, & ! including ghost cells
last_work_cell, & !
nb_work_cells, & !
global_nb_cells ! number of real cells, for the entire grid
integer(int) :: dim_probleme ! dimension du probleme (1, 2 ou 3)
integer(int) :: largest_local_size ! the largest of the 3 dimensions of the local grid
! Hydro variables of the actual domain
! There are 3 copies of these, for use according to current work direction
type (VARIABLES_MAILLE), allocatable, target, dimension( :, :, :) :: &
Hydro_vars_XYZ, &
Hydro_vars_YZX, &
Hydro_vars_ZXY
! Pointers to current and next Hydro var arrays
type (VARIABLES_MAILLE), pointer, dimension( :, :, :) :: Hydro_vars, &
Hydro_vars_next
! Which of these 3 copies of the 3D arrays has been updated last
integer(int) :: last_updated_3D_array = 0
real(r8), pointer, dimension( :) :: &
! Variables "permanentes" (entrant dans la projection)
Ro, & ! densite
Ets, & ! energie totale specifique
Um, & ! vitesse aux mailles, dans la direction de travail
Xn, & ! abscisse en fin de pas de temps
! Variables en lecture seulement
Um_p1, & ! vitesse aux mailles, dans les directions
Um_p2, & ! orthogonales
Xa, & ! abscisses des noeuds en debut de pas de temps
Dxa, & ! longueur des mailles en debut de pas de temps
U_dxa ! inverses des longueurs des mailles
end module testmod
subroutine TF_AD_SPLITTING_DRIVER_PLANE
use testmod
implicit none
save
real(r8), allocatable, dimension( :) :: &
! Variables maille recalculees a chaque pas de temps
Eis, & ! energie interne specifique (seulement pour calculer la pression)
Vit_son, & ! comme son nom l'indique
C_f_l, & ! nombre de Courant
Pm, & ! pression aux mailles
! Variables aux noeuds
Un, & ! vitesse des noeuds
Pn ! pression aux noeuds
integer(int) :: i, j, k
integer(int) :: first_cell, last_cell
Ro => Hydro_vars( first_cell:last_cell, j, k)%cell_var( ro_var)
Ets => Hydro_vars( first_cell:last_cell, j, k)%cell_var( ets_var)
Um => Hydro_vars( first_cell:last_cell, j, k)%cell_var( u_var)
Um_p1 => Hydro_vars( first_cell:last_cell, j, k)%cell_var( up1_var)
Um_p2 => Hydro_vars( first_cell:last_cell, j, k)%cell_var( up2_var)
end subroutine TF_AD_SPLITTING_DRIVER_PLANE
|