55 real(RP),
parameter :: missval_tg = 50.0_rp
56 real(RP),
parameter :: missval_strg = 0.0_rp
57 real(RP),
parameter :: missval_sst = 273.1506_rp
60 real(SP),
allocatable :: read1DX(:)
61 real(SP),
allocatable :: read1DY(:)
62 real(SP),
allocatable :: read1DZ(:)
63 real(SP),
allocatable :: read3DS(:,:,:,:)
64 real(SP),
allocatable :: read4D (:,:,:,:)
66 real(SP),
allocatable :: read1DLZ(:)
67 real(SP),
allocatable :: read4DL(:,:,:,:)
81 integer,
intent(out) :: dims(6)
82 integer,
intent(out) :: timelen
83 character(len=*),
intent(in) :: basename_org
85 character(len=H_LONG) :: basename
86 integer :: dims_ncm(4)
90 if(
io_l )
write(
io_fid_log,*)
'+++ Real Case/Atom Input File Type: NICAM-NETCDF' 91 basename =
"ms_pres"//trim(basename_org)
92 call filegetshape( dims_ncm(:), trim(basename),
"ms_pres", 1, single=.true. )
105 allocate( read1dx( dims(2) ) )
106 allocate( read1dy( dims(3) ) )
107 allocate( read1dz( dims(1) ) )
108 allocate( read3ds( 1, dims(2), dims(3), 1 ) )
109 allocate( read4d( dims(1), dims(2), dims(3), 1 ) )
129 real(RP),
intent(out) :: lon_org(:,:)
130 real(RP),
intent(out) :: lat_org(:,:)
131 real(RP),
intent(out) :: cz_org(:,:,:)
132 character(len=*),
intent(in) :: basename_num
133 integer,
intent(in) :: dims(6)
135 character(len=H_LONG) :: basename
139 if(
io_l )
write(
io_fid_log,*)
'+++ ScaleLib/IO[realinput]/Categ[AtomOpenNICAM]' 141 basename =
"ms_pres"//trim(basename_num)
142 call fileread( read1dx(:), trim(basename),
"lon", 1, 1, single=.true. )
144 lon_org(:,j) = read1dx(:) * d2r
147 call fileread( read1dy(:), trim(basename),
"lat", 1, 1, single=.true. )
149 lat_org(i,:) = read1dy(:) * d2r
152 call fileread( read1dz(:), trim(basename),
"lev", 1, 1, single=.true. )
155 cz_org(3:,i,j) = read1dz(:)
159 call externalfileread( read4d(:,:,:,:), trim(basename),
"ms_pres", 1, 1, myrank, inicam, single=.true. )
162 do k = dims(1)+2, 3, -1
166 if ( read4d(k-2,i,j,1) <= 0.0_rp )
then 168 cz_org(1:k,i,j) = 0.0_rp
197 externalfilereadoffset
202 real(RP),
intent(out) :: velz_org(:,:,:)
203 real(RP),
intent(out) :: velx_org(:,:,:)
204 real(RP),
intent(out) :: vely_org(:,:,:)
205 real(RP),
intent(out) :: pres_org(:,:,:)
206 real(RP),
intent(out) :: temp_org(:,:,:)
207 real(RP),
intent(out) :: qtrc_org(:,:,:,:)
208 character(len=*),
intent(in) :: basename_num
209 integer,
intent(in) :: dims(6)
210 integer,
intent(in) :: it
212 real(RP) :: tsfc_org (dims(2),dims(3))
213 real(RP) :: slp_org (dims(2),dims(3))
214 real(RP) :: qvsfc_org(dims(2),dims(3))
222 character(len=H_LONG) :: basename
225 if(
io_l )
write(
io_fid_log,*)
'+++ ScaleLib/IO[realinput]/Categ[AtomInputNICAM]' 228 basename =
"ms_u"//trim(basename_num)
229 call externalfilereadoffset( read4d(:,:,:,:), trim(basename),
"ms_u", it, it, myrank, inicam, single=.true. )
233 if ( abs(abs(read4d(k,i,j,1))-300.0_sp) < sqrt(eps) )
then 234 velx_org(k+2,i,j) = 0.0_rp
236 velx_org(k+2,i,j) =
real( read4D(k,i,j,1), kind=
rp )
239 velx_org(1:2,i,j) = 0.0_rp
243 basename =
"ms_v"//trim(basename_num)
244 call externalfilereadoffset( read4d(:,:,:,:), &
254 if ( abs(abs(read4d(k,i,j,1))-300.0_sp) < sqrt(eps) )
then 255 vely_org(k+2,i,j) = 0.0_rp
257 vely_org(k+2,i,j) =
real( read4D(k,i,j,1), kind=
rp )
260 vely_org(1:2,i,j) = 0.0_rp
264 velz_org(:,:,:) = 0.0_rp
271 basename =
"ms_tem"//trim(basename_num)
272 call externalfilereadoffset( read4d(:,:,:,:), trim(basename),
"ms_tem", it, it, myrank, inicam, single=.true. )
275 do k = dims(1), 1, -1
276 if ( read4d(k,i,j,1) <= 50.0_sp )
then 280 temp_org(1:k+2,i,j) =
real( read4D(k,i,j,1), kind=
rp )
290 basename =
"ss_slp"//trim(basename_num)
291 call externalfilereadoffset( read3ds(:,:,:,:), trim(basename),
"ss_slp", it, it, myrank, inicam, single=.true. )
292 slp_org(:,:) =
real( read3DS(1,:,:,1), kind=
rp )
293 basename =
"ms_pres"//trim(basename_num)
294 call externalfileread( read4d(:,:,:,:), trim(basename),
"ms_pres", it, it, myrank, inicam, single=.true. )
295 pres_org(3:,:,:) = read4d(:,:,:,1)
298 do k = dims(1), 1, -1
299 if ( read4d(k,i,j,1) < 0.0_sp )
then 302 pres_org(k+2,i,j) =
real( read4D(k,i,j,1), kind=
rp )
307 pott = temp_org(k+3,i,j) * (p00/pres_org(k+3,i,j))**rovcp
309 pres_org(1:k+2,i,j) = slp_org(i,j)
310 temp_org(1:k+2,i,j) = pott * (slp_org(i,j)/p00)**rovcp
314 basename =
"ss_q2m"//trim(basename_num)
315 call externalfileread( read3ds(:,:,:,:), trim(basename),
"ss_q2m", it, it, myrank, inicam, single=.true. )
316 qvsfc_org(:,:) =
real( read3DS(1,:,:,1), kind=
rp )
317 qtrc_org(:,:,:,:) = 0.0_rp
318 basename =
"ms_qv"//trim(basename_num)
319 call externalfileread( read4d(:,:,:,:), trim(basename),
"ms_qv", it, it, myrank, inicam, single=.true. )
322 do k = dims(1), 1, -1
323 if ( read4d(k,i,j,1) < 0.0_sp )
then 324 qtrc_org(1:k+2,i,j,
i_qv) = qvsfc_org(i,j)
327 qtrc_org(k+2,i,j,
i_qv) =
real( read4D(k,i,j,1), kind=
rp )
330 qtrc_org(1:2,i,j,
i_qv) = qvsfc_org(i,j)
347 integer,
intent(out) :: ldims(3)
348 character(len=*),
intent(in) :: basename_org
350 character(len=H_LONG) :: basename
351 integer :: dims_ncm(4)
355 if(
io_l )
write(
io_fid_log,*)
'+++ Real Case/Land Input File Type: NICAM-NETCDF' 356 basename =
"la_tg"//trim(basename_org)
357 call filegetshape( dims_ncm(:), trim(basename),
"la_tg", 1, single=.true. )
359 ldims(1) = dims_ncm(3)
360 ldims(2) = dims_ncm(1)
361 ldims(3) = dims_ncm(2)
363 if ( .not.
allocated(read1dx) )
then 364 allocate( read1dx( ldims(2) ) )
365 allocate( read1dy( ldims(3) ) )
366 allocate( read3ds( 1, ldims(2), ldims(3), 1 ) )
369 allocate( read1dlz( ldims(1) ) )
370 allocate( read4dl( ldims(1), ldims(2), ldims(3), 1 ) )
387 use_file_landwater, &
398 externalfilereadoffset
401 real(RP),
intent(out) :: tg_org(:,:,:)
402 real(RP),
intent(out) :: strg_org(:,:,:)
403 real(RP),
intent(out) :: lst_org(:,:)
404 real(RP),
intent(out) :: llon_org(:,:)
405 real(RP),
intent(out) :: llat_org(:,:)
406 real(RP),
intent(out) :: lz_org(:)
407 real(RP),
intent(out) :: topo_org(:,:)
408 real(RP),
intent(out) :: lmask_org(:,:)
409 character(len=*),
intent(in) :: basename_num
410 integer,
intent(in) :: ldims(3)
411 logical,
intent(in) :: use_file_landwater
412 integer,
intent(in) :: it
417 character(len=H_LONG) :: basename
420 if(
io_l )
write(
io_fid_log,*)
'+++ ScaleLib/IO[realinput]/Categ[LandInputNICAM]' 422 basename =
"la_tg"//trim(basename_num)
423 call fileread( read1dlz(:), trim(basename),
"lev", 1, 1, single=.true. )
424 lz_org(:) = read1dlz(:)
426 call fileread( read1dx(:), trim(basename),
"lon", 1, 1, single=.true. )
428 llon_org(:,j) = read1dx(:) * d2r
431 call fileread( read1dy(:), trim(basename),
"lat", 1, 1, single=.true. )
433 llat_org(i,:) = read1dy(:) * d2r
436 basename =
"lsmask"//trim(basename_num)
437 call externalfileread( read3ds(:,:,:,:), &
445 lmask_org(:,:) =
real( read3DS(1,:,:,1), kind=
rp )
447 basename =
"la_tg"//trim(basename_num)
448 call externalfilereadoffset( read4dl(:,:,:,:), &
455 tg_org(:,:,:) =
real( read4DL(:,:,:,1), kind=
rp )
457 if( use_file_landwater )
then 458 basename =
"la_wg"//trim(basename_num)
459 call externalfilereadoffset( read4dl(:,:,:,:), &
466 strg_org(:,:,:) =
real( read4DL(:,:,:,1), kind=
rp )
469 basename =
"ss_tem_sfc"//trim(basename_num)
470 call externalfileread( read3ds(:,:,:,:), &
477 lst_org(:,:) =
real( read3DS(1,:,:,1), kind=
rp )
484 if ( abs(tg_org(k,i,j) -missval_tg ) < eps ) tg_org(k,i,j) = undef
485 if ( abs(strg_org(k,i,j)-missval_strg) < eps ) strg_org(k,i,j) = undef
505 integer,
intent(out) :: odims(2)
506 integer,
intent(out) :: timelen
507 character(len=*),
intent(in) :: basename_org
509 character(len=H_LONG) :: basename
510 integer :: dims_ncm(4)
514 if(
io_l )
write(
io_fid_log,*)
'+++ Real Case/Ocean Input File Type: NICAM-NETCDF' 516 basename =
"oa_sst"//trim(basename_org)
517 call filegetshape( dims_ncm(:), trim(basename),
"oa_sst", 1, single=.true. )
518 odims(1) = dims_ncm(1)
519 odims(2) = dims_ncm(2)
521 timelen = dims_ncm(4)
523 if ( .not.
allocated(read1dx) )
then 524 allocate( read1dx( odims(1) ) )
525 allocate( read1dy( odims(2) ) )
526 allocate( read3ds( 1, odims(1), odims(2), 1 ) )
547 real(RP),
intent(out) :: olon_org(:,:)
548 real(RP),
intent(out) :: olat_org(:,:)
549 real(RP),
intent(out) :: omask_org(:,:)
550 character(len=*),
intent(in) :: basename_num
551 integer,
intent(in) :: odims(2)
553 character(len=H_LONG) :: basename
557 if(
io_l )
write(
io_fid_log,*)
'+++ ScaleLib/IO[realinput]/Categ[OceanOpenNICAM]' 559 basename =
"oa_sst"//trim(basename_num)
560 call fileread( read1dx(:), trim(basename),
"lon", 1, 1, single=.true. )
562 olon_org(:,j) = read1dx(:) * d2r
565 call fileread( read1dy(:), trim(basename),
"lat", 1, 1, single=.true. )
567 olat_org(i,:) = read1dy(:) * d2r
570 basename =
"lsmask"//trim(basename_num)
571 call externalfileread( read3ds(:,:,:,:), &
579 omask_org(:,:) =
real( read3DS(1,:,:,1), kind=
rp )
601 externalfilereadoffset
604 real(RP),
intent(out) :: tw_org(:,:)
605 real(RP),
intent(out) :: sst_org(:,:)
606 character(len=*),
intent(in) :: basename_num
607 integer,
intent(in) :: odims(2)
608 real(RP),
intent(in) :: omask_org(:,:)
609 integer,
intent(in) :: it
614 character(len=H_LONG) :: basename
617 if(
io_l )
write(
io_fid_log,*)
'+++ ScaleLib/IO[realinput]/Categ[OceanInputNICAM]' 620 basename =
"oa_sst"//trim(basename_num)
621 call externalfilereadoffset( read3ds(:,:,:,:), &
628 sst_org(:,:) =
real( read3DS(1,:,:,1), kind=
rp )
639 if ( abs(omask_org(i,j)-1.0_rp) < eps )
then 642 sst_org(i,j) = ( sst_org(i,j) - missval_sst*omask_org(i,j) ) &
643 / ( 1.0_rp - omask_org(i,j) )
real(rp), public const_cpdry
specific heat (dry air,constant pressure) [J/kg/K]
subroutine, public prc_mpistop
Abort MPI.
integer, parameter, public inicam
logical, public io_l
output log or not? (this process)
real(rp), parameter, public const_tem00
temperature reference (0C) [K]
real(rp), public const_d2r
degree to radian
real(rp), public const_rdry
specific gas constant (dry air) [J/kg/K]
real(rp), public const_undef
real(rp), public const_pre00
pressure reference [Pa]
integer, public prc_myrank
process num in local communicator
real(rp), public const_eps
small number
integer, public io_fid_log
Log file ID.
integer, parameter, public rp