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 + -
显示快捷键?