Pular para conteúdo

Resolução de Problemas

A fim de fornecer aos usuários do SCANTEC meios para realizar a investigação de erros que podem ocorrer durante o uso do sistema, nesta página estão elencadas as rotinas que utilizam a instrução STOP, além de uma tabela com os códigos de erro que o SCANTEC utiliza e os códigos correspondentes obtidos a partir do uso do comando echo $? no Shell Bash do Linux. Estas informações podem ser úteis para se identificar possíveis fontes de problemas. Recomenda-se aos usuários a abertura de issues dentro do projeto SCANTEC para que sejam registrados os problemas que podem ser encontrados. Antes de abrir uma nova issue, verifique antes a existência de outras issues com problema semelhantes.

Lista de Possíveis Erros e Fontes de Investigação

As rotinas a seguir fazem uso da instrução STOP. Em geral, os escopos onde esta instrução é utilizada correspondem à verificação da existência de arquivos (e.g., arquivos namelists scantec.conf e scantec.vars), verificação do carregamento de arquivos e testes de alocação de arrays. A forma como o SCANTEC está estruturado, inclui a utilização de subrotinas para realizar a interrupção do programa (vide as subrotinas die0_, die2_ e die4_ na rotina m_inpack.F90), caso algum problema seja encontrado. Porém, atualmente, estas rotinas não são utilizadas em todas as partes do SCANTEC, o que pode tornar o processo de debug um pouco menos objetivo:

  • scan_coreMOD.f90
  • scan_dataMOD.f90
  • scan_ModelPlugin.f90
  • scan_readModel.f90
  • scantec_module.f90
  • varType.f90
  • MathExpress.f90
  • m_inpak90.F90
  • scan_UtilsMOD.f90

Para contornar esse problema, para cada instrução STOP, foram atribuídos valores decimais que podem ser utilizados para mapear as seções do código onde elas ocorrem.

Tabela de Códigos de Erros do SCANTEC

Na tabela a seguir, são relacionados os códigos decimais da instrução STOP das rotinas elecandas na seção anterior 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 uma correspondência entre os códigos, apesar de haver dependência quanto ao compilador, sistema operacional e processador utilizado. Como referência, os códigos foram gerados utilizando-se o Shell 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.

Na imagem a seguir, é apresentado um exemplo de execução do SCANTEC, em que foi gerado o código 99038 a partir de uma instrução STOP (esse código indica que o arquivo scantec.conf não foi encontrado). Imediatamente após a obtenção do código, foi executado o comando echo $?, a partir do qual foi obtido o código 222. Utilizando-se uma calculadora que converte números decimais em hexadecimais, pode-se verificar que o número decimal 99038 corresponde ao número hexadecimal 182DE e que o número decimal 222 corresponde ao número hexadecimal DE (que é o "lowest byte" do número 182DE). Utilizando-se a tabela abaixo, pode-se verificar que a correspondência entre os dois códigos (182DE e DE) indica a "Mensagem ou Motivo: Erro arquivo scantec.conf não encontrado", proveniente da rotina scan_UtilsMOD.f90.

Exemplo Conversão Códigos

De acordo com o exemplo apresentado, utilize a tabela a seguir para encontrar o código STOP emitido pelo SCANTEC e o seu correspondente código emitido pelo comando echo $?. A correspondência é realizada pelos números hexadecimais referentes aos códigos (representados pelos números decimais).

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