Download SimEnv User Guide - Potsdam Institute for Climate Impact Research

Transcript
15.2.2 Fortran Model
With respect to Example 5.1 the following Fortran code world_f.f could be used to describe the model interfaced to SimEnv. SimEnv modifications are marked in bold.
program world_f
c declare SimEnv interface functions (compile with –I$SE_HOME/inc)
include ‘simenv_mod_f.inc’
integer*4 simenv_sts,simenv_run_int
character*6 simenv_run_char
c declare atmo without dimensions level and time and bios without time
c because they are computed in place and simenv_slice_f is used
real*4
atmo(0:44,0:89)
real*4
bios(0:35,0:89)
integer*4
atmo_g(0:19)
integer*4
bios_g
p1
p2
p3
p4
c
c
c
c
c
=
=
=
=
1.
2.
3.
4.
simenv_sts = simenv_ini_f()
check return code for the model interface functions at least here
if(simenv_sts.ne.0) stop 1
simenv_get_run_f only if necessary:
simenv_sts = simenv_get_run_f(simenv_run_int,simenv_run_char)
simenv_sts = simenv_get_f(‘p1’,p1,p1)
simenv_sts = simenv_get_f(‘p2’,p2,p2)
simenv_sts = simenv_get_f(‘p3’,p3,p3)
simenv_sts = simenv_get_f(‘p4’,p4,p4)
compute dynamics of atmo and bios over space and time,
of atmo_g over time, all dependent on p1,p2,p3,p4
do idecade = 0,19
...
do level= 0,3
simenv_sts = simenv_slice_f(‘atmo’,3,level+1,level+1)
simenv_sts = simenv_slice_f(‘atmo’,4,idecade+1,idecade+1)
simenv_sts = simenv_put_f(‘atmo’,atmo)
enddo
simenv_sts = simenv_slice_f(‘bios’,3,idecade+1,idecade+1)
simenv_sts = simenv_put_f(‘bios’,bios)
enddo
...
simenv_sts = simenv_put_f(‘atmo_g’,atmo_g)
compute dynamics of bios_g
...
simenv_sts = simenv_put_f(‘bios_g’,bios_g)
simenv_sts = simenv_end_f()
end
Example file: world_f.f
Example 15.1
-196-
Model interface for Fortran models – model world_f.f
Multi-Run Simulation Environment SimEnv
User Guide for Version 3.01 (July 10, 2012)