124 integer (c_int) :: iStat
125 integer (c_int) :: iIndex
128 call assert( istat == 0,
"Problem allocating memory", __file__, __line__ )
138 do iindex = 1, ubound(
nc_out, 1)
141 if (
outspecs(iindex)%multisim_outputs ) cycle
143 if (
outspecs(iindex)%is_active )
then
145 allocate (
nc_out(iindex)%ncfile )
148 ncfile=
nc_out( iindex )%ncfile, &
149 svariablename=trim(
outspecs( iindex )%variable_name ), &
150 svariableunits=trim(
outspecs( iindex )%variable_units ), &
151 inx=cells%number_of_columns, &
152 iny=cells%number_of_rows, &
157 proj4_string=cells%PROJ4_string, &
160 fvalidmin=
outspecs( iindex )%valid_minimum, &
161 fvalidmax=
outspecs( iindex )%valid_maximum )
169 do iindex = 1, ubound(
nc_out, 1)
172 if (
outspecs(iindex)%multisim_outputs ) cycle
174 if (
outspecs(iindex)%is_active )
then
176 allocate (
nc_out(iindex)%ncfile )
179 ncfile=
nc_out( iindex )%ncfile, &
180 svariablename=trim(
outspecs( iindex )%variable_name ), &
181 svariableunits=trim(
outspecs( iindex )%variable_units ), &
182 inx=cells%number_of_columns, &
183 iny=cells%number_of_rows, &
188 proj4_string=cells%PROJ4_string, &
189 fvalidmin=
outspecs( iindex )%valid_minimum, &
190 fvalidmax=
outspecs( iindex )%valid_maximum )
207 integer (c_int),
intent(in) :: number_of_simulations
210 integer (c_int) :: iStat
211 integer (c_int) :: noutput, nsim
214 call assert( istat == 0,
"Problem allocating memory", __file__, __line__ )
224 if ( .not.
outspecs(noutput)%multisim_outputs ) cycle
226 if (
outspecs(noutput)%is_active )
then
228 do nsim=1, number_of_simulations
234 svariablename=trim(
outspecs( noutput )%variable_name ), &
235 svariableunits=trim(
outspecs( noutput )%variable_units ), &
236 inx=cells%number_of_columns, &
237 iny=cells%number_of_rows, &
242 proj4_string=cells%PROJ4_string, &
245 fvalidmin=
outspecs( noutput )%valid_minimum, &
246 fvalidmax=
outspecs( noutput )%valid_maximum, &
247 filename_modifier=
"simulation_"//trim(
ascharacter(nsim)) )
260 if ( .not.
outspecs(noutput)%multisim_outputs ) cycle
262 if (
outspecs(noutput)%is_active )
then
264 do nsim=1, number_of_simulations
270 svariablename=trim(
outspecs( noutput )%variable_name ), &
271 svariableunits=trim(
outspecs( noutput )%variable_units ), &
272 inx=cells%number_of_columns, &
273 iny=cells%number_of_rows, &
278 proj4_string=cells%PROJ4_string, &
279 fvalidmin=
outspecs( noutput )%valid_minimum, &
280 fvalidmax=
outspecs( noutput )%valid_maximum, &
281 filename_modifier=
"simulation_"//trim(
ascharacter(nsim)) )
337 type (T_NETCDF4_FILE),
pointer :: ncfile_ptr
338 real (c_float),
intent(in) :: values(:)
342 ivarid=ncfile_ptr%iVarID(
nc_time), &
343 istart=[int(
sim_dt%iNumDaysFromOrigin, c_size_t)], &
344 icount=[1_c_size_t], &
345 istride=[1_c_size_t], &
346 rvalues=[real(
sim_dt%iNumDaysFromOrigin, c_float)])
349 ivarid=ncfile_ptr%iVarID(
nc_z), &
350 istart=[ int(
sim_dt%iNumDaysFromOrigin, c_size_t), &
351 0_c_size_t, 0_c_size_t ], &
352 icount=[ 1_c_size_t, int(cells%number_of_rows, c_size_t), &
353 int(cells%number_of_columns, c_size_t) ], &
354 istride=[ 1_c_size_t, 1_c_size_t, 1_c_size_t ], &
355 lmask=cells%active, &
357 rfield=cells%nodata_fill_value )
368 integer (c_int) :: iIndex
369 type (T_NETCDF4_FILE),
pointer :: ncfile_ptr
373 if (.not.
allocated(
nc_out) )
exit
376 do iindex = 1, ubound(
nc_out, 1 )
378 if (
outspecs(iindex)%multisim_outputs ) cycle
380 if (
outspecs(iindex)%is_active )
then
384 istart=[int(
sim_dt%iNumDaysFromOrigin, c_size_t)], &
385 icount=[1_c_size_t], &
386 istride=[1_c_size_t], &
387 rvalues=[real(
sim_dt%iNumDaysFromOrigin, c_float)])
397 values=cells%gross_precip, &
409 values=cells%rainfall, &
421 values=cells%interception, &
434 values=cells%interception_storage, &
447 values=cells%runoff, &
460 values=(cells%runoff + cells%rejected_net_infiltration), &
473 values=cells%runoff_outside, &
486 values=cells%runon, &
499 values=cells%infiltration, &
511 values=cells%snowfall, &
523 values=cells%snowmelt, &
535 values=cells%snow_storage, &
548 values=real(cells%surface_storage, c_float), &
561 values=real(cells%soil_storage, c_float), &
573 values=cells%delta_soil_storage, &
586 values=cells%net_infiltration, &
598 values=real(cells%reference_ET0, c_float), &
611 values=real(cells%actual_et, c_float), &
624 values=real(cells%climatic_deficit, c_float), &
660 values=cells%tmax_minus_tmin, &
672 values=cells%irrigation, &
697 values=cells%rejected_net_infiltration, &
709 values=cells%crop_etc, &
721 values=cells%bare_soil_evap, &
733 values=cells%direct_net_infiltration, &
745 values=cells%direct_soil_moisture, &
757 values=cells%storm_drain_capture, &
769 values=
asfloat(cells%it_is_growing_season), &
802 integer (c_int),
intent(in) :: simulation_number
805 integer (c_int) :: iIndex
806 type (T_NETCDF4_FILE),
pointer :: ncfile_ptr
814 if ( .not.
outspecs(iindex)%multisim_outputs ) cycle
816 if (
outspecs(iindex)%is_active )
then
822 istart=[int(
sim_dt%iNumDaysFromOrigin, c_size_t)], &
823 icount=[1_c_size_t], &
824 istride=[1_c_size_t], &
825 rvalues=[real(
sim_dt%iNumDaysFromOrigin, c_float)])
836 values=cells%snow_storage, &
844 values=real(cells%soil_storage, c_float), &
852 values=cells%net_infiltration, &
860 values=real(cells%actual_et, c_float), &
868 values=real(cells%interception_storage, c_float), &
876 values=real(cells%surface_storage, c_float), &
subroutine, public netcdf_open_and_prepare_as_output(ncfile, svariablename, svariableunits, inx, iny, fx, fy, startdate, enddate, proj4_string, history_list, executable_name, dplat, dplon, fvalidmin, fvalidmax, write_time_bounds, filename_prefix, filename_modifier)