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

📄 f_type.c

📁 cfd求解器使用与gmsh网格的求解
💻 C
📖 第 1 页 / 共 2 页
字号:
      V->Val[MAX_DIM*k+7] = sqrt(SQU(Re)+SQU(Im)) ; V->Val[MAX_DIM*(k+1)+7] = atan2(Im,Re);         Re = A->Val[MAX_DIM*k+8] ; Im = A->Val[MAX_DIM*(k+1)+8] ;      V->Val[MAX_DIM*k+8] = sqrt(SQU(Re)+SQU(Im)) ; V->Val[MAX_DIM*(k+1)+8] = atan2(Im,Re);       }    break;  default :    Msg(GERROR, "Unknown type of arguments in function 'Cart2Pol'");    break;  }    V->Type = A->Type ;  GetDP_End ;}/* ------------------------------------------------------------------------ *//*  Create 1 Vector from 3 Scalar                                           *//* ------------------------------------------------------------------------ */void  F_Vector (F_ARG) {  int k ;  GetDP_Begin("F_Vector");  if(A->Type != SCALAR || (A+1)->Type != SCALAR || (A+2)->Type != SCALAR)    Msg(GERROR, "Non scalar argument(s) for function 'Vector'");  for (k = 0 ; k < Current.NbrHar ; k++) {    V->Val[MAX_DIM*k  ] = (A  )->Val[MAX_DIM*k] ;    V->Val[MAX_DIM*k+1] = (A+1)->Val[MAX_DIM*k] ;    V->Val[MAX_DIM*k+2] = (A+2)->Val[MAX_DIM*k] ;  }  V->Type = VECTOR ;  GetDP_End ;}/* ------------------------------------------------------------------------ *//*  Create 1 Tensor from 9 Scalar                                           *//* ------------------------------------------------------------------------ */void  F_Tensor (F_ARG) {  int k ;  GetDP_Begin("F_Tensor");  if(  (A)->Type != SCALAR || (A+1)->Type != SCALAR || (A+2)->Type != SCALAR ||     (A+3)->Type != SCALAR || (A+4)->Type != SCALAR || (A+5)->Type != SCALAR ||     (A+6)->Type != SCALAR || (A+7)->Type != SCALAR || (A+8)->Type != SCALAR )    Msg(GERROR, "Non scalar argument(s) for function 'Tensor'");  for (k = 0 ; k < Current.NbrHar ; k++) {    V->Val[MAX_DIM*k  ] = (A  )->Val[MAX_DIM*k] ;    V->Val[MAX_DIM*k+1] = (A+1)->Val[MAX_DIM*k] ;    V->Val[MAX_DIM*k+2] = (A+2)->Val[MAX_DIM*k] ;    V->Val[MAX_DIM*k+3] = (A+3)->Val[MAX_DIM*k] ;    V->Val[MAX_DIM*k+4] = (A+4)->Val[MAX_DIM*k] ;    V->Val[MAX_DIM*k+5] = (A+5)->Val[MAX_DIM*k] ;    V->Val[MAX_DIM*k+6] = (A+6)->Val[MAX_DIM*k] ;    V->Val[MAX_DIM*k+7] = (A+7)->Val[MAX_DIM*k] ;    V->Val[MAX_DIM*k+8] = (A+8)->Val[MAX_DIM*k] ;  }  V->Type = TENSOR ;  GetDP_End ;}/* ------------------------------------------------------------------------ *//*  Create 1 Symmetric Tensor from 6 Scalar                                 *//* ------------------------------------------------------------------------ */void  F_TensorSym (F_ARG) {  int k ;  GetDP_Begin("F_TensorSym");  if(  (A)->Type != SCALAR || (A+1)->Type != SCALAR || (A+2)->Type != SCALAR ||     (A+3)->Type != SCALAR || (A+4)->Type != SCALAR || (A+5)->Type != SCALAR )    Msg(GERROR, "Non scalar argument(s) for function 'TensorSym'");  for (k = 0 ; k < Current.NbrHar ; k++) {    V->Val[MAX_DIM*k  ] = (A  )->Val[MAX_DIM*k] ;    V->Val[MAX_DIM*k+1] = (A+1)->Val[MAX_DIM*k] ;    V->Val[MAX_DIM*k+2] = (A+2)->Val[MAX_DIM*k] ;    V->Val[MAX_DIM*k+3] = (A+3)->Val[MAX_DIM*k] ;    V->Val[MAX_DIM*k+4] = (A+4)->Val[MAX_DIM*k] ;    V->Val[MAX_DIM*k+5] = (A+5)->Val[MAX_DIM*k] ;  }  V->Type = TENSOR_SYM ;  GetDP_End ;}/* ------------------------------------------------------------------------ *//*  Create 1 Diagonal Tensor from 3 Scalar                                  *//* ------------------------------------------------------------------------ */void  F_TensorDiag (F_ARG) {  int k ;  GetDP_Begin("F_TensorDiag");  if(A->Type != SCALAR || (A+1)->Type != SCALAR || (A+2)->Type != SCALAR)    Msg(GERROR, "Non scalar argument(s) for function 'TensorDiag'");  for (k = 0 ; k < Current.NbrHar ; k++) {    V->Val[MAX_DIM*k  ] =     A->Val[MAX_DIM*k] ;    V->Val[MAX_DIM*k+1] = (A+1)->Val[MAX_DIM*k] ;    V->Val[MAX_DIM*k+2] = (A+2)->Val[MAX_DIM*k] ;  }  V->Type = TENSOR_DIAG ;  GetDP_End ;}/* ------------------------------------------------------------------------ *//*  Create 1 Tensor from 3 Vector                                           *//* ------------------------------------------------------------------------ */void  F_TensorV (F_ARG) {  int k ;  GetDP_Begin("F_TensorV");  if((A)->Type != VECTOR || (A+1)->Type != VECTOR || (A+2)->Type != VECTOR)    Msg(GERROR, "Non scalar argument(s) for function 'TensorV'");  for (k = 0 ; k < Current.NbrHar ; k++) {    V->Val[MAX_DIM*k  ] = (A  )->Val[MAX_DIM*k  ] ;    V->Val[MAX_DIM*k+1] = (A  )->Val[MAX_DIM*k+1] ;    V->Val[MAX_DIM*k+2] = (A  )->Val[MAX_DIM*k+2] ;    V->Val[MAX_DIM*k+3] = (A+1)->Val[MAX_DIM*k  ] ;    V->Val[MAX_DIM*k+4] = (A+1)->Val[MAX_DIM*k+1] ;    V->Val[MAX_DIM*k+5] = (A+1)->Val[MAX_DIM*k+2] ;    V->Val[MAX_DIM*k+6] = (A+2)->Val[MAX_DIM*k  ] ;    V->Val[MAX_DIM*k+7] = (A+2)->Val[MAX_DIM*k+1] ;    V->Val[MAX_DIM*k+8] = (A+2)->Val[MAX_DIM*k+2] ;  }  V->Type = TENSOR ;  GetDP_End ;}/* ------------------------------------------------------------------------ *//*  Dyadic product                                                          *//* ------------------------------------------------------------------------ */void  F_SquDyadicProduct (F_ARG) {  int k ;  double t11, t12, t13, t22, t23, t33 ;  GetDP_Begin("F_SquDyadicProduct");  if (A->Type != VECTOR)    Msg(GERROR, "Non vector argument for function 'TensorDyadic'");  t11 = SQU(A->Val[0]) ;  t22 = SQU(A->Val[1]) ;  t33 = SQU(A->Val[2]) ;  t12 = A->Val[0] * A->Val[1] ;  t13 = A->Val[0] * A->Val[2] ;  t23 = A->Val[1] * A->Val[2] ;  V->Val[0] = t11 ;  V->Val[1] = t12 ;  V->Val[2] = t13 ;  V->Val[3] = t22 ;  V->Val[4] = t23 ;  V->Val[5] = t33 ;  /* Attention : a revoir */  if (Current.NbrHar > 1) {    V->Val[MAX_DIM  ] = V->Val[MAX_DIM+1] = V->Val[MAX_DIM+2] =      V->Val[MAX_DIM+3] = V->Val[MAX_DIM+4] = V->Val[MAX_DIM+5] = 0. ;    for (k = 2 ; k < Current.NbrHar ; k++) {      V->Val[MAX_DIM*k  ] = V->Val[MAX_DIM*k+1] = V->Val[MAX_DIM*k+2] =	V->Val[MAX_DIM*k+3] = V->Val[MAX_DIM*k+4] = V->Val[MAX_DIM*k+5] = 0. ;    }  }  V->Type = TENSOR_SYM ;  GetDP_End ;}/* ------------------------------------------------------------------------ *//*  Get Vector Components                                                   *//* ------------------------------------------------------------------------ */#define get_comp_vector(index,string)					\  int k ;								\									\  GetDP_Begin("F_" string);						\									\  if(A->Type != VECTOR)							\    Msg(GERROR, "Non vector argument for function '" string "'");	\									\  for (k = 0 ; k < Current.NbrHar ; k++) {				\    V->Val[MAX_DIM*k  ] = A->Val[MAX_DIM*k+index] ;			\  }									\  V->Type = SCALAR ;							\									\  GetDP_End ;    void  F_CompX (F_ARG) { get_comp_vector(0,"CompX") }void  F_CompY (F_ARG) { get_comp_vector(1,"CompY") }void  F_CompZ (F_ARG) { get_comp_vector(2,"CompZ") }#undef get_comp_vector/* ------------------------------------------------------------------------ *//*  Get Tensor Components                                                   *//* ------------------------------------------------------------------------ */#define get_comp_tensor(i,is,id,string)							\  int k ;										\											\  GetDP_Begin("F_" string);								\											\  switch(A->Type) {									\  case TENSOR :										\    for (k=0; k<Current.NbrHar; k++) V->Val[MAX_DIM*k] = A->Val[MAX_DIM*k+(i)] ;	\    break ;										\  case TENSOR_SYM :									\    for (k=0; k<Current.NbrHar; k++) V->Val[MAX_DIM*k] = A->Val[MAX_DIM*k+(is)] ;	\    break ;										\  case TENSOR_DIAG :									\    if(id >= 0)										\      for (k=0; k<Current.NbrHar; k++) V->Val[MAX_DIM*k] = A->Val[MAX_DIM*k+(id)] ;	\    else										\      for (k=0; k<Current.NbrHar; k++) V->Val[MAX_DIM*k] = 0.;				\    break ;										\  default :										\    Msg(GERROR, "Non tensor argument for function '" string "'");			\    break;										\  }											\  V->Type = SCALAR ;									\  											\  GetDP_End ;  void  F_CompXX (F_ARG) { get_comp_tensor(0,0, 0,"CompXX") }void  F_CompXY (F_ARG) { get_comp_tensor(1,1,-1,"CompXY") }void  F_CompXZ (F_ARG) { get_comp_tensor(2,2,-1,"CompXZ") }void  F_CompYX (F_ARG) { get_comp_tensor(3,1,-1,"CompYX") }void  F_CompYY (F_ARG) { get_comp_tensor(4,3, 1,"CompYY") }void  F_CompYZ (F_ARG) { get_comp_tensor(5,4,-1,"CompYZ") }void  F_CompZX (F_ARG) { get_comp_tensor(6,2,-1,"CompZX") }void  F_CompZY (F_ARG) { get_comp_tensor(7,4,-1,"CompZY") }void  F_CompZZ (F_ARG) { get_comp_tensor(8,5, 2,"CompZZ") }#undef get_comp_tensor/* ------------------------------------------------------------------------ *//*  Get Tensor for transformation of vector                                 */ /*  from cartesian to spherical coordinate system                           *//* ------------------------------------------------------------------------ */void  F_Cart2Sph (F_ARG) {  int k ;  double theta, phi ;  GetDP_Begin("F_Cart2Sph");    if((A)->Type != VECTOR)     Msg(GERROR, "Vector argument required for Function 'Cart2Sph'");       /* Warning! This is the physic's convention. For the math     convention, switch theta and phi. */  theta = atan2( sqrt(SQU(A->Val[0])+ SQU(A->Val[1])) ,  A->Val[2] ) ;     phi = atan2( A->Val[1] , A->Val[0] ) ;       /* r basis vector */  V->Val[0] = sin(theta) * cos(phi) ;   V->Val[1] = sin(theta) * sin(phi) ;   V->Val[2] = cos(theta) ;  /* theta basis vector */  V->Val[3] = cos(theta) * cos(phi) ;   V->Val[4] = cos(theta) * sin(phi) ;   V->Val[5] = - sin(theta) ;   /* phi basis vector */  V->Val[6] = - sin(phi) ;   V->Val[7] = cos(phi) ;   V->Val[8] = 0. ;      for (k = 0 ; k < Current.NbrHar ; k+=2) {    V->Val[MAX_DIM*k  ] = V->Val[0] ;    V->Val[MAX_DIM*k+1] = V->Val[1] ;    V->Val[MAX_DIM*k+2] = V->Val[2] ;    V->Val[MAX_DIM*k+3] = V->Val[3] ;    V->Val[MAX_DIM*k+4] = V->Val[4] ;    V->Val[MAX_DIM*k+5] = V->Val[5] ;    V->Val[MAX_DIM*k+6] = V->Val[6] ;    V->Val[MAX_DIM*k+7] = V->Val[7] ;    V->Val[MAX_DIM*k+8] = V->Val[8] ;    V->Val[MAX_DIM*(k+1)  ] = 0. ;    V->Val[MAX_DIM*(k+1)+1] = 0. ;    V->Val[MAX_DIM*(k+1)+2] = 0. ;    V->Val[MAX_DIM*(k+1)+3] = 0. ;    V->Val[MAX_DIM*(k+1)+4] = 0. ;    V->Val[MAX_DIM*(k+1)+5] = 0. ;    V->Val[MAX_DIM*(k+1)+6] = 0. ;    V->Val[MAX_DIM*(k+1)+7] = 0. ;    V->Val[MAX_DIM*(k+1)+8] = 0. ;  }  V->Type = TENSOR ;  GetDP_End ;}/* ------------------------------------------------------------------------ *//*  Get Tensor for transformation of vector                                 */ /*  from cartesian to cylindric coordinate system                           *//*  vector              ->  Cart2Cyl[XYZ[]] * vector                        *//*  (x,y,z)-components  ->  (radial, tangential, axial)-components          *//* ------------------------------------------------------------------------ */void  F_Cart2Cyl (F_ARG) {  int k ;  double theta ;  GetDP_Begin("F_Cart2Cyl");    if((A)->Type != VECTOR)     Msg(GERROR, "Vector argument required for Function 'Cart2Cyl'");       theta = atan2(A->Val[1] , A->Val[0]) ;         V->Val[0] =  cos(theta) ;   V->Val[1] =  sin(theta) ;   V->Val[2] =  0 ;  V->Val[3] = -sin(theta) ;   V->Val[4] =  cos(theta) ;   V->Val[5] =  0 ;   V->Val[6] =  0 ;   V->Val[7] =  0 ;   V->Val[8] =  1. ;      for (k = 0 ; k < Current.NbrHar ; k+=2) {    V->Val[MAX_DIM*k  ] = V->Val[0] ;    V->Val[MAX_DIM*k+1] = V->Val[1] ;    V->Val[MAX_DIM*k+2] = V->Val[2] ;    V->Val[MAX_DIM*k+3] = V->Val[3] ;    V->Val[MAX_DIM*k+4] = V->Val[4] ;    V->Val[MAX_DIM*k+5] = V->Val[5] ;    V->Val[MAX_DIM*k+6] = V->Val[6] ;    V->Val[MAX_DIM*k+7] = V->Val[7] ;    V->Val[MAX_DIM*k+8] = V->Val[8] ;    V->Val[MAX_DIM*(k+1)  ] = 0. ;    V->Val[MAX_DIM*(k+1)+1] = 0. ;    V->Val[MAX_DIM*(k+1)+2] = 0. ;    V->Val[MAX_DIM*(k+1)+3] = 0. ;    V->Val[MAX_DIM*(k+1)+4] = 0. ;    V->Val[MAX_DIM*(k+1)+5] = 0. ;    V->Val[MAX_DIM*(k+1)+6] = 0. ;    V->Val[MAX_DIM*(k+1)+7] = 0. ;    V->Val[MAX_DIM*(k+1)+8] = 0. ;  }  V->Type = TENSOR ;  GetDP_End ;}/* ------------------------------------------------------------------------ *//*  U n i t V e c t o r X, Y, Z                                             *//* ------------------------------------------------------------------------ */void  F_UnitVectorX (F_ARG) {  int k ;  GetDP_Begin("F_UnitVectorX");  for (k = 0 ; k < Current.NbrHar ; k++) {    V->Val[MAX_DIM*k  ] = (k)? 0.:1. ;    V->Val[MAX_DIM*k+1] = 0. ;    V->Val[MAX_DIM*k+2] = 0. ;  }  V->Type = VECTOR ;  GetDP_End ;}void  F_UnitVectorY (F_ARG) {  int k ;  GetDP_Begin("F_UnitVectorY");  for (k = 0 ; k < Current.NbrHar ; k++) {    V->Val[MAX_DIM*k  ] = 0. ;    V->Val[MAX_DIM*k+1] = (k)? 0.:1. ;    V->Val[MAX_DIM*k+2] = 0. ;  }  V->Type = VECTOR ;  GetDP_End ;}void  F_UnitVectorZ (F_ARG) {  int k ;  GetDP_Begin("F_UnitVectorZ");  for (k = 0 ; k < Current.NbrHar ; k++) {    V->Val[MAX_DIM*k  ] = 0. ;    V->Val[MAX_DIM*k+1] = 0. ;    V->Val[MAX_DIM*k+2] = (k)? 0.:1. ;  }  V->Type = VECTOR ;  GetDP_End ;}#undef F_ARG

⌨️ 快捷键说明

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