Skip to content

Commit 70d27da

Browse files
takmichibatadustinswales
authored andcommitted
introducing "Inline Diagnostic Driver (IDiD)" (#14)
1 parent f282c66 commit 70d27da

File tree

8 files changed

+509
-26
lines changed

8 files changed

+509
-26
lines changed

build/Makefile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,14 @@ driver_COSP1.4:
7272
# Dependencies for libary
7373
cosp.o : cosp_kinds.o cosp_modis_interface.o cosp_constants.o cosp_rttov_interfaceSTUB.o \
7474
cosp_misr_interface.o cosp_isccp_interface.o cosp_calipso_interface.o \
75-
cosp_cloudsat_interface.o cosp_stats.o cosp_parasol_interface.o cosp_rttovSTUB.o \
75+
cosp_cloudsat_interface.o cosp_stats.o \
76+
cosp_parasol_interface.o cosp_rttovSTUB.o \
7677
cosp_rttov_interfaceSTUB.o quickbeam.o MISR_simulator.o lidar_simulator.o \
7778
parasol.o icarus.o cosp_grLidar532_interface.o cosp_atlid_interface.o
7879
cosp_constants.o : cosp_kinds.o
7980
cosp_config.o : cosp_kinds.o
8081
cosp_errorHandling.o : cosp_kinds.o
81-
cosp_stats.o : cosp_kinds.o cosp_config.o
82+
cosp_stats.o : cosp_kinds.o cosp_config.o cosp_constants.o
8283
cosp_isccp_interface.o : cosp_kinds.o icarus.o
8384
icarus.o : cosp_kinds.o cosp_constants.o cosp_stats.o
8485
cosp_misr_interface.o : cosp_kinds.o

driver/run/cosp2_output_nl.txt

100644100755
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,5 +145,8 @@
145145
Lptradarflag7=.true.,
146146
Lptradarflag8=.true.,
147147
Lptradarflag9=.true.,
148-
Lradarpia=.true.
148+
Lradarpia=.true.,
149+
!- CloudSat+MODIS joint diagnostics
150+
Lwr_occfreq=.true.,
151+
Lcfodd=.true.
149152
/

driver/src/cosp2_io.f90

Lines changed: 102 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ module mod_cosp_io
77
tau_binEdges,npres, pres_binBounds, pres_binCenters, pres_binEdges, nhgt, &
88
hgt_binBounds, hgt_binCenters, hgt_binEdges, reffLIQ_binCenters,vgrid_z, &
99
reffICE_binCenters, reffLIQ_binCenters, cloudsat_binCenters, PARASOL_SZA, &
10-
calipso_binCenters, grLidar532_binCenters, atlid_binCenters
10+
calipso_binCenters, grLidar532_binCenters, atlid_binCenters, &
11+
CFODD_NDBZE, CFODD_HISTDBZE, CFODD_HISTDBZEcenters, &
12+
CFODD_NICOD, CFODD_HISTICOD, CFODD_HISTICODcenters
1113
implicit none
1214

1315
contains
@@ -73,6 +75,10 @@ subroutine write_cosp2_output(Npoints, Ncolumns, Nlevels, lev, lon, lat, cospOUT
7375
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
7476
status = nf90_def_dim(fileID,"REICE_MODIS",numMODISReffIceBins,dimID(16))
7577
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
78+
status = nf90_def_dim(fileID,"CFODD_NDBZE",CFODD_NDBZE,dimID(17))
79+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
80+
status = nf90_def_dim(fileID,"CFODD_NICOD",CFODD_NICOD,dimID(18))
81+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
7682

7783
! ---------------------------------------------------------------------------------------
7884
! Define varaibles
@@ -1339,7 +1345,77 @@ subroutine write_cosp2_output(Npoints, Ncolumns, Nlevels, lev, lon, lat, cospOUT
13391345
status = nf90_put_att(fileID,varID(139),"standard_name", "cloud_area_fraction")
13401346
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
13411347
endif
1342-
1348+
! warm-rain occurrence frequency diagnostics
1349+
if (associated(cospOUT%wr_occfreq_ntotal)) then
1350+
status = nf90_def_var(fileID,"npdfcld",nf90_float, (/dimID(1)/),varID(140))
1351+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1352+
status = nf90_put_att(fileID,varID(140),"long_name","# of Non-Precipitating Clouds")
1353+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1354+
status = nf90_put_att(fileID,varID(140),"units", "1")
1355+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1356+
status = nf90_put_att(fileID,varID(140),"standard_name", "number_of_slwc_nonprecip")
1357+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1358+
status = nf90_def_var(fileID,"npdfdrz",nf90_float, (/dimID(1)/),varID(141))
1359+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1360+
status = nf90_put_att(fileID,varID(141),"long_name","# of Drizzling Clouds")
1361+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1362+
status = nf90_put_att(fileID,varID(141),"units", "1")
1363+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1364+
status = nf90_put_att(fileID,varID(141),"standard_name", "number_of_slwc_drizzle")
1365+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1366+
status = nf90_def_var(fileID,"npdfrain",nf90_float, (/dimID(1)/),varID(142))
1367+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1368+
status = nf90_put_att(fileID,varID(142),"long_name","# of Precipitating Clouds")
1369+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1370+
status = nf90_put_att(fileID,varID(142),"units", "1")
1371+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1372+
status = nf90_put_att(fileID,varID(142),"standard_name", "number_of_slwc_precip")
1373+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1374+
endif
1375+
! Contoured Frequency by Optical Depth Diagram (CFODD)
1376+
if (associated(cospOUT%cfodd_ntotal)) then
1377+
status = nf90_def_var(fileID,"ncfodd1",nf90_float, (/dimID(1),dimID(17),dimID(18)/),varID(143))
1378+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1379+
status = nf90_put_att(fileID,varID(143),"long_name","# of CFODD (05 < Reff < 12 micron)")
1380+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1381+
status = nf90_put_att(fileID,varID(143),"units", "1")
1382+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1383+
status = nf90_put_att(fileID,varID(143),"standard_name", "cfodd_reff_small")
1384+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1385+
status = nf90_def_var(fileID,"ncfodd2",nf90_float, (/dimID(1),dimID(17),dimID(18)/),varID(144))
1386+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1387+
status = nf90_put_att(fileID,varID(144),"long_name","# of CFODD (12 < Reff < 18 micron)")
1388+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1389+
status = nf90_put_att(fileID,varID(144),"units", "1")
1390+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1391+
status = nf90_put_att(fileID,varID(144),"standard_name", "cfodd_reff_medium")
1392+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1393+
status = nf90_def_var(fileID,"ncfodd3",nf90_float, (/dimID(1),dimID(17),dimID(18)/),varID(145))
1394+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1395+
status = nf90_put_att(fileID,varID(145),"long_name","# of CFODD (18 < Reff < 35 micron)")
1396+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1397+
status = nf90_put_att(fileID,varID(145),"units", "1")
1398+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1399+
status = nf90_put_att(fileID,varID(145),"standard_name", "cfodd_reff_large")
1400+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1401+
!! axes for CFODD
1402+
status = nf90_def_var(fileID,"CFODD_NDBZE",nf90_float,(/dimID(17)/),varID(146))
1403+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1404+
status = nf90_put_att(fileID,varID(146),"long_name","CloudSat+MODIS dBZe vs ICOD joint PDF X-axis")
1405+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1406+
status = nf90_put_att(fileID,varID(146),"units", "dBZ")
1407+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1408+
status = nf90_put_att(fileID,varID(146),"standard_name", "cloudsat_quivalent_reflectivity_factor")
1409+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1410+
status = nf90_def_var(fileID,"CFODD_NICOD",nf90_float,(/dimID(18)/),varID(147))
1411+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1412+
status = nf90_put_att(fileID,varID(147),"long_name","CloudSat+MODIS dBZe vs ICOD joint PDF Y-axis")
1413+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1414+
status = nf90_put_att(fileID,varID(147),"units", "none")
1415+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1416+
status = nf90_put_att(fileID,varID(147),"standard_name", "modis_in-cloud_optical_depth")
1417+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1418+
endif
13431419

13441420
! ---------------------------------------------------------------------------------------
13451421
! Exit define mode
@@ -1794,6 +1870,30 @@ subroutine write_cosp2_output(Npoints, Ncolumns, Nlevels, lev, lon, lat, cospOUT
17941870
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
17951871
endif
17961872

1873+
! Cloudsat+MODIS Joint simulators output
1874+
!! warm-rain occurrence frequency diagnostics
1875+
if (associated(cospOUT%wr_occfreq_ntotal)) then
1876+
status = nf90_put_var(fileID,varID(140),cospOUT%wr_occfreq_ntotal(:,1))
1877+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1878+
status = nf90_put_var(fileID,varID(141),cospOUT%wr_occfreq_ntotal(:,2))
1879+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1880+
status = nf90_put_var(fileID,varID(142),cospOUT%wr_occfreq_ntotal(:,3))
1881+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1882+
endif
1883+
!! Contoured Frequency by Optical Depth Diagram (CFODD)
1884+
if (associated(cospOUT%cfodd_ntotal)) then
1885+
status = nf90_put_var(fileID,varID(143),cospOUT%cfodd_ntotal(:,:,:,1))
1886+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1887+
status = nf90_put_var(fileID,varID(144),cospOUT%cfodd_ntotal(:,:,:,2))
1888+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1889+
status = nf90_put_var(fileID,varID(145),cospOUT%cfodd_ntotal(:,:,:,3))
1890+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1891+
status = nf90_put_var(fileID,varID(146),CFODD_HISTDBZEcenters)
1892+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1893+
status = nf90_put_var(fileID,varID(147),CFODD_HISTICODcenters)
1894+
if (status .ne. nf90_NoERR) print*,trim(nf90_strerror(status))
1895+
endif
1896+
17971897

17981898
! Close file
17991899
status = nf90_close(fileID)

driver/src/cosp2_test.f90

100644100755
Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,19 @@
3030
! March 2016 - D. Swales - Original version
3131
! April 2018 - R. Guzman - Added OPAQ diagnostics and Ground LIDar (GLID) simulator
3232
! April 2018 - R. Guzman - Added ATLID simulator
33+
! Nov 2018 - T. Michibata - Added CloudSat+MODIS Warmrain Diagnostics
3334
! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3435
program cosp2_test
3536
use cosp_kinds, only: wp
3637
USE MOD_COSP_CONFIG, ONLY: R_UNDEF,PARASOL_NREFL,LIDAR_NCAT,LIDAR_NTYPE,SR_BINS, &
3738
N_HYDRO,RTTOV_MAX_CHANNELS,numMISRHgtBins, &
38-
cloudsat_DBZE_BINS,LIDAR_NTEMP,calipso_histBsct, &
39+
cloudsat_DBZE_BINS,LIDAR_NTEMP,calipso_histBsct, &
40+
CFODD_NDBZE, CFODD_NICOD, &
41+
CFODD_BNDRE, CFODD_NCLASS, &
42+
CFODD_DBZE_MIN, CFODD_DBZE_MAX, &
43+
CFODD_ICOD_MIN, CFODD_ICOD_MAX, &
44+
CFODD_DBZE_WIDTH, CFODD_ICOD_WIDTH, &
45+
WR_NREGIME, &
3946
numMODISTauBins,numMODISPresBins, &
4047
numMODISReffIceBins,numMODISReffLiqBins, &
4148
numISCCPTauBins,numISCCPPresBins,numMISRTauBins, &
@@ -189,7 +196,8 @@ program cosp2_test
189196
Ltauilogmodis,Lreffclwmodis,Lreffclimodis,Lpctmodis,Llwpmodis,Liwpmodis, &
190197
Lclmodis,Ltbrttov,Lptradarflag0,Lptradarflag1,Lptradarflag2,Lptradarflag3, &
191198
Lptradarflag4,Lptradarflag5,Lptradarflag6,Lptradarflag7,Lptradarflag8, &
192-
Lptradarflag9,Lradarpia
199+
Lptradarflag9,Lradarpia, &
200+
Lwr_occfreq, Lcfodd
193201
namelist/COSP_OUTPUT/Lcfaddbze94,Ldbze94,Latb532,LcfadLidarsr532,Lclcalipso, &
194202
Lclhcalipso,Lcllcalipso,Lclmcalipso,Lcltcalipso,LparasolRefl, &
195203
Lclcalipsoliq,Lclcalipsoice,Lclcalipsoun,Lclcalipsotmp, &
@@ -214,7 +222,8 @@ program cosp2_test
214222
Lreffclimodis,Lpctmodis,Llwpmodis,Liwpmodis,Lclmodis,Ltbrttov, &
215223
Lptradarflag0,Lptradarflag1,Lptradarflag2,Lptradarflag3, &
216224
Lptradarflag4,Lptradarflag5,Lptradarflag6,Lptradarflag7, &
217-
Lptradarflag8,Lptradarflag9,Lradarpia
225+
Lptradarflag8,Lptradarflag9,Lradarpia, &
226+
Lwr_occfreq, Lcfodd
218227

219228
! Local variables
220229
logical :: &
@@ -382,7 +391,8 @@ program cosp2_test
382391

383392
! Initialize COSP simulator
384393
call COSP_INIT(Lisccp, Lmodis, Lmisr, Lcloudsat, Lcalipso, LgrLidar532, Latlid, &
385-
Lparasol, Lrttov, cloudsat_radar_freq, cloudsat_k2, cloudsat_use_gas_abs, &
394+
Lparasol, Lrttov, &
395+
cloudsat_radar_freq, cloudsat_k2, cloudsat_use_gas_abs, &
386396
cloudsat_do_ray, isccp_topheight, isccp_topheight_direction, surface_radar, &
387397
rcfg_cloudsat, use_vgrid, csat_vgrid, Nlvgrid, Nlevels, cloudsat_micro_scheme)
388398
call cpu_time(driver_time(3))
@@ -411,8 +421,9 @@ program cosp2_test
411421
Lclcalipsoopacity, Lclopaquetemp, Lclthintemp, Lclzopaquetemp, Lclopaquemeanz, &
412422
Lclthinmeanz, Lclthinemis, Lclopaquemeanzse, Lclthinmeanzse, Lclzopaquecalipsose, &
413423
LcfadDbze94, Ldbze94, Lparasolrefl, &
414-
Ltbrttov, Lptradarflag0,Lptradarflag1,Lptradarflag2,Lptradarflag3,Lptradarflag4, &
415-
Lptradarflag5,Lptradarflag6,Lptradarflag7,Lptradarflag8,Lptradarflag9,Lradarpia,&
424+
Ltbrttov, Lptradarflag0,Lptradarflag1,Lptradarflag2,Lptradarflag3,Lptradarflag4, &
425+
Lptradarflag5,Lptradarflag6,Lptradarflag7,Lptradarflag8,Lptradarflag9,Lradarpia, &
426+
Lwr_occfreq, Lcfodd, &
416427
Npoints, Ncolumns, Nlevels, Nlvgrid_local, rttov_Nchannels, cospOUT)
417428

418429
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1037,10 +1048,11 @@ subroutine construct_cosp_outputs(Lpctisccp,Lclisccp,&
10371048
Lclzopaquetemp,Lclopaquemeanz,Lclthinmeanz, &
10381049
Lclthinemis,Lclopaquemeanzse,Lclthinmeanzse, &
10391050
Lclzopaquecalipsose,LcfadDbze94,Ldbze94,Lparasolrefl,&
1040-
Ltbrttov, Lptradarflag0,Lptradarflag1,Lptradarflag2, &
1051+
Ltbrttov, Lptradarflag0,Lptradarflag1,Lptradarflag2, &
10411052
Lptradarflag3,Lptradarflag4,Lptradarflag5, &
10421053
Lptradarflag6,Lptradarflag7,Lptradarflag8, &
1043-
Lptradarflag9,Lradarpia,Npoints,Ncolumns,Nlevels,Nlvgrid,Nchan,x)
1054+
Lptradarflag9,Lradarpia,Lwr_occfreq,Lcfodd, &
1055+
Npoints,Ncolumns,Nlevels,Nlvgrid,Nchan,x)
10441056
! Inputs
10451057
logical,intent(in) :: &
10461058
Lpctisccp, & ! ISCCP mean cloud top pressure
@@ -1148,7 +1160,9 @@ subroutine construct_cosp_outputs(Lpctisccp,Lclisccp,&
11481160
Lptradarflag7, & ! CLOUDSAT
11491161
Lptradarflag8, & ! CLOUDSAT
11501162
Lptradarflag9, & ! CLOUDSAT
1151-
Lradarpia ! CLOUDSAT
1163+
Lradarpia, & ! CLOUDSAT
1164+
Lwr_occfreq, & ! CloudSat+MODIS joint diagnostics
1165+
Lcfodd ! CloudSat+MODIS joint diagnostics
11521166

11531167
integer,intent(in) :: &
11541168
Npoints, & ! Number of sampled points
@@ -1311,7 +1325,11 @@ subroutine construct_cosp_outputs(Lpctisccp,Lclisccp,&
13111325

13121326
! RTTOV
13131327
if (Ltbrttov) allocate(x%rttov_tbs(Npoints,Nchan))
1314-
1328+
1329+
! Joint MODIS/CloudSat Statistics
1330+
if (Lwr_occfreq) allocate(x%wr_occfreq_ntotal(Npoints,WR_NREGIME))
1331+
if (Lcfodd) allocate(x%cfodd_ntotal(Npoints,CFODD_NDBZE,CFODD_NICOD,CFODD_NCLASS))
1332+
13151333
end subroutine construct_cosp_outputs
13161334

13171335
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1690,7 +1708,15 @@ subroutine destroy_cosp_outputs(y)
16901708
deallocate(y%modis_Optical_thickness_vs_ReffICE)
16911709
nullify(y%modis_Optical_thickness_vs_ReffICE)
16921710
endif
1693-
1711+
if (associated(y%cfodd_ntotal)) then
1712+
deallocate(y%cfodd_ntotal)
1713+
nullify(y%cfodd_ntotal)
1714+
endif
1715+
if (associated(y%wr_occfreq_ntotal)) then
1716+
deallocate(y%wr_occfreq_ntotal)
1717+
nullify(y%wr_occfreq_ntotal)
1718+
endif
1719+
16941720
end subroutine destroy_cosp_outputs
16951721

16961722
end program cosp2_test

0 commit comments

Comments
 (0)