monanadmin / monan

Repositório organizacional das atividades dos macro-grupos do MONAN - Model for Ocean-laNd-Atmosphere PredictioN
14 stars 10 forks source link

[GCC] PAD: Investigar problema da variavel Umidade Relativa #506

Closed joaomas closed 1 month ago

joaomas commented 1 month ago

:people_holding_hands: User Story

COMO (...) QUEREMOS (...) PARA (...)

:clipboard: Critérios de aceite de conclusão da Issue

:pencil: Detalhamento adicional da atividade

:comet: Impactos

:link: Dependências

:hammer_and_wrench: Solução

  1. Gerei uma saída de teste com resolução menor, rodando em meu laptop.
  2. Testei a umidade relativa antes da interpolação para os níveis definidos (1000, 975, etc)
  3. Os valores de umidade relativa ultrapassaram 100% mesmo antes da interpolação
  4. Num total de 140910 pontos foram ultrapassados os 100% de umidade em 1670 pontos, ~1,2%
  5. O maior valor foi de 123.70% - Muito ruim!
  6. A distribuição de valores é mostrada no histograma abaixo

Image

  1. relhum é obtido em core_atmosphere/physics/mpas_atmphys_driver_microphysics.F
    do j = jts,jte
    do i = its,ite
    do k = kts,kte
       p1d(k)  = pres_p(i,k,j)
       t1d(k)  = th_p(i,k,j) * pi_p(i,k,j)
       tempc   = t1d(k) - 273.16_RKIND
       qvs1d(k) = rslf(p1d(k),t1d(k))
       if(tempc .le. 0._RKIND) qvs1d(k) = rsif(p1d(k),t1d(k))
       qv1d(k) = qv_p(i,k,j)
       relhum(k,i) = qv1d(k) / qvs1d(k)
       relhum(k,i) = relhum(k,i) * 100._RKIND
    enddo
    enddo
    enddo
  2. Disparei uma rodada com dump dos valores de umidade calculado no laço (modificação abaixo):
    do j = jts,jte
    do i = its,ite
    do k = kts,kte
       p1d(k)  = pres_p(i,k,j)
       t1d(k)  = th_p(i,k,j) * pi_p(i,k,j)
       tempc   = t1d(k) - 273.16_RKIND
       qvs1d(k) = rslf(p1d(k),t1d(k))
       if(tempc .le. 0._RKIND) qvs1d(k) = rsif(p1d(k),t1d(k))
       qv1d(k) = qv_p(i,k,j)
       relhum(k,i) = qv1d(k) / qvs1d(k)
       relhum(k,i) = relhum(k,i) * 100._RKIND
       if(relhum(k,i)>100.0) then !#LFR-DBG
         print *,"j,i,k,relhum(k,i)=",j,i,k,relhum(k,i)
       end if !#LFR-DBG END
    enddo
    enddo
    enddo
  3. Os resultados mostram que a umidade relativa já está calculada com valores que ficam acima de 100%. Veja o terecho da saída abaixo:
    j,i,k,relhum(k,i)=           1         414           7   108.22993025879157     
    j,i,k,relhum(k,i)=           1         421           8   102.07086516544403     
    j,i,k,relhum(k,i)=           1         421           9   104.01699589642730     
    j,i,k,relhum(k,i)=           1         421          10   105.94951090289177     
    j,i,k,relhum(k,i)=           1         423          12   101.37859763401845     
    j,i,k,relhum(k,i)=           1         423          13   100.97629133995096     
    j,i,k,relhum(k,i)=           1         426          14   100.22614473555791     
    j,i,k,relhum(k,i)=           1         426          15   103.74496950830274     
    j,i,k,relhum(k,i)=           1         427          13   100.13509669238034  
  4. Isto indica que qv_p, vapor de água, saída microfísica, tem valor superior a saturação de vapor vinda de outra função.
  5. Foi enviado e-mail ao Saulo/Paulo Kubota informando a situação
  6. A resposta foi:
    "...mas temos que converter o excesso de umidade em água líquida e/ou gelo e incluir o correspondente aquecimento.
    Assim, a solução é um pouco trabalhosa e precisa de cuidado. Se não, podemos remover espuriamente H2O do modelo.
    Vamos colocar isto como atividade para o grupo do ATM, talvez, Paulo, chamando o Enver para contribuir."

:rotating_light: Problemas encontrados

Apenas um problema de dependência no makefile.

:white_check_mark: Conclusão

Não é um problema de interpolação! Há um erro no cálculo da umidade relativa advinda da relação do valor vindo da microfísica com a saturação de vapor vinda da função de saturação.

:spiral_calendar: Trabalhos Futuros

Deve ser investigado por um pesquisador que entenda da microfísica.