48 integer :: file_id_atm, file_id_ocn, file_id_lnd
72 integer,
intent(out) :: dims(6)
73 integer,
intent(out) :: timelen
74 logical,
intent(out) :: qtrc_flag(
qa)
75 real(
rp),
allocatable,
intent(out) :: lon_all(:,:)
76 real(
rp),
allocatable,
intent(out) :: lat_all(:,:)
78 character(len=*),
intent(in) :: basename_org
79 character(len=*),
intent(in) :: basename_num
84 real(
rp),
allocatable :: lon1d(:), lat1d(:)
92 log_info(
"ParentAtmosSetupGrADS",*)
'Setup'
105 if ( basename_org ==
"" )
then
106 log_error(
"ParentAtmosSetupGrADS",*)
'"BASENAME_ORG" is not specified in "PARAM_MKINIT_REAL_ATMOS"!', trim(basename_org)
114 qtrc_flag(:) = .false.
119 qtrc_flag(iq) = var_id > 0
122 call file_grads_get_shape( file_id_atm,
"U", &
131 allocate( lon_all(dims(2), dims(3)) )
132 allocate( lat_all(dims(2), dims(3)) )
135 call read2d( (/1,1/), dims(2:3), lon_all(:,:),
"lon", file_id_atm, basename_num, oned=1 )
136 lon_all(:,:) = lon_all(:,:) * d2r
138 call read2d( (/1,1/), dims(2:3), lat_all(:,:),
"lat", file_id_atm, basename_num, oned=2 )
139 lat_all(:,:) = lat_all(:,:) * d2r
149 KA_org, KS_org, KE_org, &
150 IA_org, IS_org, IE_org, &
151 JA_org, JS_org, JE_org, &
188 integer,
intent(in) :: ka_org
189 integer,
intent(in) :: ks_org
190 integer,
intent(in) :: ke_org
191 integer,
intent(in) :: ia_org
192 integer,
intent(in) :: is_org
193 integer,
intent(in) :: ie_org
194 integer,
intent(in) :: ja_org
195 integer,
intent(in) :: js_org
196 integer,
intent(in) :: je_org
197 integer,
intent(in) ::
qa
198 real(
rp),
intent(out) :: w_org(ka_org,ia_org,ja_org)
199 real(
rp),
intent(out) :: u_org(ka_org,ia_org,ja_org)
200 real(
rp),
intent(out) :: v_org(ka_org,ia_org,ja_org)
201 real(
rp),
intent(out) :: pres_org(ka_org,ia_org,ja_org)
202 real(
rp),
intent(out) :: dens_org(ka_org,ia_org,ja_org)
203 real(
rp),
intent(out) :: pt_org(ka_org,ia_org,ja_org)
204 real(
rp),
intent(out) :: temp_org(ka_org,ia_org,ja_org)
205 real(
rp),
intent(out) :: qv_org(ka_org,ia_org,ja_org)
206 real(
rp),
intent(out) :: rh_org(ka_org,ia_org,ja_org)
207 real(
rp),
intent(out) :: qhyd_org(ka_org,ia_org,ja_org,
n_hyd)
208 real(
rp),
intent(out) :: qtrc_org(ka_org,ia_org,ja_org,
qa)
209 real(
rp),
intent(out) :: cz_org(ka_org,ia_org,ja_org)
210 logical,
intent(out) :: nopres
211 logical,
intent(out) :: nodens
212 logical,
intent(out) :: temp2pt
213 logical,
intent(out) :: rh2qv
214 character(len=*),
intent(in) :: basename_num
215 logical,
intent(in) :: sfc_diagnoses
216 integer,
intent(in) :: nt
218 character(len=H_SHORT) :: item
220 integer :: lm_layer(ia_org,ja_org)
222 real(
rp) :: work(ka_org-2,ia_org,ja_org)
223 real(
rp) :: work2d(ia_org,ja_org)
225 integer :: start(3), count(3)
229 integer :: i, j,
k, iq
232 start(:) = (/1,is_org,js_org/)
233 count(:) = (/ka_org-2,ia_org,ja_org/)
237 call read3d( start(:), count(:), work(:,:,:),
"pressure", file_id_atm, basename_num, exist=exist, step=nt )
238 if ( .not. exist )
then
239 call read3d( start(:), count(:), work(:,:,:),
"plev", file_id_atm, basename_num, exist=exist, step=nt )
240 if ( .not. exist ) nopres = .true.
242 if ( .not. nopres )
then
247 pres_org(
k+2,i,j) = work(
k,i,j)
255 call read3d( start(:), count(:), work(:,:,:),
"DENS", file_id_atm, basename_num, exist=exist, step=nt )
261 dens_org(
k+2,i,j) = work(
k,i,j)
271 call read3d( start(:), count(:), work(:,:,:),
"W", file_id_atm, basename_num, exist=exist, step=nt )
277 w_org(
k+2,i,j) = work(
k,i,j)
286 w_org(
k+2,i,j) = 0.0_rp
293 call read3d( start(:), count(:), work(:,:,:),
"U", file_id_atm, basename_num, exist=exist, step=nt )
299 u_org(
k+2,i,j) = work(
k,i,j)
304 log_error(
"ParentAtmosInputGrADS",*)
'"U" is requierd'
309 call read3d( start(:), count(:), work(:,:,:),
"V", file_id_atm, basename_num, exist=exist, step=nt )
315 v_org(
k+2,i,j) = work(
k,i,j)
320 log_error(
"ParentAtmosInputGrADS",*)
'"V" is requierd'
325 call read3d( start(:), count(:), work(:,:,:),
"PT", file_id_atm, basename_num, exist=exist, step=nt )
331 pt_org(
k+2,i,j) = work(
k,i,j)
337 call read3d( start(:), count(:), work(:,:,:),
"T", file_id_atm, basename_num, exist=exist, step=nt )
343 temp_org(
k+2,i,j) = work(
k,i,j)
349 log_error(
"ParentAtmosInputGrADS",*)
'"PT" or "T" is requierd'
356 call read3d( start(:), count(:), work(:,:,:),
"height", file_id_atm, basename_num, exist=exist, step=nt )
357 if ( .not. exist )
then
358 call read3d( start(:), count(:), work(:,:,:),
"HGT", file_id_atm, basename_num, exist=exist, step=nt )
359 if ( .not. exist )
then
362 call read3d( start(:), count(:), work(:,:,:),
"GP", file_id_atm, basename_num, exist=exist, step=nt )
363 if ( .not. exist )
then
364 log_error(
"ParentAtmosInputGrADS",*)
'"height", "HGT", or "GP" is requierd'
373 cz_org(
k+2,i,j) = work(
k,i,j) * coef
379 call read3d( start(:), count(:), work(:,:,:),
"QV", file_id_atm, basename_num, exist=exist, step=nt )
385 qv_org(
k+2,i,j) = work(
k,i,j)
391 call read3d( start(:), count(:), work(:,:,:),
"RH", file_id_atm, basename_num, exist=exist, step=nt )
397 rh_org(
k+2,i,j) = work(
k,i,j)
407 qv_org(
k+2,i,j) = 0.0_rp
417 call read3d( start(:), count(:), work(:,:,:),
hyd_name(iq), file_id_atm, basename_num, exist=exist, step=nt )
423 qhyd_org(
k+2,i,j,iq) = work(
k,i,j)
432 qhyd_org(
k+2,i,j,iq) = 0.0_rp
442 qhyd_org(
k,i,j,iq) = undef
452 call read3d( start(:), count(:), work(:,:,:),
tracer_name(iq), file_id_atm, basename_num, exist=exist, step=nt )
458 qtrc_org(
k+2,i,j,iq) = work(
k,i,j)
467 qtrc_org(
k+2,i,j,iq) = undef
475 if ( sfc_diagnoses )
then
478 call read2d( start(2:), count(2:), work2d(:,:),
"MSLP", file_id_atm, basename_num, exist=exist, step=nt )
483 pres_org(1,i,j) = work2d(i,j)
490 pres_org(1,i,j) = undef
496 call read2d( start(2:), count(2:), work2d(:,:),
"SFC_PRES", file_id_atm, basename_num, exist=exist, step=nt )
497 if ( .not. exist )
then
498 call read2d( start(2:), count(2:), work2d(:,:),
"PSFC", file_id_atm, basename_num, exist=exist, step=nt )
504 pres_org(2,i,j) = work2d(i,j)
511 pres_org(2,i,j) = undef
517 call read2d( start(2:), count(2:), work2d(:,:),
"U10", file_id_atm, basename_num, exist=exist, step=nt )
522 u_org(2,i,j) = work2d(i,j)
535 call read2d( start(2:), count(2:), work2d(:,:),
"V10", file_id_atm, basename_num, exist=exist, step=nt )
540 v_org(2,i,j) = work2d(i,j)
553 call read2d( start(2:), count(2:), work2d(:,:),
"T2", file_id_atm, basename_num, exist=exist, step=nt )
558 temp_org(2,i,j) = work2d(i,j)
565 temp_org(2,i,j) = undef
572 call read2d( start(2:), count(2:), work2d(:,:),
"RH2", file_id_atm, basename_num, exist=exist, step=nt )
577 rh_org(2,i,j) = work2d(i,j)
584 rh_org(2,i,j) = undef
589 call read2d( start(2:), count(2:), work2d(:,:),
"Q2", file_id_atm, basename_num, exist=exist, step=nt )
594 qv_org(2,i,j) = work2d(i,j)
601 qv_org(2,i,j) = undef
610 call read2d( start(2:), count(2:), work2d(:,:),
"topo", file_id_atm, basename_num, exist=exist, step=nt )
611 if ( .not. exist )
then
614 call read2d( start(2:), count(2:), work2d(:,:),
"SGP", file_id_atm, basename_num, exist=exist, step=nt )
620 cz_org(2,i,j) = work2d(i,j) * coef
627 cz_org(2,i,j) = undef
649 file_grads_get_shape, &
653 integer,
intent(out) :: ldims(3)
654 integer,
intent(out) :: timelen
655 real(
rp),
allocatable,
intent(out) :: lon_all(:,:)
656 real(
rp),
allocatable,
intent(out) :: lat_all(:,:)
658 character(len=*),
intent(in) :: basename
659 character(len=*),
intent(in) :: basename_num
661 character(len=7) :: vname
667 log_info(
"ParentLandSetupGrADS",*)
'Real Case/Land Input File Type: GrADS format'
670 if ( basename ==
"" )
then
671 log_error(
"ParentLandSetupGrADS",*)
'"BASENAME_ORG" is not specified in "PARAM_MKINIT_REAL_LAND"!', trim(basename)
695 log_error(
"ParentLandSetupGrADS",*)
'"LAND_SFC_TEMP", "LAND_TEMP", "SFC_TEMP" or "STEMP" is necessary'
698 call file_grads_get_shape( file_id_lnd, vid, &
703 allocate( lon_all(ldims(2), ldims(3)) )
704 allocate( lat_all(ldims(2), ldims(3)) )
715 log_error(
"ParentLandSetupGrADS",*)
'"lon_sfc" or "lon" is necessary'
718 call file_grads_get_shape( file_id_lnd, vid, &
721 if ( ldims(2) .ne. shape(1) .and. shape(1) .ne. -1 )
then
722 log_error(
"ParentLandSetupGrADS",*)
'dimension of "lon" is different! ', ldims(2), shape(1)
726 if ( ldims(2) .ne. shape(1) .or. ldims(3) .ne. shape(2) )
then
727 log_error(
"ParentLandSetupGrADS",*)
'dimension of "lon" is different! ', ldims(2), shape(1), ldims(3), shape(2)
733 call read2d( (/1,1/), ldims(2:3), lon_all(:,:), vname, file_id_lnd, basename_num, oned=1 )
734 lon_all(:,:) = lon_all(:,:) * d2r
745 log_error(
"ParentLandSetupGrADS",*)
'"lat_sfc" or "lat" is necessary'
748 call file_grads_get_shape( file_id_lnd, vid, &
751 if ( ldims(3) .ne. shape(1) .and. shape(1) .ne. -1 )
then
752 log_error(
"ParentLandSetupGrADS",*)
'dimension of "lat" is different! ', ldims(2), shape(1)
756 if ( ldims(2) .ne. shape(1) .or. ldims(3) .ne. shape(2) )
then
757 log_error(
"ParentLandSetupGrADS",*)
'dimension of "lat" is different! ', ldims(2), shape(1), ldims(3), shape(2)
763 call read2d( (/1,1/), ldims(2:3), lat_all(:,:), vname, file_id_atm, basename_num, oned=2 )
764 lat_all(:,:) = lat_all(:,:) * d2r
775 KA_org, KS_org, KE_org, &
776 IA_org, IS_org, IE_org, &
777 JA_org, JS_org, JE_org, &
788 use_file_landwater, &
800 file_grads_get_shape, &
803 integer,
intent(in) :: ka_org, ks_org, ke_org
804 integer,
intent(in) :: ia_org, is_org, ie_org
805 integer,
intent(in) :: ja_org, js_org, je_org
807 real(
rp),
intent(out) :: tg_org (ka_org,ia_org,ja_org)
808 real(
rp),
intent(out) :: strg_org (ka_org,ia_org,ja_org)
809 real(
rp),
intent(out) :: smds_org (ka_org,ia_org,ja_org)
810 real(
rp),
intent(out) :: lst_org (ia_org,ja_org)
811 real(
rp),
intent(out) :: lz_org (ka_org)
812 real(
rp),
intent(out) :: topo_org (ia_org,ja_org)
813 real(
rp),
intent(out) :: lmask_org(ia_org,ja_org)
814 logical,
intent(out) :: use_waterratio
816 integer,
intent(in) :: ldims(3)
817 character(len=*),
intent(in) :: basename_num
818 logical,
intent(in) :: use_file_landwater
819 integer,
intent(in) :: nt
821 integer :: start(3), count(3), shape(2)
828 start(:) = (/ks_org,is_org,js_org/)
829 count(:) = (/ka_org,ia_org,ja_org/)
832 call read2d( start(2:), count(2:), lmask_org(:,:),
"lsmask", file_id_lnd, basename_num, exist=exist, step=nt )
833 if ( .not. exist )
then
837 lmask_org(i,j) = undef
843 call file_grads_get_shape( file_id_lnd,
"llev", &
845 if ( ldims(1) .ne. shape(1) )
then
846 log_error(
"ParentLandInputGrADS",*)
'"nz" must be equal to nz of "STEMP" for llev. :', shape(1), ldims(1)
849 call file_grads_read( file_id_lnd,
"llev", &
853 call read3d( start(:), count(:), tg_org(:,:,:),
"LAND_TEMP", file_id_lnd, basename_num, exist=exist, step=nt )
854 if ( .not. exist )
then
855 call read3d( start(:), count(:), tg_org(:,:,:),
"STEMP", file_id_lnd, basename_num, exist=exist )
857 if ( .not. exist )
then
858 log_error(
"ParentAtmosInputGrADS",*)
'"LAND_TEMP" or "STEMP" is necessary'
862 if ( use_file_landwater )
then
864 call read3d( start(:), count(:), strg_org(:,:,:),
"LAND_WATER", file_id_lnd, basename_num, exist=exist, step=nt )
865 if ( .not. exist )
then
866 call read3d( start(:), count(:), strg_org(:,:,:),
"SMOISVC", file_id_lnd, basename_num, exist=exist, step=nt )
873 if ( strg_org(
k,i,j) == undef ) strg_org(
k,i,j) = strg_org(
k-1,i,j)
877 use_waterratio = .false.
879 call read3d( start(:), count(:), smds_org(:,:,:),
"SMOISDS", file_id_lnd, basename_num, exist=exist, step=nt )
885 if ( smds_org(
k,i,j) == undef ) smds_org(
k,i,j) = smds_org(
k-1,i,j)
889 use_waterratio = .true.
891 log_error(
"ParentAtmosInputGrADS",*)
'"LAND_WATER", "SMOISVC", or "SMOISDS" is necessary'
900 call read2d( start(2:), count(2:), lst_org(:,:),
"LAND_SFC_TEMP", file_id_lnd, basename_num, exist=exist, step=nt )
901 if ( .not. exist )
then
902 call read2d( start(2:), count(2:), lst_org(:,:),
"SFC_TEMP", file_id_lnd, basename_num, exist=exist )
904 if ( .not. exist )
then
905 call read2d( start(2:), count(2:), lst_org(:,:),
"SKINT", file_id_lnd, basename_num, exist=exist )
907 if ( .not. exist )
then
908 log_error(
"ParentAtmosInputGrADS",*)
'"LAND_SFC_TEMP", "SFC_TEMP", or "SKINT" is necessary'
915 call read2d( start(2:), count(2:), topo_org(:,:),
"topo_sfc", file_id_lnd, basename_num, exist=exist, step=nt )
916 if ( .not. exist )
then
920 call file_grads_get_shape( file_id_lnd,
"topo", &
922 if ( ldims(2).ne.shape(1) .or. ldims(3).ne.shape(2) )
then
923 log_warn_cont(*)
'dimension of "topo" is different! ', ldims(2), shape(1), ldims(3), shape(2)
926 call read2d( start(2:), count(2:), topo_org(:,:),
"topo", file_id_lnd, basename_num, exist=exist )
930 if ( .not. exist )
then
934 call file_grads_get_shape( file_id_lnd,
"SGP", &
936 if ( ldims(2).ne.shape(1) .or. ldims(3).ne.shape(2) )
then
937 log_warn_cont(*)
'dimension of "SGP" is different! ', ldims(2), shape(1), ldims(3), shape(2)
940 call read2d( start(2:), count(2:), topo_org(:,:),
"SGP", file_id_lnd, basename_num, exist=exist )
944 topo_org(i,j) = topo_org(i,j) / grav
950 if ( .not. exist )
then
951 log_warn(
"ParentLandInputGrADS",*)
'"topo_sfc", "topo", or "SGP" is not found in grads namelist'
970 file_grads_get_shape, &
974 integer,
intent(out) :: odims(2)
975 integer,
intent(out) :: timelen
976 real(
rp),
allocatable,
intent(out) :: lon_all(:,:)
977 real(
rp),
allocatable,
intent(out) :: lat_all(:,:)
979 character(len=*),
intent(in) :: basename
980 character(len=*),
intent(in) :: basename_num
982 character(len=7) :: vname
988 log_info(
"ParentOceanSetupGrADS",*)
'Real Case/Ocean Input File Type: GrADS format'
990 if ( basename ==
"" )
then
991 log_error(
"ParentOceanSetupGrADS",*)
'"BASENAME_ORG" is not specified in "PARAM_MKINIT_REAL_OCEAN"!', trim(basename)
1012 log_error(
"ParentOceanSetupGrADS",*)
'"OCEAN_SFC_TEMP", "SST", "SFC_TEMP", or "SKINT" is necessary'
1016 call file_grads_get_shape( file_id_ocn, vid, &
1022 allocate( lon_all(odims(1), odims(2)) )
1023 allocate( lat_all(odims(1), odims(2)) )
1034 call file_grads_get_shape( file_id_ocn, vid, &
1037 if ( odims(1) .eq. shape(1) .or. shape(1) .eq. -1 )
then
1043 if ( odims(1) .eq. shape(1) .and. odims(2) .eq. shape(2) )
then
1055 log_error(
"ParentLandSetupGrADS",*)
'"lon_sst", "lon_sfc", or "lon" is necessary'
1058 call file_grads_get_shape( file_id_ocn, vid, &
1061 if ( odims(1) .eq. shape(1) .or. shape(1) .eq. -1 )
then
1067 if ( odims(1) .eq. shape(1) .and. odims(2) .eq. shape(2) )
then
1074 log_error(
"ParentOceanSetupGrADS",*)
'dimension of "lon_sfc" and "lon" is different! ', odims(:), shape(:)
1078 call read2d( (/1,1/), odims(:), lon_all(:,:), vname, file_id_ocn, basename_num, oned=1 )
1079 lon_all(:,:) = lon_all(:,:) * d2r
1090 call file_grads_get_shape( file_id_ocn, vid, &
1093 if ( odims(2) .eq. shape(1) .or. shape(1) .eq. -1 )
then
1099 if ( odims(1) .eq. shape(1) .and. odims(2) .eq. shape(2) )
then
1111 log_error(
"ParentLandSetupGrADS",*)
'"lat_sst", "lat_sfc", or "lat" is necessary'
1114 call file_grads_get_shape( file_id_ocn, vid, &
1117 if ( odims(2) .eq. shape(1) .or. shape(1) .eq. -1 )
then
1123 if ( odims(1) .eq. shape(1) .and. odims(2) .eq. shape(2) )
then
1130 log_error(
"ParentOceanSetupGrADS",*)
'dimension of "lat_sfc" and "lat" is different! ', odims(:), shape(:)
1134 call read2d( (/1,1/), odims(:), lat_all(:,:), vname, file_id_ocn, basename_num, oned=2 )
1135 lat_all(:,:) = lat_all(:,:) * d2r
1146 IA_org, IS_org, IE_org, &
1147 JA_org, JS_org, JE_org, &
1160 file_grads_get_shape, &
1164 integer,
intent(in) :: ia_org, is_org, ie_org
1165 integer,
intent(in) :: ja_org, js_org, je_org
1167 real(
rp),
intent(out) :: tw_org (ia_org,ja_org)
1168 real(
rp),
intent(out) :: sst_org (ia_org,ja_org)
1169 real(
rp),
intent(out) :: omask_org(ia_org,ja_org)
1171 character(len=*),
intent(in) :: basename_num
1172 integer,
intent(in) :: odims(2)
1173 integer,
intent(in) :: nt
1175 integer :: start(2), count(2), shape(2)
1182 start(:) = (/is_org,js_org/)
1183 count(:) = (/ia_org,ja_org/)
1186 call read2d( start(:), count(:), omask_org(:,:),
"lsmask_sst", file_id_ocn, basename_num, exist=exist, step=nt )
1187 if ( .not. exist )
then
1191 call file_grads_get_shape( file_id_ocn, vid, &
1193 if ( odims(1) .ne. shape(1) .or. odims(2) .ne. shape(2) )
then
1194 log_warn(
"ParentOceanInputGrADS",*)
'dimension of lsmask is different. not use'
1196 call read2d( start(:), count(:), omask_org(:,:),
"lsmask", file_id_ocn, basename_num, exist=exist, step=nt )
1200 if ( .not. exist )
then
1204 omask_org(i,j) = undef
1210 call read2d( start(:), count(:), sst_org(:,:),
"OCEAN_SFC_TEMP", file_id_ocn, basename_num, exist=exist, step=nt )
1211 if ( .not. exist )
then
1212 call read2d( start(:), count(:), sst_org(:,:),
"SST", file_id_ocn, basename_num, exist=exist, step=nt )
1214 if ( .not. exist )
then
1218 call file_grads_get_shape( file_id_ocn, vid, &
1220 if ( odims(1).eq.shape(1) .and. odims(2).eq.shape(2) )
then
1221 call read2d( start(:), count(:), sst_org(:,:),
"SFC_TEMP", file_id_ocn, basename_num, exist=exist, step=nt )
1229 if ( .not. exist )
then
1232 call file_grads_get_shape( file_id_ocn, vid, &
1234 if ( odims(1).eq.shape(1) .and. odims(2).eq.shape(2) )
then
1235 call read2d( start(:), count(:), sst_org(:,:),
"SKINT", file_id_ocn, basename_num, step=nt )
1237 log_error(
"ParentOceanInputGrADS",*)
'dimension of "SFC_TEMP" and/or "SKINT" is different'
1249 subroutine read2d( start, count, data, name, fid, postfix, exist, oneD, step )
1254 integer,
intent(in) :: start(2)
1255 integer,
intent(in) :: count(2)
1256 real(RP),
intent(out) :: data(count(1),count(2))
1257 character(len=*),
intent(in) :: name
1258 integer,
intent(in) :: fid
1259 character(len=*),
intent(in) :: postfix
1261 logical,
intent(out),
optional :: exist
1262 integer,
intent(in),
optional :: oneD
1263 integer,
intent(in),
optional :: step
1266 real(RP),
allocatable :: v1d(:)
1273 if (
present(exist) )
then
1277 log_error(
"read2d",*)
'"', trim(name),
'" is required'
1280 if (
present(exist) ) exist = .true.
1283 if (
present(oned) )
then
1288 allocate( v1d(count(oned_)) )
1289 call file_grads_read( fid, vid, &
1292 start=start(oned_:oned_), &
1293 count=count(oned_:oned_) )
1294 if ( oned_ == 1 )
then
1311 call file_grads_read( fid, vid, &
1322 subroutine read3d( start, count, data, name, fid, postfix, exist, step )
1327 integer,
intent(in) :: start(3)
1328 integer,
intent(in) :: count(3)
1329 real(RP),
intent(out) :: data(count(1),count(2),count(3))
1330 character(len=*),
intent(in) :: name
1331 integer,
intent(in) :: fid
1332 character(len=*),
intent(in) :: postfix
1334 logical,
intent(out),
optional :: exist
1335 integer,
intent(in),
optional :: step
1338 real(RP),
allocatable :: v1d(:)
1344 if (
present(exist) )
then
1348 log_error(
"read3d",*)
'"', trim(name),
'" is required'
1351 if (
present(exist) ) exist = .true.
1354 allocate( v1d(count(1)) )
1355 call file_grads_read( fid, vid, &
1364 data(k,i,j) = v1d(k)
1370 call file_grads_read( fid, vid, &