diff --git a/NonLinearSolver/modelReduction/DeepMaterialNetworks.cpp b/NonLinearSolver/modelReduction/DeepMaterialNetworks.cpp index ca01520d3df82d5bd03a188f595938cdde69f4ef..9ff495bae446645a87115425dca776580688d111 100644 --- a/NonLinearSolver/modelReduction/DeepMaterialNetworks.cpp +++ b/NonLinearSolver/modelReduction/DeepMaterialNetworks.cpp @@ -1616,7 +1616,10 @@ void TrainingDeepMaterialNetwork::getKeys(const TreeNode* node, std::vector<Dof> } else { - for (int i=0; i< node->direction.size(); i++) + int numberNormal = node->childs.size()-1; + int totalNumberDirVars = node->direction.size(); + int numberVarsPerNormal = totalNumberDirVars/numberNormal; + for (int i=0; i< numberVarsPerNormal; i++) { keys.push_back(Dof(node->location, Dof::createTypeWithTwoInts(i, node->depth+1))); } @@ -1738,9 +1741,15 @@ void TrainingDeepMaterialNetwork::updateFieldFromUnknown(const fullVector<double } else { - for (int j=0; j< node.direction.size(); j++) + int numberNormal = node.childs.size()-1; + int totalNumberDirVars = node.direction.size(); + int numberVarsPerNormal = totalNumberDirVars/numberNormal; + for (int j=0; j< numberNormal; j++) { - node.direction[j] = val(j); + for (int k=0; k< numberVarsPerNormal; k++) + { + node.direction[j*numberVarsPerNormal+k] = val(k); + } } }; }; @@ -1766,7 +1775,10 @@ void TrainingDeepMaterialNetwork::updateFieldFromUnknown(const fullVector<double void TrainingDeepMaterialNetwork::getNormal(const TreeNode* node, SVector3& vec, bool stiff, std::vector<SVector3>* DnormalDunknown) const { double pi = 3.14159265359; - int ncomp = node->direction.size(); + int numberNormal = node.childs.size()-1; + int totalNumberDirVars = node.direction.size(); + int ncomp = totalNumberDirVars/numberNormal; + if (ncomp == 1) { double theta = 2.*pi*node->direction[0];