Skip to content
Snippets Groups Projects
read_spec.f 9.47 KiB
Newer Older
Petra Lasch-Born's avatar
Petra Lasch-Born committed
!*****************************************************************!
!*                                                               *!
!*              4C (FORESEE) Simulation Model                    *!
!*                                                               *!
!*                                                               *!
!*                    Subroutines for:                           *!
!*      readspec:   Read species parameters from file            *!
!*                                                               *!
!*                  Copyright (C) 1996-2018                      *!
!*     Potsdam Institute for Climate Impact Reserach (PIK)       *!
!*          Authors and contributors see AUTHOR file             *!
!*  This file is part of 4C and is licensed under BSD-2-Clause   *!
!*                   See LICENSE file or under:                  *!
!*     http://www.https://opensource.org/licenses/BSD-2-Clause   *!
!*                           Contact:                            *!
!*       https://gitlab.pik-potsdam.de/foresee/4C                *!
!*                                                               *!
!*****************************************************************!

 SUBROUTINE readspec

! input of species data from file

use data_par
use data_simul
use data_species
use data_stand
use data_soil_cn
use data_soil
implicit none
integer i,ios,nowunit
character text
logical ex

nowunit=getunit()
     if (.not.flag_mult8910) then
         print *,' '
         print *,' >>>foresee message: now reading species parameter file...'
     endif

do
  call testfile(specfile(ip),ex)
  if (.not.flag_mult8910) print *,' '
  if(ex .eqv. .false.) cycle
  exit
end do

open(nowunit, FILE=trim(specfile(ip)), ACTION="READ")
do
  read(nowunit,'(A)') text
  if (text .ne. '!') then
    exit
  end if
end do
backspace nowunit

  read(nowunit,*) text, nspecies
  read(nowunit,*) text, nspec_tree
  
  if(.not.allocated(spar)) allocate(spar(nspecies))
  if(.not.allocated(svar)) allocate(svar(nspecies))
  if(.not.allocated(nrspec)) allocate(nrspec(nspecies))
  nrspec = 0

! read intermediate lines
  do
    read(nowunit,'(A)') text
    if (text .ne. '!') then
        exit
    end if
  end do
  backspace nowunit

  do i=1,nspecies
    read(nowunit,*) text,spar(i)%species_name
    if (text .ne. '!') then
 	    svar(i)%daybb      = 0
	    svar(i)%ext_daybb  = 0
	    svar(i)%sum_nTreeA = 0
	    svar(i)%anz_coh    = 0
	    svar(i)%RedN       = -99.0
	    svar(i)%RedNm      = 0.0
	    svar(i)%med_diam   = 0.0
	    svar(i)%dom_height = 0.0
	    svar(i)%drIndAl    = 0.0
	    svar(i)%sumNPP     = 0.0
	    svar(i)%sum_bio    = 0.0
	    svar(i)%sum_lai    = 0.0
	    svar(i)%act_sum_lai= 0.0
	    svar(i)%fol        = 0.0
	    svar(i)%hrt        = 0.0
	    svar(i)%sap        = 0.0
	    svar(i)%frt        = 0.0
	    svar(i)%totsteminc = 0.0
	    svar(i)%totstem_m3 = 0.0
	    svar(i)%sumvsab    = 0.0
        svar(i)%sumvsdead     = 0.0
        svar(i)%sumvsdead_m3 = 0.
	    svar(i)%crown_area = 0.0
	    svar(i)%Ndem       = 0.0
	    svar(i)%basal_area = 0.0
	    svar(i)%sumvsab    = 0.0
    else
        write (*,*) '! *** not enough species in ', specfile(ip), (i-1),' of ', nspecies 
        call errorfile (specfile(ip), 0, nowunit)
        call error_mess(time, 'not enough species in '//specfile(ip), real(i-1))
        exit
    endif
  enddo

! read intermediate lines
  read(nowunit,'(A)') text
  if (text .ne. '!') then
      do
        read(nowunit,'(A)') text
        if (text .eq. '!') then
            do
              read(nowunit,'(A)') text
              if (text .ne. '!') then
                exit
              end if
            end do
            exit
        end if
      end do
  else
    do
      read(nowunit,'(A)') text
      if (text .ne. '!') then
        exit
      end if
    end do
  endif
  backspace nowunit

  read(nowunit,*) text,(spar(i)%species_short_name,i=1,nspecies)  ! read abbreviated names
  read(nowunit,*) text,(spar(i)%max_age,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%yrec,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%stol,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%pfext, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%sigman,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%respcoeff,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%prg,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%prms,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%prmr,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%psf,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%pss,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%psr,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%pcnr,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%ncon_fol,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%ncon_frt,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%ncon_crt,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%ncon_tbc,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%ncon_stem,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%reallo_fol,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%reallo_frt,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%alphac,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%cr_frac,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%prhos,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%pnus,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%pha,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%pha_coeff1,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%pha_coeff2,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%pha_v1,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%pha_v2,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%pha_v3,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%crown_a,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%crown_b,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%crown_c,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%psla_min,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%psla_a,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%phic,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%pnc,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%kCO2_25,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%kO2_25,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%pc_25,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%q10_kCO2,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%q10_kO2,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%q10_pc,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%pb,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%PItmin,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%PItopt,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%PItmax,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%PIa,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%PPtmin,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%PPtopt,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%PPtmax,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%PPa,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%PPb,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%CSTbC,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%CSTbT,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%CSa,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%CSb,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%LTbT,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%LTcrit,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%Lstart,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%Phmodel,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%end_bb,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%fpar_mod,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%ceppot_spec,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%Nresp,i=1,nspecies)
  read(nowunit,*) text,(spar(i)%regflag, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%seedrate, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%seedmass, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%seedsd, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%seeda, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%seedb, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%pheight1, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%pheight2, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%pheight3, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%pdiam1, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%pdiam2, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%pdiam3, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%k_opm_fol , i=1,nspecies)
  read(nowunit,*) text,(spar(i)%k_syn_fol , i=1,nspecies)
  read(nowunit,*) text,(spar(i)%k_opm_frt , i=1,nspecies)
  read(nowunit,*) text,(spar(i)%k_syn_frt , i=1,nspecies)
  read(nowunit,*) text,(spar(i)%k_opm_crt , i=1,nspecies)
  read(nowunit,*) text,(spar(i)%k_syn_crt , i=1,nspecies)
  read(nowunit,*) text,(spar(i)%k_opm_tb  , i=1,nspecies)
  read(nowunit,*) text,(spar(i)%k_syn_tb  , i=1,nspecies)
  read(nowunit,*) text,(spar(i)%k_opm_stem, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%k_syn_stem, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%spec_rl, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%tbase, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%topt, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%bdmax_coef, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%porcrit_coef, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%ph_opt_max, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%ph_opt_min, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%ph_max, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%ph_min, i=1,nspecies)
  read(nowunit,*) text,(spar(i)%v_growth, i=1,nspecies)

ios = 0
call errorfile (specfile(ip), ios, nowunit)

do i=1,nspecies
   spar(i)%cnr_fol  = cpart / (spar(i)%ncon_fol  / 1000.)
   spar(i)%cnr_frt  = cpart / (spar(i)%ncon_frt  / 1000.)
   spar(i)%cnr_crt  = cpart / (spar(i)%ncon_crt  / 1000.)
   spar(i)%cnr_tbc  = cpart / (spar(i)%ncon_tbc  / 1000.)
   spar(i)%cnr_stem = cpart / (spar(i)%ncon_stem / 1000.)
enddo

close(nowunit)

end subroutine  readspec
!------------------------------------------------------------------------