! { dg-do compile } ! ! Test the fix for PR40737 as part of the overall fix for PR34640. ! ! Contributed by David Hough ! 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