Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
FORESEE
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Redmine
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
4C
FORESEE
Commits
a8a11d44
Commit
a8a11d44
authored
6 years ago
by
Petra Lasch-Born
Browse files
Options
Downloads
Patches
Plain Diff
Delete sr_forska.f
parent
c243acb8
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
source_code/version2.2_windows/sr_forska.f
+0
-393
0 additions, 393 deletions
source_code/version2.2_windows/sr_forska.f
with
0 additions
and
393 deletions
source_code/version2.2_windows/sr_forska.f
deleted
100755 → 0
+
0
−
393
View file @
c243acb8
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! Subroutines used only with flag flag_forska
!
! cetbl_4c
! CGTSPE_4c
! CLIMEF_4c
! gsdr_cal
! tmp_mean
! therm
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
SUBROUTINE
CETBL_4c
use
data_effect
use
data_taxa
use
data_simul
use
data_stand
! function declarations
REAL
RAND
! local variables
real
::
PMX
INTEGER
::
I
,
J
,
K
integer
,
dimension
(
17
)
::
nsap
=
0
real
,
dimension
(
17
)
::
amdest
=
0.
,
&
amdest1
=
0.
if
(
flag_light
.eq.
1.
or
.
flag_light
.eq.
2
)
then
PMX
=
Vstruct
(
lowest_layer
)
%
Irel
else
if
(
flag_light
.eq.
3.
OR
.
flag_light
.EQ.
4
)
then
PMX
=
Bgpool
(
lowest_layer
+1
)
end
if
! amend the EST for climate according to the climate multipliers
do
i
=
1
,
17
AMDEST
(
I
)
=
EST
(
I
)
*
GDDMX
(
I
)
*
DRMX
(
I
)
*
TCMX
(
I
)
*
TWMX
(
I
)
*
PMX
&
*
XTFTMX
(
I
)
*
TWARMX
(
I
)
AMDEST1
(
I
)
=
EST
(
I
)
*
AMIN1
(
GDDMX
(
I
),
DRMX
(
I
),
TCMX
(
I
),
TWMX
(
I
),
&
PMX
,
XTFTMX
(
I
),
TWARMX
(
I
))
IF
(
GSC
(
I
)
.EQ.
0.0
)
GOTO
301
301
CONTINUE
end
do
RETURN
END
subroutine
cetbl_4c
SUBROUTINE
CGTSPE_4c
! input of species data for regeneration
! reads species parameters
use
data_simul
use
data_taxa
! local variables
INTEGER
::
I
,
J
,
K
,
nowunit
,
ntax
! reads number of taxa (NTAX)
nowunit
=
getunit
()
open
(
unit
=
nowunit
,
file
=
'/data/safe/4C/4C_input/par/param_4c.dat'
,
status
=
'old'
)
READ
(
nowunit
,
*
)
NTAX
! reads for each taxon:
! NAM(I): name (8 characters)
! HMX(I): max height (m)
! HDS(I): initial slope of diameter vs height (m/cm)
! hgro(I): maximum height growth per year (m)
! ALP(I): half-saturation point (umol/m**2/s)
! LCP(I): compensation point (umol/m**2/s)
! GSC(I): growth constant (cm**2/m/yr)
! EST(I): sapling establishment rate (/ha/yr)
! TDI(I): threshold relative growth efficiency for increased mortality
! UMN(I): intrinsic mortality rate (/yr)
! UMX(I): suppressed mortality rate (/yr)
! SPR(I): number of sprouts per tree (0.0 or greater)
! SMN(I): minimum diameter for sprouting (cm)
! LAC(I): initial leaf area/D2 ratio (m**2/cm**2)
! LAF(I): sapwood turnover rate (/yr)
! BCF(I): stemwood biomass conversion factor (kg/cm**2/m)
! R(I): volumetric sapwood maintenance cost (/yr)
! Q10(I): rate of increase of respiration
! TMIN(I): minimum temperature for assimilation
! TMAX(I): maximum temperature for assimilation
! CCP(I): species compensation point
! DRI(I): maximum tolerated drought-index
!MINGDD(I): minimum growing degree-days
! MINTC(I): minimum temperature of coldest month (degrees C)
! MAXTC(I): maximum temperature of coldest month (degrees C)
! MINTW(I): minimum temperature of warmest month (degrees C)
! DORE(I): deciduous or evergreen 0=deciduous,1=evergreen
! ntc(I): nitrogen tolerance class (1,2,3,4,5)
! e1(I): Parameter smin of haadee height growth function
! e2(I): Second Parameter of haadee height growth function
! geff(I): growth efficiency factor of shaded trees
DO
I
=
1
,
ntax
READ
(
nowunit
,
1
)
NAM
(
I
)
READ
(
nowunit
,
*
)
HMX
(
I
),
HDS
(
I
),
hgro
(
I
),
ALP
(
I
),
LCP
(
I
),
GSC
(
I
),
&
EST
(
I
),
TDI
(
I
),
UMN
(
I
),
UMX
(
I
),
SPR
(
I
),
SMN
(
I
),
LAC
(
I
),
LAF
(
I
),
BCF
(
I
),
&
R
(
I
),
Q10
(
I
),
TMIN
(
I
),
TMAX
(
I
),
CCP
(
I
),
DRI
(
I
),
MINGDD
(
I
),
MINTC
(
I
),
&
MAXTC
(
I
),
MINTW
(
I
),
DORE
(
I
),
ntc
(
I
)
IF
(
SPR
(
I
)
.EQ.
0
)
SMN
(
I
)
=
0.0
DRI
(
I
)
=
DRI
(
I
)
+0.3
end
do
RETURN
! format statements
1
FORMAT
(
A8
)
END
subroutine
cgtspe_4c
SUBROUTINE
CLIMEF_4c
use
data_taxa
use
data_effect
use
data_simul
! computes the growth multipliers.
! checks to see if GDD, temp coldest month below minimum for species
! if so multipliers = 0 else equals 1.
! computes drought effect multipliers as per ICP
! sets max.temp of coldest month multiplier to 0 or 1 for ESTBL routine
! checks if warmest month exceeds species limit
! averages light intensity (INS) over time step.
! local parameters
INTEGER
::
I
,
J
,
K
REAL
::
TOTGDD
=
0
,
&
TGSDRT
=
0.
,
&
TM4DRT
=
0.
real
,
dimension
(
17
)
::
tottft
=
0.
! gives growth multiplier for each species to be applied in subroutine
! TVXT or ETBL - growing degree days, growing/-4 drought index, temps.
TOTGDD
=
GDD
(
time
)
TGSDRT
=
GSDRI
(
time
)
TM4DRT
=
M4DRI
(
time
)
! totals and then averages species specific multipliers etc. over timestep
! that is sapres, mutmx, tftmx
do
i
=
1
,
17
xtftmx
(
i
)
=
tftmx
(
i
,
time
)
end
do
! set multipliers to 1 before checking on environment
do
i
=
1
,
17
GDDMX
(
I
)
=
1.0
TWARMX
(
I
)
=
1.0
TCMX
(
I
)
=
1.0
TWMX
(
I
)
=
1.0
TWARMX
(
I
)
=
1.0
! check to see is a deciduous species
IF
(
DORE
(
I
)
.EQ.
0
)
THEN
DRMX
(
I
)
=
1
-
((
TGSDRT
/
DRI
(
I
))
**
2
)
IF
(
DRMX
(
I
)
.LT.
0.0
)
DRMX
(
I
)
=
0.0
ELSE
! must be an evergreen
DRMX
(
I
)
=
1
-
((
TM4DRT
/
DRI
(
I
))
**
2
)
IF
(
DRMX
(
I
)
.LT.
0.0
)
DRMX
(
I
)
=
0.0
ENDIF
! check if environment exceeds species limits - step functions
! if so set multiplier to zero
IF
(
TOTGDD
.LT.
MINGDD
(
I
))
GDDMX
(
I
)
=
0.0
IF
(
TCOLD
.LT.
MINTC
(
I
))
TCMX
(
I
)
=
0.0
IF
(
TCOLD
.GT.
MAXTC
(
I
))
TWMX
(
I
)
=
0.0
IF
(
TWARM
.LT.
MINTW
(
I
))
TWARMX
(
I
)
=
0.0
! write out to screen and forcli.out multipliers for each species
! keep these commented as they use a lot of paper <--M.B was ist damit gemeint? ist das relevant fr den nutzer.
end
do
do
i
=
1
,
17
end
do
end
subroutine
climef_4c
SUBROUTINE
gsdr_cal
! calculation of gsdri and m4dri for FORSKA regeneration
use
data_climate
use
data_effect
use
data_simul
use
data_evapo
if
(
tp
(
iday
,
time
)
.ge.
-4.
)
then
foudpt
=
foudpt
+
pet
foudae
=
foudae
+
aet
end
if
if
(
tp
(
iday
,
time
)
.ge.
4.
)
then
tgsdpt
=
tgsdpt
+
pet
tgsdae
=
tgsdae
+
aet
end
if
if
(
iday
.eq.
recs
(
time
))
then
gsdri
(
time
)
=
(
tgsdpt
-
tgsdae
)/
tgsdpt
m4dri
(
time
)
=
(
foudpt
-
foudae
)/
foudpt
end
if
END
SUBROUTINE
gsdr_cal
SUBROUTINE
tmp_mean
! calculation of environmental variables twarm, tcold and long-term monthly
! mean of temperature
USE
data_effect
USE
data_climate
USE
data_simul
real
,
dimension
(
12
)
::
tmph
=
0.
integer
::
i
,
l
,
m
,
dayc
allocate
(
tpmean
(
12
))
allocate
(
gdd
(
year
))
allocate
(
tftmx
(
17
,
year
))
monrec
=
(/
31
,
28
,
31
,
30
,
31
,
30
,
31
,
31
,
30
,
31
,
30
,
31
/)
tpmean
=
0
if
(
recs
(
time
)
.eq.
366
)
then
monrec
(
2
)
=
29
else
monrec
(
2
)
=
28
endif
do
k
=
1
,
year
! call calculation of env. variables
call
therm
(
k
)
dayc
=
1
do
l
=
1
,
12
tmph
(
l
)
=
0.
do
m
=
1
,
monrec
(
l
)
tmph
(
l
)
=
tmph
(
l
)
+
tp
(
dayc
,
k
)
dayc
=
dayc
+
1
end
do
tmph
(
l
)
=
tmph
(
l
)/
monrec
(
l
)
tpmean
(
l
)
=
tpmean
(
l
)
+
tmph
(
l
)
end
do
end
do
do
l
=
1
,
12
tpmean
(
l
)
=
tpmean
(
l
)/
year
end
do
! work out which is temperature of coldest month
! and warmest month for year
tcold
=
50.0
twarm
=
-50.0
do
k
=
1
,
12
if
(
tpmean
(
k
)
.lt.
tcold
)
tcold
=
tpmean
(
k
)
if
(
tpmean
(
k
)
.gt.
twarm
)
twarm
=
tpmean
(
k
)
end
do
END
SUBROUTINE
tmp_mean
SUBROUTINE
therm
(
ktime
)
! therm - calculation of environmental variables (annual and species specific)
! gdd - growing degress day
! tftmx - thermal multiplier - species specific
use
data_climate
use
data_simul
use
data_effect
use
data_taxa
implicit
none
! local variables
integer
::
j
,
k
,
m4day
,
gdday1
,
ktime
real
,
dimension
(
17
)
::
tft
,
tresft
gdd
(
ktime
)
=
0.
m4day
=
0
gdday1
=
0
do
j
=
1
,
17
tft
(
j
)
=
0.0
tresft
(
j
)
=
0.0
end
do
! calculate ft values for each day of the year
! for each species upto number of taxa
do
k
=
1
,
17
do
j
=
1
,
recs
(
ktime
)
! add up mutmx multiplier
tresft
(
k
)
=
tresft
(
k
)
+
(
q10
(
k
)
**
((
tp
(
j
,
ktime
)
-
tref
)
*
0.1
))
if
(
k
.eq.
1
)
then
if
(
tp
(
j
,
ktime
)
.ge.
tref
)
gdd
(
ktime
)
=
gdd
(
ktime
)
+
(
tp
(
j
,
ktime
)
-
tref
)
end
if
! first check to see if deciduous or not
if
(
dore
(
k
)
.eq.
0
)
then
! totalling daily deciduous multipliers for growing season only
if
(
tp
(
j
,
ktime
)
.ge.
5.0
)
then
tft
(
k
)
=
tft
(
k
)
+
(
4
*
(
tp
(
j
,
ktime
)
-
tmin
(
k
))
*
(
tmax
(
k
)
-
tp
(
j
,
ktime
))/(
tmin
(
k
)
-
tmax
(
k
))
**
2
)
endif
else
! must be evergreen so produce daily values
! do not allow below zero
! checks for temperature greater than -4 oC for evergreen species
if
(
tp
(
j
,
ktime
)
.ge.
-4.0
)
then
tft
(
k
)
=
tft
(
k
)
+
(
4
*
((
tp
(
j
,
ktime
)
-
tmin
(
k
))
*
(
tmax
(
k
)
-
tp
(
j
,
ktime
)))
&
/(
tmin
(
k
)
-
tmax
(
k
))
**
2
)
endif
endif
if
(
tft
(
k
)
.lt.
0.0
)
tft
(
k
)
=
0.0
end
do
end
do
do
j
=
1
,
recs
(
ktime
)
if
(
tp
(
j
,
ktime
)
.ge.
5.0
)
then
gdday1
=
gdday1
+1
end
if
if
(
tp
(
j
,
ktime
)
.ge.
-4.0
)
then
m4day
=
m4day
+1
end
if
end
do
do
k
=
1
,
17
if
(
dore
(
k
)
.eq.
0
)
then
tftmx
(
k
,
ktime
)
=
tft
(
k
)/
gdday1
else
tftmx
(
k
,
ktime
)
=
tft
(
k
)/
m4day
end
if
end
do
END
SUBROUTINE
therm
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment