# Odd problem with reference to cell centres

 Register Blogs Members List Search Today's Posts Mark Forums Read

 July 16, 2012, 07:38 Odd problem with reference to cell centres #1 Senior Member     Anton Kidess Join Date: May 2009 Location: Germany Posts: 1,262 Rep Power: 23 Hello all, suppose I have the following code Code: ```volScalarField ypos = mesh.C().component(1); volScalarField xpos = mesh.C().component(0); Info << ypos.internalField() << endl; Info << xpos.internalField() << endl;``` This will print out all the x and y coordinates of the cell centres in my mesh. I thought I could be smart and use references, i. e. Code: ```const volScalarField& ypos = mesh.C().component(1); const volScalarField& xpos = mesh.C().component(0); Info << ypos.internalField() << endl; Info << xpos.internalField() << endl;``` But now I get the same field printed twice (always the field for which I get the reference last, i.e. X in this example). Can anyone explain what's happening here? __________________ *On twitter @akidTwit *Spend as much time formulating your questions as you expect people to spend on their answer.

 July 16, 2012, 10:02 #2 Super Moderator   Bruno Santos Join Date: Mar 2009 Location: Lisbon, Portugal Posts: 10,021 Blog Entries: 39 Rep Power: 109 Hi Anton, Possibly because the component method is giving a result as its own variable, not as a reference to the real variable. And the reference value is pointing to the variable space of the method itself. Although, if I found the correct method (source): Code: ```00062 template 00063 inline const Cmpt& VectorSpace::component 00064 ( 00065 const direction d 00066 ) const 00067 { 00068 # ifdef FULLDEBUG 00069 if (d >= nCmpt) 00070 { 00071 FatalErrorIn 00072 ( 00073 "VectorSpace::component(direction) const" 00074 ) << "index out of range" 00075 << abort(FatalError); 00076 } 00077 # endif 00078 00079 return v_[d]; 00080 }``` It does seem a bit odd that this didn't work as intended... Which Gcc version are you using? It might influence this result you're getting, since this method is part of a template. Best regards, Bruno __________________ OpenFOAM: FAQ | Getting started Forum: How to get help, to post code/output and forum guide What am I doing/planning: blog/wiki Read this before sending me PM

 July 16, 2012, 10:32 #3 Senior Member     Anton Kidess Join Date: May 2009 Location: Germany Posts: 1,262 Rep Power: 23 Thanks for digging in the code for me, I should have done that myself as a first step. The method returns "const Cmpt& v_[d];", which is part of the array "Cmpt v_[nCmpt];". I think it's not possible to reference an element within an array, I should have used a pointer. But I'll investigate further and report back. I'm using gcc 4.4.6. __________________ *On twitter @akidTwit *Spend as much time formulating your questions as you expect people to spend on their answer.

 July 16, 2012, 11:26 #4 Senior Member     Anton Kidess Join Date: May 2009 Location: Germany Posts: 1,262 Rep Power: 23 Ok, so I still do not fully understand whats happening with the references, but I do now see that I was doing something very stupid mesh.C().component(N) gives back a tmp field, which is already kind of a reference. I then forced unpacking of the tmp field by using () and was then able to copy over the reference. Of course this doesn't make sense. I conclude that finally the original formulation without any explicit reference/pointer-handling was already the optimal solution. wyldckat likes this. __________________ *On twitter @akidTwit *Spend as much time formulating your questions as you expect people to spend on their answer.

 July 16, 2012, 18:36 #5 Super Moderator   Bruno Santos Join Date: Mar 2009 Location: Lisbon, Portugal Posts: 10,021 Blog Entries: 39 Rep Power: 109 I did think about "tmp" being the culprit here, but since I couldn't find it in a quick search via Doxygen, I simply didn't have the proof to point the finger __________________ OpenFOAM: FAQ | Getting started Forum: How to get help, to post code/output and forum guide What am I doing/planning: blog/wiki Read this before sending me PM

 Thread Tools Display Modes Linear Mode

 Posting Rules You may not post new threads You may not post replies You may not post attachments You may not edit your posts BB code is On Smilies are On [IMG] code is On HTML code is OffTrackbacks are On Pingbacks are On Refbacks are On Forum Rules

 Similar Threads Thread Thread Starter Forum Replies Last Post Edy OpenFOAM Programming & Development 18 June 23, 2016 06:13 Attesz OpenFOAM Installation 45 January 13, 2012 13:38 alfaben STAR-CCM+ 2 September 17, 2011 03:46 saii CFX 2 September 18, 2009 08:07 Bruno Main CFD Forum 1 January 30, 2007 01:34

All times are GMT -4. The time now is 16:02.