/minimizer

Поиск решения обратной задачи светорассеяния для данных солнечной поляриметрии

Primary LanguageFortran

Поиск решения обратной задачи
=============================

Решение сводится к поиску параметров модельных функций распределения частиц 
по размерам. Подгонка осуществляется по данным кривой степени поляризации на 
нескольких длинах волн.

Используемые функции:
1. Степенное расределение (1 параметр)
2. Логнормальное распределение (2 параметра)
3. Двумодальное логнормальное рапределение (5 параметров)

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

Насртройка работы программы осуществляется через конфигурационный файл config.ini

Этот файл  иимеет формат записи NAMEELIST-ов на языке Фортран 2003 (gfortran 7)

В файле 2 блока:

&HEADER
	NFILES=42,      // Количество файлов базы частиц
	NWAVELENGTHS=2, // Количество длин волн
	NEXPS=18,       // количество экспериментальных точек по углу
	NPARS=5,        // количество параметров оптимизации
    OPTALG=40,      // алгоритм оптимизации
/


CONFIG
 FILES= "NDB/comb/orig/addadb_m1=1.350+0.000_m2=1.000+0.000_scale=1-avg.nc",
 	"NDB/comb/orig/addadb_m1=1.350+0.005_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.350+0.010_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.350+0.015_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.350+0.020_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.350+0.025_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.350+0.030_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.400+0.000_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.400+0.005_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.400+0.010_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.400+0.015_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.400+0.020_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.400+0.025_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.400+0.030_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.450+0.000_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.450+0.005_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.450+0.010_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.450+0.015_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.450+0.020_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.450+0.025_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.450+0.030_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.500+0.000_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.500+0.005_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.500+0.010_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.500+0.015_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.500+0.020_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.500+0.025_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.500+0.030_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.550+0.000_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.550+0.005_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.550+0.010_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.550+0.015_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.550+0.020_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.550+0.025_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.550+0.030_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.600+0.000_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.600+0.005_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.600+0.010_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.600+0.015_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.600+0.020_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.600+0.025_m2=1.000+0.000_scale=1-avg.nc",
	"NDB/comb/orig/addadb_m1=1.600+0.030_m2=1.000+0.000_scale=1-avg.nc", // Собственно относительный путь к файлам  баз данных частиц
EXPDATAFNAME="aresult_2017-10-24.txt",  // файл с данными поляризации (эксперимент) это таблица, где первый столбец - угол рассеяния
WAVELENGTH=0.670, 0.750,                // длины волн
X0= 0.1, 2.5, 0.5, 2.5, 0.9,            // начальные параметры решения
LB= 0.08, 1.5, 0.31, 1.5, 0.00001,      // нижняя граница параметров решения
UB= 0.3, 2.8, 0.9, 2.8, 0.99999,        // верхняя граница параметров решения
R0= 0.05,                               // левая граница диапазона (мкм) для которого ищется решение
R1= 10.0,                               // правая граница диапазона (мкм) для которого ищется решение
XTOL= 1.0D-5,                           // критерий остановки (если относительное изменение параметра меньше чем xtol)
FTOL= 1.0D-3,                           // критерий остановки (если относительное изменение функции меньше чем ftol)
IDISTRTYPE=2,                           // номер распределения (модели)
SAVEFDIST= "fdist.dat",                 // имя файла, куда сохраняем функцию распределения (результирующая)
SAVEPOL= "pol.dat",                     // имя файла, куда сохраняем кривую поляризации (расчетную) для первой длины волны
/

Вывод программы:
~~~~~~~~~~~~~~~~
Исходные данные
                                                               EXPERIMENTAL DATA
                                                               =================
 THTA      1      2
 11.0  0.012  0.018
 18.9  0.028  0.027
 27.5  0.049  0.050
 36.2  0.088  0.097
 45.1  0.138  0.151
 53.9  0.212  0.212
 62.9  0.304  0.299
 71.8  0.395  0.392
 80.7  0.480  0.476
 89.7  0.537  0.529
 98.6  0.529  0.532
107.5  0.492  0.480
116.4  0.405  0.399
125.4  0.306  0.297
134.2  0.198  0.196
143.1  0.109  0.131
151.9  0.051  0.054
160.5  0.030  0.031

                                            STARTING APPROXIMATION OF A FUNCTION
                                            ====================================
Показатель предлмления и RMSE для найденого решения
 No.  (  Re(M)  Im(M))     RMSE  E
 =================================
  1.  (  1.350  0.000)   12.150  3
  2.  (  1.350  0.005)   12.248  3
  3.  (  1.350  0.010)   12.323  3
  4.  (  1.350  0.015)   12.570  3
  5.  (  1.350  0.020)   12.620  3
  6.  (  1.350  0.025)   12.538  3
  7.  (  1.350  0.030)   12.076  3
  8.  (  1.400  0.000)   10.173  3
  9.  (  1.400  0.005)   10.304  3
 10.  (  1.400  0.010)   10.438  3
 11.  (  1.400  0.015)   10.528  3
 12.  (  1.400  0.020)   10.595  3
 13.  (  1.400  0.025)   10.719  3
 14.  (  1.400  0.030)   10.480  3
 15.  (  1.450  0.000)    8.694  3
 16.  (  1.450  0.005)    8.700  3
 17.  (  1.450  0.010)    8.880  3
 18.  (  1.450  0.015)    8.982  3
 19.  (  1.450  0.020)    9.125  3
 20.  (  1.450  0.025)    9.222  3
 21.  (  1.450  0.030)    9.117  3
 22.  (  1.500  0.000)    7.409  3
 23.  (  1.500  0.005)    7.544  3
 24.  (  1.500  0.010)    7.716  3
 25.  (  1.500  0.015)    7.890  3
 26.  (  1.500  0.020)    8.011  3
 27.  (  1.500  0.025)    8.129  3
 28.  (  1.500  0.030)    7.811  3
 29.  (  1.550  0.000)    6.371  3
 30.  (  1.550  0.005)    6.558  3
 31.  (  1.550  0.010)    6.729  3
 32.  (  1.550  0.015)    6.680  3
 33.  (  1.550  0.020)    7.034  3
 34.  (  1.550  0.025)    7.251  3
 35.  (  1.550  0.030)    7.496  3
 36.  (  1.600  0.000)    5.583  3
 37.  (  1.600  0.005)   10.960  3
 38.  (  1.600  0.010)    5.928  3
 39.  (  1.600  0.015)    6.105  3
 40.  (  1.600  0.020)   30.721  3
 41.  (  1.600  0.025)    6.433  3
 42.  (  1.600  0.030)    6.078  3

                                                                  OPTIMAL RESULT
                                                                  ==============
Наилучщее решение (RMSE)
RMSE =    5.58
Параметры распределения
X=[  0.142177  1.505192  0.327202  1.556055  0.999676]
Номер решения в списке выше
Index of solution: 36


Дополнительные зависимости программы:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. netcdf4.5 с интерфейсом для фортрана (на Mac желательно ставить 
   brew install netcdf c поддержкой фортаран)
2. openblas или blas или lapack (brew install openblas)
3. nlopt. ставить из дистрибутива, размещенного на сайте 
   https://nlopt.readthedocs.io/en/latest/