我很新的Fortran,并为我的研究,我需要得到一个模型运行的怪物,所以我学习,因为我一起去。 所以,我很抱歉,如果我问一个“愚蠢”的问题。 我想要编译(Mac OSX上,在命令行),我已经成功地解决了一些东西,但现在我遇到一些我不知道如何解决。 我觉得我得到的错误背后的想法,但同样,不知道如何解决。
该模型是巨大的,所以我将只张贴代码段,我认为是相关的(虽然我可能是错的)。 我有几个子程序一个文件,即开头:
!==========================================================================================!
! This subroutine simply updates the budget variables. !
!------------------------------------------------------------------------------------------!
subroutine update_budget(csite,lsl,ipaa,ipaz)
use ed_state_vars, only : sitetype ! ! structure
implicit none
!----- Arguments -----------------------------------------------------------------------!
type(sitetype) , target :: csite
integer , intent(in) :: lsl
integer , intent(in) :: ipaa
integer , intent(in) :: ipaz
!----- Local variables. ----------------------------------------------------------------!
integer :: ipa
!----- External functions. -------------------------------------------------------------!
real , external :: compute_water_storage
real , external :: compute_energy_storage
real , external :: compute_co2_storage
!---------------------------------------------------------------------------------------!
do ipa=ipaa,ipaz
!------------------------------------------------------------------------------------!
! Computing the storage terms for CO2, energy, and water budgets. !
!------------------------------------------------------------------------------------!
csite%co2budget_initialstorage(ipa) = compute_co2_storage(csite,ipa)
csite%wbudget_initialstorage(ipa) = compute_water_storage(csite,lsl,ipa)
csite%ebudget_initialstorage(ipa) = compute_energy_storage(csite,lsl,ipa)
end do
return
end subroutine update_budget
!==========================================================================================!
!==========================================================================================!
我相处的行错误
budget_utils.f90:20.54:
真实的,外部:: compute_co2_storage 1
错误:伪参数在(1)过程“compute_co2_storage”的“csite”具有需要此过程显式接口的属性
(我收到了一堆他们,但他们基本上所有的相同)。 现在,看着ed_state_vars.f90(这是“拿来主义”在子程序),我发现
!============================================================================!
!============================================================================!
!---------------------------------------------------------------------------!
! Site type:
! The following are the patch level arrays that populate the current site.
!---------------------------------------------------------------------------!
type sitetype
integer :: npatches
! The global index of the first cohort in all patches
integer,pointer,dimension(:) :: paco_id
! The number of cohorts in each patch
integer,pointer,dimension(:) :: paco_n
! Global index of the first patch in this vector, across all patches
! on the grid
integer :: paglob_id
! The patches containing the cohort arrays
type(patchtype),pointer,dimension(:) :: patch
等等等等 - 这又进了另一个500行左右。 于是去了一点,好像原来的子程序需要为它的程序明确的接口,以便能够使用的(虚拟)的说法csite。 同样,我太新的Fortran,但我真的想了解它“认为”。 我一直在寻找这意味着什么有一个明确的接口,当(以及如何!)使用它等,但我无法弄清楚如何将其应用在我的情况。 我应该可能使用不同的编译器(英特尔?)。 任何提示?
编辑:那么csite
被宣布为target
中的所有步骤,并从申报type(site type)
包含了一整套的pointer
S,如在规定sitetype
。 但是sitetype
是被正确use
d从另一个模块( ed_state_vars.f90
中的所有过程)。 因此,我仍然感到困惑,为什么它给了我明确的接口错误?