121 integer (c_int) :: iStat
122 integer (c_int) :: iIndex
125 call assert( istat == 0,
"Problem allocating memory", __file__, __line__ )
135 do iindex = 1, ubound(
nc_out, 1)
138 if (
outspecs(iindex)%multisim_outputs ) cycle
140 if (
outspecs(iindex)%is_active )
then
142 allocate (
nc_out(iindex)%ncfile )
145 ncfile=
nc_out( iindex )%ncfile, &
146 svariablename=trim(
outspecs( iindex )%variable_name ), &
147 svariableunits=trim(
outspecs( iindex )%variable_units ), &
148 inx=cells%number_of_columns, &
149 iny=cells%number_of_rows, &
154 proj4_string=cells%PROJ4_string, &
157 fvalidmin=
outspecs( iindex )%valid_minimum, &
158 fvalidmax=
outspecs( iindex )%valid_maximum )
166 do iindex = 1, ubound(
nc_out, 1)
169 if (
outspecs(iindex)%multisim_outputs ) cycle
171 if (
outspecs(iindex)%is_active )
then
173 allocate (
nc_out(iindex)%ncfile )
176 ncfile=
nc_out( iindex )%ncfile, &
177 svariablename=trim(
outspecs( iindex )%variable_name ), &
178 svariableunits=trim(
outspecs( iindex )%variable_units ), &
179 inx=cells%number_of_columns, &
180 iny=cells%number_of_rows, &
185 proj4_string=cells%PROJ4_string, &
186 fvalidmin=
outspecs( iindex )%valid_minimum, &
187 fvalidmax=
outspecs( iindex )%valid_maximum )
204 integer (c_int),
intent(in) :: number_of_simulations
207 integer (c_int) :: iStat
208 integer (c_int) :: noutput, nsim
211 call assert( istat == 0,
"Problem allocating memory", __file__, __line__ )
221 if ( .not.
outspecs(noutput)%multisim_outputs ) cycle
223 if (
outspecs(noutput)%is_active )
then
225 do nsim=1, number_of_simulations
231 svariablename=trim(
outspecs( noutput )%variable_name ), &
232 svariableunits=trim(
outspecs( noutput )%variable_units ), &
233 inx=cells%number_of_columns, &
234 iny=cells%number_of_rows, &
239 proj4_string=cells%PROJ4_string, &
242 fvalidmin=
outspecs( noutput )%valid_minimum, &
243 fvalidmax=
outspecs( noutput )%valid_maximum, &
244 filename_modifier=
"simulation_"//trim(
ascharacter(nsim)) )
257 if ( .not.
outspecs(noutput)%multisim_outputs ) cycle
259 if (
outspecs(noutput)%is_active )
then
261 do nsim=1, number_of_simulations
267 svariablename=trim(
outspecs( noutput )%variable_name ), &
268 svariableunits=trim(
outspecs( noutput )%variable_units ), &
269 inx=cells%number_of_columns, &
270 iny=cells%number_of_rows, &
275 proj4_string=cells%PROJ4_string, &
276 fvalidmin=
outspecs( noutput )%valid_minimum, &
277 fvalidmax=
outspecs( noutput )%valid_maximum, &
278 filename_modifier=
"simulation_"//trim(
ascharacter(nsim)) )
333 type (T_NETCDF4_FILE),
pointer :: ncfile_ptr
334 real (c_float),
intent(in) :: values(:)
338 ivarid=ncfile_ptr%iVarID(
nc_time), &
339 istart=[int(
sim_dt%iNumDaysFromOrigin, c_size_t)], &
340 icount=[1_c_size_t], &
341 istride=[1_c_size_t], &
342 rvalues=[real(
sim_dt%iNumDaysFromOrigin, c_float)])
345 ivarid=ncfile_ptr%iVarID(
nc_z), &
346 istart=[ int(
sim_dt%iNumDaysFromOrigin, c_size_t), &
347 0_c_size_t, 0_c_size_t ], &
348 icount=[ 1_c_size_t, int(cells%number_of_rows, c_size_t), &
349 int(cells%number_of_columns, c_size_t) ], &
350 istride=[ 1_c_size_t, 1_c_size_t, 1_c_size_t ], &
351 lmask=cells%active, &
353 rfield=cells%nodata_fill_value )
364 integer (c_int) :: iIndex
368 if (.not.
allocated(
nc_out) )
exit
371 do iindex = 1, ubound(
nc_out, 1 )
373 if (
outspecs(iindex)%multisim_outputs ) cycle
375 if (
outspecs(iindex)%is_active )
then
379 istart=[int(
sim_dt%iNumDaysFromOrigin, c_size_t)], &
380 icount=[1_c_size_t], &
381 istride=[1_c_size_t], &
382 rvalues=[real(
sim_dt%iNumDaysFromOrigin, c_float)])
391 values=cells%gross_precip, &
403 values=cells%rainfall, &
415 values=cells%interception, &
428 values=cells%interception_storage, &
441 values=cells%runoff, &
454 values=(cells%runoff + cells%rejected_net_infiltration), &
467 values=cells%runoff_outside, &
480 values=cells%runon, &
493 values=cells%infiltration, &
505 values=cells%snowfall, &
517 values=cells%snowmelt, &
529 values=cells%snow_storage, &
542 values=real(cells%surface_storage, c_float), &
555 values=real(cells%soil_storage, c_float), &
567 values=cells%delta_soil_storage, &
580 values=cells%net_infiltration, &
592 values=real(cells%reference_ET0, c_float), &
605 values=real(cells%actual_et, c_float), &
618 values=real(cells%climatic_deficit, c_float), &
654 values=cells%tmax_minus_tmin, &
666 values=cells%irrigation, &
691 values=cells%rejected_net_infiltration, &
703 values=cells%crop_etc, &
715 values=cells%bare_soil_evap, &
727 values=cells%direct_net_infiltration, &
739 values=cells%direct_soil_moisture, &
751 values=cells%storm_drain_capture, &
763 values=
asfloat(cells%it_is_growing_season), &
796 integer (c_int),
intent(in) :: simulation_number
799 integer (c_int) :: iIndex
807 if ( .not.
outspecs(iindex)%multisim_outputs ) cycle
809 if (
outspecs(iindex)%is_active )
then
815 istart=[int(
sim_dt%iNumDaysFromOrigin, c_size_t)], &
816 icount=[1_c_size_t], &
817 istride=[1_c_size_t], &
818 rvalues=[real(
sim_dt%iNumDaysFromOrigin, c_float)])
829 values=cells%snow_storage, &
837 values=real(cells%soil_storage, c_float), &
845 values=cells%net_infiltration, &
853 values=real(cells%actual_et, c_float), &
861 values=real(cells%interception_storage, c_float), &
869 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)