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

📄 cal_value.c

📁 cfd求解器使用与gmsh网格的求解
💻 C
📖 第 1 页 / 共 5 页
字号:
  int  k ;  struct Value V3 ;  GetDP_Begin("Cal_DivideValue");  if ( (V1->Type == SCALAR) && (V2->Type == SCALAR) ) {    if (Current.NbrHar == 1) {      R->Val[0] = V1->Val[0]/V2->Val[0];    }    else {      for (k = 0 ; k < Current.NbrHar ; k += 2) {  /* meaning in multi-harmonics ??? */	CDIVI(0,0,0);	CPUT(0);      }    }    R->Type = SCALAR ;  }  else if ( (V1->Type == VECTOR || V1->Type == TENSOR_DIAG) && (V2->Type == SCALAR) ) {    if (Current.NbrHar == 1) {      a0 = V2->Val[0] ;      R->Val[0] = V1->Val[0] / a0 ;      R->Val[1] = V1->Val[1] / a0 ;      R->Val[2] = V1->Val[2] / a0 ;    }    else {      for (k = 0 ; k < Current.NbrHar ; k += 2) {	CDIVI(0,0,0); CDIVI(1,0,1); CDIVI(2,0,2);	CPUT(0); CPUT(1); CPUT(2);	      }    }    R->Type = V1->Type ;  }  else if ( (V1->Type == TENSOR_SYM) && (V2->Type == SCALAR) ) {    if (Current.NbrHar == 1) {      a0 = V2->Val[0] ;      R->Val[0] = V1->Val[0] / a0 ;      R->Val[1] = V1->Val[1] / a0 ;      R->Val[2] = V1->Val[2] / a0 ;      R->Val[3] = V1->Val[3] / a0 ;      R->Val[4] = V1->Val[4] / a0 ;      R->Val[5] = V1->Val[5] / a0 ;    }    else {      for (k = 0 ; k < Current.NbrHar ; k += 2) {	CDIVI(0,0,0); CDIVI(1,0,1); CDIVI(2,0,2); CDIVI(3,0,3); CDIVI(4,0,4); CDIVI(5,0,5);	CPUT(0); CPUT(1); CPUT(2); CPUT(3); CPUT(4); CPUT(5);      }    }    R->Type = TENSOR_SYM ;  }  else if ( (V1->Type == TENSOR) && (V2->Type == SCALAR) ) {    if (Current.NbrHar == 1) {      a0 = V2->Val[0] ;      R->Val[0] = V1->Val[0] / a0 ;      R->Val[1] = V1->Val[1] / a0 ;      R->Val[2] = V1->Val[2] / a0 ;      R->Val[3] = V1->Val[3] / a0 ;      R->Val[4] = V1->Val[4] / a0 ;      R->Val[5] = V1->Val[5] / a0 ;      R->Val[6] = V1->Val[6] / a0 ;      R->Val[7] = V1->Val[7] / a0 ;      R->Val[8] = V1->Val[8] / a0 ;    }    else {      for (k = 0 ; k < Current.NbrHar ; k += 2) {	CDIVI(0,0,0); CDIVI(1,0,1); CDIVI(2,0,2); CDIVI(3,0,3); CDIVI(4,0,4); CDIVI(5,0,5);		CDIVI(6,0,6); CDIVI(7,0,7); CDIVI(8,0,8);	CPUT(0); CPUT(1); CPUT(2); CPUT(3); CPUT(4); CPUT(5);	CPUT(6); CPUT(7); CPUT(8);      }    }    R->Type = TENSOR ;  }  else if ( (V1->Type == SCALAR) && 	    (V2->Type == TENSOR || V2->Type == TENSOR_SYM || V2->Type == TENSOR_DIAG) ) {    Cal_InvertValue(V2,&V3);    Cal_ProductValue(V1,&V3,R);  }  else {    Msg(GERROR, "Division of non adapted quantities: %s / %s",	Get_StringForDefine(Field_Type, V1->Type),	Get_StringForDefine(Field_Type, V2->Type));  }  GetDP_End ;}#undef CDIVI#undef CPUT/* ------------------------------------------------------------------------    R <- V1 % V2    ------------------------------------------------------------------------ */void  Cal_ModuloValue (struct Value * V1, struct Value * V2, struct Value * R) {  int k ;  GetDP_Begin("Cal_ModuloValue");  if ( (V1->Type == SCALAR) && (V2->Type == SCALAR) ) {    for (k = 0 ; k < Current.NbrHar ; k += 2) {      R->Val[MAX_DIM* k   ] = (int)V1->Val[MAX_DIM*k] % (int)V2->Val[MAX_DIM*k] ;      R->Val[MAX_DIM*(k+1)] = 0. ;    }    R->Type = SCALAR ;  }  else if ( (V1->Type == VECTOR) && (V2->Type == SCALAR) ) {    for (k = 0 ; k < Current.NbrHar ; k += 2) {      R->Val[MAX_DIM* k   ]   = (int)V1->Val[MAX_DIM*k  ] % (int)V2->Val[MAX_DIM*k  ] ;      R->Val[MAX_DIM* k   +1] = (int)V1->Val[MAX_DIM*k+1] % (int)V2->Val[MAX_DIM*k+1] ;      R->Val[MAX_DIM* k   +2] = (int)V1->Val[MAX_DIM*k+2] % (int)V2->Val[MAX_DIM*k+2] ;      R->Val[MAX_DIM*(k+1)]   = 0. ;      R->Val[MAX_DIM*(k+1)+1] = 0. ;      R->Val[MAX_DIM*(k+1)+2] = 0. ;    }    R->Type = VECTOR ;  }  else {    Msg(GERROR, "Modulo of non adapted quantities: %s %% %s",	Get_StringForDefine(Field_Type, V1->Type),	Get_StringForDefine(Field_Type, V2->Type));  }  GetDP_End ;}/* ------------------------------------------------------------------------    R <- V1 X V2    ------------------------------------------------------------------------ */void  Cal_CrossProductValue (struct Value * V1, struct Value * V2, struct Value * R) {  int k ;  GetDP_Begin("Cal_CrossProductValue");  if ( (V1->Type == VECTOR) && (V2->Type == VECTOR) ) {    if (Current.NbrHar == 1) {      a1[0] = V1->Val[1] * V2->Val[2] - V1->Val[2] * V2->Val[1] ;      a1[1] = V1->Val[2] * V2->Val[0] - V1->Val[0] * V2->Val[2] ;      a1[2] = V1->Val[0] * V2->Val[1] - V1->Val[1] * V2->Val[0] ;      R->Val[0] = a1[0] ;  R->Val[1] = a1[1] ;  R->Val[2] = a1[2] ;    }    else {      for (k = 0 ; k < Current.NbrHar ; k += 2) {	Cal_ComplexProduct(&(V1->Val[MAX_DIM*k+1]), &(V2->Val[MAX_DIM*k+2]), a1) ;	Cal_ComplexProduct(&(V1->Val[MAX_DIM*k+2]), &(V2->Val[MAX_DIM*k+1]), a2) ;	b1[0] = a1[0] - a2[0] ;  b1[MAX_DIM] = a1[MAX_DIM] - a2[MAX_DIM] ;	Cal_ComplexProduct(&(V1->Val[MAX_DIM*k+2]), &(V2->Val[MAX_DIM*k  ]), a1) ;	Cal_ComplexProduct(&(V1->Val[MAX_DIM*k  ]), &(V2->Val[MAX_DIM*k+2]), a2) ;	b2[0] = a1[0] - a2[0] ;  b2[MAX_DIM] = a1[MAX_DIM] - a2[MAX_DIM] ;	Cal_ComplexProduct(&(V1->Val[MAX_DIM*k  ]), &(V2->Val[MAX_DIM*k+1]), a1) ;	Cal_ComplexProduct(&(V1->Val[MAX_DIM*k+1]), &(V2->Val[MAX_DIM*k  ]), a2) ;	b3[0] = a1[0] - a2[0] ;  b3[MAX_DIM] = a1[MAX_DIM] - a2[MAX_DIM] ;	R->Val[MAX_DIM*k  ] = b1[0] ;  R->Val[MAX_DIM*(k+1)  ] = b1[MAX_DIM] ;	R->Val[MAX_DIM*k+1] = b2[0] ;  R->Val[MAX_DIM*(k+1)+1] = b2[MAX_DIM] ;	R->Val[MAX_DIM*k+2] = b3[0] ;  R->Val[MAX_DIM*(k+1)+2] = b3[MAX_DIM] ;      }    }    R->Type = VECTOR ;  }  else {    Msg(GERROR, "Cross product of non vector quantities: %s /\\ %s",	Get_StringForDefine(Field_Type, V1->Type),	Get_StringForDefine(Field_Type, V2->Type));  }  GetDP_End ;}/* ------------------------------------------------------------------------    R <- V1 ^ V2    ------------------------------------------------------------------------ */void  Cal_PowerValue (struct Value * V1, struct Value * V2, struct Value * R) {  int    k;  double arg, abs ;  GetDP_Begin("Cal_PowerValue");  if ( V1->Type == SCALAR && V2->Type == SCALAR ){    if(V2->Val[0] == 1.){      Cal_CopyValue(V1,R) ;    }    if(V2->Val[0] == 2.){      if (Current.NbrHar == 1) {	R->Val[0] = DSQU(V1->Val[0]) ;      }      else{	for (k = 0 ; k < Current.NbrHar ; k+=2) {	  Cal_ComplexProduct(&(V1->Val[MAX_DIM*k]), &(V1->Val[MAX_DIM*k]), a1) ;	  	  R->Val[MAX_DIM* k   ] = a1[0];	  R->Val[MAX_DIM*(k+1)] = a1[MAX_DIM];	}      }    }    else{      if (Current.NbrHar == 1) {	R->Val[0] = pow(V1->Val[0],V2->Val[0]) ;      }      else{	for (k = 0 ; k < Current.NbrHar ; k+=2) {	  abs = pow(sqrt(DSQU(V1->Val[MAX_DIM*k])+DSQU(V1->Val[MAX_DIM*(k+1)])), 		    V2->Val[0]) ;	  arg = atan2(V1->Val[MAX_DIM*(k+1)], V1->Val[MAX_DIM*k]) ;	  R->Val[MAX_DIM* k   ] = abs * cos(V2->Val[0] * arg) ;	  R->Val[MAX_DIM*(k+1)] = abs * sin(V2->Val[0] * arg) ;	}      }    }    R->Type = SCALAR ;  }  else {    Msg(GERROR, "Power of non scalar quantities: %s ^ %s",	Get_StringForDefine(Field_Type, V1->Type),	Get_StringForDefine(Field_Type, V2->Type));  }  GetDP_End ;}/* ------------------------------------------------------------------------    R <- V1 < V2    ------------------------------------------------------------------------ */void  Cal_LessValue (struct Value * V1, struct Value * V2, struct Value * R) {  GetDP_Begin("Cal_LessValue");  if ( (V1->Type == SCALAR) && (V2->Type == SCALAR) ) {    R->Val[0] = (V1->Val[0] < V2->Val[0]) ;    R->Type = SCALAR ;  }  else {    Msg(GERROR, "Comparison of non scalar quantities: %s < %s",	Get_StringForDefine(Field_Type, V1->Type),	Get_StringForDefine(Field_Type, V2->Type));  }  GetDP_End ;}/* ------------------------------------------------------------------------    R <- V1 <= V2    ------------------------------------------------------------------------ */void  Cal_LessOrEqualValue (struct Value * V1, struct Value * V2, struct Value * R) {  GetDP_Begin("Cal_LessOrEqualValue");  if ( (V1->Type == SCALAR) && (V2->Type == SCALAR) ) {    R->Val[0] = (V1->Val[0] <= V2->Val[0]) ;    R->Type = SCALAR ;  }  else {    Msg(GERROR, "Comparison of non scalar quantities: %s <= %s",	Get_StringForDefine(Field_Type, V1->Type),	Get_StringForDefine(Field_Type, V2->Type));  }  GetDP_End ;}/* ------------------------------------------------------------------------    R <- V1 > V2    ------------------------------------------------------------------------ */void  Cal_GreaterValue (struct Value * V1, struct Value * V2, struct Value * R) {  GetDP_Begin("Cal_GreaterValue");  if ( (V1->Type == SCALAR) && (V2->Type == SCALAR) ) {    R->Val[0] = (V1->Val[0] > V2->Val[0]) ;    R->Type = SCALAR ;  }  else {    Msg(GERROR, "Comparison of non scalar quantities: %s > %s",	Get_StringForDefine(Field_Type, V1->Type),	Get_StringForDefine(Field_Type, V2->Type));  }  GetDP_End ;}/* ------------------------------------------------------------------------    R <- V1 >= V2    ------------------------------------------------------------------------ */void  Cal_GreaterOrEqualValue (struct Value * V1, struct Value * V2, struct Value * R) {  GetDP_Begin("Cal_GreaterOrEqualValue");  if ( (V1->Type == SCALAR) && (V2->Type == SCALAR) ) {    R->Val[0] = (V1->Val[0] >= V2->Val[0]) ;    R->Type = SCALAR ;  }  else {    Msg(GERROR, "Comparison of non scalar quantities: %s >= %s",	Get_StringForDefine(Field_Type, V1->Type),	Get_StringForDefine(Field_Type, V2->Type));  }  GetDP_End ;}/* ------------------------------------------------------------------------    R <- V1 == V2    ------------------------------------------------------------------------ */void  Cal_EqualValue (struct Value * V1, struct Value * V2, struct Value * R) {  int    k;  GetDP_Begin("Cal_EqualValue");  if ( (V1->Type == SCALAR) && (V2->Type == SCALAR) ) {    R->Val[0] = (V1->Val[0] == V2->Val[0]) ;    for (k = 1 ; k < Current.NbrHar ; k++){      if(!R->Val[0]) break;      R->Val[0] = (V1->Val[MAX_DIM*k] == V2->Val[MAX_DIM*k]) ;    }    R->Type = SCALAR ;  }  else if ( ( (V1->Type == VECTOR) && (V2->Type == VECTOR) ) ||	    ( (V1->Type == TENSOR_DIAG) && (V2->Type == TENSOR_DIAG) ) ) {    R->Val[0] = (V1->Val[0] == V2->Val[0] &&		 V1->Val[1] == V2->Val[1] &&		 V1->Val[2] == V2->Val[2]) ;    for (k = 0 ; k < Current.NbrHar ; k++) {      if(!R->Val[0]) break;      R->Val[0] = (V1->Val[MAX_DIM*k  ] == V2->Val[MAX_DIM*k  ] &&		   V1->Val[MAX_DIM*k+1] == V2->Val[MAX_DIM*k+1] &&		   V1->Val[MAX_DIM*k+2] == V2->Val[MAX_DIM*k+2]) ;    }    R->Type = SCALAR ;  }  else if ( (V1->Type == TENSOR_SYM) && (V2->Type == TENSOR_SYM) ) {    R->Val[0] = (V1->Val[0] == V2->Val[0] &&		 V1->Val[1] == V2->Val[1] &&		 V1->Val[2] == V2->Val[2] &&		 V1->Val[3] == V2->Val[3] &&		 V1->Val[4] == V2->Val[4] &&		 V1->Val[5] == V2->Val[5]) ;    for (k = 0 ; k < Current.NbrHar ; k++) {      if(!R->Val[0]) break;      R->Val[0] = (V1->Val[MAX_DIM*k  ] == V2->Val[MAX_DIM*k  ] &&		   V1->Val[MAX_DIM*k+1] == V2->Val[MAX_DIM*k+1] &&		   V1->Val[MAX_DIM*k+2] == V2->Val[MAX_DIM*k+2] &&		   V1->Val[MAX_DIM*k+3] == V2->Val[MAX_DIM*k+3] &&		   V1->Val[MAX_DIM*k+4] == V2->Val[MAX_DIM*k+4] &&		   V1->Val[MAX_DIM*k+5] == V2->Val[MAX_DIM*k+5]) ;    }    R->Type = SCALAR ;  }  else if ( (V1->Type == TENSOR) && (V2->Type == TENSOR) ) {    R->Val[0] = (V1->Val[0] == V2->Val[0] &&		 V1->Val[1] == V2->Val[1] &&		 V1->Val[2] == V2->Val[2] &&		 V1->Val[3] == V2->Val[3] &&		 V1->Val[4] == V2->Val[4] &&		 V1->Val[5] == V2->Val[5] &&		 V1->Val[6] == V2->Val[6] &&		 V1->Val[7] == V2->Val[7] &&		 V1->Val[8] == V2->Val[8]) ;    for (k = 0 ; k < Current.NbrHar ; k++) {      if(!R->Val[0]) break;      R->Val[0] = (V1->Val[MAX_DIM*k  ] == V2->Val[MAX_DIM*k  ] &&		   V1->Val[MAX_DIM*k+1] == V2->Val[MAX_DIM*k+1] &&		   V1->Val[MAX_DIM*k+2] == V2->Val[MAX_DIM*k+2] &&		   V1->Val[MAX_DIM*k+3] == V2->Val[MAX_DIM*k+3] &&		   V1->Val[MAX_DIM*k+4] == V2->Val[MAX_DIM*k+4] &&		   V1->Val[MAX_DIM*k+5] == V2->Val[MAX_DIM*k+5] &&		   V1->Val[MAX_DIM*k+6] == V2->Val[MAX_DIM*k+6] &&		   V1->Val[MAX_DIM*k+7] == V2->Val[MAX_DIM*k+7] &&		   V1->Val[MAX_DIM*k+8] == V2->Val[MAX_DIM*k+8]) ;    }    R->Type = SCALAR ;  }  else {    Msg(GERROR, "Comparison of different quantities: %s == %s",	Get_StringForDefine(Field_Type, V1->Type),	Get_StringForDefine(Field_Type, V2->Type));  }  GetDP_End ;}/* ------------------------------------------------------------------------    R <- V1 != V2    ------------------------------------------------------------------------ */void  Cal_NotEqualValue (struct Value * V1, struct Value * V2, struct Value * R) {  int    k;  GetDP_Begin("Cal_NotEqualValue");  if ( (V1->Type == SCALAR) && (V2->Type == SCALAR) ) {    R->Val[0] = (V1->Val[0] != V2->Val[0]) ;    for (k = 1 ; k < Current.NbrHar ; k++){      if(R->Val[0]) break;      R->Val[0] = (V1->Val[MAX_DIM*k] != V2->Val[MAX_DIM*k]) ;    }    R->Type = SCALAR ;  }  else if ( ( (V1->Type == VECTOR) && (V2->Type == VECTOR) ) ||	    ( (V1->Type == TENSOR_DIAG) && (V2->Type == TENSOR_DIAG) ) ) {    R->Val[0] = (V1->Val[0] != V2->Val[0] ||		 V1->Val[1] != V2->Val[1] ||		 V1->Val[2] != V2->Val[2]) ;    for (k = 0 ; k < Current.NbrHar ; k++) {      if(R->Val[0]) break;      R->Val[0] = (V1->Val[MAX_DIM*k  ] != V2->Val[MAX_DIM*k  ] ||

⌨️ 快捷键说明

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