Fortran - interface explícita

Eu sou muito novo no Fortran, e para minha pesquisa eu preciso de um monstro de modelo correndo, então estou aprendendo como eu estou indo. Então me desculpe se eu fizer uma pergunta "estúpida". Estou tentando compilar (Mac OSX, a partir da linha de comando) e já consegui resolver algumas coisas, mas agora me deparei com algo que não sei como consertar. Acho que entendi o erro, mas, novamente, não sei como consertar.

O modelo é enorme, então eu só vou postar as seções do código que eu acho que são relevantes (embora eu possa estar errado). Eu tenho um arquivo com várias sub-rotinas, que começa com:

    !==========================================================================================!
!    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
!==========================================================================================!
!==========================================================================================!

Eu recebo mensagens de erro ao longo das linhas de

budget_utils.f90: 20.54:

real, externo :: compute_co2_storage 1
Erro: O argumento fictício 'csite' do procedimento 'compute_co2_storage' em (1) possui um atributo que requer uma interface explícita para este procedimento

(Eu pego um monte deles, mas eles são essencialmente todos iguais). Agora, olhando ed_state_vars.f90 (que é "usado" na sub-rotina), eu acho

!============================================================================!
!============================================================================!
  !---------------------------------------------------------------------------!  
  ! 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

Etc etc - isso vai por um outro 500 linhas ou mais. Então, para chegar ao ponto, parece que a sub-rotina original precisa de uma interface explícita para seus procedimentos, a fim de poder usar o csite argumento (fictício). Mais uma vez, eu sou tão novo para Fortran, mas estou realmente tentando entender como ele "pensa". Eu tenho procurado o que significa ter uma interface explícita, quando (e como!) Usá-la etc. Mas não consigo entender como isso se aplica no meu caso. Devo talvez usar um compilador diferente (Intel?). Alguma dica?

Edit: Entãocsite é declarado umtarget em todos os procedimentos e da declaraçãotype(site type) contém um monte depointers, conforme especificadositetype. Massitetype está sendo propriamenteused de outro módulo (ed_state_vars.f90) em todos os procedimentos. Então eu ainda estou confuso porque me dá o erro de interface explícita?

questionAnswers(2)

yourAnswerToTheQuestion