Фортран - явный интерфейс

Я очень плохо знаком с Фортраном, и для моего исследования мне нужно запустить монстра модели, поэтому я учусь по ходу дела. Поэтому извините, если я задам «глупый» вопрос. Я пытаюсь скомпилировать (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
Ошибка: фиктивный аргумент 'csite' процедуры 'compute_co2_storage' в (1) имеет атрибут, который требует явного интерфейса для этой процедуры

(Я получаю кучу их, но они по сути все одинаковые). Теперь, глядя на 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

И т.д. Итак, чтобы добраться до сути, похоже, что исходной подпрограмме нужен явный интерфейс для своих процедур, чтобы иметь возможность использовать (фиктивный) аргумент csite. Опять же, я так нова для Фортрана, но я действительно пытаюсь понять, как он «думает». Я искал, что значит иметь явный интерфейс, когда (и как!) Его использовать и т. Д. Но я не могу понять, как это применимо в моем случае. Должен ли я использовать другой компилятор (Intel?). Есть намеки?

Редактировать: Итакcsite объявленtarget во всех процедурах и из декларацииtype(site type) содержит целую кучуpointers, как указано вsitetype, Ноsitetype правильноused из другого модуля (ed_state_vars.f90) во всех процедурах. Так что я все еще в замешательстве, почему это дает мне явную ошибку интерфейса?

Ответы на вопрос(2)

Ваш ответ на вопрос