924 USE ice_blocks,
ONLY : nblocks_tot
925 USE ice_blocks,
ONLY : block
926 USE ice_blocks,
ONLY : get_block, get_block_parameter
927 USE ice_constants,
ONLY : rad_to_deg
928 USE ice_distribution,
ONLY : ice_distributiongetblockloc
929 USE ice_domain,
ONLY : nblocks, blocks_ice, distrb_info
930 USE ice_domain_size,
ONLY : nx_global, ny_global
931 USE ice_grid,
ONLY : tlat, tlon, ulat, ulon, tarea, &
936 integer,
intent(in) :: ng
937 integer,
intent(out) :: rc
939 TYPE (esmf_gridcomp) :: model
943 integer :: blk, i, ii, ilo, ihi, j, jj, jlo, jhi
944 integer :: gtype, ivar, localde, n
945 integer :: locid, peid
946 integer :: lbnd(2),ubnd(2)
948 integer,
pointer :: delabellist(:) => null()
949 integer,
pointer :: deblocklist(:,:,:) => null()
950 integer,
pointer :: i_glob(:) => null()
951 integer,
pointer :: j_glob(:) => null()
952 integer,
pointer :: petmap(:) => null()
954 integer (i4b),
pointer :: ptrm(:,:) => null()
956 real (dp),
pointer :: ptra(:,:) => null()
957 real (dp),
pointer :: ptrx(:,:) => null()
958 real (dp),
pointer :: ptry(:,:) => null()
960 character (len=40) :: name
962 character (len=*),
parameter :: myfile = &
963 & __FILE__//
", CICE_SetGridArrays"
965 TYPE (block) :: my_block
966 TYPE (esmf_delayout) :: delayout
967 TYPE (esmf_distgrid) :: distgrid
968 TYPE (esmf_staggerloc) :: staggerloc
970 TYPE (esmf_distgridconnection),
allocatable :: connectionlist(:)
977 WRITE (
trac,
'(a,a,i0)')
'==> Entering CICE_SetGridArrays', &
988 allocate ( deblocklist(2,2,nblocks_tot) )
989 allocate ( delabellist(nblocks_tot) )
990 allocate ( petmap(nblocks_tot) )
994 CALL get_block_parameter (n, ilo=ilo, ihi=ihi, &
995 & jlo=jlo, jhi=jhi, &
996 & i_glob=i_glob, j_glob=j_glob)
997 deblocklist(1,1,n)=i_glob(ilo)
998 deblocklist(1,2,n)=i_glob(ihi)
999 deblocklist(2,1,n)=j_glob(jlo)
1000 deblocklist(2,2,n)=j_glob(jhi)
1001 CALL ice_distributiongetblockloc (distrb_info, n, peid, locid)
1007 delayout=esmf_delayoutcreate(petmap, &
1009 IF (esmf_logfounderror(rctocheck=rc, &
1010 & msg=esmf_logerr_passthru, &
1012 & file=myfile))
THEN
1019 allocate (connectionlist(2))
1021 CALL esmf_distgridconnectionset (connectionlist(1),
1024 & positionvector=(/ nx_global+1, &
1025 & 2*ny_global+1/), &
1026 & orientationvector=(/-1, -2/), &
1028 IF (esmf_logfounderror(rctocheck=rc, &
1029 & msg=esmf_logerr_passthru, &
1031 & file=myfile))
THEN
1038 CALL esmf_distgridconnectionset (connectionlist(2), &
1041 & positionvector=(/nx_global, 0/), &
1043 IF (esmf_logfounderror(rctocheck=rc, &
1044 & msg=esmf_logerr_passthru, &
1046 & file=myfile))
THEN
1049 deallocate (connectionlist)
1055 distgrid=esmf_distgridcreate(minindex=(/ 1, 1 /), &
1056 & maxindex=(/ nx_global, ny_global /), &
1057 & deblocklist=deblocklist, &
1058 & delayout=delayout, &
1059 & connectionlist=connectionlist, &
1061 IF (esmf_logfounderror(rctocheck=rc, &
1062 & msg=esmf_logerr_passthru, &
1064 & file=myfile))
THEN
1068 deallocate (delabellist)
1069 deallocate (deblocklist)
1086 models(
iseaice)%grid(ng)=esmf_gridcreate(distgrid=distgrid, &
1087 & coordsys=esmf_coordsys_sph_deg, &
1088 & gridedgelwidth=(/ 0, 0 /), &
1089 & gridedgeuwidth=(/ 0, 1 /), &
1090 & name=
"cice_grid", &
1092 IF (esmf_logfounderror(rctocheck=rc, &
1093 & msg=esmf_logerr_passthru, &
1095 & file=myfile))
THEN
1104 & localdecount=localdecount, &
1106 IF (esmf_logfounderror(rctocheck=rc, &
1107 & msg=esmf_logerr_passthru, &
1109 & file=myfile))
THEN
1121 staggerloc=esmf_staggerloc_corner
1123 staggerloc=esmf_staggerloc_center
1128 & staggerloc=staggerloc, &
1129 & itemflag=esmf_griditem_mask, &
1131 IF (esmf_logfounderror(rctocheck=rc, &
1132 & msg=esmf_logerr_passthru, &
1134 & file=myfile))
THEN
1143 & staggerloc=staggerloc, &
1144 & itemflag=esmf_griditem_area, &
1146 IF (esmf_logfounderror(rctocheck=rc, &
1147 & msg=esmf_logerr_passthru, &
1149 & file=myfile))
THEN
1158 & staggerloc=staggerloc, &
1160 IF (esmf_logfounderror(rctocheck=rc, &
1161 & msg=esmf_logerr_passthru, &
1163 & file=myfile))
THEN
1170 block_loop :
DO blk=1,nblocks
1172 my_block=get_block(blocks_ice(blk), blk)
1180 & localde=localde, &
1181 & staggerloc=staggerloc, &
1182 & computationallbound=lbnd, &
1183 & computationalubound=ubnd, &
1186 IF (esmf_logfounderror(rctocheck=rc, &
1187 & msg=esmf_logerr_passthru, &
1189 & file=myfile))
THEN
1195 & localde=localde, &
1196 & staggerloc=staggerloc, &
1199 IF (esmf_logfounderror(rctocheck=rc, &
1200 & msg=esmf_logerr_passthru, &
1202 & file=myfile))
THEN
1207 & localde=localde, &
1208 & staggerloc=staggerloc, &
1209 & itemflag=esmf_griditem_mask, &
1212 IF (esmf_logfounderror(rctocheck=rc, &
1213 & msg=esmf_logerr_passthru, &
1215 & file=myfile))
THEN
1220 & localde=localde, &
1221 & staggerloc=staggerloc, &
1222 & itemflag=esmf_griditem_area, &
1225 IF (esmf_logfounderror(rctocheck=rc, &
1226 & msg=esmf_logerr_passthru, &
1228 & file=myfile))
THEN
1236 DO jj=lbnd(2),ubnd(2)
1238 DO ii=lbnd(1),ubnd(1)
1240 ptrx(ii,jj)=ulon(i-1,j-1,blk)*rad_to_deg
1241 ptry(ii,jj)=ulat(i-1,j-1,blk)*rad_to_deg
1242 ptrm(ii,jj)=nint(uvm(i,j,blk))
1243 ptra(ii,jj)=tarea(i,j,blk)
1247 DO jj=lbnd(2),ubnd(2)
1249 DO ii=lbnd(1),ubnd(1)
1251 ptrx(ii,jj)=tlon(i,j,blk)*rad_to_deg
1252 ptry(ii,jj)=tlat(i,j,blk)*rad_to_deg
1253 ptrm(ii,jj)=nint(hm(i,j,blk))
1254 ptra(ii,jj)=tarea(i,j,blk)
1261 IF (
associated(ptrx) )
nullify (ptrx)
1262 IF (
associated(ptry) )
nullify (ptry)
1263 IF (
associated(ptrm) )
nullify (ptrm)
1264 IF (
associated(ptra) )
nullify (ptra)
1272 & filename=
"cice_"// &
1275 & staggerloc=staggerloc, &
1277 IF (esmf_logfounderror(rctocheck=rc, &
1278 & msg=esmf_logerr_passthru, &
1280 & file=myfile))
THEN
1288 CALL esmf_gridcompset (model, &
1291 IF (esmf_logfounderror(rctocheck=rc, &
1292 & msg=esmf_logerr_passthru, &
1294 & file=myfile))
THEN
1299 WRITE (
trac,
'(a,a,i0)')
'<== Exiting CICE_SetGridArrays', &
1932 USE ice_blocks,
ONLY : block
1933 USE ice_blocks,
ONLY : get_block
1934 USE ice_domain,
ONLY : nblocks, blocks_ice
1935 USE ice_domain_size,
ONLY : max_blocks, nx_global, ny_global
1936 USE ice_grid,
ONLY : anglet
1941 integer,
intent(in) :: ng
1942 integer,
intent(out) :: rc
1944 TYPE (esmf_gridcomp) :: model
1948 logical :: got_pair, got_tair
1949 logical :: got_current(2), got_swfx(4), got_wind(2), got_wstr(2)
1952 integer :: blk, i, ii, j, jj
1953 integer :: iyear, iday, imonth, ihour
1954 integer :: importcount
1956 integer :: year, month, day, hour, minutes, seconds, sn, sd
1958 real (dp) :: cicescale, scale, add_offset
1959 real (dp) :: timeindays, time_current, tmin, tmax, tstr, tend
1960 real (dp) :: sigma_c, sigma_l, sigma_r, slopex, slopey
1962 real (dp),
dimension(nx_global,ny_global,max_blocks) :: pair
1964 real (dp),
pointer :: ptr3d(:,:,:) => null()
1966 character (len=*),
parameter :: myfile = &
1967 & __FILE__//
", CICE_Import"
1969 character (ESMF_MAXSTR) :: ofile
1970 character (ESMF_MAXSTR),
allocatable :: importnamelist(:)
1972 TYPE (block) :: my_block
1973 TYPE (esmf_clock) :: clock
1974 TYPE (esmf_field) :: field
1975 TYPE (esmf_time) :: currenttime
1976 TYPE (esmf_vm) :: vm
1983 WRITE (
trac,
'(a,a,i0)')
'==> Entering CICE_Import', &
1993 CALL esmf_gridcompget (model, &
1995 & localpet=localpet, &
1998 IF (esmf_logfounderror(rctocheck=rc, &
1999 & msg=esmf_logerr_passthru, &
2001 & file=myfile))
THEN
2009 CALL esmf_clockget (clock, &
2010 & currtime=currenttime, &
2012 IF (esmf_logfounderror(rctocheck=rc, &
2013 & msg=esmf_logerr_passthru, &
2015 & file=myfile))
THEN
2019 CALL esmf_timeget (currenttime, &
2029 IF (esmf_logfounderror(rctocheck=rc, &
2030 & msg=esmf_logerr_passthru, &
2032 & file=myfile))
THEN
2036 CALL esmf_timeget (currenttime, &
2037 & s_r8=time_current, &
2038 & timestring=time_currentstring, &
2040 IF (esmf_logfounderror(rctocheck=rc, &
2041 & msg=esmf_logerr_passthru, &
2043 & file=myfile))
THEN
2046 timeindays=time_current/86400.0_dp
2047 is=index(time_currentstring,
'T')
2048 IF (is.gt.0) time_currentstring(is:is)=
' '
2055 & itemcount=importcount, &
2057 IF (esmf_logfounderror(rctocheck=rc, &
2058 & msg=esmf_logerr_passthru, &
2060 & file=myfile))
THEN
2064 IF (.not.
allocated(importnamelist))
THEN
2065 allocate ( importnamelist(importcount) )
2068 & itemnamelist=importnamelist, &
2070 IF (esmf_logfounderror(rctocheck=rc, &
2071 & msg=esmf_logerr_passthru, &
2073 & file=myfile))
THEN
2083 got_current(1:2)=.false.
2084 got_swfx(1:4)=.false.
2085 got_wind(1:2)=.false.
2086 got_wstr(1:2)=.false.
2088 fld_loop :
DO ifld=1,importcount
2094 & trim(importnamelist(ifld)), &
2097 IF (esmf_logfounderror(rctocheck=rc, &
2098 & msg=esmf_logerr_passthru, &
2100 & file=myfile))
THEN
2106 CALL esmf_fieldget (field, &
2107 & farrayptr=ptr3d, &
2109 IF (esmf_logfounderror(rctocheck=rc, &
2110 & msg=esmf_logerr_passthru, &
2112 & file=myfile))
THEN
2126 SELECT CASE (trim(adjustl(itemnamelist(ifld))))
2130 CASE (
'zlvl',
'inst_height_lowest')
2132 my_block=get_block(blocks_ice(blk), blk)
2133 DO j=my_block%jlo,my_block%jhi
2135 DO i=my_block%ilo,my_block%ihi
2137 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2138 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2139 fval=scale*ptr3d(ii,jj,blk)+add_offset
2140 myfmin(2)=min(myfmin(2),fval)
2141 myfmax(2)=max(myfmax(2),fval)
2150 CASE (
'rhoa',
'air_density_height_lowest')
2152 my_block=get_block(blocks_ice(blk), blk)
2153 DO j=my_block%jlo,my_block%jhi
2155 DO i=my_block%ilo,my_block%ihi
2157 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2158 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2159 fval=scale*ptr3d(ii,jj,blk)+add_offset
2160 myfmin(2)=min(myfmin(2),fval)
2161 myfmax(2)=max(myfmax(2),fval)
2170 CASE (
'Pair',
'ips',
'inst_pres_height_lowest')
2172 my_block=get_block(blocks_ice(blk), blk)
2173 DO j=my_block%jlo,my_block%jhi
2175 DO i=my_block%ilo,my_block%ihi
2177 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2178 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2179 fval=scale*ptr3d(ii,jj,blk)+add_offset
2180 myfmin(2)=min(myfmin(2),fval)
2181 myfmax(2)=max(myfmax(2),fval)
2191 CASE (
'Tair',
'its',
'inst_temp_height_lowest')
2193 my_block=get_block(blocks_ice(blk), blk)
2194 DO j=my_block%jlo,my_block%jhi
2196 DO i=my_block%ilo,my_block%ihi
2198 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2199 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2200 fval=scale*ptr3d(ii,jj,blk)+add_offset
2201 myfmin(2)=min(myfmin(2),fval)
2202 myfmax(2)=max(myfmax(2),fval)
2212 CASE (
'Qair',
'Qa',
'ishh',
'inst_spec_humid_height_lowest')
2214 my_block=get_block(blocks_ice(blk), blk)
2215 DO j=my_block%jlo,my_block%jhi
2217 DO i=my_block%ilo,my_block%ihi
2219 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2220 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2221 fval=scale*ptr3d(ii,jj,blk)+add_offset
2222 myfmin(2)=min(myfmin(2),fval)
2223 myfmax(2)=max(myfmax(2),fval)
2232 CASE (
'flw',
'mdlwfx',
'mean_down_lw_flx')
2234 my_block=get_block(blocks_ice(blk), blk)
2235 DO j=my_block%jlo,my_block%jhi
2237 DO i=my_block%ilo,my_block%ihi
2239 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2240 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2241 fval=scale*ptr3d(ii,jj,blk)+add_offset
2242 myfmin(2)=min(myfmin(2),fval)
2243 myfmax(2)=max(myfmax(2),fval)
2252 CASE (
'swvdr',
'sw_flux_vis_dir',
'mean_down_sw_vis_dir_flx')
2254 my_block=get_block(blocks_ice(blk), blk)
2255 DO j=my_block%jlo,my_block%jhi
2257 DO i=my_block%ilo,my_block%ihi
2259 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2260 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2261 fval=scale*ptr3d(ii,jj,blk)+add_offset
2262 myfmin(2)=min(myfmin(2),fval)
2263 myfmax(2)=max(myfmax(2),fval)
2273 CASE (
'swvdf',
'sw_flux_vis_dif',
'mean_down_sw_vis_dif_flx')
2275 my_block=get_block(blocks_ice(blk), blk)
2276 DO j=my_block%jlo,my_block%jhi
2278 DO i=my_block%ilo,my_block%ihi
2280 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2281 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2282 fval=scale*ptr3d(ii,jj,blk)+add_offset
2283 myfmin(2)=min(myfmin(2),fval)
2284 myfmax(2)=max(myfmax(2),fval)
2294 CASE (
'swidr',
'sw_flux_nir_dir',
'mean_down_sw_ir_dir_flx')
2296 my_block=get_block(blocks_ice(blk), blk)
2297 DO j=my_block%jlo,my_block%jhi
2299 DO i=my_block%ilo,my_block%ihi
2301 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2302 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2303 fval=scale*ptr3d(ii,jj,blk)+add_offset
2304 myfmin(2)=min(myfmin(2),fval)
2305 myfmax(2)=max(myfmax(2),fval)
2315 CASE (
'swidf',
'sw_flux_nir_dif',
'mean_down_sw_ir_dif_flx')
2317 my_block=get_block(blocks_ice(blk), blk)
2318 DO j=my_block%jlo,my_block%jhi
2320 DO i=my_block%ilo,my_block%ihi
2322 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2323 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2324 fval=scale*ptr3d(ii,jj,blk)+add_offset
2325 myfmin(2)=min(myfmin(2),fval)
2326 myfmax(2)=max(myfmax(2),fval)
2337 CASE (
'Uwind',
'uatm',
'inst_zonal_wind_height_lowest')
2339 my_block=get_block(blocks_ice(blk), blk)
2340 DO j=my_block%jlo,my_block%jhi
2342 DO i=my_block%ilo,my_block%ihi
2344 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2345 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2346 fval=scale*ptr3d(ii,jj,blk)+add_offset
2347 myfmin(2)=min(myfmin(2),fval)
2348 myfmax(2)=max(myfmax(2),fval)
2359 CASE (
'Vwind',
'vatm',
'inst_merid_wind_height_lowest')
2361 my_block=get_block(blocks_ice(blk), blk)
2362 DO j=my_block%jlo,my_block%jhi
2364 DO i=my_block%ilo,my_block%ihi
2366 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2367 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2368 fval=scale*ptr3d(ii,jj,blk)+add_offset
2369 myfmin(2)=min(myfmin(2),fval)
2370 myfmax(2)=max(myfmax(2),fval)
2381 CASE (
'Ustr',
'strax',
'mzmfx',
'mean_zonal_moment_flx')
2383 my_block=get_block(blocks_ice(blk), blk)
2384 DO j=my_block%jlo,my_block%jhi
2386 DO i=my_block%ilo,my_block%ihi
2388 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2389 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2390 fval=scale*ptr3d(ii,jj,blk)+add_offset
2391 myfmin(2)=min(myfmin(2),fval)
2392 myfmax(2)=max(myfmax(2),fval)
2403 CASE (
'Vstr',
'stray',
'mmmfx',
'mean_merid_momentum_flx')
2405 my_block=get_block(blocks_ice(blk), blk)
2406 DO j=my_block%jlo,my_block%jhi
2408 DO i=my_block%ilo,my_block%ihi
2410 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2411 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2412 fval=scale*ptr3d(ii,jj,blk)+add_offset
2413 myfmin(2)=min(myfmin(2),fval)
2414 myfmax(2)=max(myfmax(2),fval)
2424 CASE (
'frain',
'lprec',
'mean_prec_rate')
2426 my_block=get_block(blocks_ice(blk), blk)
2427 DO j=my_block%jlo,my_block%jhi
2429 DO i=my_block%ilo,my_block%ihi
2431 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2432 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2433 fval=scale*ptr3d(ii,jj,blk)+add_offset
2434 myfmin(2)=min(myfmin(2),fval)
2435 myfmax(2)=max(myfmax(2),fval)
2444 CASE (
'fsnow',
'fprec',
'mean_fprec_rate')
2446 my_block=get_block(blocks_ice(blk), blk)
2447 DO j=my_block%jlo,my_block%jhi
2449 DO i=my_block%ilo,my_block%ihi
2451 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2452 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2453 fval=scale*ptr3d(ii,jj,blk)+add_offset
2454 myfmin(2)=min(myfmin(2),fval)
2455 myfmax(2)=max(myfmax(2),fval)
2463 CASE (
'ssh',
'sea_lev')
2465 my_block=get_block(blocks_ice(blk), blk)
2466 DO j=my_block%jlo,my_block%jhi
2468 DO i=my_block%ilo,my_block%ihi
2472 sigma_r=0.5_dp*(ptr3d(ii+1,jj+1,blk)- &
2473 & ptr3d(ii ,jj+1,blk)+ &
2474 & ptr3d(ii+1,jj ,blk)- &
2475 & ptr3d(ii ,jj ,blk))/dxt(i,j,blk)
2476 sigma_l=0.5_dp*(ptr3d(ii ,jj+1,blk)- &
2477 & ptr3d(ii-1,jj+1,blk)+ &
2478 & ptr3d(ii ,jj ,blk)- &
2479 & ptr3d(ii-1,jj ,blk))/dxt(i,j,blk)
2480 sigma_c=0.5_dp*(sigma_r+sigma_l)
2481 IF ((sigma_r*sigma_l).gt.0.0_dp)
THEN
2482 slopex=sign(min(2.0_dp*min(abs(sigma_l), &
2491 sigma_r=0.5_dp*(ptr3d(ii+1,jj+1,blk)- &
2492 & ptr3d(ii+1,jj ,blk)+ &
2493 & ptr3d(ii ,jj+1,blk)- &
2494 & ptr3d(ii ,jj ,blk))/dyt(i,j,blk)
2495 sigma_l=0.5_dp*(ptr3d(ii+1,jj ,blk)- &
2496 & ptr3d(ii+1,jj-1,blk)+ &
2497 & ptr3d(ii ,jj ,blk)- &
2498 & ptr3d(ii ,jj-1,blk))/dyt(i,j,blk)
2499 sigma_c=0.5_dp*(sigma_r+sigma_l)
2500 IF ((sigma_r*sigma_l).gt.0.0_dp)
THEN
2501 slopey=sign(min(2.0_dp*min(abs(sigma_l), &
2506 slopey(i,j,blk)=0.0_dp
2510 ss_tltx(i,j,blk)= slopex*cos(anglet(i,j,blk))+ &
2511 & slopey*sin(anglet(i,j,blk))
2512 ss_tlty(i,j,blk)=-slopex*sin(anglet(i,j,blk))+ &
2513 & slopey*cos(anglet(i,j,blk))
2515 CALL t2ugrid_vector (ss_tltx)
2516 CALL t2ugrid_vector (ss_tlty)
2523 CASE (
'hmix',
'mixed_layer_depth')
2525 my_block=get_block(blocks_ice(blk), blk)
2526 DO j=my_block%jlo,my_block%jhi
2528 DO i=my_block%ilo,my_block%ihi
2530 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2531 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2532 fval=scale*ptr3d(ii,jj,blk)+add_offset
2533 myfmin(2)=min(myfmin(2),fval)
2534 myfmax(2)=max(myfmax(2),fval)
2542 CASE (
'frzmlt',
'freezing_melting_potential')
2544 my_block=get_block(blocks_ice(blk), blk)
2545 DO j=my_block%jlo,my_block%jhi
2547 DO i=my_block%ilo,my_block%ihi
2549 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2550 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2551 fval=scale*ptr3d(ii,jj,blk)+add_offset
2552 myfmin(2)=min(myfmin(2),fval)
2553 myfmax(2)=max(myfmax(2),fval)
2554 frzmlt(i,j,blk)=fval
2561 CASE (
'sst',
'sea_surface_temperature')
2563 my_block=get_block(blocks_ice(blk), blk)
2564 DO j=my_block%jlo,my_block%jhi
2566 DO i=my_block%ilo,my_block%ihi
2568 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2569 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2570 fval=scale*ptr3d(ii,jj,blk)+add_offset
2571 myfmin(2)=min(myfmin(2),fval)
2572 myfmax(2)=max(myfmax(2),fval)
2580 CASE (
'sss',
's_surf',
's_surf_ppt')
2582 my_block=get_block(blocks_ice(blk), blk)
2583 DO j=my_block%jlo,my_block%jhi
2585 DO i=my_block%ilo,my_block%ihi
2587 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2588 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2589 fval=scale*ptr3d(ii,jj,blk)+add_offset
2590 myfmin(2)=min(myfmin(2),fval)
2591 myfmax(2)=max(myfmax(2),fval)
2600 CASE (
'Usur',
'uocn',
'ocn_current_zonal')
2602 my_block=get_block(blocks_ice(blk), blk)
2603 DO j=my_block%jlo,my_block%jhi
2605 DO i=my_block%ilo,my_block%ihi
2607 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2608 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2609 fval=scale*ptr3d(ii,jj,blk)+add_offset
2610 myfmin(2)=min(myfmin(2),fval)
2611 myfmax(2)=max(myfmax(2),fval)
2616 got_current(1)=.true.
2621 CASE (
'Vsur',
'vocn',
'ocn_current_merid')
2623 my_block=get_block(blocks_ice(blk), blk)
2624 DO j=my_block%jlo,my_block%jhi
2626 DO i=my_block%ilo,my_block%ihi
2628 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
2629 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
2630 fval=scale*ptr3d(ii,jj,blk)+add_offset
2631 myfmin(2)=min(myfmin(2),fval)
2632 myfmax(2)=max(myfmax(2),fval)
2637 got_current(2)=.true.
2642 IF (localpet.eq.0)
THEN
2643 WRITE (
cplout,10) trim(importnamelist(ifld)), &
2644 & trim(time_currentstring), &
2647 IF (founderror(exit_flag, noerror, __line__, &
2649 rc=esmf_rc_not_found
2657 WRITE (
cplout,20) localpet &
2658 & lbound(ptr3d, dim=1), ubound(ptr3d, dim=1), &
2659 & lbound(ptr3d, dim=2), ubound(ptr3d, dim=2), &
2660 & lbound(ptr3d, dim=3), ubound(ptr3d, dim=3)
2666 IF (
associated(ptr3d))
nullify (ptr3d)
2670 CALL esmf_vmallreduce (vm, &
2671 & senddata=myfmin, &
2674 & reduceflag=esmf_reduce_min, &
2676 IF (esmf_logfounderror(rctocheck=rc, &
2677 & msg=esmf_logerr_passthru, &
2679 & file=myfile))
THEN
2683 CALL esmf_vmallreduce (vm, &
2684 & senddata=myfmax, &
2687 & reduceflag=esmf_reduce_max, &
2689 IF (esmf_logfounderror(rctocheck=rc, &
2690 & msg=esmf_logerr_passthru, &
2692 & file=myfile))
THEN
2698 IF ((
debuglevel.ge.0).and.(localpet.eq.0))
THEN
2699 WRITE (
cplout,30) trim(importnamelist(ifld)), &
2700 & trim(time_currentstring), ng, &
2702 IF (cicescale.ne.1.0_dp)
THEN
2703 WRITE (
cplout,40) fmin(2), fmax(2), &
2704 &
' ciceScale = ', cicescale
2705 ELSE IF (add_offset.ne.0.0_dp)
THEN
2706 WRITE (
cplout,40) fmin(2), fmax(2), &
2707 &
' AddOffset = ', add_offset
2715 WRITE (ofile,50) ng, trim(importnamelist(ifld)), &
2716 & year, month, day, hour, minutes, seconds
2717 CALL esmf_fieldwrite (field, &
2719 & overwrite=.true., &
2721 IF (esmf_logfounderror(rctocheck=rc, &
2722 & msg=esmf_logerr_passthru, &
2724 & file=myfile))
THEN
2733 IF (
allocated(importnamelist))
deallocate (importnamelist)
2737 IF (importcount.gt.0)
THEN
2744 IF (all(got_wind))
THEN
2746 my_block=get_block(blocks_ice(blk), blk)
2747 DO j=my_block%jlo,my_block%jhi
2748 DO i=my_block%ilo,my_block%ihi
2751 uatm(i,j,blk)= uvel*cos(anglet(i,j,blk))+ &
2752 & vvel*sin(anglet(i,j,blk))
2753 vatm(i,j,blk)=-uvel*sin(anglet(i,j,blk))+ &
2754 & vvel*cos(anglet(i,j,blk))
2755 wind(i,j,blk)=sqrt(uvel*uvel+vvel*vvel)
2763 IF (all(got_wind))
THEN
2765 my_block=get_block(blocks_ice(blk), blk)
2766 DO j=my_block%jlo,my_block%jhi
2767 DO i=my_block%ilo,my_block%ihi
2770 strax(i,j,blk)= uvel*cos(anglet(i,j,blk))+ &
2771 & vvel*sin(anglet(i,j,blk))
2772 stray(i,j,blk)=-uvel*sin(anglet(i,j,blk))+ &
2773 & vvel*cos(anglet(i,j,blk))
2781 IF (all(got_current))
THEN
2783 my_block=get_block(blocks_ice(blk), blk)
2784 DO j=my_block%jlo,my_block%jhi
2785 DO i=my_block%ilo,my_block%ihi
2788 uocn(i,j,blk)= uvel*cos(anglet(i,j,blk))+ &
2789 & vvel*sin(anglet(i,j,blk))
2790 vocn(i,j,blk)=-uvel*sin(anglet(i,j,blk))+ &
2791 & vvel*cos(anglet(i,j,blk))
2799 IF (got_pair.and.got_tair)
THEN
2801 my_block=get_block(blocks_ice(blk), blk)
2802 DO j=my_block%jlo,my_block%jhi
2803 DO i=my_block%ilo,my_block%ihi
2804 pott(i,j,blk)=tair(i,j,blk)* &
2805 & (100000.0_dp/pair(i,j,blk))**0.286_dp
2813 IF (all(got_swfx))
THEN
2815 my_block=get_block(blocks_ice(blk), blk)
2816 DO j=my_block%jlo,my_block%jhi
2817 DO i=my_block%ilo,my_block%ihi
2818 fsw(i,j,blk)=swvdr(i,j,blk)+ &
2829 IF (
allocated(importnamelist))
deallocate (importnamelist)
2832 WRITE (
trac,
'(a,a,i0)')
'<== Exiting CICE_Import', &
2838 10
FORMAT (/,3x,
' CICE_Import - unable to find option to import: ', &
2839 & a,t68,a,/,18x,
'check ''Import(roms)'' in input script: ', &
2841 20
FORMAT (18x,
'PET [',i3.3,
'], Pointer Size: ',6i8)
2842 30
FORMAT (3x,
' CICE_Import - ESMF: importing field ''',a,
'''', &
2843 & t72,a,2x,
'Grid ',i2.2, &
2844 & /,19x,
'(Dmin = ', 1p,e15.8,0p,
' Dmax = ',1p,e15.8,0p,
')')
2845 40
FORMAT (19x,
'(Cmin = ', 1p,e15.8,0p,
' Cmax = ',1p,e15.8,0p, &
2846 & a,1p,e15.8,0p,
')')
2847 50
FORMAT (
'cice_',i2.2,
'_import_',a,
'_',i4.4,2(
'-',i2.2),
'_', &
2848 & i2.2,2(
'.',i2.2),
'.nc')
2861 USE ice_blocks,
ONLY : block
2862 USE ice_blocks,
ONLY : get_block
2863 USE ice_constants,
ONLY : tffresh
2864 USE ice_domain,
ONLY : nblocks, blocks_ice
2865 USE ice_grid,
ONLY : hm, anglet
2870 integer,
intent(in) :: ng
2871 integer,
intent(out) :: rc
2873 TYPE (esmf_gridcomp) :: model
2878 integer :: blk, i, ii, j, jj
2879 integer :: exportcount
2881 integer :: year, month, day, hour, minutes, seconds, sn, sd
2883 real (dp) :: fmin(1), fmax(1), fval, myfmin(1), myfmax(1)
2886 real (dp),
pointer :: ptr3d(:,:,:) => null()
2888 character (len=22) :: time_currentstring
2890 character (len=*),
parameter :: myfile = &
2891 & __FILE__//
", CICE_Export"
2893 character (ESMF_MAXSTR) :: cname, ofile
2894 character (ESMF_MAXSTR),
allocatable :: exportnamelist(:)
2896 TYPE (block) :: my_block
2897 TYPE (esmf_field) :: field
2898 TYPE (esmf_time) :: currenttime
2899 TYPE (esmf_vm) :: vm
2906 WRITE (
trac,
'(a,a,i0)')
'==> Entering CICE_Export', &
2916 CALL esmf_gridcompget (model, &
2917 & localpet=localpet, &
2921 IF (esmf_logfounderror(rctocheck=rc, &
2922 & msg=esmf_logerr_passthru, &
2924 & file=myfile))
THEN
2933 & currtime=currenttime, &
2935 IF (esmf_logfounderror(rctocheck=rc, &
2936 & msg=esmf_logerr_passthru, &
2938 & file=myfile))
THEN
2942 CALL esmf_timeget (currenttime, &
2951 & timestring=time_currentstring, &
2953 IF (esmf_logfounderror(rctocheck=rc, &
2954 & msg=esmf_logerr_passthru, &
2956 & file=myfile))
THEN
2959 is=index(time_currentstring,
'T')
2960 IF (is.gt.0) time_currentstring(is:is)=
' '
2967 & itemcount=exportcount, &
2969 IF (esmf_logfounderror(rctocheck=rc, &
2970 & msg=esmf_logerr_passthru, &
2972 & file=myfile))
THEN
2976 IF (.not.
allocated(exportnamelist))
THEN
2977 allocate ( exportnamelist(exportcount) )
2981 & itemnamelist=exportnamelist, &
2983 IF (esmf_logfounderror(rctocheck=rc, &
2984 & msg=esmf_logerr_passthru, &
2986 & file=myfile))
THEN
2994 fld_loop :
DO ifld=1,exportcount
2999 & trim(exportnamelist(ifld)), &
3002 IF (esmf_logfounderror(rctocheck=rc, &
3003 & msg=esmf_logerr_passthru, &
3005 & file=myfile))
THEN
3011 CALL esmf_fieldget (field, &
3012 & farrayptr=ptr3d, &
3014 IF (esmf_logfounderror(rctocheck=rc, &
3015 & msg=esmf_logerr_passthru, &
3017 & file=myfile))
THEN
3029 SELECT CASE (trim(adjustl(exportnamelist(ifld))))
3033 CASE (
'mask',
'hm',
'ice_mask')
3035 my_block=get_block(blocks_ice(blk), blk)
3036 DO j=my_block%jlo,my_block%jhi
3038 DO i=my_block%ilo,my_block%ihi
3040 IF (hm(i,j,blk).gt.0.5_dp)
THEN
3041 ptr3d(ii,jj,blk)=1.0_dp
3043 ptr3d(ii,jj,blk)=0.0_dp
3045 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3046 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3053 CASE (
'ifrac',
'ice_fraction')
3055 my_block=get_block(blocks_ice(blk), blk)
3056 DO j=my_block%jlo,my_block%jhi
3058 DO i=my_block%ilo,my_block%ihi
3060 ptr3d(ii,jj,blk)=aice(i,j,blk)
3061 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3062 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3069 CASE (
'sit',
'sea_ice_temperature')
3071 my_block=get_block(blocks_ice(blk), blk)
3072 DO j=my_block%jlo,my_block%jhi
3074 DO i=my_block%ilo,my_block%ihi
3076 IF (aice(i,j,blk).gt.0.0_dp)
THEN
3077 ptr3d(ii,jj,blk)=tffresh+trcr(i,j,1,blk)
3079 ptr3d(ii,jj,blk)=0.0_dp
3081 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3082 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3090 CASE (
'alvdr',
'inst_ice_vis_dir_albedo')
3092 my_block=get_block(blocks_ice(blk), blk)
3093 DO j=my_block%jlo,my_block%jhi
3095 DO i=my_block%ilo,my_block%ihi
3097 ptr3d(ii,jj,blk)=alvdr(i,j,blk)
3098 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3099 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3107 CASE (
'alvdf',
'inst_ice_vis_dif_albedo')
3109 my_block=get_block(blocks_ice(blk), blk)
3110 DO j=my_block%jlo,my_block%jhi
3112 DO i=my_block%ilo,my_block%ihi
3114 ptr3d(ii,jj,blk)=alvdf(i,j,blk)
3115 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3116 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3124 CASE (
'alidr',
'inst_ice_ir_dir_albedo')
3126 my_block=get_block(blocks_ice(blk), blk)
3127 DO j=my_block%jlo,my_block%jhi
3129 DO i=my_block%ilo,my_block%ihi
3131 ptr3d(ii,jj,blk)=alidr(i,j,blk)
3132 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3133 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3141 CASE (
'alidf',
'inst_ice_ir_dif_albedo')
3143 my_block=get_block(blocks_ice(blk), blk)
3144 DO j=my_block%jlo,my_block%jhi
3146 DO i=my_block%ilo,my_block%ihi
3148 ptr3d(ii,jj,blk)=alidf(i,j,blk)
3149 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3150 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3157 CASE (
'fswthru',
'sw_pen_to_ocean')
3159 my_block=get_block(blocks_ice(blk), blk)
3160 DO j=my_block%jlo,my_block%jhi
3162 DO i=my_block%ilo,my_block%ihi
3164 ptr3d(ii,jj,blk)=fswthru(i,j,blk)
3165 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3166 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3174 CASE (
'fswthruvdr',
'net_sw_vis_dir_flx')
3176 my_block=get_block(blocks_ice(blk), blk)
3177 DO j=my_block%jlo,my_block%jhi
3179 DO i=my_block%ilo,my_block%ihi
3181 ptr3d(ii,jj,blk)=fswthruvdr(i,j,blk)
3182 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3183 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3191 CASE (
'fswthruvdf',
'net_sw_vis_dif_flx')
3193 my_block=get_block(blocks_ice(blk), blk)
3194 DO j=my_block%jlo,my_block%jhi
3196 DO i=my_block%ilo,my_block%ihi
3198 ptr3d(ii,jj,blk)=fswthruvdf(i,j,blk)
3199 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3200 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3208 CASE (
'fswthruidr',
'net_sw_ir_dir_flx')
3210 my_block=get_block(blocks_ice(blk), blk)
3211 DO j=my_block%jlo,my_block%jhi
3213 DO i=my_block%ilo,my_block%ihi
3215 ptr3d(ii,jj,blk)=fswthruidr(i,j,blk)
3216 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3217 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3225 CASE (
'fswthruidf',
'net_sw_ir_dif_flx')
3227 my_block=get_block(blocks_ice(blk), blk)
3228 DO j=my_block%jlo,my_block%jhi
3230 DO i=my_block%ilo,my_block%ihi
3232 ptr3d(ii,jj,blk)=fswthruidf(i,j,blk)
3233 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3234 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3242 CASE (
'flwout',
'mean_up_lw_flx_ice')
3244 my_block=get_block(blocks_ice(blk), blk)
3245 DO j=my_block%jlo,my_block%jhi
3247 DO i=my_block%ilo,my_block%ihi
3249 ptr3d(ii,jj,blk)=flwout(i,j,blk)
3250 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3251 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3258 CASE (
'fsens',
'mean_sensi_heat_flx_atm_into_ice')
3260 my_block=get_block(blocks_ice(blk), blk)
3261 DO j=my_block%jlo,my_block%jhi
3263 DO i=my_block%ilo,my_block%ihi
3265 ptr3d(ii,jj,blk)=fsens(i,j,blk)
3266 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3267 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3274 CASE (
'flat',
'mean_laten_heat_flx_atm_into_ice')
3276 my_block=get_block(blocks_ice(blk), blk)
3277 DO j=my_block%jlo,my_block%jhi
3279 DO i=my_block%ilo,my_block%ihi
3281 ptr3d(ii,jj,blk)=flat(i,j,blk)
3282 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3283 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3290 CASE (
'evap',
'mean_evap_rate_atm_into_ice')
3292 my_block=get_block(blocks_ice(blk), blk)
3293 DO j=my_block%jlo,my_block%jhi
3295 DO i=my_block%ilo,my_block%ihi
3297 ptr3d(ii,jj,blk)=evap(i,j,blk)
3298 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3299 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3306 CASE (
'fhocn',
'net_heat_flx_to_ocn')
3308 my_block=get_block(blocks_ice(blk), blk)
3309 DO j=my_block%jlo,my_block%jhi
3311 DO i=my_block%ilo,my_block%ihi
3313 ptr3d(ii,jj,blk)=fhocn(i,j,blk)
3314 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3315 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3322 CASE (
'fresh',
'fresh_water_flx_to_ocean')
3324 my_block=get_block(blocks_ice(blk), blk)
3325 DO j=my_block%jlo,my_block%jhi
3327 DO i=my_block%ilo,my_block%ihi
3329 ptr3d(ii,jj,blk)=fresh(i,j,blk)
3330 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3331 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3338 CASE (
'fsalt',
'salt_flx_to_ocean')
3340 my_block=get_block(blocks_ice(blk), blk)
3341 DO j=my_block%jlo,my_block%jhi
3343 DO i=my_block%ilo,my_block%ihi
3345 ptr3d(ii,jj,blk)=fsalt(i,j,blk)
3346 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3347 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3354 CASE (
'vice',
'mean_ice_volume')
3356 my_block=get_block(blocks_ice(blk), blk)
3357 DO j=my_block%jlo,my_block%jhi
3359 DO i=my_block%ilo,my_block%ihi
3361 ptr3d(ii,jj,blk)=vice(i,j,blk)
3362 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3363 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3370 CASE (
'vsno',
'mean_snow_volume')
3372 my_block=get_block(blocks_ice(blk), blk)
3373 DO j=my_block%jlo,my_block%jhi
3375 DO i=my_block%ilo,my_block%ihi
3377 ptr3d(ii,jj,blk)=vsno(i,j,blk)
3378 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3379 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3386 CASE (
'strairxT',
'stress_on_air_ice_zonal')
3388 my_block=get_block(blocks_ice(blk), blk)
3389 DO j=my_block%jlo,my_block%jhi
3391 DO i=my_block%ilo,my_block%ihi
3393 ui=strairxt(i,j,blk)
3394 vj=strairyt(i,j,blk)
3395 ptr3d(ii,jj,blk)=ui*cos(anglet(i,j,blk))- &
3396 & vj*sin(anglet(i,j,blk))
3397 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3398 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3405 CASE (
'strairyT',
'stress_on_air_ice_merid')
3407 my_block=get_block(blocks_ice(blk), blk)
3408 DO j=my_block%jlo,my_block%jhi
3410 DO i=my_block%ilo,my_block%ihi
3412 ui=strairxt(i,j,blk)
3413 vj=strairyt(i,j,blk)
3414 ptr3d(ii,jj,blk)=ui*sin(anglet(i,j,blk))+ &
3415 & vj*cos(anglet(i,j,blk))
3416 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3417 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3424 CASE (
'strocnxT',
'stress_on_ocn_ice_zonal')
3426 my_block=get_block(blocks_ice(blk), blk)
3427 DO j=my_block%jlo,my_block%jhi
3429 DO i=my_block%ilo,my_block%ihi
3431 ui=-strocnxt(i,j,blk)
3432 vj=-strocnyt(i,j,blk)
3433 ptr3d(ii,jj,blk)=ui*cos(anglet(i,j,blk))- &
3434 & vj*sin(anglet(i,j,blk))
3435 myfmin(1)=min(myfmin(1),ptr3d(ii,jj,blk))
3436 myfmax(1)=max(myfmax(1),ptr3d(ii,jj,blk))
3443 CASE (
'strocnyT',
'stress_on_ocn_ice_merid')
3445 my_block=get_block(blocks_ice(blk), blk)
3446 DO j=my_block%jlo,my_block%jhi
3448 DO i=my_block%ilo,my_block%ihi
3450 ui=-strocnxt(i,j,blk)
3451 vj=-strocnyt(i,j,blk)
3452 ptr(ii,jj,blk)=ui*sin(anglet(i,j,blk))+ &
3453 & vj*cos(anglet(i,j,blk))
3461 IF (localpet.eq.0)
THEN
3462 WRITE (
cplout,10) trim(adjustl(exportnamelist(ifld))), &
3465 rc=esmf_rc_not_found
3466 IF (esmf_logfounderror(rctocheck=rc, &
3467 & msg=esmf_logerr_passthru, &
3469 & file=myfile))
THEN
3477 IF (
associated(ptr3d))
nullify (ptr3d)
3482 CALL esmf_vmallreduce (vm, &
3483 & senddata=myfmin, &
3486 & reduceflag=esmf_reduce_min, &
3488 IF (esmf_logfounderror(rctocheck=rc, &
3489 & msg=esmf_logerr_passthru, &
3491 & file=myfile))
THEN
3495 CALL esmf_vmallreduce (vm, &
3496 & senddata=myfmax, &
3499 & reduceflag=esmf_reduce_max, &
3501 IF (esmf_logfounderror(rctocheck=rc, &
3502 & msg=esmf_logerr_passthru, &
3504 & file=myfile))
THEN
3508 IF (localpet.eq.0)
THEN
3509 WRITE (
cplout,20) trim(exportnamelist(ifld)), &
3510 & trim(time_currentstring), ng, &
3518 WRITE (ofile,10) ng, trim(exportnamelist(ifld)), &
3519 & year, month, day, hour, minutes, seconds
3520 CALL esmf_fieldwrite (field, &
3522 & overwrite=.true., &
3524 IF (esmf_logfounderror(rctocheck=rc, &
3525 & msg=esmf_logerr_passthru, &
3527 & file=myfile))
THEN
3535 IF (
allocated(exportnamelist))
deallocate (exportnamelist)
3539 IF (exportcount.gt.0)
THEN
3544 WRITE (
trac,
'(a,a,i0)')
'<== Exiting CICE_Export', &
3550 10
FORMAT (/,3x,
' CICE_Export - unable to find option to export: ', &
3551 & a,/,18x,
'check ''Export(cice)'' in input script: ',a)
3552 20
FORMAT (3x,
' CICE_Export - ESMF: exporting field ''',a,
'''', &
3553 & t72,a,2x,
'Grid ',i2.2,/, &
3554 & 18x,
'(Cmin = ', 1p,e15.8,0p,
' Cmax = ',1p,e15.8,0p,
')')
3555 30
FORMAT (
'cice_',i2.2,
'_export_',a,
'_',i4.4,2(
'-',i2.2),
'_', &
3556 & i2.2,2(
'.',i2.2),
'.nc')