monanadmin / MONAN-Model

MONAN - Model for Ocean-laNd-Atmosphere PredictioN
Other
9 stars 26 forks source link

Bug - Monan 0.5.0 #6

Open joaomas opened 5 months ago

joaomas commented 5 months ago

Bug Report @luflarois

//

A rotina mpas_isobaric_diagnostics.F tem no seu início:

fortran ! Copyright (c) 2016, Los Alamos National Security, LLC (LANS) ! and the University Corporation for Atmospheric Research (UCAR). ! ! Unless noted otherwise source code is licensed under the BSD license. ! Additional copyright and license information can be found in the LICENSE file ! distributed with this code, or at http://mpas-dev.github.com/license.html ! module mpas_isobaric_diagnostics

use mpas_dmpar
use mpas_kind_types
use mpas_derived_types
use mpas_pool_routines
use mpas_constants
use mpas_log, only : mpas_log_write
use VerticalInterpolation, only : VerticalInterpolation_ZGEO

Vemos que essa rotina depende da "VerticalInterpolation", que é parte de mpas_vertical_interpolation.F Logo há uma dependência explícita entre os dois fontes. Se a ordem de compilação não compilar mpas_vertical_interpolation.F antes vai haver um erro por falta do objeto.

Desta forma, o correto pelo padrão Fortran com o Makefile é tornar explícita a dependência. Pode ser que algum compilador "resolva" criando e resolvendo a dependência. A versão minha, GNU Fortran (GCC) 14.1.1 20240507 + a versão do GNU Make 4.4.1 não soluciona isso.

Daí a necessidade do Makefile estra com a dependência explícita. Mostrada abaixo:

makefile SUFFIXES: .F .o

#

Add new diagnostic modules to DIAGNOSTIC_MODULES

# DIAGNOSTIC_MODULES = \ mpas_atm_diagnostic_template.o \ mpas_isobaric_diagnostics.o \ mpas_cloud_diagnostics.o \ mpas_convective_diagnostics.o \ mpas_pv_diagnostics.o \ mpas_soundings.o \ mpas_vertical_interpolation.o \

mpas_isobaric_diagnostics.o: mpas_atm_diagnostics_utils.o mpas_vertical_interpolation.o

E aproveito para dizer, se é que todos lembram, a razão de eu estar tentando usar o FPM. Ele toma conta sozinho das dependências para justamente evitar isso. Eu acredito que devemos manter padronização caso continuemos a usar o make para construir o modelo. E a padronização pede dependência explícita no makefile.

joaomas commented 5 months ago

egeon-login1: ~ $ gfortran --version GNU Fortran (GCC) 9.4.0 Copyright (C) 2019 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

egeon-login1: ~ $ gmake --version GNU Make 4.2.1 Built for x86_64-redhat-linux-gnu Copyright (C) 1988-2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later http://gnu.org/licenses/gpl.html This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.