11 model_label_setclock => label_setclock, &
12 model_label_advance => label_advance
25 type(esmf_gridcomp) ::
model
26 integer,
intent(out) :: rc
31 call nuopc_compderive(
model, model_routine_ss, rc=rc)
32 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
38 call nuopc_compsetentrypoint(
model, esmf_method_initialize, &
39 phaselabellist=(/
"IPDv00p1"/), userroutine=
initializep1, rc=rc)
40 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
44 call nuopc_compsetentrypoint(
model, esmf_method_initialize, &
45 phaselabellist=(/
"IPDv00p2"/), userroutine=
initializep2, rc=rc)
46 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
52 call nuopc_compspecialize(
model, speclabel=model_label_setclock, &
54 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
58 call nuopc_compspecialize(
model, speclabel=model_label_advance, &
60 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
69 subroutine initializep1(model, importState, exportState, clock, rc)
70 type(esmf_gridcomp) :: model
71 type(esmf_state) :: importState, exportState
72 type(esmf_clock) :: clock
73 integer,
intent(out) :: rc
78 call nuopc_advertise(importstate, &
79 standardname=
"air_pressure_at_sea_level", name=
"pmsl", rc=rc)
80 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
86 call nuopc_advertise(importstate, &
87 standardname=
"surface_net_downward_shortwave_flux", name=
"rsns", rc=rc)
88 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
94 call nuopc_advertise(exportstate, &
95 standardname=
"sea_surface_temperature", name=
"sst", rc=rc)
96 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
106 type(esmf_gridcomp) :: model
107 type(esmf_state) :: importState, exportState
108 type(esmf_clock) :: clock
109 integer,
intent(out) :: rc
112 type(esmf_timeinterval) :: stabilityTimeStep
113 type(esmf_field) :: field
114 type(esmf_grid) :: gridIn
115 type(esmf_grid) :: gridOut
120 gridin = esmf_gridcreatenoperidimufrm(maxindex=(/20, 100/), &
121 mincornercoord=(/10._esmf_kind_r8, 20._esmf_kind_r8/), &
122 maxcornercoord=(/100._esmf_kind_r8, 200._esmf_kind_r8/), &
123 coordsys=esmf_coordsys_cart, staggerloclist=(/esmf_staggerloc_center/), &
125 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
132 field = esmf_fieldcreate(name=
"pmsl", grid=gridin, &
133 typekind=esmf_typekind_r8, rc=rc)
134 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
138 call nuopc_realize(importstate, field=field, rc=rc)
139 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
145 field = esmf_fieldcreate(name=
"rsns", grid=gridin, &
146 typekind=esmf_typekind_r8, rc=rc)
147 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
151 call nuopc_realize(importstate, field=field, rc=rc)
152 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
158 field = esmf_fieldcreate(name=
"sst", grid=gridout, &
159 typekind=esmf_typekind_r8, rc=rc)
160 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
164 call nuopc_realize(exportstate, field=field, rc=rc)
165 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
175 type(esmf_gridcomp) :: model
176 integer,
intent(out) :: rc
179 type(esmf_clock) :: clock
180 type(esmf_timeinterval) :: stabilityTimeStep
185 call nuopc_modelget(
model, modelclock=clock, rc=rc)
186 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
195 call esmf_timeintervalset(stabilitytimestep, m=15, rc=rc)
196 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
200 call nuopc_compsetclock(
model, clock, stabilitytimestep, rc=rc)
201 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
211 type(esmf_gridcomp) :: model
212 integer,
intent(out) :: rc
215 type(esmf_clock) :: clock
216 type(esmf_state) :: importState, exportState
217 type(esmf_time) :: currTime
218 type(esmf_timeinterval) :: timeStep
220 type (ESMF_Field) :: field
221 type(esmf_fieldstatus_flag) :: fieldStatus
222 real(8),
pointer :: sst(:,:)
223 real(8),
pointer :: pmsl(:,:)
225 integer,
save :: init = 0
226 integer :: LB(2), UB(2)
231 call nuopc_modelget(
model, modelclock=clock, importstate=importstate, &
232 exportstate=exportstate, rc=rc)
233 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
247 call esmf_clockprint(clock, options=
"currTime", &
248 prestring=
"------>Advancing OCN from: ", rc=rc)
249 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
254 call esmf_clockget(clock, currtime=currtime, timestep=timestep, rc=rc)
255 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
260 call esmf_timeprint(currtime + timestep, &
261 prestring=
"--------------------------------> to: ", rc=rc)
262 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
271 call esmf_stateget(importstate,
"pmsl", field, rc=rc)
272 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
276 call esmf_fieldget(field, status=fieldstatus, rc=rc)
277 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
281 call esmf_fieldget(field, 0, pmsl, computationallbound=lb, computationalubound=ub, rc=rc)
282 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
288 call esmf_stateget(exportstate,
"sst", field, rc=rc)
289 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
293 call esmf_fieldget(field, status=fieldstatus, rc=rc)
294 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
298 call esmf_fieldget(field, 0, sst, computationallbound=lb, computationalubound=ub, rc=rc)
299 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
306 print*,
"OCN-DATA sst", sst(lb(1),lb(2)), pmsl(lb(1),lb(2))