From 3498498ad3908f2546aeb0bcd67eccbccbe11a77 Mon Sep 17 00:00:00 2001 From: sanathkeshav Date: Fri, 10 Jul 2026 09:31:35 +0200 Subject: [PATCH 1/2] fixes GBDiffusion post MaterialManager update and adds a test case --- .gitignore | 2 + include/MaterialManager.h | 2 + include/material_models/GBDiffusion.h | 10 ++--- include/solver.h | 56 ++++++++++++------------- test/CMakeLists.txt | 1 + test/input_files/test_GBDiffusion.json | 33 +++++++++++++++ test/microstructures/diamond_GB.h5 | Bin 0 -> 115198 bytes test/pytest/conftest.py | 1 + test/run_tests.sh | 1 + 9 files changed, 72 insertions(+), 34 deletions(-) create mode 100644 test/input_files/test_GBDiffusion.json create mode 100644 test/microstructures/diamond_GB.h5 diff --git a/.gitignore b/.gitignore index adf2c61..613dedb 100644 --- a/.gitignore +++ b/.gitignore @@ -199,10 +199,12 @@ test/input_files/**/*.json # Test microstructure files !sphere32.h5 +!diamond_GB.h5 # Test input files !test_LinearElastic.json !test_LinearThermal.json +!test_GBDiffusion.json !test_PseudoPlastic.json !test_J2Plasticity.json !test_MixedBCs.json diff --git a/include/MaterialManager.h b/include/MaterialManager.h index cbff981..ee3f7bc 100644 --- a/include/MaterialManager.h +++ b/include/MaterialManager.h @@ -260,6 +260,8 @@ class MaterialManager { temp_reader.method = base_reader.method; temp_reader.l_e = base_reader.l_e; temp_reader.dims = base_reader.dims; + std::snprintf(temp_reader.ms_filename, sizeof(temp_reader.ms_filename), "%s", base_reader.ms_filename); + std::snprintf(temp_reader.ms_datasetname, sizeof(temp_reader.ms_datasetname), "%s", base_reader.ms_datasetname); // Override material properties and n_mat for this specific material group temp_reader.materialProperties = mat_group["material_properties"]; diff --git a/include/material_models/GBDiffusion.h b/include/material_models/GBDiffusion.h index 7b5e3e6..1345390 100644 --- a/include/material_models/GBDiffusion.h +++ b/include/material_models/GBDiffusion.h @@ -24,9 +24,9 @@ * - Provides visualization of grain boundary normals in post-processing * * Required material parameters in JSON format: - * - GB_unformity: Boolean flag for uniform GB properties + * - GB_uniformity: Boolean flag for uniform GB properties * - * When GB_unformity is true (uniform properties): + * When GB_uniformity is true (uniform properties): * { * "GB_unformity": true, * "D_bulk": 1.0, // Isotropic diffusion coefficient for all crystals @@ -69,13 +69,13 @@ class GBDiffusion : public ThermalModel, public LinearModel<1, 3> { GBnormals[(tag) * 3 + 1] = normal[1].get(); GBnormals[(tag) * 3 + 2] = normal[2].get(); } - GB_unformity = reader.materialProperties["GB_unformity"].get(); + GB_uniformity = reader.materialProperties["GB_uniformity"].get(); D_bulk.resize(n_mat, 0.0); D_par.resize(n_mat, 0.0); D_perp.resize(n_mat, 0.0); - if (GB_unformity) { + if (GB_uniformity) { double bulk_val = reader.materialProperties["D_bulk"].get(); double par_val = reader.materialProperties["D_par"].get(); double perp_val = reader.materialProperties["D_perp"].get(); @@ -187,7 +187,7 @@ class GBDiffusion : public ThermalModel, public LinearModel<1, 3> { private: int num_crystals = 0; int num_GB = 0; - bool GB_unformity; + bool GB_uniformity; vector D_bulk; vector D_par; diff --git a/include/solver.h b/include/solver.h index 3858a42..d4301ff 100644 --- a/include/solver.h +++ b/include/solver.h @@ -592,14 +592,15 @@ void Solver::postprocess(Reader &reader, int load_idx, int time_ /* ====================================================================== * * u_total = g0·X + ũ (vector or scalar, decided at compile time) * ====================================================================== */ - const double dx = reader.l_e[0]; - const double dy = reader.l_e[1]; - const double dz = reader.l_e[2]; - const double Lx2 = reader.L[0] / 2.0; - const double Ly2 = reader.L[1] / 2.0; - const double Lz2 = reader.L[2] / 2.0; - constexpr double rs2 = 0.7071067811865475; // 1.0 / std::sqrt(2.0) - VectorXd u_total(local_n0 * n_y * n_z * howmany); + const vector &ml = matmanager->models[0]->macroscale_loading; + const double dx = reader.l_e[0]; + const double dy = reader.l_e[1]; + const double dz = reader.l_e[2]; + const double Lx2 = reader.L[0] / 2.0; + const double Ly2 = reader.L[1] / 2.0; + const double Lz2 = reader.L[2] / 2.0; + constexpr double rs2 = 0.7071067811865475; // 1.0 / std::sqrt(2.0) + VectorXd u_total(local_n0 * n_y * n_z * howmany); /* ---------- single sweep ------------------------------------------------- */ ptrdiff_t n = 0; for (ptrdiff_t ix = 0; ix < local_n0; ++ix) { @@ -610,13 +611,13 @@ void Solver::postprocess(Reader &reader, int load_idx, int time_ const double z = iz * dz - Lz2; if (howmany == 3) { /* ===== mechanics (vector) ===== */ if constexpr (n_str == 6) { - /* Small strain: strain_average contains 6 Voigt components */ - const double g11 = strain_average[0]; - const double g22 = strain_average[1]; - const double g33 = strain_average[2]; - const double g12 = strain_average[3] * rs2; - const double g13 = strain_average[4] * rs2; - const double g23 = strain_average[5] * rs2; + /* Small strain: ml holds 6 Mandel components of the mean strain */ + const double g11 = ml[0]; + const double g22 = ml[1]; + const double g33 = ml[2]; + const double g12 = ml[3] * rs2; + const double g13 = ml[4] * rs2; + const double g23 = ml[5] * rs2; const double ux = g11 * x + g12 * y + g13 * z; const double uy = g12 * x + g22 * y + g23 * z; const double uz = g13 * x + g23 * y + g33 * z; @@ -625,16 +626,16 @@ void Solver::postprocess(Reader &reader, int load_idx, int time_ u_total[b + 1] = v_u[b + 1] + uy; u_total[b + 2] = v_u[b + 2] + uz; } else if constexpr (n_str == 9) { - /* Large strain: strain_average contains 9 components of F */ - const double F11 = strain_average[0]; - const double F12 = strain_average[1]; - const double F13 = strain_average[2]; - const double F21 = strain_average[3]; - const double F22 = strain_average[4]; - const double F23 = strain_average[5]; - const double F31 = strain_average[6]; - const double F32 = strain_average[7]; - const double F33 = strain_average[8]; + /* Large strain: ml holds 9 components of the mean deformation gradient F */ + const double F11 = ml[0]; + const double F12 = ml[1]; + const double F13 = ml[2]; + const double F21 = ml[3]; + const double F22 = ml[4]; + const double F23 = ml[5]; + const double F31 = ml[6]; + const double F32 = ml[7]; + const double F33 = ml[8]; // u = (F - I) * X const double ux = (F11 - 1.0) * x + F12 * y + F13 * z; const double uy = F21 * x + (F22 - 1.0) * y + F23 * z; @@ -645,10 +646,7 @@ void Solver::postprocess(Reader &reader, int load_idx, int time_ u_total[b + 2] = v_u[b + 2] + uz; } } else { /* ===== scalar (howmany==1) ==== */ - const double g1 = strain_average[0]; - const double g2 = strain_average[1]; - const double g3 = strain_average[2]; - u_total[n] = v_u[n] + (g1 * x + g2 * y + g3 * z); + u_total[n] = v_u[n] + (ml[0] * x + ml[1] * y + ml[2] * z); } } } diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 993bb85..f012038 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -16,6 +16,7 @@ set(FANS_TEST_CASES J2Plasticity LinearElastic LinearThermal + GBDiffusion PseudoPlastic MixedBCs CompressibleNeoHookean diff --git a/test/input_files/test_GBDiffusion.json b/test/input_files/test_GBDiffusion.json new file mode 100644 index 0000000..bf2807b --- /dev/null +++ b/test/input_files/test_GBDiffusion.json @@ -0,0 +1,33 @@ +{ + "microstructure": { + "filepath": "microstructures/diamond_GB.h5", + "datasetname": "/dset_0/eroded_image", + "L": [1.0, 1.0, 1.0] + }, + "problem_type": "thermal", + "strain_type": "small", + "materials": [ + { + "phases": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], + "matmodel": "GBDiffusion", + "material_properties": { + "GB_uniformity": true, + "D_bulk": 1.0, + "D_perp": 0.1, + "D_par": 10.0 + } + } + ], + "method": "cg", + "error_parameters": { + "measure": "Linfinity", + "type": "absolute", + "tolerance": 1e-10 + }, + "n_it": 1000, + "macroscale_loading": [ + [[0.01, 0.02, -0.01]] + ], + "results": ["homogenized_tangent", "stress_average", "strain_average", "absolute_error", + "microstructure", "displacement", "displacement_fluctuation", "stress", "strain"] +} diff --git a/test/microstructures/diamond_GB.h5 b/test/microstructures/diamond_GB.h5 new file mode 100644 index 0000000000000000000000000000000000000000..0bb61a059577aa08eeb3bb7f03711e4d5141a4e2 GIT binary patch literal 115198 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 literal 0 HcmV?d00001 diff --git a/test/pytest/conftest.py b/test/pytest/conftest.py index c1417a7..a6750ce 100644 --- a/test/pytest/conftest.py +++ b/test/pytest/conftest.py @@ -16,6 +16,7 @@ def pytest_addoption(parser): "test_J2Plasticity", "test_LinearElastic", "test_LinearThermal", + "test_GBDiffusion", "test_PseudoPlastic", "test_MixedBCs", "test_CompressibleNeoHookean", diff --git a/test/run_tests.sh b/test/run_tests.sh index 28d2baf..65873b0 100755 --- a/test/run_tests.sh +++ b/test/run_tests.sh @@ -22,6 +22,7 @@ FANS_TEST_CASES=( "J2Plasticity" "LinearElastic" "LinearThermal" + "GBDiffusion" "PseudoPlastic" "MixedBCs" "CompressibleNeoHookean" From 536fb8efe1d048e87e293e302c6fc7f881773d33 Mon Sep 17 00:00:00 2001 From: sanathkeshav Date: Fri, 10 Jul 2026 09:36:37 +0200 Subject: [PATCH 2/2] add changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f981cc4..3596655 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## latest +- Bugfix: fixes GBDiffusion post MaterialManager update and adds a test case [#147](https://github.com/DataAnalyticsEngineering/FANS/pull/147) - Bugfix: mem-leak while reading microstructure and added wider CMake support [#140](https://github.com/DataAnalyticsEngineering/FANS/pull/140) - Added MPI communicator abstraction [#139](https://github.com/DataAnalyticsEngineering/FANS/pull/139)