diff --git a/acc/src/code_generator.c b/acc/src/code_generator.c index b0dcb13..017591a 100644 --- a/acc/src/code_generator.c +++ b/acc/src/code_generator.c @@ -736,6 +736,9 @@ external acdevicesynchronizestream fprintf(DSLHEADER, "FUNC(%s)\\\n", "RTYPE_MIN"); fprintf(DSLHEADER, "FUNC(%s)\\\n", "RTYPE_RMS"); fprintf(DSLHEADER, "FUNC(%s)\\\n", "RTYPE_RMS_EXP"); + fprintf(DSLHEADER, "FUNC(%s)\\\n", "RTYPE_ALFVEN_MAX"); + fprintf(DSLHEADER, "FUNC(%s)\\\n", "RTYPE_ALFVEN_MIN"); + fprintf(DSLHEADER, "FUNC(%s)\\\n", "RTYPE_ALFVEN_RMS"); fprintf(DSLHEADER, "FUNC(%s)\n", "RTYPE_SUM"); size_t counter = 0; @@ -747,6 +750,12 @@ external acdevicesynchronizestream ++counter; fprintf(FHEADER, "integer(c_int), parameter :: RTYPE_RMS_EXP = %lu\n", counter); ++counter; + fprintf(FHEADER, "integer(c_int), parameter :: RTYPE_ALFVEN_MAX = %lu\n", counter); + ++counter; + fprintf(FHEADER, "integer(c_int), parameter :: RTYPE_ALFVEN_MIN = %lu\n", counter); + ++counter; + fprintf(FHEADER, "integer(c_int), parameter :: RTYPE_ALFVEN_RMS = %lu\n", counter); + ++counter; fprintf(FHEADER, "integer(c_int), parameter :: RTYPE_SUM = %lu\n", counter); ++counter; fprintf(FHEADER, "integer(c_int), parameter :: NUM_REDUCTION_TYPES = %lu\n", counter); diff --git a/include/astaroth.h b/include/astaroth.h index c73879d..d32b367 100644 --- a/include/astaroth.h +++ b/include/astaroth.h @@ -238,6 +238,11 @@ AcReal acReduceScal(const ReductionType rtype, const VertexBufferHandle vtxbuf_h AcReal acReduceVec(const ReductionType rtype, const VertexBufferHandle a, const VertexBufferHandle b, const VertexBufferHandle c); +/** Does a reduction for an operation which requires a vector and a scalar with vertex buffers + * * where the vector components are (a, b, c) and scalr is (d) */ +AcReal acReduceVecScal(const ReductionType rtype, const VertexBufferHandle a, + const VertexBufferHandle b, const VertexBufferHandle c, const VertexBufferHandle d); + /** Stores a subset of the mesh stored across the devices visible to the caller back to host memory. */ AcResult acStoreWithOffset(const int3 dst, const size_t num_vertices, AcMesh* host_mesh); @@ -436,6 +441,11 @@ AcResult acNodeReduceScal(const Node node, const Stream stream, const ReductionT AcResult acNodeReduceVec(const Node node, const Stream stream_type, const ReductionType rtype, const VertexBufferHandle vtxbuf0, const VertexBufferHandle vtxbuf1, const VertexBufferHandle vtxbuf2, AcReal* result); +/** */ +AcResult acNodeReduceVecScal(const Node node, const Stream stream_type, const ReductionType rtype, + const VertexBufferHandle vtxbuf0, const VertexBufferHandle vtxbuf1, + const VertexBufferHandle vtxbuf2, const VertexBufferHandle vtxbuf3, AcReal* result); + /* * ============================================================================= @@ -560,6 +570,10 @@ AcResult acDeviceReduceVec(const Device device, const Stream stream_type, const const VertexBufferHandle vtxbuf0, const VertexBufferHandle vtxbuf1, const VertexBufferHandle vtxbuf2, AcReal* result); /** */ +AcResult acDeviceReduceVecScal(const Device device, const Stream stream_type, const ReductionType rtype, + const VertexBufferHandle vtxbuf0, const VertexBufferHandle vtxbuf1, + const VertexBufferHandle vtxbuf2, const VertexBufferHandle vtxbuf3, AcReal* result); +/** */ AcResult acDeviceRunMPITest(void); /*