Output of standard deviation

The output for the standard deviation (still Gmsh2 only) was added.

Change in the output routines to reduce code repetition.
This commit is contained in:
Jorge Gonzalez 2022-12-15 11:40:24 +01:00
commit 5509332980
6 changed files with 256 additions and 192 deletions

View file

@ -6,14 +6,17 @@ MODULE moduleOutput
TYPE, PUBLIC:: outputNode
REAL(8):: den = 0.D0, mom(1:3) = 0.D0, tensorS(1:3,1:3) = 0.D0
CONTAINS
PROCEDURE, PASS(self), PRIVATE:: copyOutputNode
PROCEDURE, PASS(self), PRIVATE:: addOutputNode
PROCEDURE, PASS(self), PRIVATE:: subOutputNode
PROCEDURE, PASS(self), PRIVATE:: divOutputNode_int
GENERIC, PUBLIC :: ASSIGNMENT(=) => copyOutputNode
GENERIC, PUBLIC :: OPERATOR(+) => addOutputNode
GENERIC, PUBLIC :: OPERATOR(-) => subOutputNode
GENERIC, PUBLIC :: OPERATOR(/) => divOutputNode_int
PROCEDURE, PASS(self), PRIVATE:: outputNode_equal_outputNode
PROCEDURE, PASS(self), PRIVATE:: outputNode_equal_real
PROCEDURE, PASS(self), PRIVATE:: outputNode_add_outputNode
PROCEDURE, PASS(self), PRIVATE:: outputNode_sub_outputNode
PROCEDURE, PASS(self), PRIVATE:: outputNode_mul_outputNode
PROCEDURE, PASS(self), PRIVATE:: outputNode_div_int
GENERIC, PUBLIC :: ASSIGNMENT(=) => outputNode_equal_outputNode, outputNode_equal_real
GENERIC, PUBLIC :: OPERATOR(+) => outputNode_add_outputNode
GENERIC, PUBLIC :: OPERATOR(-) => outputNode_sub_outputNode
GENERIC, PUBLIC :: OPERATOR(*) => outputNode_mul_outputNode
GENERIC, PUBLIC :: OPERATOR(/) => outputNode_div_int
END TYPE
@ -42,7 +45,7 @@ MODULE moduleOutput
LOGICAL:: emOutput = .FALSE.
CONTAINS
PURE SUBROUTINE copyOutputNode(self, from)
PURE SUBROUTINE outputNode_equal_outputNode(self, from)
IMPLICIT NONE
CLASS(outputNode), INTENT(inout):: self
@ -52,9 +55,21 @@ MODULE moduleOutput
self%mom = from%mom
self%tensorS = from%tensorS
END SUBROUTINE copyOutputNode
END SUBROUTINE outputNode_equal_outputNode
PURE FUNCTION addOutputNode(self, that) RESULT(total)
PURE ELEMENTAL SUBROUTINE outputNode_equal_real(self, from)
IMPLICIT NONE
CLASS(outputNode), INTENT(inout):: self
REAL(8), INTENT(in):: from
self%den = from
self%mom = from
self%tensorS = from
END SUBROUTINE outputNode_equal_real
PURE ELEMENTAL FUNCTION outputNode_add_outputNode(self, that) RESULT(total)
IMPLICIT NONE
CLASS(outputNode), INTENT(in):: self
@ -65,9 +80,9 @@ MODULE moduleOutput
total%mom = self%mom + that%mom
total%tensorS = self%tensorS + that%tensorS
END FUNCTION addOutputNode
END FUNCTION outputNode_add_outputNode
PURE FUNCTION subOutputNode(self, that) RESULT(total)
PURE ELEMENTAL FUNCTION outputNode_sub_outputNode(self, that) RESULT(total)
IMPLICIT NONE
CLASS(outputNode), INTENT(in):: self
@ -78,9 +93,22 @@ MODULE moduleOutput
total%mom = self%mom - that%mom
total%tensorS = self%tensorS - that%tensorS
END FUNCTION subOutputNode
END FUNCTION outputNode_sub_outputNode
PURE FUNCTION divOutputNode_int(self, that) RESULT(total)
PURE ELEMENTAL FUNCTION outputNode_mul_outputNode(self, that) RESULT(total)
IMPLICIT NONE
CLASS(outputNode), INTENT(in):: self
CLASS(outputNode), INTENT(in):: that
TYPE(outputNode):: total
total%den = self%den * that%den
total%mom = self%mom * that%mom
total%tensorS = self%tensorS * that%tensorS
END FUNCTION outputNode_mul_outputNode
PURE ELEMENTAL FUNCTION outputNode_div_int(self, that) RESULT(total)
IMPLICIT NONE
CLASS(outputNode), INTENT(in):: self
@ -91,7 +119,7 @@ MODULE moduleOutput
total%mom = self%mom / REAL(that)
total%tensorS = self%tensorS / REAL(that)
END FUNCTION divOutputNode_int
END FUNCTION outputNode_div_int
SUBROUTINE calculateOutput(rawValues, formatValues, nodeVol, speciesIn)
USE moduleConstParam