surffilemod.f90
来自「CCSM Research Tools: Community Atmospher」· F90 代码 · 共 842 行 · 第 1/3 页
F90
842 行
call wrap_put_att_text(ncid, NF_GLOBAL, 'Input_navy_oro_dataset', trim(str)) endif str = get_filename(mksrf_fvegtyp) call wrap_put_att_text(ncid, NF_GLOBAL, 'Vegetation_type_raw_data_filename', trim(str)) str = get_filename(mksrf_fsoitex) call wrap_put_att_text(ncid, NF_GLOBAL, 'Soil_texture_raw_data_file_name', trim(str)) str = get_filename(mksrf_fsoicol) call wrap_put_att_text(ncid, NF_GLOBAL, 'Soil_color_raw_data_file_name', trim(str)) str = get_filename(mksrf_flanwat) call wrap_put_att_text(ncid, NF_GLOBAL, 'Inland_water_raw_data_file_name', trim(str)) str = get_filename(mksrf_fglacier) call wrap_put_att_text(ncid, NF_GLOBAL, 'Glacier_raw_data_file_name', trim(str)) str = get_filename(mksrf_furban) call wrap_put_att_text(ncid, NF_GLOBAL, 'Urban_raw_data_file_name', trim(str)) str = get_filename(mksrf_flai) call wrap_put_att_text(ncid, NF_GLOBAL, 'Lai_raw_data_file_name', trim(str))#if (defined OFFLINE) str = 'offline'#elif (defined COUP_CAM) str = 'run through cam'#elif (defined COUP_CSM) str = 'run through flux coupler'#endif call wrap_put_att_text(ncid, NF_GLOBAL, 'Run_mode', trim(str))! Define dimensions. Array dimensions are referenced by an! associated dimenision id: e.g., lsmlon_id -> lsmlon.! o Time is an unlimited dimension.! o Character string is treated as an array of characters. call wrap_def_dim (ncid, 'lsmlon' , lsmlon , dimlon_id) call wrap_def_dim (ncid, 'lsmlat' , lsmlat , dimlat_id) call wrap_def_dim (ncid, 'nlevsoi', nlevsoi , dimlev_id) call wrap_def_dim (ncid, 'lsmpft' , maxpatch_pft, dimpft_id) call wrap_def_dim (ncid, 'time' , nf_unlimited, dimtim_id) call wrap_def_dim (ncid, 'nchar' , 128 , dimstr_id) ! Define time-independent variables and their attributes. ! Variables are referenced by an associated variable id, e.g., ! the netCDF variable 'LONGXY' is referenced by the id longxy_id#if (defined OFFLINE) if (.not. offline_rdgrid) then name = 'northern edge of surface grid' unit = 'degrees north' call wrap_def_var (ncid , 'EDGEN', nf_float, 0, 0, edgen_id) call wrap_put_att_text (ncid, edgen_id, 'long_name', name) call wrap_put_att_text (ncid, edgen_id, 'units' , unit) name = 'eastern edge of surface grid' unit = 'degrees east' call wrap_def_var (ncid, 'EDGEE', nf_float, 0, 0, edgee_id) call wrap_put_att_text (ncid, edgee_id, 'long_name', name) call wrap_put_att_text (ncid, edgee_id, 'units' , unit) name = 'southern edge of surface grid' unit = 'degrees north' call wrap_def_var (ncid, 'EDGES', nf_float, 0, 0, edges_id) call wrap_put_att_text (ncid, edges_id, 'long_name', name) call wrap_put_att_text (ncid, edges_id, 'units' , unit) name = 'western edge of surface grid' unit = 'degrees east' call wrap_def_var (ncid, 'EDGEW', nf_float, 0, 0, edgew_id) call wrap_put_att_text (ncid, edgew_id , 'long_name', name) call wrap_put_att_text (ncid, edgew_id , 'units' , unit) endif#endif dim1_id(1) = dimlat_id name = 'number of longitudes for each latitude' unit = 'unitless' call wrap_def_var (ncid, 'NUMLON', nf_int, 1, dim1_id, numlon_id) call wrap_put_att_text (ncid, numlon_id, 'long_name', name) call wrap_put_att_text (ncid, numlon_id, 'units' , unit)! Model grids MUST BE double precision so that when running through ! the cam mode the latitude and longitude grid are bfb the same ! as the cam grid dim2_id(1) = dimlon_id dim2_id(2) = dimlat_id if (fullgrid) then name = 'longitude' else name = 'rlongitude' endif unit = 'degrees east' if (fullgrid) then call wrap_def_var (ncid, 'LONGXY' , nf_double, 2, dim2_id, longxy_id) else call wrap_def_var (ncid, 'RLONGXY', nf_double, 2, dim2_id, longxy_id) endif call wrap_put_att_text (ncid, longxy_id, 'long_name', name) call wrap_put_att_text (ncid, longxy_id, 'units' , unit) name = 'latitude' unit = 'degrees north' call wrap_def_var (ncid, 'LATIXY', nf_double, 2, dim2_id, latixy_id) call wrap_put_att_text (ncid, latixy_id, 'long_name', name) call wrap_put_att_text (ncid, latixy_id, 'units' , unit)! Land mask and Land fraction name = 'land/ocean mask' unit = '0=ocean and 1=land' call wrap_def_var (ncid, 'LANDMASK', nf_int, 2, dim2_id, landmask_id) call wrap_put_att_text (ncid, landmask_id, 'long_name', name) call wrap_put_att_text (ncid, landmask_id, 'units' , unit) name = 'land fraction' unit = 'unitless' call wrap_def_var (ncid, 'LANDFRAC', nf_double, 2, dim2_id, landfrac_id) call wrap_put_att_text (ncid, landfrac_id, 'long_name', name) call wrap_put_att_text (ncid, landfrac_id, 'units' , unit)! Surface variables name = 'soil color' unit = 'unitless' call wrap_def_var (ncid, 'SOIL_COLOR', nf_int, 2, dim2_id, soic2d_id) call wrap_put_att_text (ncid, soic2d_id, 'long_name', name) call wrap_put_att_text (ncid, soic2d_id, 'units' , unit) dim3_id(1) = dimlon_id dim3_id(2) = dimlat_id dim3_id(3) = dimlev_id name = 'percent sand' unit = 'unitless' call wrap_def_var (ncid ,'PCT_SAND' ,nf_float, 3, dim3_id, sand3d_id) call wrap_put_att_text (ncid, sand3d_id, 'long_name', name) call wrap_put_att_text (ncid, sand3d_id, 'units' , unit) name = 'percent clay' unit = 'unitless' call wrap_def_var (ncid ,'PCT_CLAY' ,nf_float, 3, dim3_id, clay3d_id) call wrap_put_att_text (ncid, clay3d_id, 'long_name', name) call wrap_put_att_text (ncid, clay3d_id, 'units' , unit) name = 'percent wetland' unit = 'unitless' call wrap_def_var (ncid ,'PCT_WETLAND' ,nf_float, 2, dim2_id, pctwet_id) call wrap_put_att_text (ncid, pctwet_id, 'long_name', name) call wrap_put_att_text (ncid, pctwet_id, 'units' , unit) name = 'percent lake' unit = 'unitless' call wrap_def_var (ncid ,'PCT_LAKE' ,nf_float, 2, dim2_id, pctlak_id) call wrap_put_att_text (ncid, pctlak_id, 'long_name', name) call wrap_put_att_text (ncid, pctlak_id, 'units' , unit) name = 'percent glacier' unit = 'unitless' call wrap_def_var (ncid ,'PCT_GLACIER' ,nf_float, 2, dim2_id, pctgla_id) call wrap_put_att_text (ncid, pctgla_id, 'long_name', name) call wrap_put_att_text (ncid, pctgla_id, 'units' , unit) name = 'percent urban' unit = 'unitless' call wrap_def_var (ncid ,'PCT_URBAN' ,nf_float, 2, dim2_id, pcturb_id) call wrap_put_att_text (ncid, pcturb_id, 'long_name', name) call wrap_put_att_text (ncid, pcturb_id, 'units' , unit) dim3_id(1) = dimlon_id dim3_id(2) = dimlat_id dim3_id(3) = dimpft_id name = 'plant functional type' unit = 'unitless' call wrap_def_var (ncid ,'PFT' ,nf_int, 3, dim3_id, pft_id) call wrap_put_att_text (ncid, pft_id, 'long_name', name) call wrap_put_att_text (ncid, pft_id, 'units' , unit) name = 'percent plant functional type' unit = 'unitless' call wrap_def_var (ncid ,'PCT_PFT' ,nf_float, 3, dim3_id, pctpft_id) call wrap_put_att_text (ncid, pctpft_id, 'long_name', name) call wrap_put_att_text (ncid, pctpft_id, 'units' , unit)! LAI/SAI/HEIGHT data dim4_id(1) = dimlon_id dim4_id(2) = dimlat_id dim4_id(3) = dimpft_id dim4_id(4) = dimtim_id name = 'monthly leaf area index' unit = 'unitless' call wrap_def_var (ncid ,'MONTHLY_LAI', nf_float, 4, dim4_id, mlai_id) call wrap_put_att_text (ncid, mlai_id, 'long_name', name) call wrap_put_att_text (ncid, mlai_id, 'units' , unit) name = 'monthly stem area index' unit = 'unitless' call wrap_def_var (ncid ,'MONTHLY_SAI', nf_float, 4, dim4_id, msai_id) call wrap_put_att_text (ncid, msai_id, 'long_name', name) call wrap_put_att_text (ncid, msai_id, 'units' , unit) name = 'monthly height top' unit = 'meters' call wrap_def_var (ncid ,'MONTHLY_HEIGHT_TOP', nf_float, 4, dim4_id, mhgtt_id) call wrap_put_att_text (ncid, mhgtt_id, 'long_name', name) call wrap_put_att_text (ncid, mhgtt_id, 'units' , unit) name = 'monthly height bottom' unit = 'meters' call wrap_def_var (ncid ,'MONTHLY_HEIGHT_BOT', nf_float, 4, dim4_id, mhgtb_id) call wrap_put_att_text (ncid, mhgtb_id, 'long_name', name) call wrap_put_att_text (ncid, mhgtb_id, 'units' , unit)! Finish creating netcdf file ret = nf_enddef(ncid) if (ret /= 0) then write (6,*)'failed to end define mode' call endrun end if! Write out data#if (defined OFFLINE) if (.not. offline_rdgrid) then call wrap_put_var_realx (ncid, edgen_id , lsmedge(1)) call wrap_put_var_realx (ncid, edgee_id , lsmedge(2)) call wrap_put_var_realx (ncid, edges_id , lsmedge(3)) call wrap_put_var_realx (ncid, edgew_id , lsmedge(4)) endif#endif call wrap_put_var_int (ncid, numlon_id , numlon ) call wrap_put_var_realx (ncid, longxy_id , longxy ) call wrap_put_var_realx (ncid, latixy_id , latixy ) call wrap_put_var_int (ncid, landmask_id, landmask ) call wrap_put_var_realx (ncid, landfrac_id, landfrac ) call wrap_put_var_int (ncid, soic2d_id , soic2d ) call wrap_put_var_realx (ncid, sand3d_id , sand3d ) call wrap_put_var_realx (ncid, clay3d_id , clay3d ) call wrap_put_var_realx (ncid, pctwet_id , pctwet ) call wrap_put_var_realx (ncid, pctlak_id , pctlak ) call wrap_put_var_realx (ncid, pctgla_id , pctgla ) call wrap_put_var_realx (ncid, pcturb_id , pcturb ) call wrap_put_var_int (ncid, pft_id , pft ) call wrap_put_var_realx (ncid, pctpft_id , pctpft ) do m=1,12 beg4d(1) = 1 len4d(1) = lsmlon beg4d(2) = 1 len4d(2) = lsmlat beg4d(3) = 1 len4d(3) = maxpatch_pft beg4d(4) = m len4d(4) = 1 call wrap_put_vara_realx (ncid, mlai_id , beg4d, len4d, mlai(1,1,1,m)) call wrap_put_vara_realx (ncid, msai_id , beg4d, len4d, msai(1,1,1,m)) call wrap_put_vara_realx (ncid, mhgtt_id, beg4d, len4d, mhgtt(1,1,1,m)) call wrap_put_vara_realx (ncid, mhgtb_id, beg4d, len4d, mhgtb(1,1,1,m)) end do! Close output file call wrap_close(ncid) return end subroutine surfwrt!=======================================================================end module surfFileMod
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?