Умножение двух таблиц атрибутов на основе общего значения идентификатора и запись выходного файла с использованием Fortran - PullRequest
0 голосов
/ 18 марта 2019

У меня есть одна таблица, которая содержит ежемесячный профиль для каждой из некоторых европейских стран:

 coun_ID, M1, M2, M3 M4...M12 

Например, Monthly.txt выглядит следующим образом:

coun_ID M1  M2  M3  M4  M5  M6  M7  M8  M9  M10 M11 M12
1   0.111453304 0.103129682 0.093224571 0.090228067 0.075162311 0.063758948 0.059930082 0.057682704 0.064841019 0.081155319 0.09414017  0.105293824
2   0.091037697 0.093450944 0.079221103 0.077223933 0.079137888 0.08329866  0.070899559 0.060996921 0.077223933 0.095780977 0.101522843 0.090205542
3   0.167259786 0.185549946 0.154266325 0.099892411 0.048166846 0.031200861 0.017297029 0.01555905  0.020690226 0.047918563 0.080857403 0.131341554
...
...
etc.

У меня также есть таблица (values.txt), которая содержит следующие значения:

ID  coun_id value
1   1   633546.2138
2   1   2378960.921
3   1   4490715.693
4   2   1676472.311
5   2   778063.0026
6   1   12979.51759
7   1   1723.502754
8   3   16.4434473
9   3   190.4572685
10  3   204319.6438
...
...
etc.

Я хочу умножить «значение» из файла values.txt на месячные коэффициенты (M1, M2 ... M12) на основе count_id и записать результаты в выходной файл (output.txt). Таким образом, результат будет выглядеть так:

ID  coun_id value   M1  M2  M3  M4  M5  M6  M7  M8  M9  M10 M11 M12
1   1   633546.2138 70610.81876 65337.41956 59062.07399 57163.65023 47618.79755 40394.2401  37968.47654 36544.65872 41079.78209 51415.64508 59642.14827 66708.50353
2   1   2378960.921 265143.0547 245341.4833 221777.6113 214649.0454 178808.2006 151680.0457 142571.3231 137224.8986 154254.2503 193065.3324 223955.7855 250489.8925
3   1   4490715.693 500505.1013 463126.0814 418645.044  405188.5964 337532.5695 286323.3084 269128.9597 259036.6241 291182.5816 364445.4646 422756.7388 472844.6278
4   2   1676472.311 152622.1783 156667.9201 132811.9856 129463.7854 132672.478  139647.897  118861.1475 102259.6491 129463.7854 160574.1559 170200.2352 151227.0935
5   2   778063.0026 70833.06388 72710.72208 61639.00927 60085.08518 61574.26276 64811.60551 55164.32376 47459.4475  60085.08518 74523.63456 78991.16806 70185.59486
..
...
etc.

Я хочу использовать Фортран 90.

Я использую следующий код fortran90 для чтения входных файлов:

     character*3 :: coun
          character*500 :: header,fname,file,output,rundir
          integer :: ncellmax,ncell,write_ncell,&
                     coun_id,coun_id2,counid,write_coun, &
                     month,snap,start_snap,end_snap
          real :: value, mo(12)
          real, allocatable, dimension(:,:) :: value_vct 
          real, allocatable, dimension(:) :: vct_counid

allocate vct_counid(89)
allocate vct_month(89,12)
allocate value_vct(ncellmax,89)

   ncellmax=100000

 Open (13,file=rundir(1:len_trim(rundir))//'user_input/Monthly.txt')
    read (13,*) header
    do coun_id=1,89
      read (13,*) counid,mo(1),mo(2),mo(3),mo(4),mo(5),mo(6),mo(7),mo(8),mo(9),mo(10),mo(11),mo(12)
      vct_counid(coun_id)=counid
      do month=1,12
       vct_month(coun_id,month)=mo(month)
      enddo
     enddo

    Open (14,file=rundir(1:len_trim(rundir))//‘values.txt')
   do ncell=1,ncellmax
    read(100,*) id,coun_id2,value
      do coun_id=1,89
       value_vct(ncell,coun_id2)=value
      enddo
   enddo!for all ncells

Как мне поступить, чтобы умножить таблицы, включая также выражение "где", чтобы умножить их, где coun_id(from months.txt) равно coun_id2 (из values.txt), а затем записать выходные данные в файл

...