libsim  Versione8.0.0

◆ v7d_volgrid6d_transform()

subroutine volgrid6d_class::v7d_volgrid6d_transform ( type(transform_def), intent(in)  this,
type(griddim_def), intent(in), optional  griddim,
type(vol7d), intent(inout)  vol7d_in,
type(volgrid6d), intent(out)  volgrid6d_out,
character(len=*), intent(in), optional  networkname,
type(grid_id), intent(in), optional  gaid_template,
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]thisobject specifying the abstract transformation
[in]griddimgriddim specifying the output grid (required by most transformation types)
[in,out]vol7d_inobject to be transformed, it is not modified, despite the INTENT(inout)
[out]volgrid6d_outtransformed object, it does not require initialisation
[in]networknameselect the network to be processed from the vol7d input object, default the first network
[in]gaid_templatethe template (typically grib_api) to be associated with output data, it also helps in improving variable conversion
[in]categoryappendappend this suffix to log4fortran namespace category

Definizione alla linea 2625 del file volgrid6d_class.F90.

2625  var_coord_in = -1
2626  IF (PRESENT(vol7d_coord_in)) THEN
2627  IF (ASSOCIATED(vol7d_coord_in%voldatir) .AND. &
2628  ASSOCIATED(vol7d_coord_in%dativar%r)) THEN
2629 
2630 ! strictly 1 time, 1 timerange and 1 network
2631  IF (SIZE(vol7d_coord_in%voldatir,2) /= 1 .OR. &
2632  SIZE(vol7d_coord_in%voldatir,4) /= 1 .OR. &
2633  SIZE(vol7d_coord_in%voldatir,6) /= 1) THEN
2634  CALL l4f_log(l4f_error, &
2635  'volume providing constant input vertical coordinate must have &
2636  &only 1 time, 1 timerange and 1 network')
2637  CALL raise_error()
2638  RETURN
2639  ENDIF
2640 
2641 ! search for variable providing vertical coordinate
2642  CALL get_val(this, output_levtype=output_levtype)
2643  vcoord_var = vol7d_var_new(vol7d_level_to_var(output_levtype))
2644  IF (.NOT.c_e(vcoord_var)) THEN
2645  CALL l4f_log(l4f_error, &
2646  'requested output level type '//t2c(output_levtype%level1)// &
2647  ' does not correspond to any known physical variable for &
2648  &providing vertical coordinate')
2649  CALL raise_error()
2650  RETURN
2651  ENDIF
2652 
2653  var_coord_in = index(vol7d_coord_in%dativar%r, vcoord_var)
2654 
2655  IF (var_coord_in <= 0) THEN
2656  CALL l4f_log(l4f_error, &
2657  'volume providing constant input vertical coordinate contains no &
2658  &real variables matching output level type '//t2c(output_levtype%level1))
2659  CALL raise_error()
2660  RETURN
2661  ENDIF
2662  CALL l4f_log(l4f_info, &
2663  'Coordinate for vertint found in coord volume at position '// &
2664  t2c(var_coord_in))
2665 
2666 ! check vertical coordinate system
2667  CALL get_val(this, input_levtype=input_levtype)
2668  mask_in = & ! implicit allocation
2669  (vol7d_coord_in%level(:)%level1 == input_levtype%level1) .AND. &
2670  (vol7d_coord_in%level(:)%level2 == input_levtype%level2)
2671  ulstart = firsttrue(mask_in)
2672  ulend = lasttrue(mask_in)
2673  IF (ulstart == 0 .OR. ulend == 0) THEN
2674  CALL l4f_log(l4f_error, &
2675  'coordinate file does not contain levels of type '// &
2676  t2c(input_levtype%level1)//'/'//t2c(input_levtype%level2)// &
2677  ' specified for input data')
Index method.

Generated with Doxygen.