blob: 1f9c13796a4151e3205d326dfd2375b110ff8bf4 [file] [log] [blame]
! { 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