[Insight-users] Question regarding itkFEMRegistrationFilter

Brian B Avants avants at grasp.cis.upenn.edu
Tue Nov 29 15:38:49 EST 2005


Dr. GP :

You are right, the naming is confusing.  "Deformed", here, refers to the
action of the current deformation field on the point.  It is not
"deformed" in the sense of the local to global coordinate transformation.

As for the "brute force" iteration in searching for the corner node on
which to apply BCs:  the interpolation grid could also be used.  You are
free to implement this approach, if you like, in your code.  If it is
general enough to work in many situations ( arbitrary meshes, elements,
etc.) then it can be included in the distribution.  One problem may be
that some elements are missing general Local to global or global to local
transformation functions.  One needs these to use the interpolation grid
with arbitrary meshes.

Brian

On Tue, 29 Nov 2005, Gheorghe Postelnicu wrote:

> Hi,
>
> I have 2 questions regarding the ApplyLoads function in the implementation
> of itkFEMRegistrationFilter:
> 1. in order to assign the BC to elements, there is a brute-force iteration
> through the elements (for each boundary condition). Wouldn't it make sense
> to use the interpolation grid in this situation?
> 2. I am a little confused about the names of the points in the LoadLandmark
> class; if I get it correctly,
>     - source = undeformed configuration
>     - point    = deformed configuration
> However, in the ApplyLoads function, namely in the following code snippet:
>
> -----------------
>    pu=m_LandmarkArray[lmind]->GetSource();
>         pd=m_LandmarkArray[lmind]->GetPoint();
>
>         for (Element::ArrayType::const_iterator n = mySolver.el.begin();
>              n!=mySolver.el.end() && !isFound; n++)
>           {
>           if ( (*n)->GetLocalFromGlobalCoordinates(pu, pd ) )
>             {
>             isFound=true;
>             m_LandmarkArray[lmind]->SetPoint(pd);
> //             std::cout << " load local pt " <<
> m_LandmarkArray[lmind]->GetPoint() << std::endl;
>             m_LandmarkArray[lmind]->el[0]=( ( &**n ) );
>             }
>           }
> ---------------
>
>    pu seems to represent the position in the undeformed configuration
> (global coordinates), is then converted to local coordinates in the pd
> variable and then assigned as point. So I am quite confused about this part
> of the code:
> - why is ever pd initialized?
> - why is pu translated into local coordinates and then overwrites pd?
>
>
> Thanks,
>
> --
> Gheorghe Postelnicu, PhD
> MGH, Harvard Medical School
>


More information about the Insight-users mailing list