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).
2569 this%outnx=this%trans%poly%arraysize
2571 CALL vol7d_alloc(v7d_out, nana=this%outnx)
2575 CALL poly_to_coordinates(this%trans%poly, v7d_out)
2579 ELSE IF (this%trans%trans_type ==
'metamorphosis')
THEN
2582 this%innx =
SIZE(v7d_in%ana)
2585 ALLOCATE(this%point_index(this%innx,this%inny))
2586 this%point_index(:,:) = imiss
2588 IF (this%trans%sub_type ==
'all' )
THEN
2590 CALL metamorphosis_all_setup()
2592 ELSE IF (this%trans%sub_type ==
'coordbb' )
THEN
2594 ALLOCATE(lon(this%innx),lat(this%innx))
2599 CALL getval(v7d_in%ana(:)%coord,lon=lon,lat=lat)
2602 IF (lon(i) > this%trans%rect_coo%ilon .AND. &
2603 lon(i) < this%trans%rect_coo%flon .AND. &
2604 lat(i) > this%trans%rect_coo%ilat .AND. &
2605 lat(i) < this%trans%rect_coo%flat)
THEN
2606 this%outnx = this%outnx + 1
2607 this%point_index(i,1) = this%outnx
2611 IF (this%outnx <= 0)
THEN
2612 CALL l4f_category_log(this%category,l4f_warn, &
2613 "metamorphosis:coordbb: no points inside bounding box "//&
2614 trim(to_char(this%trans%rect_coo%ilon))//
","// &
2615 trim(to_char(this%trans%rect_coo%flon))//
","// &
2616 trim(to_char(this%trans%rect_coo%ilat))//
","// &
2617 trim(to_char(this%trans%rect_coo%flat)))
2620 CALL vol7d_alloc(v7d_out, nana=this%outnx)
2625 IF (c_e(this%point_index(i,1)))
THEN
2627 CALL init(v7d_out%ana(n),lon=lon(i),lat=lat(i))
2630 DEALLOCATE(lon, lat)
2634 ELSE IF (this%trans%sub_type ==
'poly' )
THEN
2641 CALL getval(v7d_in%ana(i)%coord,lon=lon1,lat=lat1)
2642 point = georef_coord_new(x=lon1, y=lat1)
2643 DO n = 1, this%trans%poly%arraysize
2644 IF (inside(point, this%trans%poly%array(n)))
THEN
2645 this%outnx = this%outnx + 1
2646 this%point_index(i,1) = n
2653 IF (this%outnx <= 0)
THEN