@@ -3613,17 +3613,31 @@ subroutine esmf_wrap_put_side1_to_xgrid(ew_s1, ew_x, xmap)
3613
3613
type (xmap_type), intent (inout ) :: xmap
3614
3614
integer :: rc
3615
3615
integer :: k
3616
+ real (ESMF_KIND_R8 ), dimension (:), pointer :: x_level_1= >NULL ()
3617
+ real (ESMF_KIND_R8 ), dimension (:), pointer :: x_level_k= >NULL ()
3616
3618
3617
3619
! Start timer
3618
3620
call mpp_clock_begin(id_put_1_to_xgrid_order_1)
3619
3621
3620
- ! Loop regridding fields
3621
- do k = 1 , ew_x% num_fields
3622
- call ESMF_FieldRegrid(ew_s1% fields(1 ), ew_x% fields(k), &
3623
- routehandle= xmap% grids(ew_s1% grid_index)% g2x, &
3624
- termorderflag= ESMF_TERMORDER_SRCSEQ, &
3625
- rc= rc)
3626
- if (rc /= ESMF_SUCCESS) call error_mesg(" put_side2_to_xgrid" , " fail at ESMF_FieldRegrid" , FATAL)
3622
+ ! Regrid once
3623
+ call ESMF_FieldRegrid(ew_s1% fields(1 ), ew_x% fields(1 ), &
3624
+ routehandle= xmap% grids(ew_s1% grid_index)% g2x, &
3625
+ termorderflag= ESMF_TERMORDER_SRCSEQ, &
3626
+ rc= rc)
3627
+ if (rc /= ESMF_SUCCESS) call error_mesg(" put_side2_to_xgrid" , " fail at ESMF_FieldRegrid" , FATAL)
3628
+
3629
+ ! Get pointer from xgrid level 1 Field
3630
+ call ESMF_FieldGet(ew_x% fields(1 ), farrayPtr= x_level_1, rc= rc)
3631
+ if (rc /= ESMF_SUCCESS) call error_mesg(" get_side1_from_xgrid" , " fail at ESMF_FieldGet()" , FATAL)
3632
+
3633
+ ! Copy field 1 to the rest of the fields
3634
+ do k = 2 , ew_x% num_fields
3635
+ ! Get pointer from xgrid level Field
3636
+ call ESMF_FieldGet(ew_x% fields(k), farrayPtr= x_level_k, rc= rc)
3637
+ if (rc /= ESMF_SUCCESS) call error_mesg(" get_side1_from_xgrid" , " fail at ESMF_FieldGet()" , FATAL)
3638
+
3639
+ ! Assign level k to level 1
3640
+ x_level_k= x_level_1
3627
3641
enddo
3628
3642
3629
3643
! Stop timer
0 commit comments