Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Аргументы командной строки 
:(
    Опции темы
VKlim
Дата 25.9.2013, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый день, уважаемые Фортран-программисты! Столкнулся со следующей задачей: необходимо автоматизировать запуск программы на фортране (f90) с помощью скрипта, изменяя параметры вызова с помощью аргументов командной строки. Сама фортрановская программа должна была быть чёрным ящиком, в код которой не нужно заглядывать, т.к. автор давно уже неизвестно где. Но, как оказалось, программа устроена так, что требуется:
1. Запуск программы из консоли
2. Нажатие Enter
3. Ввод параметров (4 штуки через пробел)
4. Нажатие Enter

Для автоматического скрипта это неприемлемо, да и неудобно. Поэтому прошу, переделайте, пожалуйста, участок кода, отвечающий за это. Прошу не тыкать мануалами и учебниками, все варианты, которые в нете просмотрел (а их, на удивление, немного), по тем или иным причинам (далеко не всегда понятным), не подошли. Изучать синтаксис, какие-то функции и прочее фортрановское не хочется, да и времени на это нет, т.к. программа исключительно вспомогательная, но необходимая для одной конкретной задачи.

Код

module param
    real*8 hr,hz,hr2,hrinv,hzinv,hrsq,hzsq,ht,ht2,r1,zl,eps,j0,d,rst,sigd0,siga0,hd,h,my
    real*8 zsig,rsig,betsr,betsz,tend,phi0,rs,betc,cf,sum0,sum1
    real*8,allocatable :: rstfl(:),zfl(:),zstfl(:),j0fl(:),gam(:),bet(:)
            integer nr,nz,nr1,nz1,itend,npr,nrzmax,nst,nq
        
            contains 
            subroutine rnd()
    character  (50) filename
    open(99,file='param.dat')
    open(101,file='param1.dat')

          read(99,*,iostat=ios)eps,r1,nr,zl,nz,ht,tend,siga0,hd,h,my,zsig,rsig,betsr, &
        betsz,cf,nq,phi0,rs,betc
            close(99)
                allocate (rstfl(nq),zfl(nq),zstfl(nq),j0fl(nq),gam(nq),bet(nq))    
            
    
    do il=1,nq
  read(101,*,iostat=ios)rstfl(il),j0fl(il),gam(il),bet(il)
  enddo
  
 
    
  
  close(101)

! Как я понимаю, это именно оно и это именно те параметры
    read *,sigd0,zstfl(1),zfl(1),filename    
    
    
    open(77,file=filename)
            hr=r1/float(nr)
            hz=zl/float(nz)
            hrinv=1.d0/(hr)
            hzinv=1.d0/(hz)
        ht2=ht*0.5d0
            nr1=nr+1
            nz1=nz+1
            
    

             endsubroutine rnd
                 endmodule


Спасибо!
PM MAIL   Вверх
FCM
Дата 26.9.2013, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Исходник приведен ли полностью?
Если полностью, то по нему нельзя построить exe-файл, так что нет смысла вызывать из командной строки.
Еще непонятно open(77,...) для чего.

В любом случае можно попробовать, например,
переделать ввод с клавиватуры на ввод из файла:
Код

subroutine rnd()
...
   open(109, file='input.txt', &
       action = 'read',status = 'old',form = 'formatted', access = 'sequential')
...
   read(109,*) sigd0, zstfl(1), zfl(1), filename
   close(109)
...

где input.txt должен содержать соответствующие данные

PM MAIL   Вверх
VKlim
Дата 26.9.2013, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(FCM @  26.9.2013,  09:21 Найти цитируемый пост)
Исходник приведен ли полностью?Если полностью, то по нему нельзя построить exe-файл, так что нет смысла вызывать из командной строки.

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

Цитата(FCM @  26.9.2013,  09:21 Найти цитируемый пост)
В любом случае можно попробовать, например,переделать ввод с клавиватуры на ввод из файла:

Ввод из файла так же не подходит, т.к. параметры очередного запуска выбираются после анализа полученных результатов fortran-программы. Поэтому, значит, нужно писать отдельную программу, которая будет делать этот анализ, генерировать новые значения параметров, писать их в файл, из которого fortran уже будет читать... Столько лишних телодвижений. Но за предложение спасибо
PM MAIL   Вверх
FCM
Дата 26.9.2013, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если процесс выбора новых параметров может быть автоматизирован, то можно переделать фортран-программу, так чтобы она представляла собой не программу, а процедуру, которую скомпилировать в статбиблиотеку. ВВодимые с клавиатуры параметры можно сделать параметрами этой процедуры. Стат библиотеку можно вызывать из С++ программы (с совместимым форматом объектных файлов). 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




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


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

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