It defines an object describing a transformation from a set of sparse points to a rectangular grid; the abstract type of transformation is described in the transformation object trans (type transform_def) which must have been properly initialised. The additional information required here is the list of the input sparse points in the form of a vol7d object (parameter v7d_in), which can be the same volume that will be successively used for interpolation, or a volume with just the same coordinate data, and the description of the output grid griddim (a griddim_def object).
2637 this%outnx=this%trans%poly%arraysize
2639 CALL vol7d_alloc(v7d_out, nana=this%outnx)
2643 CALL poly_to_coordinates(this%trans%poly, v7d_out)
2647 ELSE IF (this%trans%trans_type ==
'metamorphosis')
THEN 2650 this%innx =
SIZE(v7d_in%ana)
2653 ALLOCATE(this%point_index(this%innx,this%inny))
2654 this%point_index(:,:) = imiss
2656 IF (this%trans%sub_type ==
'all' )
THEN 2658 CALL metamorphosis_all_setup()
2660 ELSE IF (this%trans%sub_type ==
'coordbb' )
THEN 2662 ALLOCATE(lon(this%innx),lat(this%innx))
2667 CALL getval(v7d_in%ana(:)%coord,lon=lon,lat=lat)
2670 IF (lon(i) > this%trans%rect_coo%ilon .AND. &
2671 lon(i) < this%trans%rect_coo%flon .AND. &
2672 lat(i) > this%trans%rect_coo%ilat .AND. &
2673 lat(i) < this%trans%rect_coo%flat)
THEN 2674 this%outnx = this%outnx + 1
2675 this%point_index(i,1) = this%outnx
2679 IF (this%outnx <= 0)
THEN 2680 CALL l4f_category_log(this%category,l4f_warn, &
2681 "metamorphosis:coordbb: no points inside bounding box "//&
2682 trim(to_char(this%trans%rect_coo%ilon))//
","// &
2683 trim(to_char(this%trans%rect_coo%flon))//
","// &
2684 trim(to_char(this%trans%rect_coo%ilat))//
","// &
2685 trim(to_char(this%trans%rect_coo%flat)))
2688 CALL vol7d_alloc(v7d_out, nana=this%outnx)
2693 IF (c_e(this%point_index(i,1)))
THEN 2695 CALL init(v7d_out%ana(n),lon=lon(i),lat=lat(i))
2698 DEALLOCATE(lon, lat)
2702 ELSE IF (this%trans%sub_type ==
'poly' )
THEN 2709 CALL getval(v7d_in%ana(i)%coord,lon=lon1,lat=lat1)
2710 point = georef_coord_new(x=lon1, y=lat1)
2711 DO n = 1, this%trans%poly%arraysize
2712 IF (inside(point, this%trans%poly%array(n)))
THEN 2713 this%outnx = this%outnx + 1
2714 this%point_index(i,1) = n
2721 IF (this%outnx <= 0)
THEN 2722 CALL l4f_category_log(this%category,l4f_warn, &
2723 "metamorphosis:poly: no points inside polygons")