diff --git a/data/obs_data_rostov.csv b/data/obs_data_Rostov.csv similarity index 100% rename from data/obs_data_rostov.csv rename to data/obs_data_Rostov.csv diff --git a/data/obs_data_trgk.csv b/data/obs_data_TRGK.csv similarity index 100% rename from data/obs_data_trgk.csv rename to data/obs_data_TRGK.csv diff --git a/data/obs_data_vldmr.csv b/data/obs_data_VLDMR.csv similarity index 100% rename from data/obs_data_vldmr.csv rename to data/obs_data_VLDMR.csv diff --git a/plot.py b/plot.py index c1f463d8abbbc8cf8413ff54c13d537613b0156d..3eee9c314ebf81f595b3e0569d0620201d4f63ce 100644 --- a/plot.py +++ b/plot.py @@ -6,6 +6,11 @@ import matplotlib.pyplot as plt import numpy as np import pandas as pd +#nml = f90nml.read(self.nml_path) + +#start_lon = nml['drivpar_basic']['lam_min_'] + + ''' Script for plotting. Prerequisites: @@ -21,23 +26,30 @@ Usage: model_data_paths = [ 'results/Rostov_1.txt', 'results/Rostov_2.txt', - 'results/Rostov_3.txt' + 'results/Rostov_3.txt' ] -obs_data_path = 'data/obs_data_rostov.csv' +obs_data_path = 'data/obs_data_Rostov.csv' +#obs_data_path = f'data/obs_data_{station}.csv' +#else +#model_data_paths = [ +# 'results/common.txt' +#] - -# if type = INMCM -pools = {'Csoil' : 'Почва', #Для модели INMCM +# if carbon_model_type = INMCM +pools = {'Csoil' : 'Почва', 'Csoilb': 'Почва типа b',} - -# if type = ROTHC -#pools = {'CDPM': 'Разлагаемый растительный материал', #Для модели Rothc +# elif carbon_model_type = ROTHC +#pools = {'CDPM': 'Разлагаемый растительный материал', # 'CRPM': 'Устойчивый растительный материал', # 'CBIO': 'Пул микробной биомассы', # 'CHUM': 'Долгоживущий гумусовый пул'} - -# if type = SOCS +# elif carbon_model_type = SOCS +#pools = {'csoil1': 'Огранический углерод в почве', +# 'csoil2': 'Минерализованный углерод в почве',} +#else +#pools = {'C1': 'Pool 1', +# 'C2': 'Pool 2',} diff --git a/source/carbon/carbon_models/carbon_model_INMCM_aux.f90 b/source/carbon/carbon_models/carbon_model_INMCM_aux.f90 index cc6ac47aab6b9b4fdee21ec75ac3b4596c42398d..c1f0469424bfc79a91fb5c3820e342f94d1e6a70 100644 --- a/source/carbon/carbon_models/carbon_model_INMCM_aux.f90 +++ b/source/carbon/carbon_models/carbon_model_INMCM_aux.f90 @@ -5,7 +5,7 @@ module carbon_model_inmcm_aux use const, only : pi, r_earth, yrs use environment_model_inmcm, only : nv2 - use environment_core, only : Tsoil, Temp, e, Wsoil, Isoil + use environment_core, only : Tsoil, Temp, Wsoil, Isoil use carbon_model_to_core_arg_kit, only : year_min, year_max, nmonth use grid, only : dt @@ -82,7 +82,7 @@ module carbon_model_inmcm_aux ! ------ Climate variables -------- real :: in_temp(0:mnc) !< Поступление извне данных cредней температуры почвы в месяц, [Celsius] - real :: in_e(0:mnc) !< Поступление извне данных влажности почвы, [dim] + real :: in_wsoil(0:mnc) !< Поступление извне данных влажности почвы, [dim] ! ------ Litterfall -------- real :: in_lambd(0:mnc) !< Поступление извне данных по поступлению углерода в почву, [kg/m**3 / year] real :: lambd !< Поступлени еуглерода в почву в интервал времени dt, [kg/m**3 / year / dt](lambdac) @@ -110,7 +110,7 @@ contains close (1) open (unit = 1, file = 'initial_value/'//trim(station)//'_MOI.txt', status='unknown') - read(1,*) in_e(1:mnc) + read(1,*) in_wsoil(1:mnc) close (1) open (unit = 1, file = 'initial_value/'//trim(station)//'_'//trim(opt)//'.txt', status='unknown') @@ -124,7 +124,7 @@ contains if (dt == 86400) then ! Для шага по времени день: k = 0 in_temp(0) = in_temp(1) - in_e(0) = in_e(1) + in_wsoil(0) = in_wsoil(1) in_lambd(0) = in_lambd(1) else ! Для шага по времени месяц: k = 1 @@ -226,12 +226,12 @@ contains if (dt == 86400) then ! Для шага по времени день: Temp(ii,jj) = in_temp(k)*sin(pi*(j-1)/(N(i)-1)) + in_temp(k+1)*(1-sin(pi*(j-1)/(N(i)-1))) - e(ii,jj) = in_e(k)*sin(pi*(j-1)/(N(i)-1)) + in_e(k+1)*(1-sin(pi*(j-1)/(N(i)-1))) + Wsoil(ii,jj,:) = in_wsoil(k)*sin(pi*(j-1)/(N(i)-1)) + in_wsoil(k+1)*(1-sin(pi*(j-1)/(N(i)-1))) lambd = in_lambd(k)/(N(i)) if (j == (N(i)/2)) k = k+1 else ! Для шага по времени месяц: Temp(ii,jj) = in_temp(k) - e(ii,jj) = in_e(k) + Wsoil(ii,jj,:) = in_wsoil(k) lambd = in_lambd(k) k = k+1 end if @@ -250,7 +250,6 @@ contains use const, only : Kelvin0, Tf, rho_w use grid, only : ms, ml, z, dz, date_c - use environment_core, only : Tsoil, Wsoil, Isoil use environment_model_inmcm, only : g2gw_to_cmw, wssl_glob, wssg_glob, roots, rhodry, tlai, fsun, fsha integer, intent(in) :: ii, jj, nn diff --git a/source/carbon/carbon_models/carbon_model_ROTHC_aux.f90 b/source/carbon/carbon_models/carbon_model_ROTHC_aux.f90 index 5e80e962f090e34318e27e417d1d9b61dfe367df..ceff92401e43ac27f0a33e8a640b9a17a0ccf2c4 100644 --- a/source/carbon/carbon_models/carbon_model_ROTHC_aux.f90 +++ b/source/carbon/carbon_models/carbon_model_ROTHC_aux.f90 @@ -1,8 +1,9 @@ module carbon_model_rothc_aux use const, only : yrs, day2sec, pi + use carbon_model_to_core_arg_kit, only : year_min, year_max, nmonth - use grid, only : dt + use grid, only: date_c, date_fst, date_lst, dt implicit none ! Интерфейс @@ -12,6 +13,8 @@ implicit none character(len=2) :: opt = '2' !< Имя варианта подачи удобрения ! Нужно указать номер ! ------- Serve value ------- +! integer :: year_min = date_fst%y +! integer :: year_max = date_lst%y integer, parameter :: mnc = (year_max - year_min + 1)*nmonth !Как часть параметров для задания климатических данных !< Колличество месяцев в расчете integer :: k !< Номер месяца с начала работы программы !Как часть параметров для шага по времени @@ -62,8 +65,8 @@ implicit none real :: Tsoil !< Средняя температура почвы в интервал времени dt, [Celsius] real :: in_veg(0:mnc) !< Поступление извне данных средней концентрации растений в месяц, [%] real :: veg !< Средняя концентрация растений в интервал времени dt, [%] - real :: in_e(0:mnc) !< Поступление извне данных влажности почвы, [dim] - real :: e !< Влажность почвы в интервал времени dt, [dim] + real :: in_wsoil(0:mnc) !< Поступление извне данных влажности почвы, [dim] + real :: Wsoil !< Влажность почвы в интервал времени dt, [dim] real :: sw !< Влажность увядания DAO: 0.120 Rostov: 0.146 ! ------ Litterfall -------- real :: in_lambd(0:mnc) !< Поступление извне данных по поступлению углерода в почву, [kg/m**3 / year] @@ -88,7 +91,7 @@ contains close (1) open (unit = 1, file = 'initial_value/'//trim(station)//'_MOI.txt', status='unknown') - read(1,*) in_e(1:mnc) + read(1,*) in_Wsoil(1:mnc) close (1) open (unit = 1, file = 'initial_value/'//trim(station)//'_'//trim(opt)//'.txt', status='unknown') @@ -118,9 +121,9 @@ contains ! @todo учесть шаг по времени 1 час if (dt == 86400) then ! Для шага по времени день: k = 0 - in_temp(0) = in_temp(1) - in_veg(0) = in_veg(1) - in_e(0) = in_e(1) + in_temp(0) = in_temp(1) + in_veg(0) = in_veg(1) + in_wsoil(0) = in_wsoil(1) in_lambd(0) = in_lambd(1) else ! Для шага по времени месяц: k = 1 @@ -140,7 +143,6 @@ contains subroutine carbon_model_calc_at_cell(ii,jj) ! ---- Part of environmental_calc_at_cell(ii,jj) ---- - use grid, only: date_c integer, intent(in) :: ii, jj integer i, N(12),j !< count @@ -152,14 +154,14 @@ contains ! ------------- if (dt == 86400) then ! Для шага по времени день: - Temp = in_temp(k)*sin(pi*(j-1)/(N(i)-1)) + in_temp(k+1)*(1-sin(pi*(j-1)/(N(i)-1))) - e = in_e(k)*sin(pi*(j-1)/(N(i)-1)) + in_e(k+1)*(1-sin(pi*(j-1)/(N(i)-1))) + Temp = in_temp(k)*sin(pi*(j-1)/(N(i)-1)) + in_temp(k+1)*(1-sin(pi*(j-1)/(N(i)-1))) + Wsoil = in_wsoil(k)*sin(pi*(j-1)/(N(i)-1)) + in_wsoil(k+1)*(1-sin(pi*(j-1)/(N(i)-1))) veg = in_veg(k) lambd = in_lambd(k)/N(i) if (j == (N(i)/2)) k = k+1 else ! Для шага по времени месяц: Temp = in_temp(k) - e = in_e(k) + Wsoil = in_wsoil(k) veg = in_veg(k) lambd = in_lambd(k) k = k+1 @@ -167,11 +169,11 @@ contains Tsoil = Temp ! температура почвы равна температуре воздуха ! ---- Part of rothc_calc_at_cell(ii,jj) ---- - if (e >= s0) then - Fs = 1 - 0.8*(e-s0) - else if (smin < e .and. e < s0) then - Fs = 0.2 + 0.8*(e-smin)/(s0-smin) - else if (e <= smin) then + if (Wsoil >= s0) then + Fs = 1 - 0.8*(Wsoil-s0) + else if (smin < Wsoil .and. Wsoil < s0) then + Fs = 0.2 + 0.8*(Wsoil-smin)/(s0-smin) + else if (Wsoil <= smin) then Fs = 0.2 end if @@ -197,8 +199,8 @@ contains Rs = RDPM + RRPM + RBIO + RHUM - !print*, 'important thing 1, ', trim(station)//'_Temp.txt' - !print*, 'important thing 2, ', mnc + print*, 'date_fst, ', date_fst%y + print*, 'date_lst, ', date_lst%y !print*, 'important thing 3, ', j !print*, 'important thing 4, ', Temp(k) diff --git a/ui1_config.nml b/ui1_config.nml index dcb225f3ab5b6ceb8219d52952eb4fcde20831f9..aa9f30511aa6a8ce1ae460018c46c13b88dd2b0d 100644 --- a/ui1_config.nml +++ b/ui1_config.nml @@ -12,7 +12,7 @@ ! ----------------------------------------------------------------- !> Углеродная модель: - carbon_model_type = 'rothc' + carbon_model_type = 'inmcm' ! ! 'inmcm' - модель INMCM [1,2] ! 'socs' - модель SOCS [3] @@ -112,7 +112,7 @@ testing_log_mode = 'read' ! none, write, read - nv_singlecolumn = 1 ! Для модели INMCM нужно поставить 12, для rothc и SOCS 1 + nv_singlecolumn = 12 ! Для модели INMCM нужно поставить 12, для rothc и SOCS 1 environment_model_type = 'inmcm' ! inmcm