我有一个遗留的 DG 有限元代码,我想为其编写一些单元测试。正如它所写的,对于二维问题,每个自由度都与一个雅可比矩阵相关联(用于稍后转换为主元素)。所有元素都是直边的。
有没有一种很好的方法来检查这些雅可比人是否正确?前一位作者使用了一些讨厌的元编程来生成一个数千行长的文件,该文件由 python 解析并用于计算雅可比行列式。因此,我更喜欢将其视为黑盒并测试输出。
我有一个遗留的 DG 有限元代码,我想为其编写一些单元测试。正如它所写的,对于二维问题,每个自由度都与一个雅可比矩阵相关联(用于稍后转换为主元素)。所有元素都是直边的。
有没有一种很好的方法来检查这些雅可比人是否正确?前一位作者使用了一些讨厌的元编程来生成一个数千行长的文件,该文件由 python 解析并用于计算雅可比行列式。因此,我更喜欢将其视为黑盒并测试输出。
与您想要测试的任何其他事物一样,您需要列出您知道某事是真实的情况的列表,然后检查它。在许多情况下,知道某事是真的并不需要能够实际计算出数字上正确的答案,这可以简化事情。
例如:
所有这些都构成了编写起来相对简单的好、单独的测试用例。一个小时内,我可能会想出十几个或更多这样的测试用例。
嗯,第一个明显的测试是检查雅可比矩阵的行列式是否为正。如果不是,则意味着您的元素已反转,您的答案将无效。
否则,我不确定是否有任何其他测试会很好...对于单元测试,您可以将三角形旋转 360 度,增量为 1 度,并测量雅可比始终为行列式 1...