{"action":"created","issue":{"url":"https://api.github.com/repos/mfem/mfem/issues/84","repository_url":"https://api.github.com/repos/mfem/mfem","labels_url":"https://api.github.com/repos/mfem/mfem/issues/84/labels{/name}","comments_url":"https://api.github.com/repos/mfem/mfem/issues/84/comments","events_url":"https://api.github.com/repos/mfem/mfem/issues/84/events","html_url":"https://github.com/mfem/mfem/issues/84","id":179497899,"number":84,"title":"When should we use Trans.Loc1.Transf and when should we use Trans.Face?","user":{"login":"rhebergens","id":18687723,"avatar_url":"https://avatars.githubusercontent.com/u/18687723?v=3","gravatar_id":"","url":"https://api.github.com/users/rhebergens","html_url":"https://github.com/rhebergens","followers_url":"https://api.github.com/users/rhebergens/followers","following_url":"https://api.github.com/users/rhebergens/following{/other_user}","gists_url":"https://api.github.com/users/rhebergens/gists{/gist_id}","starred_url":"https://api.github.com/users/rhebergens/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rhebergens/subscriptions","organizations_url":"https://api.github.com/users/rhebergens/orgs","repos_url":"https://api.github.com/users/rhebergens/repos","events_url":"https://api.github.com/users/rhebergens/events{/privacy}","received_events_url":"https://api.github.com/users/rhebergens/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/mfem/mfem/labels/question","name":"question","color":"cc317c"}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2016-09-27T13:47:56Z","updated_at":"2016-09-27T19:31:49Z","closed_at":null,"body":"Hello,\r\n\r\nWe want to implement an HDG method for the Poisson equation in MFEM. For this we have some questions about how element/face transformations are handled. In particular, when to use IsoparametricTransformation or simply Transform. Consider bilininteg.cpp:\r\n\r\nIn NormalTraceJumpIntegrator, line 2326, we see `Trans.Loc1.Transf.SetIntPoint(&ip);` and in line 2327, the normal is computed using `CalcOrtho(Trans.Loc1.Transf.Jacobian(), normal);`\r\n\r\nIn TraceJumpIntegrator, line 2236, we see `Trans.Face->SetIntPoint(&ip)` and in DGDiffusionIntegrator, line 2025, the normal is computed using `CalcOrtho(Trans.Face->Jacobian(), nor);`\r\n\r\nWhen should we use Trans.Loc1.Transf and when should we use Trans.Face?\r\n\r\nAny help is very much appreciated.\r\n\r\nregards,\r\nSander and Tamas"},"comment":{"url":"https://api.github.com/repos/mfem/mfem/issues/comments/249972765","html_url":"https://github.com/mfem/mfem/issues/84#issuecomment-249972765","issue_url":"https://api.github.com/repos/mfem/mfem/issues/84","id":249972765,"user":{"login":"v-dobrev","id":12926030,"avatar_url":"https://avatars.githubusercontent.com/u/12926030?v=3","gravatar_id":"","url":"https://api.github.com/users/v-dobrev","html_url":"https://github.com/v-dobrev","followers_url":"https://api.github.com/users/v-dobrev/followers","following_url":"https://api.github.com/users/v-dobrev/following{/other_user}","gists_url":"https://api.github.com/users/v-dobrev/gists{/gist_id}","starred_url":"https://api.github.com/users/v-dobrev/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/v-dobrev/subscriptions","organizations_url":"https://api.github.com/users/v-dobrev/orgs","repos_url":"https://api.github.com/users/v-dobrev/repos","events_url":"https://api.github.com/users/v-dobrev/events{/privacy}","received_events_url":"https://api.github.com/users/v-dobrev/received_events","type":"User","site_admin":false},"created_at":"2016-09-27T19:31:49Z","updated_at":"2016-09-27T19:31:49Z","body":"Hi Sander, Tamas,\r\n\r\nThe calls in `DGDiffusionIntegrator`:\r\n```c++\r\nTrans.Face->SetIntPoint(&ip);\r\nCalcOrtho(Trans.Face->Jacobian(), nor);\r\n```\r\ncompute the scaled normal vector in _physical_ (not reference) space. The scaling is such that the length of `nor` is the same as `Trans.Face->Weight()` which is the weight factor coming from the change of the variables in the face integral from physical to reference space. For example in 3D, `nor` is just the cross product of the two columns of the 3x2 Jacobian matrix.\r\n\r\nOn the other hand, the calls in `NormalTraceJumpIntegrator`:\r\n```c++\r\nTrans.Loc1.Transf.SetIntPoint(&ip);\r\nCalcOrtho(Trans.Loc1.Transf.Jacobian(), normal);\r\n```\r\ncompute the normal vector in reference space. For example, if the face is a triangle, and the first adjacent element is a tetrahedron then `Trans.Loc1.Transf` is the transformation that maps the reference triangle into one of the four faces of the reference tetrahedron. Consequently, `normal` is a vector orthogonal to that face of the reference tetrahedron and its length is the ratio of the area of that face over the area of the reference triangle.\r\n\r\nWhich computation to use really depends on the integral you want to compute.\r\n\r\nHope this helps,\r\nVeselin"}}
{"actor":{"display_login":"v-dobrev"}}