亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lnd_atmmod.f90

?? CCSM Research Tools: Community Atmosphere Model (CAM)
?? F90
字號:
#include <misc.h>#include <preproc.h>module lnd_atmMod#if (defined COUP_CAM)!----------------------------------------------------------------------- ! ! Purpose: ! Does atm to land and land to atm mapping! ! Method: ! ! Author: Mariana Vertenstein! !-----------------------------------------------------------------------! $Id: lnd_atmMod.F90,v 1.1.2.3 2002/04/27 15:38:50 erik Exp $!-----------------------------------------------------------------------  use precision  use infnan  use clm_varpar             !parameters  use clm_varmap             !mapping variables   use spmdMod#if (defined SPMD)  use mpishorthand#endif  implicit none  integer , private, parameter :: nrecv_lnd = 16  real(r8), private, pointer   :: recv1d(:,:)   real(r8), private, pointer   :: scatter1d(:,:)    integer , private, parameter :: nsend_lnd = 13  real(r8), private, pointer   :: send1d(:,:)    real(r8), private, pointer   :: gather1d(:,:)      SAVE!===============================================================================CONTAINS!===============================================================================  subroutine allocate_atmlnd_ini()!----------------------------------------------------------------------- ! ! Purpose: ! Allocate dynamic memory for atm/land exchange! ! Method: ! ! Author: Mariana Vertenstein! !-----------------------------------------------------------------------! --------------------------- Local variables --------------------------    integer  :: ier                 !error code !-----------------------------------------------------------------------    allocate (send1d(nsend_lnd,begpatch:endpatch), STAT=ier)    if (ier /= 0) then       write(6,*)'LND_TO_ATM_MAPPING_INI error: send1d allocation error'       call endrun       send1d(:,:) = inf    endif#if (defined SPMD)    if (masterproc) then       allocate (gather1d(nsend_lnd,numpatch), STAT=ier)       if (ier /= 0) then          write(6,*)'LND_TO_ATM_MAPPING_INI error: gather1d allocation error'          call endrun       endif       gather1d(:,:) = inf    endif#else    gather1d => send1d#endif    if (masterproc) then       allocate (recv1d(nrecv_lnd,numpatch), STAT=ier)        if (ier /= 0) then          write(6,*)'LND_TO_ATM_MAPPING_INI error: recv1d allocation error'          call endrun       endif       recv1d(:,:) = inf    endif#if (defined SPMD)    allocate (scatter1d(nrecv_lnd,begpatch:endpatch), STAT=ier)     if (ier /= 0) then       write(6,*)'LND_TO_ATM_MAPPING_INI error: scatter1d allocation error'       call endrun    endif    scatter1d(:,:) = inf#else    scatter1d => recv1d#endif    return  end subroutine allocate_atmlnd_ini!===============================================================================  subroutine atm_to_lnd_mapping (recv2d)!----------------------------------------------------------------------- ! ! Purpose: ! Receive data from the atm! ! Method: ! ! Author: Mariana Vertenstein! !-----------------------------------------------------------------------! $Id: lnd_atmMod.F90,v 1.1.2.3 2002/04/27 15:38:50 erik Exp $!-----------------------------------------------------------------------    use clm_varder    use clm_varcon             !physical constants    use clm_varsur             !surface variables! --------------------------- arguments------ ---------------------    real(r8), intent(in) :: recv2d(lsmlon,nrecv_lnd,lsmlat) !input from atm! -----------------------------------------------------------------! --------------------------- Local variables ---------------------    integer  :: i,j,k,n             !indices     real(r8) :: forc_rainc          !rainxy Atm flux mm/s       real(r8) :: forc_rainl          !rainxy Atm flux mm/s       real(r8) :: forc_snowc          !snowfxy Atm flux  mm/s     real(r8) :: forc_snowl          !snowfxl Atm flux  mm/s     integer  :: ier                 !error code #if (defined SPMD)    integer  :: numsendv(0:npes-1)  !vector of items to be sent    integer  :: displsv(0:npes-1)   !displacement vector    integer  :: numrecv             !number of items to be received#endif! -----------------------------------------------------------------! Map received fields on [lsmlon]x[lsmlat] grid to 1d subgrid vectors     if (masterproc) then       do k = 1,numpatch          i = patchvec%ixy(k)           j = patchvec%jxy(k)           do n = 1,nrecv_lnd             recv1d(n,k) = recv2d(i,n,j)          end do       end do    endif#if (defined SPMD)    call compute_mpigs_patch(nrecv_lnd, numrecv, numsendv, displsv)    if (masterproc) then       call mpi_scatterv (recv1d, numsendv, displsv, mpir8, &            scatter1d(1,begpatch), numrecv, mpir8 , 0, mpicom, ier)    else       call mpi_scatterv (0._r8, numsendv, displsv, mpir8, &            scatter1d(1,begpatch), numrecv , mpir8, 0, mpicom, ier)    endif#else    scatter1d => recv1d#endif! Split data from atm into component arrays and also determine! derived quantities. Note that atm precipitation is input in ! units of m/sec and must be converted to units of mm/s.    do k = begpatch, endpatch       clm(k)%forc_hgt      = scatter1d( 1,k)       !zgcmxy  Atm state m       clm(k)%forc_u        = scatter1d( 2,k)       !forc_uxy  Atm state m/s       clm(k)%forc_v        = scatter1d( 3,k)       !forc_vxy  Atm state m/s       clm(k)%forc_th       = scatter1d( 4,k)       !forc_thxy Atm state K       clm(k)%forc_q        = scatter1d( 5,k)       !forc_qxy  Atm state kg/kg       clm(k)%forc_pbot     = scatter1d( 6,k)       !ptcmxy  Atm state Pa       clm(k)%forc_t        = scatter1d( 7,k)       !forc_txy  Atm state K       clm(k)%forc_lwrad    = scatter1d( 8,k)       !flwdsxy Atm flux  W/m^2       forc_snowc           = scatter1d( 9,k)       !mm/s       forc_snowl           = scatter1d(10,k)       !mm/s       forc_rainc           = scatter1d(11,k)       !mm/s        forc_rainl           = scatter1d(12,k)       !mm/s #if defined(PERGRO)       ! For error-growth only allow rain not snowfall       forc_rainc           = forc_rainc + forc_snowc       forc_rainl           = forc_rainl + forc_snowl       forc_snowc           = 0.0_r8       forc_snowl           = 0.0_r8#endif       clm(k)%forc_solad(2) = scatter1d(13,k)       !forc_sollxy  Atm flux  W/m^2       clm(k)%forc_solad(1) = scatter1d(14,k)       !forc_solsxy  Atm flux  W/m^2        clm(k)%forc_solai(2) = scatter1d(15,k)       !forc_solldxy Atm flux  W/m^2       clm(k)%forc_solai(1) = scatter1d(16,k)       !forc_solsdxy Atm flux  W/m^2       ! determine derived quantities       clm(k)%forc_hgt_u = clm(k)%forc_hgt          !observational height of wind [m]        clm(k)%forc_hgt_t = clm(k)%forc_hgt          !observational height of temperature [m]         clm(k)%forc_hgt_q = clm(k)%forc_hgt          !observational height of humidity [m]             clm(k)%forc_vp    = clm(k)%forc_q*clm(k)%forc_pbot / (0.622+0.378*clm(k)%forc_q)          clm(k)%forc_rho   = (clm(k)%forc_pbot-0.378*clm(k)%forc_vp) / (rair*clm(k)%forc_t)        clm(k)%forc_co2   = pco2*clm(k)%forc_pbot                                                 clm(k)%forc_o2    = po2*clm(k)%forc_pbot                                                  ! Determine precipitation needed by clm       clm(k)%forc_rain = forc_rainc + forc_rainl       clm(k)%forc_snow = forc_snowc + forc_snowl       if ( clm(k)%forc_snow > 0.0_r8  .and. clm(k)%forc_rain > 0.0_r8 ) then          write(6,*) 'kpatch= ',k,' snow= ',clm(k)%forc_snow,' rain= ',clm(k)%forc_rain, &               ' CLM cannot currently handle both non-zero rain and snow'          call endrun       elseif (clm(k)%forc_rain > 0.) then          clm(k)%itypprc = 1       elseif (clm(k)%forc_snow > 0.) then          clm(k)%itypprc = 2       else          clm(k)%itypprc = 0       endif    end do    return  end subroutine atm_to_lnd_mapping!===============================================================================  subroutine lnd_to_atm_mapping_ini (send2d)!----------------------------------------------------------------------- ! ! Purpose: ! Send initial land model data back to the atm model! ! Method: ! ! Author: Mariana Vertenstein! !-----------------------------------------------------------------------! $Id: lnd_atmMod.F90,v 1.1.2.3 2002/04/27 15:38:50 erik Exp $!-----------------------------------------------------------------------    use clm_varder    use clm_varcon, only : sb    use clm_varsur, only : landmask! --------------------------- Arguments------ ---------------------    real(r8), intent(inout) :: send2d(lsmlon,nsend_lnd,lsmlat) !output to atm! -----------------------------------------------------------------! --------------------------- Local variables ---------------------    integer :: i,j,k,n               !loop indices    integer :: ilen                  !temporary           real(r8):: wt                    !remapping weight    integer :: ier                   !error code#if (defined SPMD)    integer :: numrecvv(0:npes-1)    !vector of items to be received      integer :: displsv(0:npes-1)     !displacement vector    integer :: numsend               !number of items to be sent#endif! -----------------------------------------------------------------! Determine vector of fields that will be sent to the atm    do k= begpatch, endpatch       send1d( 1,k) = clm(k)%t_grnd       !tsxy       send1d( 2,k) = clm(k)%albd(1)      !asdir       send1d( 3,k) = clm(k)%albd(2)      !aldir       send1d( 4,k) = clm(k)%albi(1)      !asdif       send1d( 5,k) = clm(k)%albi(2)      !aldif       send1d( 6,k) = clm(k)%h2osno/1000. !snow (convert mm->m)       send1d( 7,k) = 1.e36       send1d( 8,k) = 1.e36       send1d( 9,k) = 1.e36       send1d(10,k) = 1.e36       send1d(11,k) = sb*(clm(k)%t_grnd**4)   !lwup       send1d(12,k) = 1.e36       send1d(13,k) = 1.e36    end do#if (defined SPMD)    call compute_mpigs_patch(nsend_lnd, numsend, numrecvv, displsv)    if (masterproc) then       call mpi_gatherv (send1d(1,begpatch), numsend , mpir8, &            gather1d, numrecvv, displsv, mpir8, 0, mpicom, ier)    else       call mpi_gatherv (send1d(1,begpatch), numsend , mpir8, &            0._r8, numrecvv, displsv, mpir8, 0, mpicom, ier)    endif#else    gather1d => send1d#endif! Map fields from subgrid vector with length [numpatch] to [lsmlon]x[lsmlat] grid.! NOTE: snow is sent as zero over non-land to be consistent with csm cpl code. ! NOTE: do not set values over lon-land because that can cause problems with the! atm values for sea ice temperatures.     if (masterproc ) then       do n = 1,nsend_lnd          where(landmask == 1)              send2d(:,n,:) = 0.           endwhere       end do       do k = 1,numpatch          if (patchvec%wtxy(k) /= 0.) then             i  = patchvec%ixy(k)                 j  = patchvec%jxy(k)                 wt = patchvec%wtxy(k)              do n = 1,nsend_lnd                send2d(i,n,j) = send2d(i,n,j) + gather1d(n,k)*wt             end do          end if       end do    endif        return  end subroutine lnd_to_atm_mapping_ini!===============================================================================  subroutine lnd_to_atm_mapping(send2d)!----------------------------------------------------------------------- ! ! Purpose: ! Send land model data back to the atm! ! Method: ! ! Author:! !-----------------------------------------------------------------------    use clm_varder    use clm_varsur, only : landmask! --------------------------- Arguments------ ---------------------    real(r8), intent(inout) :: send2d(lsmlon,nsend_lnd,lsmlat) !output to atm! -----------------------------------------------------------------! --------------------------- Local variables ---------------------    integer  :: i,j,k,l,m,n         !loop indices    real(r8) :: wt                  !remapping weight    integer  :: ier                 !error code#if (defined SPMD)    integer  :: numrecvv(0:npes-1)  !vector of items to be received      integer  :: displsv(0:npes-1)   !displacement vector    integer  :: numsend             !number of items to be sent#endif! -----------------------------------------------------------------! Determine vector of fields that will be sent to the atm    do k= begpatch, endpatch       send1d( 1,k) = clm(k)%t_rad              !tsxy        send1d( 2,k) = clm(k)%albd(1)            !asdir       send1d( 3,k) = clm(k)%albd(2)            !aldir       send1d( 4,k) = clm(k)%albi(1)            !asdif       send1d( 5,k) = clm(k)%albi(2)            !aldif       send1d( 6,k) = clm(k)%h2osno/1000.       !snow (convert mm->m)       send1d( 7,k) = clm(k)%taux               !taux        send1d( 8,k) = clm(k)%tauy               !tauy       send1d( 9,k) = clm(k)%eflx_lh_tot        !lhflx        send1d(10,k) = clm(k)%eflx_sh_tot        !shflx        send1d(11,k) = clm(k)%eflx_lwrad_out     !lwup       send1d(12,k) = clm(k)%qflx_evap_tot      !qflx        send1d(13,k) = clm(k)%t_ref2m            !tref    end do#if (defined SPMD)    call compute_mpigs_patch(nsend_lnd, numsend, numrecvv, displsv)    if (masterproc) then       call mpi_gatherv (send1d(1,begpatch), numsend , mpir8, &            gather1d, numrecvv, displsv, mpir8, 0, mpicom, ier)    else       call mpi_gatherv (send1d(1,begpatch), numsend , mpir8, &            0._r8, numrecvv, displsv, mpir8, 0, mpicom, ier)    endif#else    gather1d => send1d#endif! Map fields from subgrid vector with length [numpatch] to [lsmlon]x[lsmlat] grid.! NOTE: use only points with wt > 0 so SPMD code will not use uninitialized ! stack memory values for arrays like taux. ! NOTE: do not set values over lon-land because that can cause problems with the! atm values for sea ice temperatures.     if (masterproc ) then       do n = 1, nsend_lnd          where(landmask == 1)              send2d(:,n,:) = 0.          endwhere       end do       do k = 1,numpatch          if (patchvec%wtxy(k) /= 0.) then             i  = patchvec%ixy(k)                 j  = patchvec%jxy(k)                 wt = patchvec%wtxy(k)              do n = 1,nsend_lnd                send2d(i,n,j) = send2d(i,n,j) + gather1d(n,k)*wt             end do          end if       end do    endif    return  end subroutine lnd_to_atm_mapping!===============================================================================#endifend module lnd_atmMod

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品女同一区二区三区| 国产九色sp调教91| av影院午夜一区| 精品国产区一区| 日本大胆欧美人术艺术动态| 福利一区福利二区| 精品电影一区二区| 国模娜娜一区二区三区| 欧美不卡视频一区| 九九国产精品视频| 337p日本欧洲亚洲大胆精品| 极品美女销魂一区二区三区 | 日韩码欧中文字| 国产精品一区二区三区乱码| 日韩欧美一区中文| 蜜臀久久99精品久久久久久9| 欧美精品vⅰdeose4hd| 爽好久久久欧美精品| 欧美男人的天堂一二区| 亚洲伦理在线免费看| 欧美在线你懂的| 日本v片在线高清不卡在线观看| 成人av网站大全| 亚洲少妇30p| 欧洲一区二区三区免费视频| 亚洲综合图片区| 欧美精品vⅰdeose4hd| 天堂蜜桃91精品| 精品国偷自产国产一区| 国产成人一区在线| 亚洲欧洲三级电影| 日韩一区二区三区av| a4yy欧美一区二区三区| 日本午夜精品一区二区三区电影| 国产精品传媒入口麻豆| 日韩午夜电影在线观看| 99久久婷婷国产综合精品| 日韩**一区毛片| 亚洲人午夜精品天堂一二香蕉| 日韩免费观看高清完整版在线观看| 91视频www| 国产福利视频一区二区三区| 日日夜夜精品视频免费| 亚洲视频一区在线| 国产调教视频一区| 3d成人动漫网站| 91国偷自产一区二区开放时间| 狠狠色2019综合网| 免费的成人av| 五月婷婷久久丁香| 亚洲美女精品一区| 欧美韩日一区二区三区四区| 欧美成人在线直播| 欧美日韩国产一级片| 一本久久精品一区二区| 成人精品鲁一区一区二区| 极品少妇一区二区| 日韩电影一二三区| 性做久久久久久免费观看欧美| 中文字幕一区二区5566日韩| 国产欧美一区二区精品久导航 | 久久国产麻豆精品| 亚洲国产日韩av| 一区二区三区四区不卡视频| 亚洲欧洲无码一区二区三区| 国产三级久久久| 久久久久久久久伊人| 久久夜色精品国产欧美乱极品| 日韩一区二区三区四区五区六区| 欧美午夜精品理论片a级按摩| 99re热视频这里只精品| 99综合影院在线| 成人精品国产免费网站| 成人h动漫精品一区二| 成人激情校园春色| 91影院在线免费观看| 91亚洲精品久久久蜜桃| 99久久精品免费精品国产| 91欧美一区二区| 色综合久久88色综合天天免费| 91麻豆精品一区二区三区| 色天天综合久久久久综合片| 在线观看视频一区二区欧美日韩| 97se亚洲国产综合自在线不卡| 91视视频在线直接观看在线看网页在线看| 成人性生交大合| 一本大道久久a久久精二百 | 在线观看网站黄不卡| 欧美日韩亚洲国产综合| 91精品国产福利在线观看| 日韩欧美色综合网站| 久久免费视频一区| 国产精品久久久久7777按摩| 一区二区免费在线| 日韩av中文在线观看| 激情小说欧美图片| 成人激情午夜影院| 日本韩国欧美在线| 日韩视频免费观看高清完整版在线观看| 欧美电视剧免费观看| 国产精品久久久久久久久图文区| 一级做a爱片久久| 日本欧美一区二区| 大尺度一区二区| 欧美色精品天天在线观看视频| 日韩欧美一区二区三区在线| 久久精品水蜜桃av综合天堂| 亚洲人成在线观看一区二区| 日本午夜精品视频在线观看| 成人永久看片免费视频天堂| 欧美色精品天天在线观看视频| 精品乱人伦一区二区三区| 中文在线一区二区| 天天做天天摸天天爽国产一区 | 欧美日韩高清一区二区| 亚洲精品一区二区三区影院| 国产精品国产三级国产a | 综合色中文字幕| 午夜成人在线视频| 豆国产96在线|亚洲| 在线播放91灌醉迷j高跟美女 | 久久精品夜色噜噜亚洲a∨| 亚洲老司机在线| 狠狠色2019综合网| 在线免费不卡视频| 久久久国产精华| 日本中文一区二区三区| 99久久伊人久久99| 精品久久久久久久人人人人传媒 | 国产日产欧美一区二区三区| 午夜影院久久久| 成人黄色a**站在线观看| 欧美一区二区在线视频| 亚洲欧美国产77777| 国产传媒久久文化传媒| 欧美精品在线视频| 亚洲免费电影在线| 国产精品1区2区3区在线观看| 欧美理论电影在线| 亚洲影院久久精品| 99久久精品国产毛片| 久久综合久久综合久久综合| 日韩国产精品久久久久久亚洲| 色综合欧美在线视频区| 久久精品亚洲国产奇米99| 激情欧美日韩一区二区| 91免费国产在线| 国产精品第五页| 成人av电影在线| 欧美国产精品一区| 国内久久婷婷综合| 日韩免费观看2025年上映的电影 | 麻豆精品新av中文字幕| 91福利资源站| 综合av第一页| aaa亚洲精品一二三区| 国产精品色呦呦| 国产91精品一区二区麻豆网站| www亚洲一区| 国产一区二区视频在线播放| 精品日韩在线观看| 久久国产精品一区二区| 日韩精品在线一区二区| 极品少妇xxxx偷拍精品少妇| 91麻豆精品国产91久久久久久 | 欧美精品一区二区蜜臀亚洲| 日本不卡免费在线视频| 欧美日韩成人综合天天影院| 亚洲不卡一区二区三区| 欧美网站大全在线观看| 亚洲精品国产第一综合99久久| 一本久道久久综合中文字幕| 一区二区理论电影在线观看| 欧美在线三级电影| 婷婷综合另类小说色区| 4438x成人网最大色成网站| 日韩精品色哟哟| 精品区一区二区| 国产成人午夜电影网| 亚洲国产成人私人影院tom| av在线这里只有精品| 亚洲三级在线看| 欧美人与性动xxxx| 久久99精品久久久久久动态图 | 色婷婷国产精品综合在线观看| 亚洲精品高清在线| 91精品国产色综合久久不卡蜜臀 | 国产精品99久久久久久似苏梦涵| 久久久91精品国产一区二区三区| 国产大陆精品国产| 亚洲夂夂婷婷色拍ww47| 91精品国产综合久久久蜜臀图片| 韩国成人精品a∨在线观看| 中文字幕不卡在线观看| 在线观看三级视频欧美| 日韩av中文在线观看| 欧美韩国日本一区| 欧美美女一区二区| 国产精选一区二区三区 | 亚洲www啪成人一区二区麻豆|