Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ Parameters described on this page:
[OPT__OUTPUT_TEXT_LENGTH_INT](#OPT__OUTPUT_TEXT_LENGTH_INT),  
[OPT__OUTPUT_USER](#OPT__OUTPUT_USER),  
[OPT__OUTPUT_PAR_MODE](#OPT__OUTPUT_PAR_MODE),  
[OPT__OUTPUT_PAR_ADDI_ATTR](#OPT__OUTPUT_PAR_ADDI_ATTR),  
[OPT__OUTPUT_PAR_MESH](#OPT__OUTPUT_PAR_MESH),  
[OPT__OUTPUT_BASEPS](#OPT__OUTPUT_BASEPS),  
[OPT__OUTPUT_BASE](#OPT__OUTPUT_BASE),  
Expand Down Expand Up @@ -100,6 +101,13 @@ This option is mainly for debugging purposes since the simulation snapshots
particle data.
* **Restriction:**

<a name="OPT__OUTPUT_PAR_ADDI_ATTR"></a>
* #### `OPT__OUTPUT_PAR_ADDI_ATTR` &ensp; (0=off, 1=time, 2=acc, 3=acc+time) &ensp; [0]
* **Description**
Output particle addition data (time or acceleration) to snapshots (`Data_******`) file.
* **Restriction:**
Only applicable when enabling [[--particle | Installation:-Option-List#--particle]] and [[--store_par_acc | Installation:-Option-List#--store_par_acc]]

<a name="OPT__OUTPUT_PAR_MESH"></a>
* #### `OPT__OUTPUT_PAR_MESH` &ensp; (0=off, 1=on) &ensp; [1]
* **Description:**
Expand Down
2 changes: 2 additions & 0 deletions example/test_problem/Template/Input__Parameter
Original file line number Diff line number Diff line change
Expand Up @@ -384,6 +384,8 @@ OPT__OUTPUT_TEXT_FORMAT_FLT %24.16e # string format of floating-point vari
OPT__OUTPUT_TEXT_LENGTH_INT 12 # string length of integer variables in output text files [12]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_MODE 0 # output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY##
OPT__OUTPUT_PAR_ADDI_ATTR 0 # output particle additional attributes(time, acceleration...etc) to snapshots. ##STORE_PAR_ACC ONLY##
# (0=off, 1=time, 2=acc, 3=time+acc) [0]
OPT__OUTPUT_PAR_MESH 1 # output the attributes of tracer particles mapped from mesh quantities -> edit "Input__Par_Mesh" [1] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
OPT__OUTPUT_BASE 0 # only output the base-level data [0] ##OPT__OUTPUT_PART ONLY##
Expand Down
2 changes: 1 addition & 1 deletion include/Global.h
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ extern bool FFTW3_Double_OMP_Enabled, FFTW3_Single_OMP_Enabled;
#ifdef PARTICLE
extern double DT__PARVEL, DT__PARVEL_MAX, DT__PARACC;
extern bool OPT__CK_PARTICLE, OPT__FLAG_NPAR_CELL, OPT__FLAG_PAR_MASS_CELL, OPT__FREEZE_PAR, OPT__OUTPUT_PAR_MESH, OPT__PAR_INIT_CHECK;
extern int OPT__OUTPUT_PAR_MODE, OPT__PARTICLE_COUNT, OPT__FLAG_NPAR_PATCH, FlagTable_NParPatch[NLEVEL-1], FlagTable_NParCell[NLEVEL-1];
extern int OPT__OUTPUT_PAR_MODE, OPT__OUTPUT_PAR_ADDI_ATTR, OPT__PARTICLE_COUNT, OPT__FLAG_NPAR_PATCH, FlagTable_NParPatch[NLEVEL-1], FlagTable_NParCell[NLEVEL-1];
extern double FlagTable_ParMassCell[NLEVEL-1];
extern ParOutputDens_t OPT__OUTPUT_PAR_DENS;
extern int PAR_IC_FLOAT8;
Expand Down
4 changes: 4 additions & 0 deletions src/Auxiliary/Aux_Check_Parameter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,10 @@ void Aux_Check_Parameter()
if ( ! Aux_CheckPermission( OUTPUT_DIR, 2+1 ) )
Aux_Error( ERROR_INFO, "You do not have write and execute permissions for the \"%s\" folder set by OUTPUT_DIR !!\n", OUTPUT_DIR );

# if ( !defined PARTICLE || !defined STORE_PAR_ACC)
if ( OPT__OUTPUT_PAR_ADDI_ATTR != 0 )
Aux_Error( ERROR_INFO, "must enable PARTICLE and STORE_PAR_ACC for OPT__OUTPUT_PAR_ADDI_ATTR option != 0");
# endif


// general warnings
Expand Down
79 changes: 40 additions & 39 deletions src/Auxiliary/Aux_TakeNote.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1590,70 +1590,71 @@ void Aux_TakeNote()
// record the parameters of data dump
fprintf( Note, "Parameters of Data Dump\n" );
fprintf( Note, "***********************************************************************************\n" );
fprintf( Note, "OPT__OUTPUT_TOTAL % d\n", OPT__OUTPUT_TOTAL );
fprintf( Note, "OPT__OUTPUT_PART % d\n", OPT__OUTPUT_PART );
fprintf( Note, "OPT__OUTPUT_USER % d\n", OPT__OUTPUT_USER );
fprintf( Note, "OPT__OUTPUT_TEXT_FORMAT_FLT %s\n", OPT__OUTPUT_TEXT_FORMAT_FLT );
fprintf( Note, "OPT__OUTPUT_TEXT_LENGTH_INT % d\n", OPT__OUTPUT_TEXT_LENGTH_INT );
fprintf( Note, "OPT__OUTPUT_TOTAL % d\n", OPT__OUTPUT_TOTAL );
fprintf( Note, "OPT__OUTPUT_PART % d\n", OPT__OUTPUT_PART );
fprintf( Note, "OPT__OUTPUT_USER % d\n", OPT__OUTPUT_USER );
fprintf( Note, "OPT__OUTPUT_TEXT_FORMAT_FLT %s\n", OPT__OUTPUT_TEXT_FORMAT_FLT );
fprintf( Note, "OPT__OUTPUT_TEXT_LENGTH_INT % d\n", OPT__OUTPUT_TEXT_LENGTH_INT );
# ifdef PARTICLE
fprintf( Note, "OPT__OUTPUT_PAR_MODE % d\n", OPT__OUTPUT_PAR_MODE );
fprintf( Note, "OPT__OUTPUT_PAR_MODE % d\n", OPT__OUTPUT_PAR_MODE );
fprintf( Note, "OPT__OUTPUT_PAR_ADDI_ATTR % d\n", OPT__OUTPUT_PAR_ADDI_ATTR );
# ifdef TRACER
fprintf( Note, "OPT__OUTPUT_PAR_MESH % d\n", OPT__OUTPUT_PAR_MESH );
fprintf( Note, "OPT__OUTPUT_PAR_MESH % d\n", OPT__OUTPUT_PAR_MESH );
# endif
# endif
fprintf( Note, "OPT__OUTPUT_BASEPS % d\n", OPT__OUTPUT_BASEPS );
fprintf( Note, "OPT__OUTPUT_BASE % d\n", OPT__OUTPUT_BASE );
fprintf( Note, "OPT__OUTPUT_BASEPS % d\n", OPT__OUTPUT_BASEPS );
fprintf( Note, "OPT__OUTPUT_BASE % d\n", OPT__OUTPUT_BASE );
# ifdef GRAVITY
fprintf( Note, "OPT__OUTPUT_POT % d\n", OPT__OUTPUT_POT );
fprintf( Note, "OPT__OUTPUT_POT % d\n", OPT__OUTPUT_POT );
# endif
# ifdef PARTICLE
fprintf( Note, "OPT__OUTPUT_PAR_DENS % d\n", OPT__OUTPUT_PAR_DENS );
fprintf( Note, "OPT__OUTPUT_PAR_DENS % d\n", OPT__OUTPUT_PAR_DENS );
# endif
# ifdef MHD
fprintf( Note, "OPT__OUTPUT_CC_MAG % d\n", OPT__OUTPUT_CC_MAG );
fprintf( Note, "OPT__OUTPUT_CC_MAG % d\n", OPT__OUTPUT_CC_MAG );
# endif
# if ( MODEL == HYDRO )
fprintf( Note, "OPT__OUTPUT_PRES % d\n", OPT__OUTPUT_PRES );
fprintf( Note, "OPT__OUTPUT_TEMP % d\n", OPT__OUTPUT_TEMP );
fprintf( Note, "OPT__OUTPUT_ENTR % d\n", OPT__OUTPUT_ENTR );
fprintf( Note, "OPT__OUTPUT_CS % d\n", OPT__OUTPUT_CS );
fprintf( Note, "OPT__OUTPUT_DIVVEL % d\n", OPT__OUTPUT_DIVVEL );
fprintf( Note, "OPT__OUTPUT_MACH % d\n", OPT__OUTPUT_MACH );
fprintf( Note, "OPT__OUTPUT_PRES % d\n", OPT__OUTPUT_PRES );
fprintf( Note, "OPT__OUTPUT_TEMP % d\n", OPT__OUTPUT_TEMP );
fprintf( Note, "OPT__OUTPUT_ENTR % d\n", OPT__OUTPUT_ENTR );
fprintf( Note, "OPT__OUTPUT_CS % d\n", OPT__OUTPUT_CS );
fprintf( Note, "OPT__OUTPUT_DIVVEL % d\n", OPT__OUTPUT_DIVVEL );
fprintf( Note, "OPT__OUTPUT_MACH % d\n", OPT__OUTPUT_MACH );
# endif
# ifdef MHD
fprintf( Note, "OPT__OUTPUT_DIVMAG % d\n", OPT__OUTPUT_DIVMAG );
fprintf( Note, "OPT__OUTPUT_DIVMAG % d\n", OPT__OUTPUT_DIVMAG );
# endif
fprintf( Note, "OPT__OUTPUT_USER_FIELD % d\n", OPT__OUTPUT_USER_FIELD );
fprintf( Note, "OPT__OUTPUT_USER_FIELD % d\n", OPT__OUTPUT_USER_FIELD );
# ifdef SRHD
fprintf( Note, "OPT__OUTPUT_3VELOCITY % d\n", OPT__OUTPUT_3VELOCITY );
fprintf( Note, "OPT__OUTPUT_LORENTZ % d\n", OPT__OUTPUT_LORENTZ );
fprintf( Note, "OPT__OUTPUT_ENTHALPY % d\n", OPT__OUTPUT_ENTHALPY );
fprintf( Note, "OPT__OUTPUT_3VELOCITY % d\n", OPT__OUTPUT_3VELOCITY );
fprintf( Note, "OPT__OUTPUT_LORENTZ % d\n", OPT__OUTPUT_LORENTZ );
fprintf( Note, "OPT__OUTPUT_ENTHALPY % d\n", OPT__OUTPUT_ENTHALPY );
# endif

// user-defined derived fields
if ( OPT__OUTPUT_USER_FIELD ) {
fprintf( Note, " Number of fields % d\n", UserDerField_Num );
fprintf( Note, " Number of fields % d\n", UserDerField_Num );
if ( UserDerField_Num > 0 ) {
fprintf( Note, " Labels " );
fprintf( Note, " Labels " );
for (int v=0; v<UserDerField_Num; v++)
fprintf( Note, " %s", UserDerField_Label[v] );
fprintf( Note, " %s", UserDerField_Label[v] );
fprintf( Note, "\n" );
fprintf( Note, " Units " );
fprintf( Note, " Units " );
for (int v=0; v<UserDerField_Num; v++)
fprintf( Note, " %s", UserDerField_Unit [v] );
fprintf( Note, " %s", UserDerField_Unit [v] );
fprintf( Note, "\n" ); } }

fprintf( Note, "OPT__OUTPUT_MODE % d\n", OPT__OUTPUT_MODE );
fprintf( Note, "OPT__OUTPUT_RESTART % d\n", OPT__OUTPUT_RESTART );
fprintf( Note, "OUTPUT_STEP % d\n", OUTPUT_STEP );
fprintf( Note, "OUTPUT_DT % 21.14e\n", OUTPUT_DT );
fprintf( Note, "OUTPUT_WALLTIME % 21.14e\n", OUTPUT_WALLTIME );
fprintf( Note, "OUTPUT_WALLTIME_UNIT % d\n", OUTPUT_WALLTIME_UNIT );
fprintf( Note, "OUTPUT_PART_X % 21.14e\n", OUTPUT_PART_X );
fprintf( Note, "OUTPUT_PART_Y % 21.14e\n", OUTPUT_PART_Y );
fprintf( Note, "OUTPUT_PART_Z % 21.14e\n", OUTPUT_PART_Z );
fprintf( Note, "INIT_DUMPID % d\n", INIT_DUMPID );
fprintf( Note, "OUTPUT_DIR %s\n", OUTPUT_DIR );
fprintf( Note, "OPT__OUTPUT_MODE % d\n", OPT__OUTPUT_MODE );
fprintf( Note, "OPT__OUTPUT_RESTART % d\n", OPT__OUTPUT_RESTART );
fprintf( Note, "OUTPUT_STEP % d\n", OUTPUT_STEP );
fprintf( Note, "OUTPUT_DT % 21.14e\n", OUTPUT_DT );
fprintf( Note, "OUTPUT_WALLTIME % 21.14e\n", OUTPUT_WALLTIME );
fprintf( Note, "OUTPUT_WALLTIME_UNIT % d\n", OUTPUT_WALLTIME_UNIT );
fprintf( Note, "OUTPUT_PART_X % 21.14e\n", OUTPUT_PART_X );
fprintf( Note, "OUTPUT_PART_Y % 21.14e\n", OUTPUT_PART_Y );
fprintf( Note, "OUTPUT_PART_Z % 21.14e\n", OUTPUT_PART_Z );
fprintf( Note, "INIT_DUMPID % d\n", INIT_DUMPID );
fprintf( Note, "OUTPUT_DIR %s\n", OUTPUT_DIR );
fprintf( Note, "***********************************************************************************\n" );
fprintf( Note, "\n\n" );

Expand Down
1 change: 1 addition & 0 deletions src/Init/Init_Load_Parameter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,7 @@ void Init_Load_Parameter()
ReadPara->Add( "OPT__OUTPUT_TEXT_LENGTH_INT",&OPT__OUTPUT_TEXT_LENGTH_INT, 12, 0, NoMax_int );
# ifdef PARTICLE
ReadPara->Add( "OPT__OUTPUT_PAR_MODE", &OPT__OUTPUT_PAR_MODE, 0, 0, 2 );
ReadPara->Add( "OPT__OUTPUT_PAR_ADDI_ATTR", &OPT__OUTPUT_PAR_ADDI_ATTR, 0, 0, 3 );
# ifdef TRACER
ReadPara->Add( "OPT__OUTPUT_PAR_MESH", &OPT__OUTPUT_PAR_MESH, true, Useless_bool, Useless_bool );
# else
Expand Down
2 changes: 1 addition & 1 deletion src/Main/Main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ bool FFTW3_Double_OMP_Enabled, FFTW3_Single_OMP_Enabled;
#ifdef PARTICLE
double DT__PARVEL, DT__PARVEL_MAX, DT__PARACC;
bool OPT__CK_PARTICLE, OPT__FLAG_NPAR_CELL, OPT__FLAG_PAR_MASS_CELL, OPT__FREEZE_PAR, OPT__OUTPUT_PAR_MESH, OPT__PAR_INIT_CHECK;
int OPT__OUTPUT_PAR_MODE, OPT__PARTICLE_COUNT, OPT__FLAG_NPAR_PATCH, PAR_IC_FLOAT8, PAR_IC_INT8, FlagTable_NParPatch[NLEVEL-1], FlagTable_NParCell[NLEVEL-1];
int OPT__OUTPUT_PAR_MODE, OPT__OUTPUT_PAR_ADDI_ATTR, OPT__PARTICLE_COUNT, OPT__FLAG_NPAR_PATCH, PAR_IC_FLOAT8, PAR_IC_INT8, FlagTable_NParPatch[NLEVEL-1], FlagTable_NParCell[NLEVEL-1];
double FlagTable_ParMassCell[NLEVEL-1];
ParOutputDens_t OPT__OUTPUT_PAR_DENS;
#endif
Expand Down
28 changes: 23 additions & 5 deletions src/Output/Output_DumpData_Total.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,15 @@ void Output_DumpData_Total( const char *FileName )
# ifdef PARTICLE
long GParID_Offset = 0; // GParID = global particle index (==> unique for each particle)
long NPar_EachRank[MPI_NRank];
int par_natt_flt_addi = 0;
switch ( OPT__OUTPUT_PAR_ADDI_ATTR )
{
case 0: break;
case 1: par_natt_flt_addi = 1; break;
case 2: par_natt_flt_addi = 3; break;
case 3: par_natt_flt_addi = 4; break;
default: break;
}

MPI_Allgather( &amr->Par->NPar_Active, 1, MPI_LONG, NPar_EachRank, 1, MPI_LONG, MPI_COMM_WORLD );

Expand Down Expand Up @@ -177,7 +186,7 @@ void Output_DumpData_Total( const char *FileName )

FileOffset_Particle = ExpectFileSize; // file offset at the beginning of particle data

ExpectFileSize += (long)PAR_NATT_FLT_STORED*amr->Par->NPar_Active_AllRank*sizeof(real_par);
ExpectFileSize += (long)( PAR_NATT_FLT_STORED + par_natt_flt_addi )*amr->Par->NPar_Active_AllRank*sizeof(real_par);
ExpectFileSize += (long)PAR_NATT_INT_STORED*amr->Par->NPar_Active_AllRank*sizeof(long_par);
# endif

Expand Down Expand Up @@ -498,7 +507,7 @@ void Output_DumpData_Total( const char *FileName )
# endif

# ifdef PARTICLE
const int par_natt_flt_stored = PAR_NATT_FLT_STORED;
const int par_natt_flt_stored = PAR_NATT_FLT_STORED + par_natt_flt_addi;
const int par_natt_flt_user = PAR_NATT_FLT_USER;
const int par_natt_int_stored = PAR_NATT_INT_STORED;
const int par_natt_int_user = PAR_NATT_INT_USER;
Expand Down Expand Up @@ -953,11 +962,13 @@ void Output_DumpData_Total( const char *FileName )
const long ParFltDataSize1v = amr->Par->NPar_Active_AllRank*sizeof(real_par);
const long ParIntDataSize1v = amr->Par->NPar_Active_AllRank*sizeof(long_par);

const int par_natt_flt_stored = PAR_NATT_FLT_STORED + par_natt_flt_addi;

long NParInBuf, ParID, FileOffset_ThisVar;
int NParThisPatch;

// output floating-point data
for (int v=0; v<PAR_NATT_FLT_STORED; v++)
for (int v=0; v<par_natt_flt_stored; v++)
for (int TargetMPIRank=0; TargetMPIRank<MPI_NRank; TargetMPIRank++)
{
if ( MPI_Rank == TargetMPIRank )
Expand All @@ -974,6 +985,13 @@ void Output_DumpData_Total( const char *FileName )
Aux_Error( ERROR_INFO, "size of the file <%s> = %ld != expect = %ld !!\n",
FileName, ftell(File), FileOffset_ThisVar );

if ( v > PAR_NATT_FLT_STORED )
switch ( OPT__OUTPUT_PAR_ADDI_ATTR )
{
case 1: v = PAR_TIME; break;
default: break;
} // if ( v > PAR_NATT_FLT_STORED ), switch OPT__OUTPUT_PAR_ADDI_ATTR

for (int lv=0; lv<NLEVEL; lv++)
for (int PID=0; PID<amr->NPatchComma[lv][1]; PID++)
{
Expand Down Expand Up @@ -1009,7 +1027,7 @@ void Output_DumpData_Total( const char *FileName )
} // if ( MPI_Rank == TargetMPIRank )

MPI_Barrier( MPI_COMM_WORLD );
} // for (int TargetMPIRank=0; TargetMPIRank<MPI_NRank; TargetMPIRank++), for (int v=0; v<PAR_NATT_FLT_STORED; v++)
} // for (int TargetMPIRank=0; TargetMPIRank<MPI_NRank; TargetMPIRank++), for (int v=0; v<par_natt_flt_stored; v++)

// output integer data
for (int v=0; v<PAR_NATT_INT_STORED; v++)
Expand All @@ -1020,7 +1038,7 @@ void Output_DumpData_Total( const char *FileName )
File = fopen( FileName, "ab" );

// set file position indicator to the end of the current file and check whether it's consistent with expectation
FileOffset_ThisVar = FileOffset_Particle + ParFltDataSize1v*PAR_NATT_FLT_STORED + ParIntDataSize1v*v + GParID_Offset*sizeof(long_par);
FileOffset_ThisVar = FileOffset_Particle + ParFltDataSize1v*par_natt_flt_stored + ParIntDataSize1v*v + GParID_Offset*sizeof(long_par);
NParInBuf = 0;

fseek( File, 0, SEEK_END );
Expand Down
Loading