Advertisement
infovarius

d2cross

Jun 10th, 2022
972
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.07 KB | None | 0 0
  1. double d2cross(double ***m, int ii, int jj, int kk, int dir1,int dir2,  int sh, int sm)
  2. /*             matrix     , point                 , directions of dervs,shift , sample */
  3. /*                                                , 1, 2, 3           , 0-left, 3,5,7 */
  4. {         //order ==0 (first),dx=dx[dir1]*dx[dir2]
  5. double tmp=0.0;
  6. int i1,i2;
  7. int dirr=6-dir1-dir2;
  8. switch (sm*dirr) {
  9.     case 3 : for(i1=0; i1<sm; i1++)
  10.              for(i2=0; i2<sm; i2++)
  11.                tmp += m[ii][jj+i1-sh][kk+i2-sh]*kf3[0][sh][i1]*kf3[0][sh][i2]; break;
  12.     case 6 : for(i1=0; i1<sm; i1++)
  13.              for(i2=0; i2<sm; i2++)
  14.                tmp += m[ii+i1-sh][jj][kk+i2-sh]*kf3[0][sh][i1]*kf3[0][sh][i2]; break;
  15.     case 9 : for(i1=0; i1<sm; i1++)
  16.              for(i2=0; i2<sm; i2++)
  17.                tmp += m[ii+i1-sh][jj+i2-sh][kk]*kf3[0][sh][i1]*kf3[0][sh][i2]; break;
  18.     case 5 : for(i1=0; i1<sm; i1++)
  19.              for(i2=0; i2<sm; i2++)
  20.                tmp += m[ii][jj+i1-sh][kk+i2-sh]*kf5[0][sh][i1]*kf5[0][sh][i2]; break;
  21.     case 10: for(i1=0; i1<sm; i1++)
  22.              for(i2=0; i2<sm; i2++)
  23.                tmp += m[ii+i1-sh][jj][kk+i2-sh]*kf5[0][sh][i1]*kf5[0][sh][i2]; break;
  24.     case 15: for(i1=0; i1<sm; i1++)
  25.              for(i2=0; i2<sm; i2++)
  26.                tmp += m[ii+i1-sh][jj+i2-sh][kk]*kf5[0][sh][i1]*kf5[0][sh][i2]; break;
  27.     case 7 : for(i1=0; i1<sm; i1++)
  28.              for(i2=0; i2<sm; i2++)
  29.                tmp += m[ii][jj+i1-sh][kk+i2-sh]*kf7[0][sh][i1]*kf7[0][sh][i2]; break;
  30.     case 14: for(i1=0; i1<sm; i1++)
  31.              for(i2=0; i2<sm; i2++)
  32.                tmp += m[ii+i1-sh][jj][kk+i2-sh]*kf7[0][sh][i1]*kf7[0][sh][i2]; break;
  33.     case 21: for(i1=0; i1<sm; i1++)
  34.              for(i2=0; i2<sm; i2++)
  35.                tmp += m[ii+i1-sh][jj+i2-sh][kk]*kf7[0][sh][i1]*kf7[0][sh][i2]; break;
  36.     default :
  37.     nrerror("\nNO SUCH SAMPLE for derivative. Bye ...",0,0);
  38.     }
  39. return(tmp/dx[dir1-1]/dx[dir2-1]);
  40. }
  41.  
  42. использование:
  43.  
  44. dA11[l][0][1] = dA11[l][1][0] = d2cross(f[l],i,j,k,2,1,(approx-1)/2,approx);
  45.  
  46. описание переменной:
  47.  
  48. double dA11[7][3][3];
  49.  
  50. описание для head.h:
  51. double d2cross(double ***m,int ii,int jj,int kk,int dir1,int dir2,int sh,int sm);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement