50 subroutine rrtmgp_lw_cloud_optics_init(rrtmgp_root_dir, rrtmgp_lw_file_clouds, &
51 nrghice, mpicomm, mpirank, mpiroot, errmsg, errflg)
54 character(len=128),
intent(in) :: &
55 rrtmgp_root_dir, & !< RTE-RRTMGP root directory
58 integer,
intent(inout) :: &
60 type(mpi_comm),
intent(in) :: &
62 integer,
intent(in) :: &
63 mpirank, & !< Current MPI rank
67 character(len=*),
intent(out) :: &
69 integer,
intent(out) :: &
73 integer :: dimID,varID,status,ncid,mpierr
74 character(len=264) :: lw_cloud_props_file
81 lw_cloud_props_file = trim(rrtmgp_root_dir)//trim(rrtmgp_lw_file_clouds)
89 if (mpirank .eq. mpiroot)
then
90 write (*,*)
'Reading RRTMGP longwave cloud-optics metadata ... '
93 status = nf90_open(trim(lw_cloud_props_file), nf90_nowrite, ncid)
96 status = nf90_inq_dimid(ncid,
'nband', dimid)
97 status = nf90_inquire_dimension(ncid, dimid, len=nbandlw)
98 status = nf90_inq_dimid(ncid,
'nrghice', dimid)
99 status = nf90_inquire_dimension(ncid, dimid, len=nrghice_fromfilelw)
100 status = nf90_inq_dimid(ncid,
'nsize_liq', dimid)
101 status = nf90_inquire_dimension(ncid, dimid, len=nsize_liqlw)
102 status = nf90_inq_dimid(ncid,
'nsize_ice', dimid)
103 status = nf90_inquire_dimension(ncid, dimid, len=nsize_icelw)
104 status = nf90_inq_dimid(ncid,
'nsizereg', dimid)
105 status = nf90_inquire_dimension(ncid, dimid, len=nsizereglw)
106 status = nf90_inq_dimid(ncid,
'ncoeff_ext', dimid)
107 status = nf90_inquire_dimension(ncid, dimid, len=ncoeff_extlw)
108 status = nf90_inq_dimid(ncid,
'ncoeff_ssa_g', dimid)
109 status = nf90_inquire_dimension(ncid, dimid, len=ncoeff_ssa_glw)
110 status = nf90_inq_dimid(ncid,
'nbound', dimid)
111 status = nf90_inquire_dimension(ncid, dimid, len=nboundlw)
112 status = nf90_inq_dimid(ncid,
'pair', dimid)
113 status = nf90_inquire_dimension(ncid, dimid, len=npairslw)
118 call mpi_barrier(mpicomm, mpierr)
126 call mpi_bcast(nbandlw, 1, mpi_integer, mpiroot, mpicomm, mpierr)
127 call mpi_bcast(nsize_liqlw, 1, mpi_integer, mpiroot, mpicomm, mpierr)
128 call mpi_bcast(nsize_icelw, 1, mpi_integer, mpiroot, mpicomm, mpierr)
129 call mpi_bcast(nsizereglw, 1, mpi_integer, mpiroot, mpicomm, mpierr)
130 call mpi_bcast(ncoeff_extlw, 1, mpi_integer, mpiroot, mpicomm, mpierr)
131 call mpi_bcast(ncoeff_ssa_glw, 1, mpi_integer, mpiroot, mpicomm, mpierr)
132 call mpi_bcast(nboundlw, 1, mpi_integer, mpiroot, mpicomm, mpierr)
133 call mpi_bcast(npairslw, 1, mpi_integer, mpiroot, mpicomm, mpierr)
137 if (nrghice .ne. 0) nrghice_fromfilelw = nrghice
138 call mpi_bcast(nrghice_fromfilelw, 1, mpi_integer, mpiroot, mpicomm, mpierr)
146 if (.not.
allocated(lut_extliqlw))
allocate(lut_extliqlw(nsize_liqlw, nbandlw))
147 if (.not.
allocated(lut_ssaliqlw))
allocate(lut_ssaliqlw(nsize_liqlw, nbandlw))
148 if (.not.
allocated(lut_asyliqlw))
allocate(lut_asyliqlw(nsize_liqlw, nbandlw))
149 if (.not.
allocated(lut_exticelw))
allocate(lut_exticelw(nsize_icelw, nbandlw, nrghice_fromfilelw))
150 if (.not.
allocated(lut_ssaicelw))
allocate(lut_ssaicelw(nsize_icelw, nbandlw, nrghice_fromfilelw))
151 if (.not.
allocated(lut_asyicelw))
allocate(lut_asyicelw(nsize_icelw, nbandlw, nrghice_fromfilelw))
152 if (.not.
allocated(band_limscldlw))
allocate(band_limscldlw(2,nbandlw))
160 if (mpirank .eq. mpiroot)
then
162 write (*,*)
'Reading RRTMGP longwave cloud data (LUT) ... '
163 status = nf90_inq_varid(ncid,
'radliq_lwr',varid)
164 status = nf90_get_var(ncid,varid,radliq_lwrlw)
165 status = nf90_inq_varid(ncid,
'radliq_upr',varid)
166 status = nf90_get_var(ncid,varid,radliq_uprlw)
167 status = nf90_inq_varid(ncid,
'radice_lwr',varid)
168 status = nf90_get_var(ncid,varid,radice_lwrlw)
169 status = nf90_inq_varid(ncid,
'radice_upr',varid)
170 status = nf90_get_var(ncid,varid,radice_uprlw)
171 status = nf90_inq_varid(ncid,
'lut_extliq',varid)
172 status = nf90_get_var(ncid,varid,lut_extliqlw)
173 status = nf90_inq_varid(ncid,
'lut_ssaliq',varid)
174 status = nf90_get_var(ncid,varid,lut_ssaliqlw)
175 status = nf90_inq_varid(ncid,
'lut_asyliq',varid)
176 status = nf90_get_var(ncid,varid,lut_asyliqlw)
177 status = nf90_inq_varid(ncid,
'lut_extice',varid)
178 status = nf90_get_var(ncid,varid,lut_exticelw)
179 status = nf90_inq_varid(ncid,
'lut_ssaice',varid)
180 status = nf90_get_var(ncid,varid,lut_ssaicelw)
181 status = nf90_inq_varid(ncid,
'lut_asyice',varid)
182 status = nf90_get_var(ncid,varid,lut_asyicelw)
183 status = nf90_inq_varid(ncid,
'bnd_limits_wavenumber',varid)
184 status = nf90_get_var(ncid,varid,band_limscldlw)
187 status = nf90_close(ncid)
191 call mpi_barrier(mpicomm, mpierr)
202 call mpi_bcast(radliq_lwrlw, 1, mpi_real, mpiroot, mpicomm, mpierr)
203 call mpi_bcast(radliq_uprlw, 1, mpi_real, mpiroot, mpicomm, mpierr)
204 call mpi_bcast(radice_lwrlw, 1, mpi_real, mpiroot, mpicomm, mpierr)
205 call mpi_bcast(radice_uprlw, 1, mpi_real, mpiroot, mpicomm, mpierr)
207 call mpi_bcast(radliq_lwrlw, 1, mpi_double_precision, mpiroot, mpicomm, mpierr)
208 call mpi_bcast(radliq_uprlw, 1, mpi_double_precision, mpiroot, mpicomm, mpierr)
209 call mpi_bcast(radice_lwrlw, 1, mpi_double_precision, mpiroot, mpicomm, mpierr)
210 call mpi_bcast(radice_uprlw, 1, mpi_double_precision, mpiroot, mpicomm, mpierr)
215 call mpi_bcast(band_limscldlw,
size(band_limscldlw), mpi_real, mpiroot, mpicomm, mpierr)
216 call mpi_bcast(lut_extliqlw,
size(lut_extliqlw), mpi_real, mpiroot, mpicomm, mpierr)
217 call mpi_bcast(lut_ssaliqlw,
size(lut_ssaliqlw), mpi_real, mpiroot, mpicomm, mpierr)
218 call mpi_bcast(lut_asyliqlw,
size(lut_asyliqlw), mpi_real, mpiroot, mpicomm, mpierr)
219 call mpi_bcast(lut_exticelw,
size(lut_exticelw), mpi_real, mpiroot, mpicomm, mpierr)
220 call mpi_bcast(lut_ssaicelw,
size(lut_ssaicelw), mpi_real, mpiroot, mpicomm, mpierr)
221 call mpi_bcast(lut_asyicelw,
size(lut_asyicelw), mpi_real, mpiroot, mpicomm, mpierr)
223 call mpi_bcast(band_limscldlw,
size(band_limscldlw), mpi_double_precision, mpiroot, mpicomm, mpierr)
224 call mpi_bcast(lut_extliqlw,
size(lut_extliqlw), mpi_double_precision, mpiroot, mpicomm, mpierr)
225 call mpi_bcast(lut_ssaliqlw,
size(lut_ssaliqlw), mpi_double_precision, mpiroot, mpicomm, mpierr)
226 call mpi_bcast(lut_asyliqlw,
size(lut_asyliqlw), mpi_double_precision, mpiroot, mpicomm, mpierr)
227 call mpi_bcast(lut_exticelw,
size(lut_exticelw), mpi_double_precision, mpiroot, mpicomm, mpierr)
228 call mpi_bcast(lut_ssaicelw,
size(lut_ssaicelw), mpi_double_precision, mpiroot, mpicomm, mpierr)
229 call mpi_bcast(lut_asyicelw,
size(lut_asyicelw), mpi_double_precision, mpiroot, mpicomm, mpierr)
237 call check_error_msg(
'lw_cloud_optics_init',lw_cloud_props%load(band_limscldlw, &
238 radliq_lwrlw, radliq_uprlw, radice_lwrlw, radice_uprlw, &
239 lut_extliqlw, lut_ssaliqlw, lut_asyliqlw, &
240 lut_exticelw, lut_ssaicelw, lut_asyicelw))
242 call check_error_msg(
'lw_cloud_optics_init',lw_cloud_props%set_ice_roughness(nrghice))