Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов подпрограммы, возникает ошибка 
:(
    Опции темы
Шурф
Дата 22.4.2013, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 22.4.2013

Репутация: нет
Всего: нет



Вечер добрый.

 Я совсем плохо соображаю в Fortran и програмировании вообще, поэтому строго не судите =)
 Надеюсь, слова типа энтропии никого не введут в ступор, т.к. в принципе они не важны. 
 Вопрос в следующем. В основной программе мне нужно посчитать три параметра: плотность, энтальпию и температуру. 
 При компилировании выдает ошибку следующего содержания:
Код

C:\...\Helium.f90(18): warning FOR4265: symbol ROT referenced but not set
C:\...\Helium.f90(18): warning FOR4265: symbol TT referenced but not set


Я так понял, что нет какой-то ссылки на ROT и TT.
 Что нужно сделать?

 Программа:
Код

program He
call He1 !подключение свойств гелия-1
print*,'zadaj p=(MPa)?';read*,p !задание давления, МПа
print*,'zadaj s=(K)?';read*,s !задание энтропии
print*,'zadaj N=(K)?';read*,N !задание фазового состояния
t=TT !температура
ro=ROT !плотность 
h=CRH(RO,T)      !давление
print*
print*,'p=',p
print*,'s=',s
print*,'Rezult - ro=',ro !плотность
print*,'Rezult - h=',h ! энтальпия
print*,'Rezult - t=',t !температура
read*
end


Подпрограмма:

Код

SUBROUTINE FPST(N,P,S,T,H,RO) ! T(P,S), H(P,S), RO(P,S)
! BЫЧИCЛEHИЕ TEMПEPATУPЫ, ЭHTAЛЬПИИ,
! ПЛOTHOCTИ ПO ДABЛEHИЮ И ЭHTPOПИИ.
      COMMON/A/TKR,PKR,ROKR,R
      IF(PKR.GE.3.)T1=65.
      IF(PKR.LE.3.)T1=3.
      TT=320.
      DT=(TT-T1)/3.
    2 IF(P.GT.PKR.AND.T.LT.TKR)ROT=CRRO(P,TT,0)
      IF(P.GT.PKR.AND.T.GT.TKR)ROT=CRRO(P,TT,1)
      IF(P.LE.PKR)ROT=CRRO(P,TT,N)
      ST=CRS(ROT,TT)
      IF(ABS(S-ST).LE.0.001)GO TO 1
      IF((ST-S).LT.0.)GOTO 3
  3  TT=TT+DT
      GO TO 2
      IF((ST-S).GT.0.)GO TO 4
   4  TT=TT-DT
      DT=DT/2.
      TT=TT+DT
      GO TO 2
    1 T=TT
      RO=ROT
      H=CRH(RO,T)
      RETURN
      END


Если нужна еще какая-то информация, говорите. 
 Помогите, пожалуйста!
PM MAIL   Вверх
Фантом
Дата 22.4.2013, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 5
Всего: 49



Переменные TT и ROT являются локальными для подпрограммы, внешняя программа о них ничего не знает. Соответственно, надо каким-то образом передать их наверх.

P.S. Вы в 2013 году используете стандарт Fortran IV образца 1966 года из религиозных соображений или любви к антиквариату? Ему скоро полвека стукнет, за это время только новых стандартов языка успело появиться пять штук.
PM   Вверх
Шурф
Дата 22.4.2013, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 22.4.2013

Репутация: нет
Всего: нет



главное чтобы то, что я использую, считало то,ч то мне нужно)

так а как их передать наверх? Даже если я копирую часть подпрограммы в программу основную, то все равно ничего не считает(ошибка исчезает, но после ввода значений окно сразу же закрывается)

Код

program He
call He1 
print*,'zadaj p=(MPa)?';read*,p 
print*,'zadaj s=?';read*,s 

N=1
T1=65.
TT=320.
      DT=(TT-T1)/3.
2      ROT=CRRO(P,TT,N)
ST=CRS(ROT,TT)
      IF(ABS(S-ST).LE.0.001)GO TO 1
      IF((ST-S).LT.0.)GOTO 3
  3  TT=TT+DT
      GO TO 2
      IF((ST-S).GT.0.)GO TO 4
   4  TT=TT-DT
      DT=DT/2.
      TT=TT+DT
      GO TO 2
    1 T=TT


ro=ROT
h=CRH(RO,T)        
print*
print*,'p=',p
print*,'s=',s
print*,'Rezult - ro=',ro
print*,'Rezult - h=',h
print*,'Rezult - t=',t
read*

end


PM MAIL   Вверх
Фантом
Дата 22.4.2013, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 5
Всего: 49



