GAD-DIMNT-CPTEC / SCANTEC

Sistema Comunitário de Avaliação de modelos Numéricos de Tempo e Clima (SCANTEC)
https://gad-dimnt-cptec.github.io/SCANTEC
Other
3 stars 1 forks source link

Código de erro #4

Closed cfbastarz closed 1 year ago

cfbastarz commented 1 year ago

O @Garcia-INPE identificou que em situações em que o SCANTEC falha, o código de erro do Shell é 0 (indicando sucesso na execução do binário do SCANTEC). É necessário estudar uma forma de incluir códigos de erros para falhas comuns como erro na leitura dos arquivos dos modelos, erro na leitura das tabelas, namelist etc.

cfbastarz commented 1 year ago

Conversando com o @joaogerd, foi discutida a possibilidade de se atribuir valores específicos para as situações em que a instrução STOP ocorre. Para isso, serão verificadas as situações em que há, e.g., falta de arquivos, erro na leitura de namelists etc, e serão atribuídos valores distintos para cada situação, a fim de se evitar que o comando echo $? seja sempre 0. Conversando também com o Luiz Flávio, ele comentou sobre a forma como o MONAN deverá tratar o uso da diretiva STOP (utilizada a partir de uma única rotina), o que deverá ser considerado pelo SCANTEC também. A modificação proposta no escopo dessa issue, deverá ser lançada na versão 2.1.0 do SCANTEC (https://github.com/GAM-DIMNT-CPTEC/SCANTEC/milestone/7).

cfbastarz commented 1 year ago

Levantamento das instruções STOP no código do SCANTEC

As rotinas a seguir fazem uso da instrução STOP (todas sem um código específico). Em geral geral, os escopos onde esta instrução é utilizada, correspondem a verificação de existência de arquivos (eg., namelists), verificação de carregamento de arquivos e testes de alocação de arrays. Na rotina m_inpak.F90, há três subrotinas (die0_, die2_ e die4_) que supostamente deveriam fazer o papel de parar o programa principal, mas não estão sendo chamadas em nenhuma parte do programa. Solcito ao @joaogerd confirmar esta informação.

Contextos em que a instrução STOP está sendo utilizada

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/scan_coreMOD.f90#L133-L137

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/scan_dataMOD.f90#L138-L143

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/scan_ModelPlugin.f90#L190-L206

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/scan_ModelPlugin.f90#L430-L446

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/scan_ModelPlugin.f90#L452-L474

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/scan_ModelPlugin.f90#L480-L490

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/scan_readModel.f90#L121-L133

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/scan_readModel.f90#L332-L350

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/scan_readModel.f90#L356-L378

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/scan_readModel.f90#L382-L394

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/scantec_module.f90#L212-L214

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/scantec_module.f90#L235-L240

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/scantec_module.f90#L262-L267

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/scantec_module.f90#L324-L326

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/varType.f90#L122-L128

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/varType.f90#L139-L165

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/varType.f90#L173-L186

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/varType.f90#L194-L207

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/MathExpress.f90#L259-L263

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/MathExpress.f90#L478-L482

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/MathExpress.f90#L598-L602

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/m_inpak90.F90#L3113-L3116

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/m_inpak90.F90#L3148-L3158

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/03b0d0ca62eaa948729fd6dffb6efe20ad3b8c02/core/m_inpak90.F90#L3113-L3116

Proposta de uma Tabela de Códigos de Erros

Esta tabela deverá ser incluída no manual de uso do SCANTEC para que os usuários tenham mais clareza quanto aos erros e em que parte do código eles podem ocorrer. Na tabela abaixo, são relacionados os códigos decimais da instrução STOP e do comando echo $? com os seus respectivos códigos hexadecimais. Observe que o "lowest byte" do código hexadecimal da instrução STOP é exatamente o código hexadecimal do comando echo $?. Dessa forma pode-se fazer a correspondência, apesar de haver dependência quanto ao compilador, sistema operacional e processador utilizado. Os códigos foram gerados utilizando-se o GNU bash, version 5.2.2(1)-release (x86_64-pc-linux-gnu) do Ubuntu 22.10 (kernel Linux 5.19.0-23-generic), compilador GNU Fortran (Ubuntu 9.5.0-1ubuntu3) 9.5.0 e processador Intel Core i7-4790.

Código STOP (decimal) Código STOP (hexadecimal) Código echo $? (decimal) Código echo $? (hexadecimal) Mensagem ou Motivo Função/Subrotina/Rotina
99000 182B8 184 B8 Erro 'ERROR: Analisys Time Step should be less or equal to Forecast Time Step' rotina scan_coreMOD.f90
99001 182B9 185 B9 Erro carregamento scanVarsConf subrotina data_config em scan_dataMOD.f90
99002 182BA 186 BA Arquivo scantec.table não encontrado rotina scan_ModelPlugin.f90
99003 182BB 187 BB Arquivo de definição do modelo não encontrado rotina scan_ModelPlugin.f90
99004 182BC 188 BC Erro leitura label (i90_label, GDef%DName) rotina scan_ModelPlugin.f90
99005 182BD 189 BD Erro leitura gint (i90_gint, GDef%num) rotina scan_ModelPlugin.f90
99006 182BE 190 BE Erro leitura mapping (i90_gtoken, gdef%mapping) rotina scan_ModelPlugin.f90
99007 182BF 191 BF Erro leitura start_coord (i90_gfloat, gdef%start_coord) rotina scan_ModelPlugin.f90
99008 182C0 192 C0 Erro leitura incr_coord (i90_gfloat, gdef%incr_coord) rotina scan_ModelPlugin.f90
99009 182C1 193 C1 Erro alocação array GDef%coord(GDef%num) rotina scan_ModelPlugin.f90
99010 182C2 194 C2 Erro subrotina GetLinCoords rotina scan_ModelPlugin.f90
99011 182C3 195 C3 Erro alocação array GDef%coord(GDef%num) rotina scan_ModelPlugin.f90
99012 182C4 196 C4 Erro subrotina GetLevelsCoord rotina scan_ModelPlugin.f90
99013 182C5 197 C5 Arquivo de definição do modelo não encontrado rotina scan_readModel.f90
99014 182C6 198 C6 Erro carregamento do arquivo de definição do modelo (i90_LoadF) rotina scan_readModel.f90
99015 182C7 199 C7 Erro leitura label (i90_label) subrotina GetDef em scan_readModel.f90
99016 182C8 200 C8 Erro leitura num (GDef%num) subrotina GetDef em scan_readModel.f90
99017 182C9 201 C9 Erro leitura mapping i90_GToken(GDef%mapping,ierr) subrotina GetDef em scan_readModel.f90
99018 182CA 202 CA Erro leitura start_coord (Gdef%start_coord) subrotina GetDef em scan_readModel.f90
99019 182CB 203 CB Erro leitura incr_coord (Gdef%incr_coord) subrotina GetDef em scan_readModel.f90
99020 182CC 204 CC Erro alocação array GDef%coord(GDef%num) subrotina GetDef em scan_readModel.f90
99021 182CD 205 CD Erro chamada GetLinCoords subrotina GetDef em scan_readModel.f90
99022 182CE 206 CE Erro alocação array GDef%coord(GDef%num) subrotina GetDef em scan_readModel.f90
99023 182CF 207 CF Erro chamada GetLevelsCoord subrotina GetDef em scan_readModel.f90
99024 182D0 208 D0 Erro 'Model Name or Model Type not found!' função getModel_ em scantec_module.f90
99025 182D1 209 D1 Erro 'unknow Experient Name' função getField_ em scantec_module.f90
99026 182D2 2010 D2 Erro 'unknow Experiment Name', função getBitMap_ em scantec_module.f90
99027 182D3 211 D3 Erro 'Dimension not found in' .model função getDimVec_ em scantec_module.f90
99028 182D4 212 D4 Erro 'ERROR: wrong type, should be ofscalartype ' subrotina get0d em varType.f90
99029 182D5 213 D5 Erro 'ERROR: wrong type, should be ofarray1Dtype ' subrotina get1d em varType.f90
99030 182D6 214 D6 Erro 'ERROR: wrong type, should be ofarray1Dtype ' subrotina get2d em varType.f90
99031 182D7 215 D7 Erro 'ERROR: wrong type, should be ofarray1Dtype ' subrotina get3d em varType.f90
99032 182D8 216 D8 Erro 'not initialized' subrotina infix2postfix em MathExpress.f90
99033 182D9 217 D9 Erro 'not initialized' subrotina evalPostFixS_ em MathExpress.f90
99034 182DA 218 DA Erro 'not initialized' subrotina evalPostfixA_ em MathExpress.f90
99035 182DB 219 DB STOP subrotina die0_ em m_inpack.F90
99036 182DC 220 DC STOP subrotina die2_ em m_inpack.F90
99037 182DD 221 DD STOP subrotina die4_ em m_inpack.F90
99038 182DE 222 DE Erro arquivo scantec.conf não encontrado rotina scan_UtilsMOD.f90
cfbastarz commented 1 year ago

Durante os testes com os códigos das diretivas STOP no SCANTEC, foi identificado que a execução do código é interrompido na rotina scan_UtilsMOD.f90 quando o namelist scantec.conf não existe/não é encontrado, embora o código não seja explícito quanto a isso:

https://github.com/GAM-DIMNT-CPTEC/SCANTEC/blob/9ab9d5bca02094185175c3f6d98b93df9c00ddb4/core/scan_UtilsMOD.f90#L185-L211

Para que fique coerente com a proposta desta issue, será adicionado a instrução STOP 99038 para gerar o código de erro 222 no terminal.

Sobre a escolha dos valores no intervalo de 99000 a 99038, foram encontrados exemplos em algumas referências (a seguir) para os quais os valores hexadecimais correspondentes são discerníveis e de fácil identificação.

Referências