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).
2553 this%outnx=this%trans%poly%arraysize
2555 CALL vol7d_alloc(v7d_out, nana=this%outnx)
2559 CALL poly_to_coordinates(this%trans%poly, v7d_out)
2563 ELSE IF (this%trans%trans_type ==
'metamorphosis')
THEN
2566 this%innx =
SIZE(v7d_in%ana)
2569 ALLOCATE(this%point_index(this%innx,this%inny))
2570 this%point_index(:,:) = imiss
2572 IF (this%trans%sub_type ==
'all' )
THEN
2574 CALL metamorphosis_all_setup()
2576 ELSE IF (this%trans%sub_type ==
'coordbb' )
THEN
2578 ALLOCATE(lon(this%innx),lat(this%innx))
2583 CALL getval(v7d_in%ana(:)%coord,lon=lon,lat=lat)
2586 IF (lon(i) > this%trans%rect_coo%ilon .AND. &
2587 lon(i) < this%trans%rect_coo%flon .AND. &
2588 lat(i) > this%trans%rect_coo%ilat .AND. &
2589 lat(i) < this%trans%rect_coo%flat)
THEN
2590 this%outnx = this%outnx + 1
2591 this%point_index(i,1) = this%outnx
2595 IF (this%outnx <= 0)
THEN
2596 CALL l4f_category_log(this%category,l4f_warn, &
2597 "metamorphosis:coordbb: no points inside bounding box "//&
2598 trim(to_char(this%trans%rect_coo%ilon))//
","// &
2599 trim(to_char(this%trans%rect_coo%flon))//
","// &
2600 trim(to_char(this%trans%rect_coo%ilat))//
","// &
2601 trim(to_char(this%trans%rect_coo%flat)))
2604 CALL vol7d_alloc(v7d_out, nana=this%outnx)
2609 IF (c_e(this%point_index(i,1)))
THEN
2611 CALL init(v7d_out%ana(n),lon=lon(i),lat=lat(i))
2614 DEALLOCATE(lon, lat)
2618 ELSE IF (this%trans%sub_type ==
'poly' )
THEN
2625 CALL getval(v7d_in%ana(i)%coord,lon=lon1,lat=lat1)
2626 point = georef_coord_new(x=lon1, y=lat1)
2627 DO n = 1, this%trans%poly%arraysize
2628 IF (inside(point, this%trans%poly%array(n)))
THEN
2629 this%outnx = this%outnx + 1
2630 this%point_index(i,1) = n
2637 IF (this%outnx <= 0)
THEN