GCC Code Coverage Report


Directory: ./
File: phys/read_map2D.f90
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 0 30 0.0%
Branches: 0 26 0.0%

Line Branch Exec Source
1 SUBROUTINE read_map2D(filename, varname, timestep, inverse, varout)
2 ! Open file and read one variable for one timestep.
3 ! Return variable for the given timestep.
4 USE dimphy
5 USE netcdf
6 USE mod_grid_phy_lmdz
7 USE mod_phys_lmdz_para
8 USE print_control_mod, ONLY: lunout
9
10 IMPLICIT NONE
11
12 ! Input arguments
13 CHARACTER(len=*), INTENT(IN) :: filename ! name of file to read
14 CHARACTER(len=*), INTENT(IN) :: varname ! name of variable in file
15 INTEGER, INTENT(IN) :: timestep ! actual timestep
16 LOGICAL, INTENT(IN) :: inverse ! TRUE if latitude needs to be inversed
17 ! Output argument
18 REAL, DIMENSION(klon), INTENT(OUT) :: varout ! The variable read from file for the given timestep
19
20 ! Local variables
21 INTEGER :: j
22 INTEGER :: nid, nvarid, ierr
23 INTEGER, DIMENSION(3) :: start, count
24 CHARACTER(len=20) :: modname='read_map2D'
25
26 REAL, DIMENSION(nbp_lon,nbp_lat) :: var_glo2D ! 2D global
27 REAL, DIMENSION(nbp_lon,nbp_lat) :: var_glo2D_tmp ! 2D global
28 REAL, DIMENSION(klon_glo) :: var_glo1D ! 1D global
29
30 ! Read variable from file. Done by master process MPI and master thread OpenMP
31 IF (is_mpi_root .AND. is_omp_root) THEN
32 ierr = NF90_OPEN(trim(filename), NF90_NOWRITE, nid)
33 IF (ierr /= NF90_NOERR) CALL write_err_mess('Problem in opening file')
34
35 ierr = NF90_INQ_VARID(nid, trim(varname), nvarid)
36 IF (ierr /= NF90_NOERR) CALL write_err_mess('The variable is absent in file')
37
38 start=(/1,1,timestep/)
39 count=(/nbp_lon,nbp_lat,1/)
40 ierr = NF90_GET_VAR(nid, nvarid, var_glo2D,start,count)
41 IF (ierr /= NF90_NOERR) CALL write_err_mess('Problem in reading varaiable')
42
43 ierr = NF90_CLOSE(nid)
44 IF (ierr /= NF90_NOERR) CALL write_err_mess('Problem in closing file')
45
46 ! Inverse latitude order
47 IF (inverse) THEN
48 var_glo2D_tmp(:,:) = var_glo2D(:,:)
49 DO j=1, nbp_lat
50 var_glo2D(:,j) = var_glo2D_tmp(:,nbp_lat-j+1)
51 END DO
52 END IF
53
54 ! Transform the global field from 2D to 1D
55 CALL grid2Dto1D_glo(var_glo2D,var_glo1D)
56
57 WRITE(lunout,*) 'in read_map2D, filename = ', trim(filename)
58 WRITE(lunout,*) 'in read_map2D, varname = ', trim(varname)
59 WRITE(lunout,*) 'in read_map2D, timestep = ', timestep
60 ENDIF
61
62 ! Scatter gloabl 1D variable to all processes
63 CALL scatter(var_glo1D, varout)
64
65 CONTAINS
66 SUBROUTINE write_err_mess(err_mess)
67 USE print_control_mod, ONLY: lunout
68 IMPLICIT NONE
69 CHARACTER(len=*), INTENT(IN) :: err_mess
70
71 WRITE(lunout,*) 'Error in read_map2D, filename = ', trim(filename)
72 WRITE(lunout,*) 'Error in read_map2D, varname = ', trim(varname)
73 WRITE(lunout,*) 'Error in read_map2D, timestep = ', timestep
74
75 CALL abort_physic(modname, err_mess, 1)
76
77 END SUBROUTINE write_err_mess
78
79 END SUBROUTINE read_map2D
80