2015-09-22 3 views
0

Как сделать то же самое с подразумеваемыми do loops? Я хочу заменить существующий цикл для Vcvo и Vcvonew двумя подразумеваемыми do loops?Предполагаемые do loops в Fortran

Это мой код:

Program DO_LOOPS 

Implicit none 

Integer::i,j 
Integer,parameter::BrCv=15,BrSat=24 

Real,dimension(0:BrCv-1,BrSat)::Vcvo 
Real,dimension(BrCv-1,BrSat)::Vcvonew 

Do i=0,BrCv-1 
    do j=1,BrSat 

Vcvo(i,j)=i+j*BrCv/BrSat 

end do 
End do 

Do i=1,BrCv-1 
    do j=1,BrSat 


    Vcvonew(i,j)=Vcvo(i,j) 

    end do 
End do 

Stop 
End program DO_LOOPS 
+1

Вы предполагаете, что 'i + j * BrCv/BrSat' является целым выражением? – francescalus

+0

Чтобы повторить комментарий от @Ross, что вы действительно волнуете? Можно очень легко использовать implied-do в конструкторе массивов для 'vcvo' (и это так просто, я не уверен, что понимаю вопрос), но кроме того, что сделать пять строк на одну менее интуитивно понятную строку, я не знаю, почему подразумеваемый-do - это то, о чем вы заботитесь. – francescalus

+0

Мне нужно предложение для Vcvonew.Как заменить мое решение на циклы do с двойными подразумеваемыми циклами do, например, я пытаюсь с этим решением, но не правильно: ((Vcvonew (i, j), j = 1, BrSat) , i = 1, BrCv-1) –

ответ

2

Подразумеваемого сделать цикл будет:

Vcvo = reshape([((i + j*real(BrCv)/real(Brsat), i=0,BrCv-1), j=1,Brsat)],[BrCv,BrSat]) 

для первого.

Для второго вам не нужен подразумеваемый цикл. Простое присваивание массива, как уже предлагалось, будет делать:

Vcvonew = vcvo(1:,:) 

Первый не смотрит мне яснее, чем явный цикл. Но если вы хотите получить более компактное решение, которое вы можете использовать do concurrent:

do concurrent (i = 0:BrCv-1, j=1:Brsat) 
    Vcvo(i,j) = i + j*real(BrCv)/real(Brsat) 
end do 

Вы пощадить пару строк.

Я также взял на себя смелость трансформировать BrCv и BrSat в реальность, прежде чем делить их. Возможно, это не то, что вы хотите, но это то, на что вы обращаете внимание.

+0

Ну да, но это более логичный способ написать. Я обновляю ответ, чтобы позаботиться о вашем комментарии. –

Смежные вопросы