⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tracer.c

📁 波浪数值模拟
💻 C
📖 第 1 页 / 共 2 页
字号:
  }  else {    field2D_mult_const(DQDX, kappa);    /* if breaking is off then just use kappa */    field2D_mult_const(DQDY, kappa);    /* DQDY *= kappa */  }  field2D_diffx(QDISS, DQDX, idx);         /* QDISS is now on eta points again (NX-1,M) */    field2D_diffy_v_to_eta(TMPQ, DQDY, idy);       /*  TMPQ  is now on Q points again  */    field2D_self_add(QDISS, TMPQ);                 /*  QDISS +=  d/dy ( hby * dQ/dy )   */  }void update_passive_tracerAB3(field2D *Q, field2D_time_derivative_var *DTVARS, const field2D_depth_var *Depth_Vars, double dt){  const double *qt1d = DTVARS->QT1->data;  const double *qt2d = DTVARS->QT2->data;  const double *qt3d = DTVARS->QT3->data;  const double *hd = REF2(Depth_Vars->H, 1);  double *qd, *qd0;  int i, j, M, N, N1;  double ih, hdt;  M = Q->M;  N = Q->N;  N1 = DTVARS->QT1->N;  hdt = dt/12.0;  qd = REF2(Q, 1);    /* loop over all the U and most V points */  for (i=0;i<N1;i++) {    for (j=0;j<M;j++) {      ih = 1.0/(*hd++);      *qd++ += hdt*(23.0* (*qt1d++) - 16.0* (*qt2d++) +5.0*(*qt3d++) ) * ih;    }  }  /* next update the boundary conditions on passive tracer Q */  /* No flux boundary conditions */  qd0 = REF2(Q, 0);    /* for the shoreline boundary condition */  for (j=0;j<M;j++) {    qd0[j] = qd0[j+M];   // shore boundary condition    *qd =  *(qd - M);   // far slip BC    qd++;  }}void update_passive_tracerAB2(field2D *Q, const field2D *QT1, const field2D *QT2,                         const field2D_depth_var *Depth_Vars, const double dt){  const double *qt1d = QT1->data;  const double *qt2d = QT2->data;  const double *hd = REF2(Depth_Vars->H, 1);  double *qd, *qd0;  int i, j, M, N, N1;  double ih, hdt;  M = Q->M;  N = Q->N;  N1 = QT1->N;  hdt = 0.5*dt;  /* loop over all the U and most V points */  qd = REF2(Q, 1);   for (i=0;i<N1;i++) {    for (j=0;j<M;j++) {      ih = 1.0/(*hd++);      *qd++ += hdt*(3.0* (*qt1d++) - *qt2d++) * ih;    }  }  /* next update the boundary conditions on passive tracer Q */  /* No flux boundary conditions */  qd0 = Q->data;         // this is for the boundary conditions stuff  for (j=0;j<M;j++) {    qd0[j] = qd0[j+M];   // shore boundary condition    *qd =  *(qd - M);   // far slip BC    qd++;  }}void update_passive_tracer_euler(field2D *Q, const field2D *QT, const field2D_depth_var *Depth_Vars, const double dt){  const double *qtd = QT->data;  const double *hd = REF2(Depth_Vars->H, 1);  double *qd, *qd0;  int i, j, M, N, N1;  double ih;  M = Q->M;  N = Q->N;  N1 = QT->N;  qd = REF2(Q, 1);     /* loop over all the U and most V points */  for (i=0;i<N1;i++) {    for (j=0;j<M;j++) {      ih = 1.0/(*hd++);      *qd++ += dt * ( *qtd++ ) * ih;    }  }  /* next update the boundary conditions on passive tracer Q */  /* No flux boundary conditions */  qd0 = Q->data;         // this is for the boundary conditions stuff  for (j=0;j<M;j++) {    qd0[j] = qd0[j+M];   // shore boundary condition    *qd =  *(qd - M);   // far slip BC    qd++;  }}     /* -------- OLD ROUTINES ------- *//* Calculates   kappa * [ d/dx( h dq/dx)  + d/dy( h dq/dy) ]  and returns in QD *//* void passive_newtonian1(field2D *QD, const field2D *QQ, const double *H, const double *HBAR, double kappa) *//* { *//*   int i,j,im,M,MN; *//*   double tmp0, tmp1, tmp2, tmp3; *//*   double *nvd; *//*   double *qd, *qdup, *qddn; *//*   double *qdd; *//*   double him, hbim, hbim2; *//*   double qq, qplus, qminus, qtmp0; *//*   M = QD->M; *//*   MN = M-1; *//*   qdd = QD->data; *//*   qd = &(QQ->data[M]); *//*   qdup = &(QQ->data[2*M]); *//*   qddn = &(QQ->data[M]); *//*   /\* first do i=1 consider slip & no slip *\/ *//*   i=1; *//*   im = i-1; *//*   hbim = HBAR[im]; *//*   him = H[im]; *//*   qminus = *(qd+MN); *//*   qq = *qd++; *//*   qplus = *qd++; *//*   tmp1 = hbim * (*qdup++ - qq); *//*   qtmp0 = 2.0*qq; *//*   tmp2 = 0; *//*   tmp3 = him*(qplus - qtmp0 + qminus); *//*   *qdd++ = kappa*(idx2*(tmp1-tmp2) + idy2*tmp3); *//*   qminus = qq; *//*   qq = qplus; *//*   for (j=1;j<ny-1;j++) { *//*     qplus = *qd++; *//*     qtmp0 = 2.0*qq; *//*     tmp1 = hbim * (*qdup++ - qq); *//*     tmp2 = 0.0; *//*     tmp3 = him*(qplus - qtmp0 + qminus); *//*     *qdd++ = kappa*(idx2*(tmp1-tmp2) + idy2*tmp3); *//*     qminus = qq; *//*     qq = qplus; *//*   } *//*   qplus = *(qd-M); *//*   qtmp0 = 2.0*qq; *//*   tmp1 = hbim * (*qdup++ - qq); *//*   tmp2 = 0.0; *//*   tmp3 = him*( qplus - qtmp0 + qminus); *//*   *qdd++ = kappa*(idx2*(tmp1-tmp2) + idy2*tmp3); *//*   /\* away from BC do the interior *\/ *//*   for (i=2;i<nx-1;i++) { *//*     im = i-1; *//*     hbim = HBAR[im]; *//*     hbim2 = HBAR[im-1]; *//*     him = H[im]; *//*     qminus = *(qd+MN); *//*     qq = *qd++; *//*     qplus = *qd++; *//*     tmp1 = hbim * (*qdup++ - qq); *//*     qtmp0 = 2.0*qq; *//*     tmp2 = hbim2 * (qq - *qddn++); *//*     tmp3 = him*(qplus - qtmp0 + qminus); *//*     *qdd++ = kappa*(idx2*(tmp1-tmp2) + idy2*tmp3); *//*     qminus = qq; *//*     qq = qplus; *//*     for (j=1;j<ny-1;j++) { *//*       qplus = *qd++; *//*       qtmp0 = 2.0*qq; *//*       tmp1 = hbim * (*qdup++ - qq); *//*       tmp2 = hbim2 * (qq - *qddn++); *//*       tmp3 = him*(qplus - qtmp0 + qminus); *//*       *qdd++ = kappa*(idx2*(tmp1-tmp2) + idy2*tmp3); *//*       qminus = qq; *//*       qq = qplus; *//*     } *//*     qplus = *(qd-M); *//*     qtmp0 = 2.0*qq; *//*     tmp1 = hbim * (*qdup++ - qq); *//*     tmp2 = hbim2 * (qq - *qddn++); *//*     tmp3 = him*( qplus - qtmp0 + qminus); *//*     *qdd++ = kappa*(idx2*(tmp1-tmp2) + idy2*tmp3); *//*   } *//*   /\* last do i=nx-1  consider slip & no slip *\/ *//*   i=nx-1; *//*   im = i-1; *//*   hbim2 = HBAR[im-1]; *//*   him = H[im]; *//*   qminus = *(qd+MN); *//*   qq = *qd++; *//*   qplus = *qd++; *//*   qtmp0 = 2.0*qq; *//*   tmp1 = 0.0; *//*   tmp2 = hbim2 * ( qq - *qddn++); *//*   tmp3 = him*(qplus - qtmp0 + qminus); *//*   *qdd++ = kappa*(idx2*(tmp1-tmp2) + idy2*tmp3); *//*   qminus = qq; *//*   qq = qplus; *//*   for (j=1;j<ny-1;j++) { *//*     qplus = *qd++; *//*     qtmp0 = 2.0*qq; *//*     tmp1 = 0.0; *//*     tmp2 = hbim2 * ( qq - *qddn++); *//*     tmp3 = him*(qplus - qtmp0 + qminus); *//*     *qdd++ = kappa*(idx2*(tmp1-tmp2) + idy2*tmp3); *//*     qminus = qq; *//*     qq = qplus; *//*   } *//*   qplus = *(qd-M); *//*   qtmp0 = 2.0*qq; *//*   tmp1 = 0.0; *//*   tmp2 = hbim2 * ( qq - *qddn++); *//*   tmp3 = him*( qplus - qtmp0 + qminus); *//*   *qdd++ = kappa*(idx2*(tmp1-tmp2) + idy2*tmp3); *//* } */     /* void laplacian_passive(field2D *LQ, field2D *QQ) *//* { *//*   int i,j,im,M,MN,N; *//*   double qtmp0,qtmp1,qtmp2; *//*   double *lqd, *qd, *qdup, *qddn; *//*   double qminus, qq, qplus; *//*   M = LQ->M; *//*   N = QQ->N; *//*   MN = M-1; *//*   lqd = LQ->data; *//*   qd = &(QQ->data[M]); *//*   qdup = &(QQ->data[2*M]); *//*   qddn = QQ->data; *//*   for (i=1;i<N-1;i++) { *//*     qminus = *(qd+MN); *//*     qq = *qd++; *//*     qplus = *qd++; *//*     qtmp0 = qq * 2.0;  // here we do j=0 *//*     qtmp1 =  *qdup++ - qtmp0 + *qddn++; *//*     qtmp2 = qplus - qtmp0 + qminus; *//*     *lqd++ = (idx2*qtmp1 + idy2*qtmp2); *//*     qminus = qq; *//*     qq = qplus; *//*     for (j=1;j<ny-1;j++) { *//*       qplus = *qd++; *//*       qtmp0 =  qq * 2.0; *//*       qtmp1 =  *qdup++ - qtmp0 + *qddn++; *//*       qtmp2 =  qplus  - qtmp0 + qminus; *//*       *lqd++ = (idx2*qtmp1 + idy2*qtmp2); *//*       qminus = qq; *//*       qq = qplus; *//*     } *//*     qplus = *(qd-M); *//*     qtmp0 =  qq * 2.0; *//*     qtmp1 =  *qdup++ - qtmp0 + *qddn++; *//*     qtmp2 =  qplus  - qtmp0 + qminus; *//*     *lqd++ = (idx2*qtmp1 + idy2*qtmp2); *//*   } *//* } */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -