COMO Saulo,
QUEREMOS alterar o código do MPAS,
PARA incluir as variáveis com os níveis solicitados.
:clipboard: Critérios de aceite de conclusão da Issue
[x] Variáveis: kzq, ni e nr implementadas; Testar saída do MONAN com ncview ou NCL. OU explicar as variáveis que não funcionam devido a necessidade de alteração de configuração atual do modelo.
[x] Atualizar planilha com variáveis que estão funcionando ou colocar observação nas que não funcionam
Variável kzq implementada, cuja implementação é ilustrada parcialmente abaixo no arquivo _/src/core_atmosphere/diagnostics/mpas_isobaricdiagnostics.F:
type (MPAS_pool_type), pointer :: diag_physics
#ifdef DO_PHYSICS
type (MPAS_pool_type), pointer :: tend_physics
#endif
...
logical :: need_kzq_15, need_kzm
...
call mpas_pool_get_subpool(all_pools, 'diag_physics', diag_physics)
#ifdef DO_PHYSICS
call mpas_pool_get_subpool(all_pools, 'tend_physics', tend_physics)
#endif
...
need_kzm = .false.
...
need_kzq_15 = MPAS_field_will_be_written('kzq_15hPa')
need_kzq = need_kzq .or. need_kzq_15
need_any_diags = need_any_diags .or. need_kzq_15
...
type (mpas_pool_type), intent(inout) :: diag_physics
...
real (kind=RKIND), dimension(:,:), pointer :: kzq
...
real (kind=RKIND), dimension(:), pointer :: kzh_15hPa
...
real (kind=RKIND), dimension(:,:), allocatable :: field_in,press_in
real (kind=RKIND), dimension(:,:), allocatable :: field_interp,press_interp
...
call mpas_pool_get_array(diag_physics, 'kzq', kzq)
...
call mpas_pool_get_array(diag, 'kzq_15hPa', kzq_15hPa)
...
need_kzq_15 = MPAS_field_will_be_written('kzq_15hPa')
...
if (NEED_KZQ) then
!... kzq:
do iCell = 1, nCells
do k = 1, nVertLevels
kk = nVertLevels+1-k
field_in(iCell,kk) = kzq(k,iCell)
enddo
enddo
call interp_tofixed_pressure(nCells,nVertLevels,nIntP,press_in,field_in,press_interp,field_interp)
kzq_15hPa(1:nCells) = field_interp(1:nCells,1)
...
end if
Também foi necessário alterar o arquivo _/src/core_init_atmosphere/mpas_init_atmcases.F para incluir a pool _diagphysics e _tendphysics (esta utilizada em outras variáveis):
type (mpas_pool_type), pointer :: diag_physics
...
else if (config_init_case == 7 ) then
call mpas_log_write(' real-data GFS test case ')
block_ptr => domain % blocklist
do while (associated(block_ptr))
...
call mpas_pool_get_subpool(block_ptr % structs, 'diag_physics', diag_physics)
call mpas_pool_get_subpool(block_ptr % structs, 'tend_physics', tend_physics)
...
call init_atm_case_gfs(block_ptr, mesh, nCells, nEdges, nVertLevels, fg, state, &
diag, diag_physics, tend_physics, block_ptr % dimensions, block_ptr % configs)
...
end if
...
subroutine init_atm_case_gfs(block, mesh, nCells, nEdges, nVertLevels, fg, state, diag, diag_physics, tend_physics, dims, configs)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Real-data test case using GFS data
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
...
type (mpas_pool_type), intent(inout):: diag_physics
type (mpas_pool_type), intent(inout):: tend_physics
...
end subroutine init_atm_case_gfs
- Entre outras, saída obtida de _kzq_ interpolada ao nível de pressão _kzq_1000hPa_:
![Image](https://github.com/monanadmin/monan/assets/98923325/8dfb83da-690b-46e6-9eed-b8ab0e1f1784)
- Aproveitou-se para validar também as variáveis similares _kzh_ e _kzm_:
![Image](https://github.com/monanadmin/monan/assets/98923325/8f43d72e-de8f-44c1-b107-a18888f4bcc2)
![Image](https://github.com/monanadmin/monan/assets/98923325/308144f4-d0b2-4b72-8b59-08797097a1e8)
- Variáveis _ni_ e _nr_ implementadas com as variáveis _scalars_, _index_ni_ e _index_nr_, e utilizadas na interpolação:
```fortran
call mpas_pool_get_dimension(state, 'index_ni', index_ni)
call mpas_pool_get_array(state, 'scalars', scalars, time_lev)
...
field_in(iCell,kk) = scalars(index_ni,k,iCell)
...
call interp_tofixed_pressure(nCells,nVertLevels,nIntP,press_in,field_in,press_interp,field_interp)
...
ni_15hPa(1:nCells) = field_interp(1:nCells,1)
Removido GF na seção physics no _namelistatmosphere:
Execução de _buildtable (compilado junto com _atmospheremodel) para gerar as tabelas que serão utilizadas pela microfísica: MP_THOMPSON_freezeH2O_DATA.DBL, MP_THOMPSON_QIautQS_DATA.DBL, MP_THOMPSON_QRacrQG_DATA.DBL e MP_THOMPSON_QRacrQS_DATA.DBL.
Criados links simbólicos desses arquivos gerados no diretório da rodada com a data juntamente com as demais tabelas.
Saídas testadas de ni e nr:
:rotating_light: Problemas encontrados
Variáveis ni e nr são alocadas na microfísica de Thompson. Bug encontrado na linha 1860 de _module_mpthompson.F e resolvido acrescentando próximo a linha 1590 a inicialização da variável _mvdr:
!..Bug fix (2024Apr06), initializing value of mvd_r variable.
do k = kts, kte
mvd_r(k) = 0. !EGK - bug fix
enddo
Variáveis kzq, kzh e kzm são alocadas... Bug encontrado na linha 922 de _blysu.F e corrigido acrescentando próximo a linha 788 a inicialização da variável we:
!..Bug fix (2024Apr06), initializing value of we variable.
do i = its, ite
we(i) = 0. !EGK - bug fix
enddo
Variáveis kzq e kzh geram resultados iguais.
Branch monan-459-QI criada, incorporadas e testadas as modificações.
Branch finalizada e movida para monan-459-QI_CLOSED.
:white_check_mark: Conclusão
Bugs encontrados e corrigidos ao utilizar DEBUG=true na compilação do modelo.
Variável kzq implementada e testada com sucesso que promoveu a correção de kzh e kzm.
Variáveis ni implementada e testada com sucesso que promoveu correção das variáveis nr, qv, qr e qs.
A variável scalars contem diversas variáveis diferentes internamente pois utilizam físicas diferentes ocasionando dificuldades na implementação.
:people_holding_hands: User Story
COMO Saulo, QUEREMOS alterar o código do MPAS, PARA incluir as variáveis com os níveis solicitados.
:clipboard: Critérios de aceite de conclusão da Issue
:pencil: Detalhamento adicional da atividade
:comet: Impactos
N/A
:link: Dependências
:hammer_and_wrench: Solução
Variável kzq implementada, cuja implementação é ilustrada parcialmente abaixo no arquivo _/src/core_atmosphere/diagnostics/mpas_isobaricdiagnostics.F:
Também foi necessário alterar o arquivo _/src/core_init_atmosphere/mpas_init_atmcases.F para incluir a pool _diagphysics e _tendphysics (esta utilizada em outras variáveis):
... call mpas_pool_get_subpool(block_ptr % structs, 'diag_physics', diag_physics) call mpas_pool_get_subpool(block_ptr % structs, 'tend_physics', tend_physics) ... call init_atm_case_gfs(block_ptr, mesh, nCells, nEdges, nVertLevels, fg, state, & diag, diag_physics, tend_physics, block_ptr % dimensions, block_ptr % configs) ... end if ... subroutine init_atm_case_gfs(block, mesh, nCells, nEdges, nVertLevels, fg, state, diag, diag_physics, tend_physics, dims, configs) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Real-data test case using GFS data !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ... type (mpas_pool_type), intent(inout):: diag_physics type (mpas_pool_type), intent(inout):: tend_physics ... end subroutine init_atm_case_gfs
Removido GF na seção physics no _namelistatmosphere:
Ligada microfísica de Thompson incluindo na seção physics no namelist.atmosphere :
Execução de _buildtable (compilado junto com _atmospheremodel) para gerar as tabelas que serão utilizadas pela microfísica: MP_THOMPSON_freezeH2O_DATA.DBL, MP_THOMPSON_QIautQS_DATA.DBL, MP_THOMPSON_QRacrQG_DATA.DBL e MP_THOMPSON_QRacrQS_DATA.DBL.
Criados links simbólicos desses arquivos gerados no diretório da rodada com a data juntamente com as demais tabelas.
Saídas testadas de ni e nr:
:rotating_light: Problemas encontrados
Variáveis kzq e kzh geram resultados iguais.
Branch monan-459-QI criada, incorporadas e testadas as modificações.
Branch finalizada e movida para monan-459-QI_CLOSED.
:white_check_mark: Conclusão
:spiral_calendar: Trabalhos Futuros
N/A