libsim Versione 7.2.4
|
◆ grid_transform_vol7d_grid_init()
Constructor for a grid_transform object, defining a particular sparse points-to-grid transformation. 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). The generated grid_transform object is specific to the sparse point list and grid provided. The function c_e can be used in order to check whether the object has been successfully initialised, if the result is .FALSE., it should not be used further on.
Definizione alla linea 2584 del file grid_transform_class.F90. 2585 point = georef_coord_new(x=lon1, y=lat1)
2586
2587 DO n = 1, this%trans%poly%arraysize
2588 IF (inside(point, this%trans%poly%array(n))) THEN ! stop at the first matching polygon
2589 this%inter_index_x(i,1) = n
2590 EXIT
2591 ENDIF
2592 ENDDO
2593 ENDDO
2594
2595 this%outnx=this%trans%poly%arraysize
2596 this%outny=1
2597 CALL vol7d_alloc(v7d_out, nana=this%outnx)
2598
2599! setup output point list, equal to average of polygon points
2600! warning, in case of concave areas points may coincide!
2601 CALL poly_to_coordinates(this%trans%poly, v7d_out)
2602
2603 this%valid = .true. ! warning, no check of subtype
2604
2605ELSE IF (this%trans%trans_type == 'metamorphosis') THEN
2606
2607! common to all metamorphosis subtypes
2608 this%innx = SIZE(v7d_in%ana)
2609 this%inny = 1
2610! allocate index array
2611 ALLOCATE(this%point_index(this%innx,this%inny))
2612 this%point_index(:,:) = imiss
2613
2614 IF (this%trans%sub_type == 'all' ) THEN
2615
2616 CALL metamorphosis_all_setup()
2617
2618 ELSE IF (this%trans%sub_type == 'coordbb' ) THEN
2619
2620 ALLOCATE(lon(this%innx),lat(this%innx))
2621
2622! count and mark points falling into requested bounding-box
2623 this%outnx = 0
2624 this%outny = 1
2625 CALL getval(v7d_in%ana(:)%coord,lon=lon,lat=lat)
2626 DO i = 1, this%innx
2627! IF (geo_coord_inside_rectang()
2628 IF (lon(i) > this%trans%rect_coo%ilon .AND. &
2629 lon(i) < this%trans%rect_coo%flon .AND. &
2630 lat(i) > this%trans%rect_coo%ilat .AND. &
2631 lat(i) < this%trans%rect_coo%flat) THEN ! improve!
2632 this%outnx = this%outnx + 1
2633 this%point_index(i,1) = this%outnx
2634 ENDIF
2635 ENDDO
2636
2637 IF (this%outnx <= 0) THEN
2638 CALL l4f_category_log(this%category,l4f_warn, &
2639 "metamorphosis:coordbb: no points inside bounding box "//&
2640 trim(to_char(this%trans%rect_coo%ilon))//","// &
2641 trim(to_char(this%trans%rect_coo%flon))//","// &
2642 trim(to_char(this%trans%rect_coo%ilat))//","// &
2643 trim(to_char(this%trans%rect_coo%flat)))
2644 ENDIF
2645
2646 CALL vol7d_alloc(v7d_out, nana=this%outnx)
2647
2648! collect coordinates of points falling into requested bounding-box
2649 n = 0
2650 DO i = 1, this%innx
2651 IF (c_e(this%point_index(i,1))) THEN
2652 n = n + 1
2653 CALL init(v7d_out%ana(n),lon=lon(i),lat=lat(i))
2654 ENDIF
2655 ENDDO
2656 DEALLOCATE(lon, lat)
2657
2658 this%valid = .true.
2659
2660 ELSE IF (this%trans%sub_type == 'poly' ) THEN
2661
2662! count and mark points falling into requested polygon
2663 this%outnx = 0
2664 this%outny = 1
2665 DO i = 1, this%innx
2666! temporary, improve!!!!
2667 CALL getval(v7d_in%ana(i)%coord,lon=lon1,lat=lat1)
2668 point = georef_coord_new(x=lon1, y=lat1)
2669 DO n = 1, this%trans%poly%arraysize
2670 IF (inside(point, this%trans%poly%array(n))) THEN ! stop at the first matching polygon
2671 this%outnx = this%outnx + 1
2672 this%point_index(i,1) = n
2673 EXIT
|