9 use nuopc_mediator,
only: &
11 model_label_advance => label_advance
24 type(esmf_gridcomp) :: mediator
25 integer,
intent(out) :: rc
30 call nuopc_compderive(mediator, model_routine_ss, rc=rc)
31 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
37 call nuopc_compsetentrypoint(mediator, esmf_method_initialize, &
38 phaselabellist=(/
"IPDv00p1"/), userroutine=
initializep1, rc=rc)
39 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
43 call nuopc_compsetentrypoint(mediator, esmf_method_initialize, &
44 phaselabellist=(/
"IPDv00p2"/), userroutine=
initializep2, rc=rc)
45 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
51 call nuopc_compspecialize(mediator, speclabel=model_label_advance, &
53 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
62 subroutine initializep1(mediator, importState, exportState, clock, rc)
63 type(esmf_gridcomp) :: mediator
64 type(esmf_state) :: importState, exportState
65 type(esmf_clock) :: clock
66 integer,
intent(out) :: rc
71 call nuopc_advertise(importstate, &
72 standardname=
"sea_surface_temperature", name=
"sst", rc=rc)
73 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
79 call nuopc_advertise(importstate, &
80 standardname=
"air_pressure_at_sea_level", name=
"pmsl", rc=rc)
81 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
87 call nuopc_advertise(importstate, &
88 standardname=
"surface_net_downward_shortwave_flux", name=
"rsns", rc=rc)
89 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
95 call nuopc_advertise(exportstate, &
96 standardname=
"sea_surface_temperature", name=
"sst", rc=rc)
97 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
103 call nuopc_advertise(exportstate, &
104 standardname=
"air_pressure_at_sea_level", name=
"pmsl", rc=rc)
105 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
111 call nuopc_advertise(exportstate, &
112 standardname=
"surface_net_downward_shortwave_flux", name=
"rsns", rc=rc)
113 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
123 type(esmf_gridcomp) :: mediator
124 type(esmf_state) :: importState, exportState
125 type(esmf_clock) :: clock
126 integer,
intent(out) :: rc
129 type(esmf_field) :: field
130 type(esmf_grid) :: gridIn
131 type(esmf_grid) :: gridOut
136 gridin = esmf_gridcreatenoperidimufrm(maxindex=(/20, 100/), &
137 mincornercoord=(/10._esmf_kind_r8, 20._esmf_kind_r8/), &
138 maxcornercoord=(/100._esmf_kind_r8, 200._esmf_kind_r8/), &
139 coordsys=esmf_coordsys_cart, staggerloclist=(/esmf_staggerloc_center/), &
141 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
148 field = esmf_fieldcreate(name=
"sst", grid=gridin, &
149 typekind=esmf_typekind_r8, rc=rc)
150 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
154 call nuopc_realize(importstate, field=field, rc=rc)
155 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
161 field = esmf_fieldcreate(name=
"pmsl", grid=gridin, &
162 typekind=esmf_typekind_r8, rc=rc)
163 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
167 call nuopc_realize(importstate, field=field, rc=rc)
168 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
174 field = esmf_fieldcreate(name=
"rsns", grid=gridin, &
175 typekind=esmf_typekind_r8, rc=rc)
176 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
180 call nuopc_realize(importstate, field=field, rc=rc)
181 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
187 field = esmf_fieldcreate(name=
"sst", grid=gridout, &
188 typekind=esmf_typekind_r8, rc=rc)
189 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
193 call nuopc_realize(exportstate, field=field, rc=rc)
194 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
200 field = esmf_fieldcreate(name=
"pmsl", grid=gridout, &
201 typekind=esmf_typekind_r8, rc=rc)
202 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
206 call nuopc_realize(exportstate, field=field, rc=rc)
207 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
213 field = esmf_fieldcreate(name=
"rsns", grid=gridout, &
214 typekind=esmf_typekind_r8, rc=rc)
215 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
219 call nuopc_realize(exportstate, field=field, rc=rc)
220 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
230 type(esmf_gridcomp) :: mediator
231 integer,
intent(out) :: rc
234 type(esmf_clock) :: clock
235 type(esmf_state) :: importState, exportState
237 type (ESMF_Field) :: field
238 type(esmf_fieldstatus_flag) :: fieldStatus
239 real(8),
pointer :: sst_im(:,:), pmsl_im(:,:)
240 real(8),
pointer :: sst_ex(:,:), pmsl_ex(:,:)
241 integer :: LB(2), UB(2)
243 logical,
save :: first = .true.
248 call esmf_gridcompget(mediator, clock=clock, importstate=importstate, &
249 exportstate=exportstate, rc=rc)
250 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
269 call esmf_clockprint(clock, options=
"currTime", &
270 prestring=
"-------->MED Advance() mediating for: ", rc=rc)
271 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
276 call esmf_clockprint(clock, options=
"stopTime", &
277 prestring=
"----------------> model time step to: ", rc=rc)
278 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
284 call esmf_stateget(importstate,
"sst", field, rc=rc)
285 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
289 call esmf_fieldget(field, status=fieldstatus, rc=rc)
290 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
294 call esmf_fieldget(field, 0, sst_im, computationallbound=lb, computationalubound=ub, rc=rc)
295 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
300 call esmf_stateget(importstate,
"pmsl", field, rc=rc)
301 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
305 call esmf_fieldget(field, status=fieldstatus, rc=rc)
306 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
310 call esmf_fieldget(field, 0, pmsl_im, computationallbound=lb, computationalubound=ub, rc=rc)
311 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
317 call esmf_stateget(exportstate,
"sst", field, rc=rc)
318 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
322 call esmf_fieldget(field, status=fieldstatus, rc=rc)
323 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
327 call esmf_fieldget(field, 0, sst_ex, computationallbound=lb, computationalubound=ub, rc=rc)
328 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
333 call esmf_stateget(exportstate,
"pmsl", field, rc=rc)
334 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
338 call esmf_fieldget(field, status=fieldstatus, rc=rc)
339 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
343 call esmf_fieldget(field, 0, pmsl_ex, computationallbound=lb, computationalubound=ub, rc=rc)
344 if (esmf_logfounderror(rctocheck=rc, msg=esmf_logerr_passthru, &
354 pmsl_im = pmsl_im + 0.1
355 sst_im = sst_im + 0.1
362 print*,
"MED-DATA sst", sst_ex(lb(1),lb(2)), pmsl_ex(lb(1),lb(2))