GCC Code Coverage Report


Directory: ./
File: rad/read_rsun_rrtm.f90
Date: 2022-01-11 19:19:34
Exec Total Coverage
Lines: 0 35 0.0%
Branches: 0 44 0.0%

Line Branch Exec Source
1 ✗ SUBROUTINE read_rsun_rrtm(debut)
2
3 !****************************************************************************************
4 ! This routine will read the solar constant fraction per band
5 !
6 ! Olivier Boucher with inputs from Marion Marchand
7 !****************************************************************************************
8
9 USE netcdf95, ONLY: nf95_close, nf95_inq_varid, nf95_open, nf95_gw_var
10 USE netcdf, ONLY: nf90_get_var, nf90_noerr, nf90_nowrite
11
12 USE phys_cal_mod, ONLY : days_elapsed, year_len
13
14 USE mod_phys_lmdz_mpi_data, ONLY: is_mpi_root
15 USE mod_phys_lmdz_omp_data, ONLY: is_omp_root
16 USE mod_phys_lmdz_para
17
18 USE YOESW, ONLY : RSUN
19
20 IMPLICIT NONE
21
22 INCLUDE "clesphys.h"
23
24 ! Input arguments
25 LOGICAL, INTENT(IN) :: debut
26
27 ! Local variables
28 INTEGER :: ncid, dimid, varid, ncerr, nbday
29 REAL, POINTER :: wlen(:), time(:)
30 REAL, ALLOCATABLE, SAVE, DIMENSION(:,:) :: SSI_FRAC
31 !$OMP THREADPRIVATE(SSI_FRAC)
32 REAL, ALLOCATABLE, SAVE, DIMENSION(:) :: TSI(:)
33 !$OMP THREADPRIVATE(TSI)
34
35 INTEGER, SAVE :: day_pre=1
36 !$OMP THREADPRIVATE(day_pre)
37
38 !--only one processor reads
39 ✗ IF (debut) THEN
40
41 ✗ ALLOCATE(SSI_FRAC(NSW,year_len))
42 ✗ ALLOCATE(TSI(year_len))
43
44 ✗ IF (is_mpi_root.AND.is_omp_root) THEN
45
46 ✗ CALL nf95_open('solarforcing.nc', NF90_NOWRITE, ncid)
47
48 ✗ CALL nf95_inq_varid(ncid, 'wlen', varid)
49 ✗ CALL nf95_gw_var(ncid, varid, wlen)
50
51 ✗ CALL nf95_inq_varid(ncid, 'time', varid)
52 ✗ CALL nf95_gw_var(ncid, varid, time)
53
54 ✗ IF (NSW.NE.size(wlen)) THEN
55 ✗ PRINT *,'read_rsun_rrtm NSW <> wlen = ',NSW, size(wlen)
56 ✗ CALL abort_physic('read_rsun_rrtm','size of SSI is different from NSW',1)
57 ENDIF
58
59 !--test if time is different from year_len but allow a mismatch of 1 day
60 ✗ IF (size(time).NE.year_len.AND.size(time).NE.year_len+1) THEN
61 ✗ PRINT *,'read_rsun_rrtm time <> year_len = ', size(time), year_len
62 ✗ CALL abort_physic('read_rsun_rrtm','time dim should be the number of days in year',1)
63 ENDIF
64 !--warning only if forcing file has 366 days but year_len has only 365
65 ✗ IF (size(time).EQ.year_len+1) THEN
66 ✗ PRINT *,'Warning read_rsun_rrtm uses a leap year rsun for a noleap year'
67 ENDIF
68
69 ✗ CALL nf95_inq_varid(ncid, 'ssi_frac', varid)
70 ✗ ncerr = nf90_get_var(ncid, varid, SSI_FRAC)
71
72 ✗ CALL nf95_inq_varid(ncid, 'tsi', varid)
73 ✗ ncerr = nf90_get_var(ncid, varid, TSI)
74
75 ✗ CALL nf95_close(ncid)
76
77 ✗ DO nbday=1, year_len
78 ✗ IF (ABS(SUM(SSI_FRAC(:,nbday))-1.).GT.1.e-6) THEN
79 ✗ PRINT *,'somme SSI_FRAC=', SUM(SSI_FRAC(:,nbday))
80 ✗ CALL abort_physic('read_rsun_rrtm','somme SSI_FRAC <> 1',1)
81 ENDIF
82 ENDDO
83
84 ENDIF ! is_mpi_root .AND. is_omp_root
85
86 !$OMP BARRIER
87 ✗ CALL bcast(SSI_FRAC)
88 ✗ CALL bcast(TSI)
89
90 ENDIF
91
92 !--only read at beginning of day
93 !--day in year is provided as days_elapsed since the beginning of the year +1
94 ✗ IF (debut.OR.days_elapsed+1.NE.day_pre) THEN
95
96 !--keep memory of previous day
97 ✗ day_pre=days_elapsed+1
98
99 !--copy
100 ✗ RSUN(1:NSW)=SSI_FRAC(:,days_elapsed+1)
101 ✗ solaire=TSI(days_elapsed+1)
102
103 ✗ print *,'READ_RSUN_RRTM day=', days_elapsed+1,' solaire=', solaire, ' RSUN=', RSUN(1:NSW)
104
105 ENDIF !--fin allocation
106
107 ✗ END SUBROUTINE read_rsun_rrtm
108