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

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

?? sphere.cpp

?? The Spectral Toolkit is a C++ spectral transform library written by Rodney James and Chuck Panaccion
?? CPP
字號:
//// spectral toolkit // copyright (c) 2005 university corporation for atmospheric research// licensed under the gnu general public license//#include "alloc.h"#include "sphere.h"#include "decompose.h"#include "legendre.h"#include "alf.h"using namespace spectral;/// Constructor for spherical harmonic transform.////// \param n number of latitude points between the equator and pole/// \param k number of fields to transformsphere::sphere(int n,int k){  Nodes=2;  G=new group(Nodes);  T=new thread*[Nodes];  T[0]=new thread(2*n,k,2*n,0,k/2,0,G);  T[1]=new thread(2*n,k,2*n-1,1,(k+1)/2,k/2,G);    }/// Constructor for multiple thread spherical harmonic transform.////// \param N number of latitude points between the equator and pole/// \param K number of fields to transform/// \param threads number of threads (>2) used for transformsphere::sphere(int N,int K,int threads){  Nodes=max(threads,2);  G=new group(Nodes);  T=new thread*[Nodes];  int KL,K0,ML,M0;  int M=2*N;  for(int n=0;n<Nodes;n++)    {      decompose(K,Nodes,n,KL,K0);      if(n%2)	{	  decompose(M/2,Nodes/2,n/2,ML,M0);	  T[n]=new thread(M,K,2*ML-1,M0*2+1,KL,K0,G);	}      else	{	  decompose((M+1)/2,(Nodes+1)/2,n/2,ML,M0);	  T[n]=new thread(M,K,ML*2,M0*2,KL,K0,G);	}    }}/// Destructor for spherical harmonic transform.sphere::~sphere(){  for(int i=0;i<Nodes;i++)    delete T[i];      delete [] T;  delete G;}/// Analysis method for multiple instance spherical harmonic transform. /// Computes the spectral coefficients/// \f[ \xi_n^m = \sum_{j=0}^{2N-1} \hat{\xi}_j^m \overline{P_n^m}(\mu_j) w_j \f]/// where \f$ \mu_j \f$ are the Gaussian latitude points, \f$ w_j \f$ the Gaussian/// weights, and/// \f[ \hat{\xi}_j^m = \frac{1}{4N} \sum_{k=0}^{4N-1} g_{j,k} e^{-2 \pi i k m/4N} \f]/// the Fourier transform of the initial data along a longitude.  The \f$ \xi_n^m \f$ are/// computed for \f$ m=0, \ldots, 2N-1 \f$ and \f$ n(m)=m, \ldots, 2N-1 \f$ for each \f$ m \f$./// The input array g is of size g[K][2N][4N] and the spectral coefficients are stored in the output array /// sc as \f$ \xi_n^m \f$ = sc[k][m][n].  The triangular array formed with alloct may be used to store /// sc, but a rectangular array will work as well.void sphere::analysis(real ***g,complex ***sc){  for(int i=0;i<Nodes;i++)    T[i]->analysis(g,sc);  for(int i=0;i<Nodes;i++)    T[i]->wait();}/// Synthesis method for multiple instance spherical harmonic transform./// Assembles the 3-d real array in physical space from the spectral/// coeffcients by/// \f[ g_{j,k} = \sum_{m=0}^{4N-1} \sum_{n=m}^{2N} \xi_n^m \overline{P_n^m}(j) e^{2 \pi i k m/4N} \f]/// for each instance.void sphere::synthesis(complex ***sc,real ***g){  for(int i=0;i<Nodes;i++)    T[i]->synthesis(sc,g);  for(int i=0;i<Nodes;i++)    T[i]->wait();}/// Internal thread analysis driver.void sphere::thread::analysis(real ***g_,complex ***sc_){  g=g_;  sc=sc_;  Method=ANALYSIS;  spawn();}/// Internal thread synthesis driver.void sphere::thread::synthesis(complex ***sc_,real ***g_){  g=g_;  sc=sc_;  Method=SYNTHESIS;  spawn();}/// Internal thread method started when thread is spawned.void sphere::thread::start(){  switch(Method)    {    case ANALYSIS:      Analysis();      break;    case SYNTHESIS:      Synthesis();      break;    }}/// Internal thread join method.void sphere::thread::wait(){  join();}/// Internal thread constructor. Each thread works over a specified range of M=2N/// for a specified parity, computing every other m value./// \param nlat number of latitudes/// \param ninst number of instances/// \param ml length of m-block/// \param m0 start of m-block/// \param kl length of k-block/// \param k0 start of k-block/// \param GROUP group object for syncsphere::thread::thread(int nlat,int ninst,int ml,int m0,int kl,int k0,group *GROUP){  M=nlat;  K=ninst;  N=(M+1)/2;  M0=m0;  ML=ml;  K0=k0;  KL=kl;  Group=GROUP;  w=alloc<real>(M);     RFFT = new rfft(2*M);  SC=alloc<complex>(2,K,N);  G=alloc<complex>(2,K,N);   legendre Gaussian(M);  for(int i=0;i<M;i++)    w[i]=Gaussian.weight(i)/(real)(2*M);  M0=m0;  N=(M+1)/2;  gen=alloct<generator>(M);  seed =alloc<real>(2,N,N);  P = alloc<real>(2,N,N);  Pmn = alloc<real>(2,2,N,N);  for(int n=M0;n<M;n++)    {      alf A(n,M0);      for(int i=0;i<N;i++)	seed[(M0+n)%2][n/2][i]=A(Gaussian.point(i));     }  for(int m=0;m<M;m++)    {      for(int n=m;n<M;n++)        {	  if(m<2)            {	      gen[m][n].c0 = 0.0;	      gen[m][n].c1 = 0.0;	      gen[m][n].c2 = 0.0;            }	  else            {	      real A=(real)n;	      real B=(real)m;	      gen[m][n].c0 = std::sqrt(((2.0*A+1.0)*(A+B-2.0)*(A+B-3.0))/((2.0*A-3.0)*(A+B)*(A+B-1)));	      gen[m][n].c1 = std::sqrt(((2.0*A+1.0)*(A-B)*(A-B-1.0))/((2.0*A-3.0)*(A+B)*(A+B-1.0)));	      gen[m][n].c2 =-std::sqrt(((A-B+2.0)*(A-B+1.0))/((A+B)*(A+B-1.0)));               }        }    }}/// Internal thread desctuctor.sphere::thread::~thread(){   delete RFFT;  dealloc<real>(w);  dealloc<complex>(SC);  dealloc<complex>(G);  dealloc<real>(Pmn);  dealloc<real>(P);  dealloc<real>(seed);  dealloc<generator>(gen);    }/// Internal thread analysis engine.  Does forward recursion over the Pnm's on each pass.void sphere::thread::Analysis(){  for(int k=K0;k<KL+K0;k++)    {      RFFT->analysis(g[k],M);        for(int i=0;i<N-M%2;i++)          {	  for(int j=0;j<2*M;j++)            { 	      real t1=g[k][i ][j];	      real t2=g[k][M-i-1][j];	      g[k][i ][j] = w[i]*(t1+t2);	      g[k][M-i-1][j] = w[i]*(t1-t2);            }        }      if(M%2)        {	  for(int j=0;j<2*M;j++)	    g[k][N-1][j]= w[N-1]*g[k][N-1][j];        }  	      }  sync(Group);  int mx=M0;  for(int m=M0;m<ML+M0;m+=2)    {      if(m==0)        {	  for(int k=0;k<K;k++)            {	      for(int n=0;n<N;n++)                {		  G[0][k][n].re = g[k][n ][0];		  G[0][k][n].im = 0.0;		  G[1][k][n].re = g[k][M-n-1][0];		  G[1][k][n].im = 0.0;                }            }        }      else if((M%2==0)&&(m==M-1))        {	  for(int k=0;k<K;k++)            {	      for(int n=0;n<N;n++)                {		  G[0][k][n].re = g[k][n ][m*2-1];		  G[0][k][n].im = 0.0;		  G[1][k][n].re = g[k][M-n-1][m*2-1];		  G[1][k][n].im = 0.0;                }            }        }      else        {	  for(int k=0;k<K;k++)            {	      for(int n=0;n<N;n++)                {		  G[0][k][n].re = g[k][n ][m*2-1];		  G[0][k][n].im = g[k][n ][m*2];		  G[1][k][n].re = g[k][M-n-1][m*2-1];		  G[1][k][n].im = g[k][M-n-1][m*2];                }            }        }      int p=(mx/2+mx%2)%2;      for(int n=mx;n<M;n++)        {	  int ip=(n+mx)%2;	  if(mx==M0)            {	      for(int j=0;j<N;j++)                {		  P[ip][n/2-(mx+ip)/2][j]                    = Pmn[p][ip][n/2][j]                     = seed[ip][n/2][j];                    }            }	  else            {	      for(int j=0;j<N;j++)		P[ip][n/2-(mx+ip)/2][j]		  = Pmn[p][ip][n/2][j] 		  = Pmn[1-p][ip][n/2-1][j]*gen[mx][n].c0 		  + Pmn[1-p][ip][n/2][j]*gen[mx][n].c2 		  + Pmn[p][ip][n/2-1][j]*gen[mx][n].c1;            }        }          multiply(G[0],P[0],SC[0],K,M/2-(mx  )/2,N);      multiply(G[1],P[1],SC[1],K,M/2-(mx+1)/2,N);      mx+=2;      for(int k=0;k<K;k++)	for(int n=m;n<M;n++)	  sc[k][m][n]=SC[(m+n)%2][k][(n-m)/2];    }}/// Internal thread synthesis engine.  Does backard recursion over the Pnm's on each pass.  void sphere::thread::Synthesis(){  int mx=M0;  for(int m=M0;m<ML+M0;m+=2)    {      for(int k=0;k<K;k++)	for(int n=m;n<M;n++)	  SC[(n+m)%2][k][(n-m)/2]=sc[k][m][n];              int p=(mx/2+mx%2)%2;      for(int n=mx;n<M;n++)        {	  int ip=(n+mx)%2;	  if(mx==M0)            {	      for(int j=0;j<N;j++)		P[ip][j][n/2-(mx+ip)/2] 		  = Pmn[p][ip][n/2][j] 		  = seed[ip][n/2][j];                  }	  else            {	      for(int j=0;j<N;j++)		P[ip][j][n/2-(mx+ip)/2]		  = Pmn[p][ip][n/2][j] 		  = Pmn[1-p][ip][n/2-1][j]*gen[mx][n].c0 		  + Pmn[1-p][ip][n/2][j]*gen[mx][n].c2 		  + Pmn[p][ip][n/2-1][j]*gen[mx][n].c1;            }        }          multiply(SC[0],P[0],G[0],K,N,M/2-(mx  )/2);      multiply(SC[1],P[1],G[1],K,N,M/2-(mx+1)/2);      mx+=2;      if(m==0)        {	  for(int k=0;k<K;k++)            {	      for(int n=0;n<N;n++)                {		  real t1 = G[0][k][n].re;		  real t2 = G[1][k][n].re;		  g[k][n][m] = t1+t2;		  g[k][M-n-1][m] = t1-t2;		  g[k][n][2*M-1] = 0.0;		  g[k][M-n-1][2*M-1] = 0.0;                }            }        }      else if((M%2==0)&&(m==M-1))        {	  for(int k=0;k<K;k++)            {	      for(int n=0;n<N;n++)                {		  real t1 = G[0][k][n].re;		  real t2 = G[1][k][n].re;		  g[k][n][m*2-1] = t1 + t2;		  g[k][M-n-1][m*2-1] = t1-t2;		  g[k][n][m*2] = 0.0;		  g[k][M-n-1][m*2] = 0.0;                }            }        }      else         {	  for(int k=0;k<K;k++)            {	      for(int n=0;n<N;n++)                {		  real t1 = G[0][k][n].re;		  real t2 = G[0][k][n].im;		  real t3 = G[1][k][n].re;		  real t4 = G[1][k][n].im;		  g[k][n][m*2-1] = t1 + t3;		  g[k][n][m*2] = t2 + t4;		  g[k][M-n-1][m*2-1] = t1 - t3;		  g[k][M-n-1][m*2] = t2 - t4;                }            }        }    }  sync(Group);  for(int k=K0;k<KL+K0;k++)    RFFT->synthesis(g[k],M);}/// Internal thread multiplication.  Performs matrix multiply for sum assembly.void sphere::thread::multiply(complex **A,real **B,complex **C,int M1,int N1,int K1){  complex c00,c01,c10,c11;  const int BlockM1=32;  const int BlockN1=32;      for(int mb=0;mb<M1;mb+=BlockM1)    {      int M1B=min(mb+BlockM1,M1);      for(int nb=0;nb<N1;nb+=BlockN1)        {	  int N1B=min(nb+BlockN1,N1);	  for(int m=mb;m<M1B-1;m+=2)            {	      for(int n=nb;n<N1B-1;n+=2)                {		  c00.re=c00.im=0.0;		  c01.re=c01.im=0.0;		  c10.re=c10.im=0.0;		  c11.re=c11.im=0.0;		  for(int k=0;k<K1;k++)                    {		      c00.re+=A[m][k].re*B[n][k];		      c00.im+=A[m][k].im*B[n][k];		      c01.re+=A[m][k].re*B[n+1][k];		      c01.im+=A[m][k].im*B[n+1][k];		      c10.re+=A[m+1][k].re*B[n][k];		      c10.im+=A[m+1][k].im*B[n][k];		      c11.re+=A[m+1][k].re*B[n+1][k];		      c11.im+=A[m+1][k].im*B[n+1][k];                    }		  C[m  ][n  ].re=c00.re;		  C[m  ][n  ].im=c00.im;		  C[m  ][n+1].re=c01.re;		  C[m  ][n+1].im=c01.im;		  C[m+1][n  ].re=c10.re;		  C[m+1][n  ].im=c10.im;		  C[m+1][n+1].re=c11.re;		  C[m+1][n+1].im=c11.im;                }            }	  if((M1B-mb)%2==1)            {	      for(int n=nb;n<N1B;n++)                {		  c00.re=c00.im=0.0;		  for(int k=0;k<K1;k++)                    {		      c00.re+=A[M1B-1][k].re*B[n][k];		      c00.im+=A[M1B-1][k].im*B[n][k];                    }		  C[M1B-1][n].re=c00.re;		  C[M1B-1][n].im=c00.im;                }            }	  if((N1B-nb)%2==1)            {	      for(int m=mb;m<M1B;m++)                {		  c00.re=c00.im=0.0;		  for(int k=0;k<K1;k++)                    {		      c00.re+=A[m][k].re*B[N1B-1][k];		      c00.im+=A[m][k].im*B[N1B-1][k];                    }		      		  C[m][N1B-1].re=c00.re;		  C[m][N1B-1].im=c00.im;                }            }        }    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品在线一区二区| 91视频.com| 亚洲成人免费在线观看| 亚洲欧洲日韩一区二区三区| 国产精品色噜噜| 久久久噜噜噜久噜久久综合| 4438成人网| 欧美一区二区三区视频| 欧美一区二区三区在线电影| 91精品国产综合久久香蕉的特点| 欧美日韩一区成人| 这里只有精品99re| 精品电影一区二区| 久久在线观看免费| 国产日韩高清在线| 国产精品乱码人人做人人爱 | 亚洲一区二区高清| 亚洲综合免费观看高清完整版在线 | 欧美日韩一区成人| 欧美日本韩国一区二区三区视频| 欧美情侣在线播放| 日韩欧美一级片| 欧美极品aⅴ影院| 成人免费一区二区三区在线观看| 亚洲激情在线播放| 日本在线不卡视频| 国产精品香蕉一区二区三区| 99久久99久久综合| 欧美妇女性影城| 欧美国产1区2区| 亚洲第一狼人社区| 国产精品一卡二卡在线观看| 色噜噜狠狠成人中文综合| 欧美精品视频www在线观看| 精品理论电影在线| 亚洲图片欧美综合| 国产一二精品视频| 欧美色精品在线视频| 久久一二三国产| 亚洲一区二区精品久久av| 久久99精品国产麻豆婷婷洗澡| 不卡视频一二三四| 91精品国产综合久久福利| 中文字幕免费观看一区| 性欧美疯狂xxxxbbbb| 国产东北露脸精品视频| 欧美在线观看一区| 欧美激情中文字幕| 九九九精品视频| 欧美色倩网站大全免费| 国产精品久久一卡二卡| 麻豆精品一区二区av白丝在线| 99久久99久久免费精品蜜臀| 久久九九影视网| 日韩高清不卡在线| www.亚洲在线| 精品成人在线观看| 婷婷久久综合九色综合绿巨人| 97久久精品人人做人人爽 | 国产亚洲一区二区三区四区| 五月天网站亚洲| 91视频com| 中文字幕日本不卡| 国产乱妇无码大片在线观看| 欧美一级二级三级蜜桃| 亚洲一级电影视频| 色婷婷av一区| 亚洲精品亚洲人成人网在线播放| 国产精品一区二区不卡| 2017欧美狠狠色| 免费黄网站欧美| 日韩欧美自拍偷拍| 男人的天堂久久精品| 91精品黄色片免费大全| 亚瑟在线精品视频| 欧美福利视频导航| 美国十次综合导航| 日韩欧美一区在线| 麻豆精品在线播放| 精品国产伦理网| 国产激情一区二区三区桃花岛亚洲| 欧美电影精品一区二区| 麻豆精品一二三| 久久老女人爱爱| 成人免费看黄yyy456| 国产精品不卡视频| 一本大道久久a久久精品综合 | 欧美日韩在线播| 五月天久久比比资源色| 91精品麻豆日日躁夜夜躁| 美女脱光内衣内裤视频久久影院| 欧美zozozo| 成人性生交大片免费看中文 | 盗摄精品av一区二区三区| 国产欧美视频一区二区三区| aaa亚洲精品一二三区| 亚洲精品国久久99热| 4438x成人网最大色成网站| 久久99精品国产.久久久久 | 91蜜桃网址入口| 亚洲一区二区三区四区在线观看| 欧美人与z0zoxxxx视频| 久色婷婷小香蕉久久| 国产精品网站在线观看| 欧美视频一区二区三区| 久久国产生活片100| 日本一区二区电影| 欧美猛男超大videosgay| 国产美女在线观看一区| 亚洲免费在线观看| 日韩一级免费一区| 99久久99久久免费精品蜜臀| 美腿丝袜一区二区三区| 亚洲色图欧美偷拍| 日韩三级中文字幕| 色香蕉成人二区免费| 韩国三级在线一区| 亚洲精品va在线观看| 久久综合九色综合97婷婷| 91久久一区二区| 国产精品77777| 天天操天天综合网| 亚洲四区在线观看| 国产偷国产偷亚洲高清人白洁| 欧美日韩一区二区在线观看视频| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲免费资源在线播放| 久久日韩精品一区二区五区| 欧美日韩精品免费观看视频| 不卡视频一二三| 精品一区二区三区久久久| 亚洲国产综合在线| 亚洲欧美自拍偷拍| 久久免费国产精品| 91精品在线免费| 97超碰欧美中文字幕| 国产成人免费视频精品含羞草妖精| 亚洲成av人综合在线观看| 国产精品久久精品日日| 久久久国产一区二区三区四区小说| 欧美人动与zoxxxx乱| 色婷婷久久久综合中文字幕| 波多野结衣视频一区| 国产精品一区二区视频| 极品少妇xxxx偷拍精品少妇| 日本视频一区二区| 亚洲第一精品在线| 亚洲6080在线| 午夜视频一区在线观看| 亚洲午夜精品17c| 亚洲免费电影在线| 一区二区三区四区不卡视频 | 欧美精品久久天天躁| 欧美午夜精品久久久久久超碰| 91女人视频在线观看| 91在线一区二区| 色天使色偷偷av一区二区| 91在线看国产| 色综合久久久久久久久| 欧美色老头old∨ideo| 欧美猛男男办公室激情| 日韩免费视频一区| 日韩三级免费观看| 久久综合狠狠综合久久综合88| 国产亚洲成aⅴ人片在线观看| 国产亚洲一区字幕| 中文字幕一区二区三| 亚洲精品国产视频| 婷婷国产在线综合| 九九视频精品免费| 成人性生交大合| 欧美婷婷六月丁香综合色| 8x8x8国产精品| 久久久久久免费毛片精品| 国产精品欧美精品| 亚洲影院久久精品| 蜜臀a∨国产成人精品| 国产精品一区免费在线观看| 99热精品国产| 欧美福利视频一区| 久久久影视传媒| 亚洲制服丝袜在线| 韩国视频一区二区| fc2成人免费人成在线观看播放 | 国产宾馆实践打屁股91| 色综合一个色综合亚洲| 日韩欧美专区在线| 136国产福利精品导航| 日韩成人午夜电影| 高清视频一区二区| 欧美狂野另类xxxxoooo| 国产欧美日韩激情| 天天操天天干天天综合网| 国产福利精品一区二区| 欧美日韩国产一级| 中文字幕乱码久久午夜不卡| 麻豆一区二区99久久久久| 91一区二区在线观看| 日韩精品中文字幕在线一区| 亚洲精品菠萝久久久久久久|