Commit 4a9e78fe authored by Takhir Fakhrutdinov's avatar Takhir Fakhrutdinov

Добавили папки с программами

parent 158b1398
...@@ -18,3 +18,10 @@ write_buildinfo.f95 ...@@ -18,3 +18,10 @@ write_buildinfo.f95
!modules/ !modules/
!library/ !library/
!gencatalog/ !gencatalog/
!fineorbit/
!identification/
!seance/
!ephemerides/
!orbconverter/
!identoptoneset/
!qorbits/
\ No newline at end of file
...@@ -54,7 +54,7 @@ else ...@@ -54,7 +54,7 @@ else
RELCFLAGS = -g -O0 -DDEBUG=$(DEBUG) RELCFLAGS = -g -O0 -DDEBUG=$(DEBUG)
endif endif
SOLVERS=gencatalog SOLVERS=gencatalog fineorbit qorbits seance identification identoptoneset orbconverter ephemerides
all: dirs lib $(SOLVERS) all: dirs lib $(SOLVERS)
cp $(JPL) $(JPLTARG) cp $(JPL) $(JPLTARG)
......
write_buildinfo.f95
!------------------------------------------------------------------------------
!> @group OMCC - АСПОС ОКП
!> @author Нью-Ком Технолоджис
!> @file ephemerides.f95
!> @date Apr 4, 2019
!> @brief Программа расчета эфемерид
!> @param [in] - входные параметры передаются через стандартный файл INPUT_UNIT в формате JSON
!
!> Описание программы:
!> Описание файла INPUT_UNIT
!> {
!> "ttm":, -- время последней засечки (измерения)
!> "orbits":[], -- массив параметров каталожных орбит, каждая строка 60 элементов( фазовый вектор) за время хх* дней
!> "dext":[] -- массив размерностью xx (дней) * 10 - mjd,pm_x,pm_y,ut1_utc,dx,dy,tai_utc+tt_tai (frac of date),f_10_7,f_81,kp
!> }
!> Описание результата файла OUTPUT_UNIT
!> { "id":"ADAPSLive! v.1.0",
!>
!> > "result": {
!> >> "gro":xxx,
!> >> "vc":xx,
!> >> "orbids":[2020001,20200002,...],
!> >> "data":[
!> >>> { "nko":36767,
!> >>> "ephem":[
!> >>>> [2459199.0008007409,4430.0407658654003,-1754.5404565638801,-5399.7096644412104,4.4475961943785602,-3.5259684252846597,4.8017905094111004],
!> >>>> [2459199.0008007409,4430.0407658654003,-1754.5404565638801,-5399.7096644412104,4.4475961943785602,-3.5259684252846597,4.8017905094111004],
!> >>>> ...
!> >>> ]
!> >>> }
!> >> ]
!> > }
!> }
!> Описание результата файла stderr - отладочная информация
!------------------------------------------------------------------------------
#define __MODULE_VERSION__ '1.1.1'
program ephemerides
! необходимые модули
use fson
use fson_value_m
use rdjson
use wrjson
use adaps_m
use const_m
use library_m
implicit none
integer :: rc ! код возврата
integer :: gro ! номер группы КО
integer :: vc ! тип ВС
!integer :: sz
real(8) :: mjd_beg ! время начала выдачи эфемеридной информации в формате mjd
real(8) :: interval ! интервал прогноза в сутках
real(8) :: step ! Шаг вывода эфемеридной информации
logical :: stop_not_adaps_message = .false. ! останов если сообщение не соответсвует формату adaps
logical :: is_adaps_message ! признак сообщения соответстувующего ADASPLive! v.1.0
!real(8) :: nipinfo(NIPINFO_SIZE_) = 0.0D0 ! информационный массив о НИП
!real(8) :: locinfo(LOCINFO_SIZE_) = 0.0D0 ! информационный массив о НИП
type(fson_value), pointer :: init,value ! рабочие указатели на элементы входного потока соответственно корень, массив, строка, элемент
type(fson_value), pointer :: result,rs_obj ! рабочие указатели на элементы входного потока соответственно корень, массив, строка, элемент
type(fson_value), pointer :: eph_obj ! рабочие указатели на элементы входного потока соответственно корень, массив, строка, элемент
real(8), allocatable :: orbits(:,:) ! динамический список орбит
real(8), allocatable :: dext(:,:) ! массив внешних данных XX*10 (iers и идексов солнечной активности на период xx* дней...)
! разбираем входной поток
value => fson_parse('',INPUT_UNIT)
result => js_object(null())
is_adaps_message = js_init_result(value,result,stop_not_adaps_message)
init => value
if(is_adaps_message) then
init => fson_value_get(value,'init')
endif
rs_obj => js_object(result,'result')
! копируем идентификаторы орбит
call js_copy(fson_value_get(init,'orbids'),js_array(rs_obj,'orbids'),'')
! копируем времена орбит
call js_copy(fson_value_get(init,'times'),js_array(rs_obj,'times'),'')
call fson_get(init,'gro',gro)
call fson_get(init,'vc', vc)
call js_add(rs_obj,'gro',gro)
call js_add(rs_obj,'vc', vc)
! получаем время начала прогнозирования в формате mjd
call fson_get(init,'mjd_beg',mjd_beg)
! получаем интервал прогнозирования в формате сутки
call fson_get(init,'interval',interval)
! получаем шаг вывода эфемерид
call fson_get(init,'step',step)
! читаем массив текущих каталожных орбит...
call get_alloc_matrix(fson_value_get(init,'orbits'),ORBIT_SIZE_,orbits)
! читаем массив dext
call get_alloc_matrix(fson_value_get(init,'dext'),DEXT_SIZE_,dext)
! информация о ИП
!p => fson_value_get(init,'nipinfo')
!sz = fson_value_count(p)
!if(sz.eq.NIPINFO_SIZE_) then
! call get_vector(p,nipinfo)
!else
! call get_vector(p,locinfo)
!endif
write(ERROR_UNIT,*) "LOG: objects count:",size(orbits,1)," mjd:",mjd_beg
! освобождаем память
call fson_destroy(value)
! выполняем расчет
eph_obj => js_array(rs_obj,'data')
call nc_genephemeris(mjd_beg,interval,step,orbits,dext,rc,eph_obj)
if(rc.ne.0) write(ERROR_UNIT,*) 'nc_genephemeris exit code:',rc
! освобождаем память
if(allocated(orbits)) deallocate(orbits)
if(allocated(dext)) deallocate(dext)
! выводим результат
call fson_print(result)
call fson_destroy(result)
call write_buildinfo()
end program ephemerides
MAIN=ephemerides
include ../makefile.inc
\ No newline at end of file
write_buildinfo.f95
This diff is collapsed.
MAIN=fineorbit
include ../makefile.inc
\ No newline at end of file
This diff is collapsed.
MAIN=identification
include ../makefile.inc
\ No newline at end of file
This diff is collapsed.
MAIN=identoptoneset
include ../makefile.inc
\ No newline at end of file
MAIN=orbconverter
include ../makefile.inc
\ No newline at end of file
!------------------------------------------------------------------------------
!> @group АСПОС ОКП
!> @author Нью-Ком Технолоджис
!> @file orbconverter.f95
!> @date May 07, 2019
!> @brief программа формироваия динамического списка орбит (каталога) на момент времени...
!> @param [in] - входные параметры передаются через стандартный файл INPUT_UNIT в формате JSON
!> @image html orbconverter.png
!> Описание программы:
!> Описание файла INPUT_UNIT
!> {
!> "ar":[
!> "ttm": , -- внутреннее представление даты формирования динамического списка орбит
!> "mjd": , -- дата (в формате mjd) формирования динамического списка орбит
!> "orbit":[], -- массив параметров уточненной орбиты
!> "dext":[] -- массив размерностью xx (дней) * 10 -
!> -- mjd,pm_x,pm_y,ut1_utc,dx,dy,tai_utc+tt_tai (frac of date),f_10_7,f_81,kp
!> ]
!> }
!> Описание результата файла stdout
!> Описание результата файла stderr - отладочная информация
!------------------------------------------------------------------------------
#define __MODULE_VERSION__ '1.1.1'
program orbconverter
! необходимые модули для разбора входящего потока
use fson
use fson_value_m
use rdjson
use wrjson
use library_m
implicit none
real(8), allocatable :: dext(:,:) ! массив внешних данных XX*10 (iers и идексов солнечной активности на период xx* дней...)
real(8) :: abs_orbit(XABS_SIZE_) = 0.0D0 ! вектор параметров орбиты в декартовой
real(8) :: tle_orbit(TLE_SIZE_) = 0.0D0 ! вектор параметров орбиты tle
real(8) :: znh_orbit(ZNH_SIZE_) = 0.0D0 ! вектор параметров орбиты znh
real(8) :: sat_orbit(ORBIT_SIZE_) = 0.0D0 ! вектор параметров каталожной орбиты (ctl.t_orbitdynarc)
integer(8) :: ttm ! внутреннее предстваление времени орбиты
integer :: exit_err ! признаки ошибки выделения памяти и вызова подпрограмм
integer :: b,b_count = 1 ! рабочие переменные для инксов циклов
character(len=64) tp ! подтип задачи
type(fson_value), pointer :: value,init ! рабочие указатели на элементы входного потока соответственно корень, массив, строка, элемент
type(fson_value), pointer :: batch,array !
type(fson_value), pointer :: p !
type(fson_value), pointer :: result,rs_obj,rs_rec ! рабочие указатели на элементы входного потока соответственно корень, массив, строка, элемент
logical :: stop_not_adaps_message = .false. ! останов если сообщение не соответсвует формату adaps
logical :: is_adaps_message ! признак сообщения соответстувующего ADASPLive! v.1.0
! разбираем входной поток
value => fson_parse('',INPUT_UNIT)
result => js_object(null())
is_adaps_message = js_init_result(value,result,stop_not_adaps_message)
init => value
if(is_adaps_message) then
init => fson_value_get(value,'init')
endif
rs_obj => js_object(result,'result')
p => fson_value_get(init,'tp')
if(associated(p)) then
call fson_get(init,'tp',tp)
call js_add(rs_obj,'tp',trim(tp))
endif
rs_rec => js_array(rs_obj,'orbits')
! Пачка задач?
array => fson_value_get(init,'ar')
if(associated(array)) then
b_count = fson_value_count(array)
endif
do b = 1,b_count
if(associated(array)) then
batch => fson_value_get(array,b)
else
batch => init
endif
! время
call fson_get(batch,'ttm',ttm)
! читаем орбиту...
call get_vector(fson_value_get(batch,'orbit'),sat_orbit)
! читаем dext
call get_alloc_matrix(fson_value_get(batch,'dext'),DEXT_SIZE_,dext)
! расчитываем орбиту
call nc_convorb(sat_orbit,dext,abs_orbit,znh_orbit,tle_orbit,exit_err)
! вывод результата в зависимости от формы представления результатов
if(exit_err.eq.0) then
rs_obj => js_object(rs_rec)
call js_add(rs_obj,'ttm',ttm)
call js_add(rs_obj,'nko',int(sat_orbit(1)))
call js_add(js_array(rs_obj,'abs'),abs_orbit)
call js_add(js_array(rs_obj,'znh'),znh_orbit)
if(tle_orbit(4).gt.0.0D00) then
call js_add(js_array(rs_obj,'tle'),tle_orbit)
endif
else
write(ERROR_UNIT,*) 'rc:',exit_err, 'index:', b
endif
! освобождаем память
if(allocated(dext)) deallocate(dext)
enddo
! отладочная информация
write(ERROR_UNIT,*) 'LOG: orbconverter ... done : converted ',b_count,' orbits.'
! освобождаем память
call fson_destroy(value)
! выводим результат
call fson_print(result)
call fson_destroy(result)
call write_buildinfo()
end program orbconverter
\ No newline at end of file
write_buildinfo.f95
MAIN=qorbits
include ../makefile.inc
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
write_buildinfo.f95
MAIN=seance
include ../makefile.inc
\ No newline at end of file
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment