23 subroutine make_postwgts
26 character(len=CL) :: fsrc, fdst, fwgt
28 character(len=CM),
dimension(2) :: methodname = (/
'conserve',
'bilinear'/)
30 type(esmf_routehandle) :: rh
31 type(esmf_regridmethod_flag) :: method
33 integer :: k,rc,nd,ndest
34 character(len=CS),
allocatable,
dimension(:) :: destgrds
40 if(trim(res) .eq.
'900')
then
42 allocate(destgrds(ndest))
45 if(trim(res) .eq.
'500')
then
47 allocate(destgrds(ndest))
48 destgrds = (/
'9p00',
'5p00'/)
50 if(trim(res) .eq.
'100')
then
52 allocate(destgrds(ndest))
53 destgrds = (/
'9p00',
'5p00',
'1p00'/)
55 if(trim(res) .eq.
'050')
then
57 allocate(destgrds(ndest))
58 destgrds = (/
'9p00',
'5p00',
'1p00',
'0p50'/)
60 if(trim(res) .eq.
'025')
then
62 allocate(destgrds(ndest))
63 destgrds = (/
'9p00',
'5p00',
'1p00',
'0p50',
'0p25'/)
73 fsrc = trim(dirout)//
'/'//
'Ct.mx'//trim(res)//
'_SCRIP.nc'
74 fdst = trim(dirout)//
'/rect.'//trim(destgrds(nd))//
'_SCRIP.nc'
76 do k = 1,
size(methodname)
77 if(trim(methodname(k)) .eq.
'bilinear')method=esmf_regridmethod_bilinear
78 if(trim(methodname(k)) .eq.
'conserve')method=esmf_regridmethod_conserve
80 fwgt = trim(dirout)//
'/'//
'tripole.mx'//trim(res)//
'.Ct.to.rect.'//trim(destgrds(nd)) &
81 //
'.'//trim(methodname(k))//
'.nc'
82 logmsg =
'creating weight file '//trim(fwgt)
83 print
'(a)',trim(logmsg)
85 call esmf_regridweightgen(srcfile=trim(fsrc),dstfile=trim(fdst), &
86 weightfile=trim(fwgt), regridmethod=method, &
87 ignoredegenerate=.true., regridroutehandle=rh, &
88 unmappedaction=esmf_unmappedaction_ignore, rc=rc)
89 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
90 line=__line__, file=__file__))
call esmf_finalize(endflag=esmf_end_abort)