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).
2587 this%outnx=this%trans%poly%arraysize
2589 CALL vol7d_alloc(v7d_out, nana=this%outnx)
2593 CALL poly_to_coordinates(this%trans%poly, v7d_out)
2597 ELSE IF (this%trans%trans_type ==
'metamorphosis')
THEN 2600 this%innx =
SIZE(v7d_in%ana)
2603 ALLOCATE(this%point_index(this%innx,this%inny))
2604 this%point_index(:,:) = imiss
2606 IF (this%trans%sub_type ==
'all' )
THEN 2608 CALL metamorphosis_all_setup()
2610 ELSE IF (this%trans%sub_type ==
'coordbb' )
THEN 2612 ALLOCATE(lon(this%innx),lat(this%innx))
2617 CALL getval(v7d_in%ana(:)%coord,lon=lon,lat=lat)
2620 IF (lon(i) > this%trans%rect_coo%ilon .AND. &
2621 lon(i) < this%trans%rect_coo%flon .AND. &
2622 lat(i) > this%trans%rect_coo%ilat .AND. &
2623 lat(i) < this%trans%rect_coo%flat)
THEN 2624 this%outnx = this%outnx + 1
2625 this%point_index(i,1) = this%outnx
2629 IF (this%outnx <= 0)
THEN 2630 CALL l4f_category_log(this%category,l4f_warn, &
2631 "metamorphosis:coordbb: no points inside bounding box "//&
2632 trim(to_char(this%trans%rect_coo%ilon))//
","// &
2633 trim(to_char(this%trans%rect_coo%flon))//
","// &
2634 trim(to_char(this%trans%rect_coo%ilat))//
","// &
2635 trim(to_char(this%trans%rect_coo%flat)))
2638 CALL vol7d_alloc(v7d_out, nana=this%outnx)
2643 IF (c_e(this%point_index(i,1)))
THEN 2645 CALL init(v7d_out%ana(n),lon=lon(i),lat=lat(i))
2648 DEALLOCATE(lon, lat)
2652 ELSE IF (this%trans%sub_type ==
'poly' )
THEN 2659 CALL getval(v7d_in%ana(i)%coord,lon=lon1,lat=lat1)
2660 point = georef_coord_new(x=lon1, y=lat1)
2661 DO n = 1, this%trans%poly%arraysize
2662 IF (inside(point, this%trans%poly%array(n)))
THEN 2663 this%outnx = this%outnx + 1
2664 this%point_index(i,1) = n
2671 IF (this%outnx <= 0)
THEN 2672 CALL l4f_category_log(this%category,l4f_warn, &
2673 "metamorphosis:poly: no points inside polygons")