Теперь надо бы где-то найти функции CRRO, CRS и CRH, инициализировать содержимое коммон-блока... короче говоря, дописать всю содержательную часть программы.  smile 

Давайте-ка признаваться: это такое извращенное учебное задание или честная попытка приспособить древний код к чему-нибудь? 
PM   Вверх
Шурф
Дата 22.4.2013, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 22.4.2013

Репутация: нет
Всего: нет



с CRRO, CRS и CRH все нормально, там это все как-то считается(это часть большой прграммы). По крайней мере в еще одном варианте другой программы считалось. Отставим их в сторону

основной вопрос в ROT и TT


Признаюсь: древний код к чему-нибдуь. Вся эта дребедень - грубо говоря, справочник теплофизических свойств криоагентов. Мне нужен гелий-1. Без этой программы, которая будет считать энтальпию, плотность и температуру в зависимости от давления и энтропии, я повешусь smile 




Это сообщение отредактировал(а) Шурф - 22.4.2013, 23:02
PM MAIL   Вверх
Шурф
Дата 22.4.2013, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 22.4.2013

Репутация: нет
Всего: нет



как там использовать common?
я что-то почитал про него, вроде то, но до конца не понимаю
PM MAIL   Вверх
Фантом
Дата 23.4.2013, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 5
Всего: 49



Цитата(Шурф @  23.4.2013,  00:00 Найти цитируемый пост)
с CRRO, CRS и CRH все нормально, там это все как-то считается(это часть большой прграммы). По крайней мере в еще одном варианте другой программы считалось.

Отлично, но с этой программой они должны быть слинкованы, иначе ничего работать не будет.

Да, кстати, слона-то я и не приметил... Почему в основной программе вызывается подпрограмма He1 и какое отношение ко всему имеет FPST?

Цитата(Шурф @  23.4.2013,  00:00 Найти цитируемый пост)

основной вопрос в ROT и TT

Нет, это только одна мелочь из целой горы вопросов. Просто эти ошибки компилятор находит раньше остальных.


Цитата(Шурф @  23.4.2013,  00:00 Найти цитируемый пост)

Признаюсь: древний код к чему-нибдуь. Вся эта дребедень - грубо говоря, справочник теплофизических свойств криоагентов. Мне нужен гелий-1. Без этой программы, которая будет считать энтальпию, плотность и температуру в зависимости от давления и энтропии, я повешусь 

Понятно. Тогда давайте сделаем так: запакуйте в архив и прицепите к сообщению все, что у Вас есть по части этой программы. Желательно - в исходном виде, до внесения правок. Посмотрим, что из этого можно собрать.
PM   Вверх
Шурф
Дата 23.4.2013, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 22.4.2013

Репутация: нет
Всего: нет



He1 - это, на сколько я понял, подпрограмма с общей информацией о гелии
FPST - это расчет остальный параметров, которые мне нужны(там еще куча таких подпрограмм)
Запаковал все, что намудрил. В изначальном виде, в котором часть работала. Сначала вообще ничего не работало, но танцы с бубном помогли.
Наверное там много лишнего. Открывал я путем "open workspace..."
helium-основная программа
cryag-z - с подпрограммами

спасибо уже за то, что занимаетесь мной smile  smile 

Это сообщение отредактировал(а) Шурф - 23.4.2013, 00:38

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  Св_ва_гелия.zip 253,83 Kb
PM MAIL   Вверх
Фантом
Дата 23.4.2013, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 5
Всего: 49



Ну что ж, теперь все ясно, поскольку хвосты видны. Программа, кстати, совершенно нормально и без каких-либо изменений собирается, но, правда, нормальным же компилятором (а у Вас там, похоже, MS PowerStation). 

Вам надо написать в главной программе следующее:
Код

program He
call He1 !подключение свойств гелия-1
print*,'zadaj p=(MPa)?';read*,p !задание давления, МПа
print*,'zadaj s=(K)?';read*,s !задание энтропии
print*,'zadaj N=(K)?';read*,N !задание фазового состояния

call FPST(N,p,s,t,h,ro)

print*
print*,'p=',p
print*,'s=',s
print*,'Rezult - ro=',ro !плотность
print*,'Rezult - h=',h ! энтальпия
print*,'Rezult - t=',t !температура
read*
end


Получится то, что требуется.
PM   Вверх
Шурф
Дата 23.4.2013, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 22.4.2013

Репутация: нет
Всего: нет



ох, вот оно как значит.
правда окно программы все равно закрывается после ввода значений. Но ладно
спасибо smile 
PM MAIL   Вверх
Фантом
Дата 23.4.2013, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 5
Всего: 49



Запустите получившийся exe-шник из командной строки, тогда ничего не закроется.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




[ Время генерации скрипта: 0.1365 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.