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

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

?? mod_comm.f90

?? CCSM Research Tools: Community Atmosphere Model (CAM)
?? F90
?? 第 1 頁 / 共 5 頁
字號:
      module mod_comm      implicit none#include "misc.h"#if defined ( SPMD ) #include "params.h"      integer maxpro       ! Max no. of MLP PE allowed      integer nbuf      integer nghost      integer max_nq       ! Be carefiul: max_nq = max(nc, 2)                           ! nc is the total # of advected tracers      parameter ( maxpro = PLAT/4 ) ! This is the max 1D decomp      parameter ( nbuf = 2 )      parameter ( nghost = 3 )!     parameter ( max_nq = 2 )      parameter ( max_nq = PCNST + 1 )#if !defined(USE_MLP)#include "mpif.h"#define mp_precision MPI_DOUBLE_PRECISION      integer max_call      integer igosouth, igonorth      integer idimsize      parameter (max_call = 2)      parameter (igosouth = 0)      parameter (igonorth = 1)      parameter (idimsize = PLON*nghost*PLEV*PCNST)#if defined(AIX) && defined(MPI2)      integer(kind=MPI_ADDRESS_KIND) intptr      pointer (buff_r_ptr, buff_r(idimsize*nbuf*max_call))      pointer (buff_s_ptr, buff_s(idimsize*nbuf*max_call))      pointer (buff4d_ptr, buff4d(PLON*PLAT*(PLEV+1)*PCNST))      pointer (buff4d_r4_ptr, buff4d_r4(PLON*PLAT*(PLEV+1)*PCNST))      real :: buff_r      real :: buff_s      real :: buff4d      real*4 :: buff4d_r4#else      real, SAVE:: buff_r(idimsize*nbuf*max_call)      real, SAVE:: buff_s(idimsize*nbuf*max_call)      real, SAVE:: buff4d(PLON*PLAT*(PLEV+1)*PCNST)      real*4, SAVE:: buff4d_r4(PLON*PLAT*(PLEV+1)*PCNST)#endif      integer, SAVE:: ncall_s      integer, SAVE:: ncall_r#if defined(MPI2)      integer(kind=MPI_ADDRESS_KIND) bsize, tdisp      integer, SAVE:: buffwin      ! Communication window      integer, SAVE:: buff4dwin    ! Communication window      integer, SAVE:: buff4d_r4win ! Communication window#else      integer, SAVE:: tdisp      integer, SAVE:: nsend                   ! Number of messages out-going      integer, SAVE:: nrecv                   ! Number of messages in-coming      integer, SAVE:: nread                   ! Number of messages read      integer, SAVE:: sqest(nbuf*max_call)      integer, SAVE:: rqest(nbuf*max_call)#endif      integer, SAVE:: commglobal   ! Global Communicator      integer, SAVE:: Status(MPI_STATUS_SIZE)      integer, SAVE:: Stats(nbuf*max_call*MPI_STATUS_SIZE)      integer ierror#else#if defined (LAHEY)#define PTR_INT TRUE#define NOT_ASSIGNED#include "mlp_ptr.h"#undef  PTR_INT#undef NOT_ASSIGNED#else!! Main vars:!      pointer (wing_4d, g_4d)      real :: g_4d(PLON, PLAT, PLEV, max_nq)! Other work arrays:!! Type 1: For variables defined at layer edge (wz & pk)!      pointer (wing_t1, g_t1)      real :: g_t1(PLON, PLAT, PLEV+1, nbuf)!! Type 2: For edge pressure (pe)!      pointer (wing_t2, g_t2)      real :: g_t2(PLON, PLEV+1, PLAT)!! Type 3: !      pointer (wing_t3, g_t3)      real :: g_t3(PLEV+PLAT, maxpro)!! General purpose 2D (x-y) array!      pointer (wing_2d, g_2d)      real :: g_2d(PLON,PLAT)!! General purpose 1D array!      pointer (wing_1d, g_1d)      real :: g_1d(PLAT)#endif#endif      integer, SAVE:: nowpro,numpro,numcps(maxpro),numcpu        integer, SAVE:: gid, gsize      integer, allocatable, SAVE:: yfirst(:)  ! First latitude      integer, allocatable, SAVE:: ylast(:)   ! Last latitude      integer, allocatable, SAVE:: zfirst(:)  ! First level      integer, allocatable, SAVE:: zlast(:)   ! Last level      public mp_init, mp_exit, y_decomp, set_decomp #if defined (SEMA)      integer semid#endif!.................      contains      subroutine mp_init#if !defined(USE_MLP)#if !defined (SET_CPUS)#if defined (IRIX64)        integer mp_suggested_numthreads#else        integer omp_get_num_threads#endif#endif        integer idimBuff, idimBuff4d        integer n, nowpro, nowcpu        integer npthreads        character*80 evalue        integer info        logical flag        integer mp_size#if defined(MPI2) && !defined(AIX)        call MPI_INIT_THREAD(MPI_THREAD_MULTIPLE, npthreads, ierror)        call MPI_QUERY_THREAD(npthreads, ierror)        if (npthreads == MPI_THREAD_SINGLE) then          write(*,*) 'Provided MPI_THREAD_SINGLE on', gid          call MPI_FINALIZE(ierror)          stop        elseif (npthreads == MPI_THREAD_FUNNELED) then          write(*,*) 'Provided MPI_THREAD_FUNNELED on', gid          call MPI_FINALIZE(ierror)          stop        elseif (npthreads == MPI_THREAD_SERIALIZED) then          write(*,*) 'Provided MPI_THREAD_SERIALIZED on', gid          call MPI_FINALIZE(ierror)          stop        elseif (npthreads == MPI_THREAD_MULTIPLE) then!          write(*,*) 'Provided MPI_THREAD_MULTIPLE on', gid        else          write(*,*) gid,': Error in MPI_INIT_THREAD', npthreads, ':', ierror          call MPI_FINALIZE(ierror)          stop        endif#else        call MPI_INITIALIZED( flag, ierror )        if ( .not. flag ) then          call MPI_INIT( ierror )        endif#endif        call MPI_COMM_RANK (MPI_COMM_WORLD, gid, ierror)        call MPI_COMM_SIZE (MPI_COMM_WORLD, numpro, ierror)        call MPI_COMM_DUP (MPI_COMM_WORLD, commglobal, ierror)#if defined(MPI2)        call MPI_INFO_CREATE(info, ierror)        call MPI_INFO_SET(info, "no_locks", "true", ierror)#if defined(AIX)        call MPI_TYPE_EXTENT(mp_precision, mp_size, ierror)        bsize=idimsize*nbuf*max_call*mp_size        call MPI_ALLOC_MEM(bsize, MPI_INFO_NULL, intptr, ierror)        buff_r_ptr = intptr        call MPI_WIN_CREATE(buff_r, bsize, mp_size, info, commglobal, &                            buffwin, ierror)        call MPI_ALLOC_MEM(bsize, MPI_INFO_NULL, intptr, ierror)        buff_s_ptr = intptr        bsize=PLON*PLAT*(PLEV+1)*PCNST*mp_size        call MPI_ALLOC_MEM(bsize, MPI_INFO_NULL, intptr, ierror)        buff4d_ptr = intptr        call MPI_WIN_CREATE(buff4d, bsize, mp_size, info, commglobal, &                            buff4dwin, ierror)        call MPI_TYPE_EXTENT(MPI_REAL, mp_size, ierror)        bsize=PLON*PLAT*(PLEV+1)*PCNST*mp_size        call MPI_ALLOC_MEM(bsize, MPI_INFO_NULL, intptr, ierror)        buff4d_r4_ptr = intptr        call MPI_WIN_CREATE(buff4d_r4, bsize, mp_size, info, commglobal, &                            buff4d_r4win, ierror)#else        call MPI_TYPE_EXTENT(mp_precision, mp_size, ierror)        bsize=idimsize*nbuf*max_call        call MPI_WIN_CREATE(buff_r, bsize, mp_size, info, commglobal, &                            buffwin, ierror)        bsize=PLON*PLAT*(PLEV+1)*PCNST        call MPI_WIN_CREATE(buff4d, bsize, mp_size, info, commglobal, &                            buff4dwin, ierror)        bsize=PLON*PLAT*(PLEV+1)*PCNST        call MPI_TYPE_EXTENT(MPI_REAL, mp_size, ierror)        call MPI_WIN_CREATE(buff4d_r4, bsize, mp_size, info, commglobal, &                            buff4d_r4win, ierror)#endif        call MPI_INFO_FREE(info, ierror)#else        nsend = 0        nrecv = 0        nread = 0#endif        ncall_r = 0        ncall_s = 0#if defined(SET_CPUS)        call getenv('NUMBER_CPUS_PER_MLP_PROCESS',evalue)        read(evalue,*) numcpu#if defined (IRIX64)       call mp_set_numthreads(numcpu)  !keep it for a while, :)#else       call omp_set_num_threads(numcpu)#endif#if  defined( IRIX64 ) && defined(PIN_CPUS)!$omp parallel do private(n,nowcpu)        nowpro = gid        do n=1,numcpu          nowcpu = n + (nowpro) * numcpu-1          call mp_assign_to_cpu(nowcpu)        enddo#endif#else#if defined (IRIX64)        numcpu = mp_suggested_numthreads(0)#else#if defined (_OPENMP)        numcpu = omp_get_num_threads()#else        numcpu = 1#endif#endif#endif#else        if ( max_nq < PCNST ) then           write(*,*) "Buffer size for MLP is NOT large enough!"           stop        endif        call gotmem        call forkit#if defined (SEMA)        call semcreate(semid)#endif#endif        allocate( yfirst( numpro ) )        allocate( ylast( numpro ) )        allocate( zfirst( numpro ) )        allocate( zlast( numpro ) )      end subroutine mp_init      subroutine mp_exit        deallocate( yfirst )        deallocate( ylast )        deallocate( zfirst )        deallocate( zlast )#if !defined(USE_MLP)#if defined(MPI2)        call MPI_WIN_FREE( buffwin, ierror )        call MPI_WIN_FREE( buff4dwin, ierror )        call MPI_WIN_FREE( buff4d_r4win, ierror )#endif        call MPI_FINALIZE (ierror)#endif        return      end subroutine mp_exit#if defined(USE_MLP)      subroutine gotmem#define NOT_ASSIGNED#include "mlp_ptr.h"#undef  NOT_ASSIGNED      integer n_svar      integer*8 numvar       ! Total # of shared vars           parameter (n_svar=100)      integer*8 isize(n_svar),ipnt(n_svar)      integer n      numvar    =  6      isize(1)  =  PLON*PLAT*PLEV*max_nq      isize(2)  =  PLON*PLAT*(PLEV+1)*nbuf      isize(3)  =  PLON*PLAT*(PLEV+1)      isize(4)  = (PLEV+PLAT)*maxpro      isize(5)  =  PLON*PLAT      isize(6)  =  PLAT      do n=1,numvar         isize(n) = isize(n) * 8      enddo      call mlp_getmem(numvar,isize,ipnt)      wing_4d  = ipnt(1)      wing_t1  = ipnt(2)      wing_t2  = ipnt(3)      wing_t3  = ipnt(4)      wing_2d  = ipnt(5)      wing_1d  = ipnt(6)#if defined (LAHEY)      ptrg_4d  = wing_4d      ptrg_t1  = wing_t1      ptrg_t2  = wing_t2      ptrg_t3  = wing_t3      ptrg_2d  = wing_2d      ptrg_1d  = wing_1d#endif      return      end subroutine gotmem      subroutine forkit#if defined(IRIX64)#include <ulocks.h>#endif      integer fork,getpid      integer master, n, nowpid, ierror, nowcpu      character*80 evalue!-----create mp environment      call getenv('NUMBER_MLP_PROCESSES',evalue)      read(evalue,*) numpro      call getenv('NUMBER_CPUS_PER_MLP_PROCESS',evalue)      read(evalue,*) numcpu!-----get master pid      master = getpid()      nowpro = 1!-----print fork message!!!      write(*,510) numpro#if defined(IRIX64)!-----destroy mp environment      call mp_destroy#endif!-----spawn the processes - manual forks      do n=2,numpro         nowpid = getpid()         if(nowpid == master) then                               ierror=fork()                              endif         nowpid = getpid()         if(nowpid /= master) then                              nowpro=n                              go to 200                              endif      enddo!-----write note  200 if(nowpro == 1) nowpid = master!!!     write(*,500) nowpro,nowpid      call omp_set_num_threads(numcpu)#if  defined( IRIX64 ) && defined(PIN_CPUS)!$omp parallel do private(n,nowcpu)      do n=1,numcpu         nowcpu = n+(nowpro-1)*numcpu-1         call mp_assign_to_cpu(nowcpu)      enddo#endif!******************************!*    I/O formats             *!******************************  500 format('FORKIT: Current process:',i3,'    PID:',i10)  510 format('FORKIT: Total active processes spawned:',i3)      gid = nowpro-1      gsize = numpro      return      end subroutine forkit#endif      subroutine y_decomp(jm, km, jfirst, jlast, kfirst, klast, myid)      implicit none      integer jm     ! Dimensions      integer km     ! Levels      integer myid! OUTPUT PARAMETERS:      integer jfirst, jlast, kfirst, klast! Local      integer p, p1, p2, lats, pleft      integer, allocatable:: ydist(:)      if (myid == 0) print *, "numpro", numpro, "numcpu", numcpu      allocate( ydist( numpro ) )      lats = jm / numpro      pleft = jm - lats * numpro      if( lats < 3 ) then         write(*,*) 'Number of Proc is too large for jm=',jm         stop      endif      do p=1,numpro         ydist(p) = lats      enddo      if ( pleft .ne. 0 ) then          p1 = (numpro+1) / 2           p2 = p1 + 1        do while ( pleft .ne. 0 )           if( p1 .eq. 1 ) p1 = numpro               ydist(p1) = ydist(p1) + 1               pleft = pleft - 1               if ( pleft .ne. 0 ) then                    ydist(p2) = ydist(p2) + 1                    pleft = pleft - 1

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国产精品亚洲精品 | 国产大片一区二区| 日韩二区三区在线观看| 亚洲国产综合视频在线观看| 亚洲色图视频网站| 亚洲欧洲99久久| 亚洲免费伊人电影| 亚洲午夜精品久久久久久久久| 亚洲综合久久久| 日韩精品视频网站| 日本成人中文字幕| 美国毛片一区二区| 国产精一品亚洲二区在线视频| 国产一区二区三区精品欧美日韩一区二区三区 | 99国产精品视频免费观看| 国产精品自在在线| 丁香桃色午夜亚洲一区二区三区 | 亚洲免费av在线| 五月天激情综合| 韩国精品免费视频| 91色porny蝌蚪| 欧美二区三区91| 欧美va亚洲va在线观看蝴蝶网| 国产性做久久久久久| 亚洲男同性视频| 美女在线视频一区| 成人午夜在线播放| 欧美午夜一区二区三区免费大片| 欧美区在线观看| 欧美国产一区视频在线观看| 一区二区三区在线看| 免费日韩伦理电影| 成人av高清在线| 欧美福利视频导航| 欧美极品aⅴ影院| 亚洲成人自拍偷拍| 国产一区二区三区精品欧美日韩一区二区三区| 成人精品在线视频观看| 欧美精品123区| 亚洲国产高清在线观看视频| 天天亚洲美女在线视频| 成人免费视频视频在线观看免费| 欧美视频完全免费看| 久久久久97国产精华液好用吗| 亚洲免费视频成人| 国产一区二区三区在线看麻豆| 色悠久久久久综合欧美99| 精品国产乱码久久久久久老虎| 一色屋精品亚洲香蕉网站| 久久精品免费看| 欧美日韩欧美一区二区| 国产精品久久久久久久浪潮网站 | 日本伊人色综合网| 色综合久久中文字幕综合网| 亚洲精品在线一区二区| 午夜欧美在线一二页| 色综合久久六月婷婷中文字幕| 久久久精品国产免大香伊| 青青草国产成人99久久| 欧美亚洲国产bt| 椎名由奈av一区二区三区| 精品一区二区三区不卡| 91精品久久久久久久久99蜜臂| 亚洲蜜臀av乱码久久精品蜜桃| 国产成人午夜高潮毛片| 久久久久久9999| 国模冰冰炮一区二区| 26uuu国产一区二区三区| 日本不卡视频一二三区| 宅男噜噜噜66一区二区66| 亚洲第一精品在线| 欧美日韩国产首页| 亚洲丰满少妇videoshd| 欧美主播一区二区三区| 亚洲视频在线一区观看| 91欧美一区二区| 专区另类欧美日韩| 欧美这里有精品| 亚洲风情在线资源站| 91精品国产综合久久国产大片| 日韩在线一二三区| 日韩欧美国产不卡| 国产尤物一区二区在线| 国产欧美日韩精品一区| 成人激情黄色小说| 一区二区成人在线| 欧美精品第1页| 久久国产精品露脸对白| 久久精品夜色噜噜亚洲aⅴ| 国产91丝袜在线观看| 综合久久综合久久| 欧美日韩久久不卡| 国产综合一区二区| 亚洲欧美日韩一区二区三区在线观看| 色综合久久88色综合天天| 午夜在线成人av| 日韩欧美国产电影| www.99精品| 美女视频黄久久| 国产精品国产三级国产普通话三级| 91视频国产观看| 天堂资源在线中文精品| 久久免费午夜影院| 在线视频观看一区| 国产永久精品大片wwwapp| 中文字幕视频一区| 日韩午夜av电影| 99久久综合国产精品| 免费在线看成人av| 中文字幕中文字幕在线一区| 欧美精品第1页| 成年人网站91| 极品少妇xxxx精品少妇| 亚洲欧美乱综合| 久久久夜色精品亚洲| 欧美性大战久久| 成人免费福利片| 奇米888四色在线精品| 中文字幕免费不卡在线| 在线播放中文字幕一区| 不卡免费追剧大全电视剧网站| 日韩精品久久久久久| 亚洲婷婷综合久久一本伊一区| 日韩欧美国产一区在线观看| 欧美在线观看视频一区二区三区| 狠狠色丁香九九婷婷综合五月| 亚洲欧美成aⅴ人在线观看| 久久免费精品国产久精品久久久久| 欧美在线|欧美| 91丨国产丨九色丨pron| 国产成人精品一区二区三区四区 | 欧美丰满一区二区免费视频| 99麻豆久久久国产精品免费 | 91精品在线免费| 欧美调教femdomvk| 97精品国产97久久久久久久久久久久| 免费观看日韩av| 热久久免费视频| 午夜久久久影院| 亚洲国产综合色| 一区二区三区四区乱视频| 中文字幕在线播放不卡一区| 中文字幕乱码亚洲精品一区| 精品福利一区二区三区| 日韩美女视频一区二区在线观看| 欧美三级韩国三级日本一级| 日本韩国欧美三级| 91丝袜美女网| 欧洲色大大久久| 欧美亚洲国产一区二区三区| 欧美三级中文字| 欧美日本一区二区在线观看| 欧美亚洲综合久久| 欧美视频一区在线| 欧美男人的天堂一二区| 欧美精品视频www在线观看| 欧美三片在线视频观看| 欧美高清视频不卡网| 日韩欧美的一区二区| 久久亚洲综合色| 国产日韩欧美不卡| 亚洲视频在线观看一区| 亚洲成人动漫在线免费观看| 五月婷婷综合在线| 捆绑紧缚一区二区三区视频| 国产真实乱对白精彩久久| 成人免费视频一区二区| 色婷婷精品久久二区二区蜜臂av | 日韩欧美在线网站| 久久久www成人免费无遮挡大片| 久久久国产综合精品女国产盗摄| 欧美国产欧美亚州国产日韩mv天天看完整 | 久久99精品久久只有精品| 精一区二区三区| www.性欧美| 3d动漫精品啪啪一区二区竹菊| 日韩欧美一级特黄在线播放| 国产喷白浆一区二区三区| 亚洲综合偷拍欧美一区色| 蜜桃av噜噜一区| 成人av集中营| 日韩一级成人av| 中文字幕佐山爱一区二区免费| 亚洲国产成人av好男人在线观看| 激情综合色播五月| 日本韩国欧美三级| 久久久久一区二区三区四区| 亚洲综合久久久| 国产mv日韩mv欧美| 欧美在线一区二区三区| 久久精品视频网| 午夜视黄欧洲亚洲| 波多野结衣在线一区| 欧美日韩成人综合| 国产精品久久久久一区二区三区| 视频一区中文字幕国产| 成人免费视频播放| 精品久久99ma| 污片在线观看一区二区 | 亚洲激情第一区|