|
|
◆ volgrid6d_v7d_transform()
| subroutine volgrid6d_class::volgrid6d_v7d_transform |
( |
type(transform_def), intent(in) |
this, |
|
|
type(volgrid6d), intent(inout) |
volgrid6d_in, |
|
|
type(vol7d), intent(out) |
vol7d_out, |
|
|
type(vol7d), intent(in), optional |
v7d, |
|
|
real, dimension(:,:), intent(in), optional |
maskgrid, |
|
|
real, dimension(:), intent(in), optional |
maskbounds, |
|
|
character(len=*), intent(in), optional |
networkname, |
|
|
logical, intent(in), optional |
noconvert, |
|
|
procedure(basic_find_index), optional, pointer |
find_index, |
|
|
character(len=*), intent(in), optional |
categoryappend |
|
) |
| |
|
private |
Performs the specified abstract transformation on the data provided.
The abstract transformation is specified by this parameter; the corresponding specifical transformation (grid_transform object) is created and destroyed internally. The output transformed object is created internally and it does not require preliminary initialisation.
- Parametri
-
| [in] | this | object specifying the abstract transformation |
| [in,out] | volgrid6d_in | object to be transformed, it is not modified, despite the INTENT(inout) |
| [out] | vol7d_out | transformed object, it does not requires initialisation |
| [in] | v7d | object containing a list of points over which transformation has to be done (required by some transformation types) |
| [in] | maskgrid | 2D field to be used for defining subareas according to its values, it must have the same shape as the field to be interpolated (for transformation type 'maskinter') |
| [in] | maskbounds | array of boundary values for defining subareas from the values of maskgrid, the number of subareas is SIZE(maskbounds) - 1, if not provided a default based on extreme values of makgrid is used |
| [in] | networkname | set the output network name in vol7d_out (default='generic') |
| [in] | noconvert | do not try to match variable and convert values during transform |
| [in] | categoryappend | append this suffix to log4fortran namespace category |
Definizione alla linea 2346 del file volgrid6d_class.F90.
2347 if ( associated(vol7d_in%time)) then 2348 ntime= size(vol7d_in%time) 2349 volgrid6d_out%time=vol7d_in%time 2352 if ( associated(vol7d_in%timerange)) then 2353 ntimerange= size(vol7d_in%timerange) 2354 volgrid6d_out%timerange=vol7d_in%timerange 2357 if ( associated(vol7d_in%level)) then 2358 nlevel= size(vol7d_in%level) 2359 volgrid6d_out%level=vol7d_in%level 2362 if ( associated(vol7d_in%dativar%r)) then 2363 nvar= size(vol7d_in%dativar%r) 2364 CALL varbufr2vargrib(vol7d_in%dativar%r, volgrid6d_out%var, c_func, gaid_template) 2367 nana= SIZE(vol7d_in%voldatir, 1) 2369 IF (.NOT. ASSOCIATED(volgrid6d_out%voldati)) THEN 2370 ALLOCATE(voldatiout(volgrid6d_out%griddim%dim%nx, volgrid6d_out%griddim%dim%ny, & 2375 DO itimerange=1,ntimerange 2379 IF ( PRESENT(gaid_template)) THEN 2380 DO ilevel = 1, nlevel 2381 IF (any(c_e(vol7d_in%voldatir(:,itime,ilevel,itimerange,ivar,inetwork)))) THEN 2382 CALL copy(gaid_template, volgrid6d_out%gaid(ilevel,itime,itimerange,ivar)) 2384 volgrid6d_out%gaid(ilevel,itime,itimerange,ivar) = grid_id_new() 2390 IF ( ASSOCIATED(volgrid6d_out%voldati)) & 2391 CALL volgrid_get_vol_3d(volgrid6d_out, itime, itimerange, ivar, & 2394 CALL compute(this, & 2395 vol7d_in%voldatir(:,itime,:,itimerange,ivar,inetwork), voldatiout, & 2396 vol7d_in%dativar%r(ivar)) 2398 IF ( ASSOCIATED(c_func)) THEN 2399 CALL compute(c_func(ivar), voldatiout(:,:,:)) 2402 CALL volgrid_set_vol_3d(volgrid6d_out, itime, itimerange, ivar, & 2409 IF (.NOT. ASSOCIATED(volgrid6d_out%voldati)) THEN 2410 DEALLOCATE(voldatiout) 2412 IF ( ASSOCIATED(c_func)) THEN 2416 END SUBROUTINE v7d_volgrid6d_transform_compute 2425 SUBROUTINE v7d_volgrid6d_transform(this, griddim, vol7d_in, volgrid6d_out, & 2426 networkname, gaid_template, categoryappend) 2427 TYPE(transform_def), INTENT(in) :: this 2428 TYPE(griddim_def), INTENT(in), OPTIONAL :: griddim 2430 TYPE(vol7d), INTENT(inout) :: vol7d_in 2431 TYPE(volgrid6d), INTENT(out) :: volgrid6d_out 2432 CHARACTER(len=*), OPTIONAL, INTENT(in) :: networkname 2433 TYPE(grid_id), OPTIONAL, INTENT(in) :: gaid_template 2434 CHARACTER(len=*), INTENT(in), OPTIONAL :: categoryappend 2436 type(grid_transform) :: grid_trans 2437 integer :: ntime, ntimerange, nlevel, nvar 2443 CALL vol7d_alloc_vol(vol7d_in) 2444 ntime= SIZE(vol7d_in%time) 2445 ntimerange= SIZE(vol7d_in%timerange) 2446 nlevel= SIZE(vol7d_in%level) 2448 if ( associated(vol7d_in%dativar%r)) nvar= size(vol7d_in%dativar%r) 2451 CALL l4f_log(l4f_error, & 2452 "trying to transform a vol7d object incomplete or without real variables") 2453 CALL init(volgrid6d_out) 2458 CALL init(grid_trans, this, vol7d_in, griddim, categoryappend=categoryappend) 2459 CALL init(volgrid6d_out, griddim, time_definition=vol7d_in%time_definition, & 2460 categoryappend=categoryappend) 2462 IF (c_e(grid_trans)) THEN 2464 CALL volgrid6d_alloc(volgrid6d_out, griddim%dim, ntime=ntime, nlevel=nlevel, &
|