1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Implicit recursive array construction, F90

  1. May 12, 2015 #1
    Hello there,
    I again have a problem with programming in Fortran 90.


    1. The problem statement, all variables and given/known data

    I would like to construct an array with an implicit do loop.
    I know how to get the array I want to with usual do-loop but I would like to do it without do loops.

    So this is the array I want to construct:

    a(0:f)
    a(0)=4
    DO i=1,f
    a(i)=a(i-1)+4*(-1)**i*1/(2*i+1)
    ENDDO

    So, I want get this array, without using an explicit do-loop.
    For example, I know, that the implicit do-loops work like this:

    a=(/(i+1,i=1,5)/)

    But it doesn't work with recursion. So what I've tried for my array is:

    a(0)=4
    a=(/(a(i-1)+4*(-1)**i*1/(2*i+1),i=1,f)/)

    It doesn't work at all.

    Does someone know how to use this in the right way or maybe any other solutions to construct the array without an explicit do-loop.


    Many thanks in advance.

    greets Boltzmann
     
  2. jcsd
  3. May 13, 2015 #2

    DrClaude

    User Avatar

    Staff: Mentor

    I don't see why this should work. The implied do on the right-hand side will be executed before the assignment, and hence can't be recursive.

    Note also that as written, the code probably doesn't calculate what you want. 1/(2*i+1) will be calculated as an integer, and hence can only return 1 if i=0, 0 otherwise. You have to use 1./(2.*i+1.)
     
  4. May 13, 2015 #3

    SteamKing

    User Avatar
    Staff Emeritus
    Science Advisor
    Homework Helper

    The actual term of art in Fortran is "implied do-loops", not "implicit do-loops".

    AFAIK, implied do-loops can only be used in certain situations for initializing array variables and for input/output involving arrays. I don't think your recursive use of the implied-do loop fits either of those scenarios. It's also not clear why just a plain old do-loop would not suffice.

    Here are some examples of using implied do-loops:

    http://www.personal.psu.edu/jhm/f90/lectures/19.html#1 {scroll down to the section entitled Array Initialization}
     
  5. May 14, 2015 #4
    First of all thanks for answering.

    Thanks for your note Claude. I will change this but I also got the right values writing it like integers.
    So is there any other way, I could use the recursive code with?

    @SteamKing

    I later recognized, that its implied do and not implicit after reading some more about it. Im sorry for this.

    Usually a plain do-loop would suffice but its part of my homework, to realise it without explicit do-loops (do , enddo).

    Right now I solved the problem by using two functions but I don't think that it's the way how my teacher wanted me to do.
    1. Function
    ho=4.*(-1)**r*1./(2.*r+1.)+ho1(x)
    2. Function
    ho1=ho(y-1)

    a=(/(ho(i),i=0,f)/)

    So this works but I think there has to be way a better way.


    Some other question. If a function returns an array. Who can I access to single values and not the whole array. I need it for a proper output.
    So if a is an array I can just use a(i) but how does it work if for example add(x) is a function and an array. How can I get access to add(x)(i) ?
     
    Last edited: May 14, 2015
  6. May 14, 2015 #5

    SteamKing

    User Avatar
    Staff Emeritus
    Science Advisor
    Homework Helper

    It's not clear what you are describing here.

    AFAIK, function names must not be identical to variable names in Fortran. You can, for example, declare a real array ADD (N), where N = some integer, or you can define a FUNCTION ADD ("argument list"), but you can't do both:

    http://www.chem.ox.ac.uk/fortran/subprograms.html {See the section External Functions}
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted



Similar Discussions: Implicit recursive array construction, F90
  1. Recursive function (Replies: 16)

  2. Recursion Tree (Replies: 3)

  3. Recursive calls (Replies: 15)

Loading...