#ifndef __PARAMETER_H #define __PARAMETER_H #include "mpi.h" #include "pthread.h" #include "config_parameters.h" #include "OCFD_Schemes_hybrid_auto.h" #include "OCFD_Schemes_Choose.h" #include "utility.h" #include "stdio.h" #include "string.h" #include "assert.h" #ifdef __cplusplus extern "C"{ #endif // ------For Doubleprecision (real*8)------------------------------------------------------------------ int OCFD_REAL_KIND=8; MPI_Datatype OCFD_DATA_TYPE = MPI_DOUBLE; //double precison computing // ------For Single precision (real*4)----------------------- // typedef float REAL; // int OCFD_REAL_KIND=4, // MPI_Datatype OCFD_DATA_TYPE = MPI_REAL; // single precision computing // =========== Parameters for MPI ==========================================================---------------- // -----constant----- REAL Re , Pr , Ama , Gamma , Ref_T , epsl_SW , PI = 3.141592653589793; REAL Cv , Cp , Tsb , amu_C0; REAL split_C1 , split_C3, tmp0; REAL vis_flux_init_c; // --------MPI------------------- int my_id,npx,npy,npz; //全局即方向id int NPX0=0 , NPY0=0 , NPZ0=0; // proc number on each direction int ID_XP1,ID_XM1,ID_YP1,ID_YM1,ID_ZP1,ID_ZM1; //邻居全局id MPI_Status status; MPI_Comm MPI_COMM_X,MPI_COMM_Y,MPI_COMM_Z,MPI_COMM_XY,MPI_COMM_XZ,MPI_COMM_YZ; MPI_Datatype TYPE_LAPX1,TYPE_LAPY1,TYPE_LAPZ1,TYPE_LAPX2,TYPE_LAPY2,TYPE_LAPZ2; int *i_offset,*j_offset,*k_offset,*i_nn,*j_nn,*k_nn; //某个方向的分块信息 int MSG_BLOCK_SIZE; unsigned int nx=0,ny=0,nz=0; // 某方向所处理的个数 unsigned int NX_GLOBAL=0,NY_GLOBAL=0,NZ_GLOBAL=0; unsigned int nx_lap,ny_lap,nz_lap; unsigned int nx_2lap,ny_2lap,nz_2lap; int Stream_MODE; //Stream 模式 int TEST; pthread_t* thread_handles; // -------------------------------------------------------------------------------------------------------- REAL dt,end_time,tt; REAL cpu_time; int Istep , end_step; // -----------Analysis and Save------------------------------------------ int OCFD_ANA_time_average; int OCFD_ana_flatplate, OCFD_ana_saveplaneYZ; int OCFD_ana_saveplaneXZ, OCFD_ana_savePoints; int OCFD_ana_saveplaneXY, OCFD_ana_saveblock; int OCFD_ana_getQ; int Kstep_save, Kstep_show,N_ana,*K_ana,*Kstep_ana,KRK; //------------Scheme_choose invis and vis---------------------------------------- int Scheme_invis_ID = 0; int Scheme_vis_ID = 0; //---------------------WENO_SYMBO_Limiter------------------------------------------ REAL WENO_TV_Limiter = 5.0; REAL WENO_TV_MAX = 0.2; // -----------Boundary Condition and Initial Condition----------------------------- int Iperiodic[3], Jacbound[3], D0_bound[6]; int Non_ref[6]; int Init_stat; int IBC_USER; REAL N_nan; REAL *BC_rpara, (*ANA_rpara)[100]; int *BC_npara, (*ANA_npara)[100]; // ------Filter----------------------------------------------- int FILTER_1,FILTER_2; // 1: 5-point filter, 2: 7-point wide-band filter int NF_max = 10; // maximum of filtering int Filter_Fo9p=1, Filter_Fopt_shock=2; int NFiltering,(*Filter_para)[11]; //Filtering REAL (*Filter_rpara)[3]; // s0 (0'9') buff[j++] = buff[i]; } buff[j] = '\0'; } int StringToInteger(char *buff){ int value = 0; while(*buff != '\0') { if(*buff>='0' && *buff<='9') value = value*10 + *buff - '0'; buff++; } return value; } void SearchItem(FILE *file, configItem *List, int configNum){ int N = 1000; char buff[N]; char name[N]; char value[N]; rewind(file); while(fgets(buff, N, file)) { if(ExtarctItem(buff, name, value)){ memset(buff, 0, strlen(buff)); ModifyItem(name, buff); for(int i = 0; i < configNum; i++){ if(strcmp(buff, List[i].name) == 0){ strcpy(List[i].value, value); } } memset(name, 0, strlen(name)); } } } int ItemNUM(FILE *file, char *Item_name, int *NameNUM){ int N = 1000; int i = 0; char buff[N]; char name[N]; char value[N]; rewind(file); while(fgets(buff, N, file)) { if(ExtarctItem(buff, name, value)){ memset(buff, 0, strlen(buff)); ModifyItem(name, buff); RemovalNUM(buff); if(strcmp(buff, Item_name) == 0){ i += 1; *NameNUM = StringToInteger(name); NameNUM++; } memset(name, 0, strlen(name)); } } return i; } int PartItem(char *src, char part[][1000]){ const char blank[2] = " "; int num = 0; char *buff; buff = strtok(src, blank); while (buff != NULL) { strcpy(part[num], buff); buff = strtok(NULL, blank); num += 1; } return num; } #ifdef __cplusplus } #endif #endif