FE-Project
Loading...
Searching...
No Matches
mod_experiment.F90
Go to the documentation of this file.
1!-------------------------------------------------------------------------------
2#include "scaleFElib.h"
4 !-----------------------------------------------------------------------------
5 !
6 !++ Used modules
7 !
8 use scale_precision
9 use scale_io
10 use scale_prc
11
12 use scale_const, only: &
13 pi => const_pi, &
14 grav => const_grav, &
15 rdry => const_rdry, &
16 cpdry => const_cpdry, &
17 cvdry => const_cvdry, &
18 pres00 => const_pre00
19
32
33 !-----------------------------------------------------------------------------
34 implicit none
35 private
36 !-----------------------------------------------------------------------------
37 !
38 !++ Public type & procedures
39 !
40
41 type, public :: experiment
42 character(len=H_SHORT) :: label
43 procedure(exp_setinitcond_lc), pointer :: setinitcond_lc => null()
44 procedure(exp_setinitcond_lc_ocn), pointer :: setinitcond_lc_ocn => null()
45 procedure(exp_geostrophic_balance_correction_lc), pointer :: geostrophic_balance_correction_lc => null()
46 contains
47 procedure, public :: init_base => experiment_init
48 generic :: init => init_base
49 procedure, public :: final_base => experiment_final
50 generic :: final => final_base
51 procedure, public :: setinitcond => experiment_setinitcond
52 procedure, public :: setinitcond_ocn => experiment_setinitcond_ocn
53 procedure, public :: regist_setinitcond => experiment_regist_set_initcond
54 procedure, public :: regist_setinitcond_ocn => experiment_regist_set_initcond_ocn
55 procedure, public :: regist_geostrophic_balance_correction => experiment_regist_geostrophic_balance_correction
56 end type experiment
57
59 class(localmeshfieldbase), pointer :: ptr
60 end type
61
62 interface
63 subroutine exp_setinitcond_lc( &
64 this, DENS_hyd, PRES_hyd, DDENS, MOMX, MOMY, MOMZ, DRHOT, &
65 tracer_field_list, &
66 x, y, z, dom_xmin, dom_xmax, dom_ymin, dom_ymax, dom_zmin, &
67 dom_zmax, lcmesh, elem )
68
69 import experiment
70 import localmesh3d
71 import elementbase3d
73 import rp
74
75 class(experiment), intent(inout) :: this
76 type(localmesh3d), intent(in) :: lcmesh
77 class(elementbase3d), intent(in) :: elem
78 real(RP), intent(out) :: DENS_hyd(elem%Np,lcmesh%NeA)
79 real(RP), intent(out) :: PRES_hyd(elem%Np,lcmesh%NeA)
80 real(RP), intent(out) :: DDENS(elem%Np,lcmesh%NeA)
81 real(RP), intent(out) :: MOMX(elem%Np,lcmesh%NeA)
82 real(RP), intent(out) :: MOMY(elem%Np,lcmesh%NeA)
83 real(RP), intent(out) :: MOMZ(elem%Np,lcmesh%NeA)
84 real(RP), intent(out) :: DRHOT(elem%Np,lcmesh%NeA)
85 type(tracerlocalmeshfield_ptr), intent(inout) :: tracer_field_list(:)
86 real(RP), intent(in) :: x(elem%Np,lcmesh%Ne)
87 real(RP), intent(in) :: y(elem%Np,lcmesh%Ne)
88 real(RP), intent(in) :: z(elem%Np,lcmesh%Ne)
89 real(RP), intent(in) :: dom_xmin, dom_xmax
90 real(RP), intent(in) :: dom_ymin, dom_ymax
91 real(RP), intent(in) :: dom_zmin, dom_zmax
92 end subroutine exp_setinitcond_lc
93
94 subroutine exp_geostrophic_balance_correction_lc( this, &
95 DENS_hyd, PRES_hyd, DDENS, MOMX, MOMY, MOMZ, DRHOT, &
96 lcmesh, elem )
97
98 import experiment
99 import localmesh3d
100 import elementbase3d
101 import rp
102
103 class(experiment), intent(inout) :: this
104 type(localmesh3d), intent(in) :: lcmesh
105 class(elementbase3d), intent(in) :: elem
106 real(RP), intent(inout) :: DENS_hyd(elem%Np,lcmesh%NeA)
107 real(RP), intent(in) :: PRES_hyd(elem%Np,lcmesh%NeA)
108 real(RP), intent(inout) :: DDENS(elem%Np,lcmesh%NeA)
109 real(RP), intent(inout) :: MOMX(elem%Np,lcmesh%NeA)
110 real(RP), intent(inout) :: MOMY(elem%Np,lcmesh%NeA)
111 real(RP), intent(inout) :: MOMZ(elem%Np,lcmesh%NeA)
112 real(RP), intent(inout) :: DRHOT(elem%Np,lcmesh%NeA)
113 end subroutine exp_geostrophic_balance_correction_lc
114
115 subroutine exp_setinitcond_lc_ocn( &
116 this, U, V, W, TEMP, SALT, &
117 SFC_TEMP, &
118 SFC_ALB_IR_dir, SFC_ALB_IR_dif, SFC_ALB_NIR_dir, SFC_ALB_NIR_dif, &
119 SFC_ALB_VIS_dir, SFC_ALB_VIS_dif, &
120 x, y, z, dom_xmin, dom_xmax, dom_ymin, dom_ymax, dom_zmin, &
121 dom_zmax, lcmesh, elem, lcmesh2D, elem2D )
122
123 import experiment
124 import localmesh3d
125 import elementbase3d
126 import localmesh2d
127 import elementbase2d
129 import rp
130
131 class(experiment), intent(inout) :: this
132 type(localmesh3d), intent(in) :: lcmesh
133 class(elementbase3d), intent(in) :: elem
134 type(localmesh2d), intent(in) :: lcmesh2D
135 class(elementbase2d), intent(in) :: elem2D
136 real(RP), intent(out) :: U(elem%Np,lcmesh%NeA)
137 real(RP), intent(out) :: V(elem%Np,lcmesh%NeA)
138 real(RP), intent(out) :: W(elem%Np,lcmesh%NeA)
139 real(RP), intent(out) :: TEMP(elem%Np,lcmesh%NeA)
140 real(RP), intent(out) :: SALT(elem%Np,lcmesh%NeA)
141 real(RP), intent(out) :: SFC_TEMP(elem2D%Np,lcmesh2D%NeA)
142 real(RP), intent(out) :: SFC_ALB_IR_dir(elem2D%Np,lcmesh2D%NeA)
143 real(RP), intent(out) :: SFC_ALB_IR_dif(elem2D%Np,lcmesh2D%NeA)
144 real(RP), intent(out) :: SFC_ALB_NIR_dir(elem2D%Np,lcmesh2D%NeA)
145 real(RP), intent(out) :: SFC_ALB_NIR_dif(elem2D%Np,lcmesh2D%NeA)
146 real(RP), intent(out) :: SFC_ALB_VIS_dir(elem2D%Np,lcmesh2D%NeA)
147 real(RP), intent(out) :: SFC_ALB_VIS_dif(elem2D%Np,lcmesh2D%NeA)
148 real(RP), intent(in) :: x(elem%Np,lcmesh%Ne)
149 real(RP), intent(in) :: y(elem%Np,lcmesh%Ne)
150 real(RP), intent(in) :: z(elem%Np,lcmesh%Ne)
151 real(RP), intent(in) :: dom_xmin, dom_xmax
152 real(RP), intent(in) :: dom_ymin, dom_ymax
153 real(RP), intent(in) :: dom_zmin, dom_zmax
154 end subroutine exp_setinitcond_lc_ocn
155 end interface
156
157 !-----------------------------------------------------------------------------
158 !
159 !++ Public parameters & variables
160 !
161
162 !-----------------------------------------------------------------------------
163 !
164 !++ Private procedures
165 !
166 !-------------------
167
168 !-----------------------------------------------------------------------------
169 !
170 !++ Private parameters & variables
171 !
172
173contains
174 subroutine experiment_init( this, exp_name )
175 implicit none
176 class(experiment), intent(inout) :: this
177 character(len=*), intent(in) :: exp_name
178 !----------------------------------------------------------------------
179
180 this%label = exp_name
181
182 this%setInitCond_lc => experiment_setinitcond_lc_dummy
183 this%setInitCond_lc_ocn => experiment_setinitcond_lc_ocn_dummy
184 this%geostrophic_balance_correction_lc => experiment_geostrophic_balance_correction_lc_dummy
185
186 return
187 end subroutine experiment_init
188
189 subroutine experiment_final( this )
190 implicit none
191 class(experiment), intent(inout) :: this
192 !----------------------------------------------------------------------
193
194 return
195 end subroutine experiment_final
196
197 subroutine experiment_regist_set_initcond( this, exp_SetInitCond_lc )
198 implicit none
199 class(experiment), intent(inout) :: this
200 interface
201 subroutine exp_setinitcond_lc( &
202 this, &
203 DENS_hyd, PRES_hyd, DDENS, MOMX, MOMY, MOMZ, DRHOT, &
204 tracer_field_list, &
205 x, y, z, dom_xmin, dom_xmax, dom_ymin, dom_ymax, dom_zmin, &
206 dom_zmax, lcmesh, elem )
207
208 import experiment
209 import localmesh3d
210 import elementbase3d
212 import rp
213
214 class(experiment), intent(inout) :: this
215 type(localmesh3d), intent(in) :: lcmesh
216 class(elementbase3d), intent(in) :: elem
217 real(RP), intent(out) :: DENS_hyd(elem%Np,lcmesh%NeA)
218 real(RP), intent(out) :: PRES_hyd(elem%Np,lcmesh%NeA)
219 real(RP), intent(out) :: DDENS(elem%Np,lcmesh%NeA)
220 real(RP), intent(out) :: MOMX(elem%Np,lcmesh%NeA)
221 real(RP), intent(out) :: MOMY(elem%Np,lcmesh%NeA)
222 real(RP), intent(out) :: MOMZ(elem%Np,lcmesh%NeA)
223 real(RP), intent(out) :: DRHOT(elem%Np,lcmesh%NeA)
224 type(tracerlocalmeshfield_ptr), intent(inout) :: tracer_field_list(:)
225 real(RP), intent(in) :: x(elem%Np,lcmesh%Ne)
226 real(RP), intent(in) :: y(elem%Np,lcmesh%Ne)
227 real(RP), intent(in) :: z(elem%Np,lcmesh%Ne)
228 real(RP), intent(in) :: dom_xmin, dom_xmax
229 real(RP), intent(in) :: dom_ymin, dom_ymax
230 real(RP), intent(in) :: dom_zmin, dom_zmax
231 end subroutine exp_setinitcond_lc
232 end interface
233 !----------------------------------------------------------------------
234
235 this%setInitCond_lc => exp_setinitcond_lc
236 return
237 end subroutine experiment_regist_set_initcond
238
239 subroutine experiment_regist_set_initcond_ocn( this, exp_SetInitCond_lc_ocn )
240 implicit none
241 class(experiment), intent(inout) :: this
242 interface
243 subroutine exp_setinitcond_lc_ocn( &
244 this, U, V, W, TEMP, SALT, &
245 SFC_TEMP, &
246 SFC_ALB_IR_dir, SFC_ALB_IR_dif, SFC_ALB_NIR_dir, SFC_ALB_NIR_dif, &
247 SFC_ALB_VIS_dir, SFC_ALB_VIS_dif, &
248 x, y, z, dom_xmin, dom_xmax, dom_ymin, dom_ymax, dom_zmin, &
249 dom_zmax, lcmesh, elem, lcmesh2D, elem2D )
250
251 import experiment
252 import localmesh3d
253 import elementbase3d
254 import localmesh2d
255 import elementbase2d
256 import rp
257
258 class(experiment), intent(inout) :: this
259 type(localmesh3d), intent(in) :: lcmesh
260 class(elementbase3d), intent(in) :: elem
261 type(localmesh2d), intent(in) :: lcmesh2D
262 class(elementbase2d), intent(in) :: elem2D
263 real(RP), intent(out) :: U(elem%Np,lcmesh%NeA)
264 real(RP), intent(out) :: V(elem%Np,lcmesh%NeA)
265 real(RP), intent(out) :: W(elem%Np,lcmesh%NeA)
266 real(RP), intent(out) :: TEMP(elem%Np,lcmesh%NeA)
267 real(RP), intent(out) :: SALT(elem%Np,lcmesh%NeA)
268 real(RP), intent(out) :: SFC_TEMP(elem2D%Np,lcmesh2D%NeA)
269 real(RP), intent(out) :: SFC_ALB_IR_dir(elem2D%Np,lcmesh2D%NeA)
270 real(RP), intent(out) :: SFC_ALB_IR_dif(elem2D%Np,lcmesh2D%NeA)
271 real(RP), intent(out) :: SFC_ALB_NIR_dir(elem2D%Np,lcmesh2D%NeA)
272 real(RP), intent(out) :: SFC_ALB_NIR_dif(elem2D%Np,lcmesh2D%NeA)
273 real(RP), intent(out) :: SFC_ALB_VIS_dir(elem2D%Np,lcmesh2D%NeA)
274 real(RP), intent(out) :: SFC_ALB_VIS_dif(elem2D%Np,lcmesh2D%NeA)
275 real(RP), intent(in) :: x(elem%Np,lcmesh%Ne)
276 real(RP), intent(in) :: y(elem%Np,lcmesh%Ne)
277 real(RP), intent(in) :: z(elem%Np,lcmesh%Ne)
278 real(RP), intent(in) :: dom_xmin, dom_xmax
279 real(RP), intent(in) :: dom_ymin, dom_ymax
280 real(RP), intent(in) :: dom_zmin, dom_zmax
281 end subroutine exp_setinitcond_lc_ocn
282 end interface
283 !----------------------------------------------------------------------
284
285 this%setInitCond_lc_ocn => exp_setinitcond_lc_ocn
286 return
287 end subroutine experiment_regist_set_initcond_ocn
288
289 subroutine experiment_regist_geostrophic_balance_correction( this, exp_geostrophic_balance_correction_lc )
290 implicit none
291 class(experiment), intent(inout) :: this
292 interface
293 subroutine exp_geostrophic_balance_correction_lc( this, &
294 DENS_hyd, PRES_hyd, DDENS, MOMX, MOMY, MOMZ, DRHOT, &
295 lcmesh, elem )
296
297 import experiment
298 import localmesh3d
299 import elementbase3d
300 import rp
301
302 class(experiment), intent(inout) :: this
303 type(localmesh3d), intent(in) :: lcmesh
304 class(elementbase3d), intent(in) :: elem
305 real(RP), intent(inout) :: DENS_hyd(elem%Np,lcmesh%NeA)
306 real(RP), intent(in) :: PRES_hyd(elem%Np,lcmesh%NeA)
307 real(RP), intent(inout) :: DDENS(elem%Np,lcmesh%NeA)
308 real(RP), intent(inout) :: MOMX(elem%Np,lcmesh%NeA)
309 real(RP), intent(inout) :: MOMY(elem%Np,lcmesh%NeA)
310 real(RP), intent(inout) :: MOMZ(elem%Np,lcmesh%NeA)
311 real(RP), intent(inout) :: DRHOT(elem%Np,lcmesh%NeA)
312 end subroutine exp_geostrophic_balance_correction_lc
313 end interface
314 !----------------------------------------------------------------------
315
316 this%geostrophic_balance_correction_lc => exp_geostrophic_balance_correction_lc
317 return
318 end subroutine experiment_regist_geostrophic_balance_correction
319
320 subroutine experiment_setinitcond( this, &
321 model_mesh, atm_prgvars_manager, atm_auxvars_manager, atm_trcvars_manager )
322
323 use scale_tracer, only: qa
324
328
332
333 use mod_atmos_vars, only: &
334 atmosvars_getlocalmeshprgvars, &
335 atmosvars_getlocalmeshqtrcvar
336 use mod_atmos_mesh, only: atmosmesh
337
338 implicit none
339
340 class(experiment), intent(inout) :: this
341 class(atmosmesh), target, intent(in) :: model_mesh
342 class(modelvarmanager), intent(inout) :: atm_prgvars_manager
343 class(modelvarmanager), intent(inout) :: atm_auxvars_manager
344 class(modelvarmanager), intent(inout) :: atm_trcvars_manager
345
346 class(localmeshfieldbase), pointer :: DDENS, MOMX, MOMY, MOMZ, DRHOT
347 class(localmeshfieldbase), pointer :: DENS_hyd, PRES_hyd
348 class(localmeshfieldbase), pointer :: Rtot, CVtot, CPtot
349
350 integer :: n
351 class(localmesh3d), pointer :: lcmesh3D
352 class(meshbase3d), pointer :: mesh
353
354 type(meshfieldcommcubedom3d), target :: hydvars_comm_rm
355 type(meshfieldcommcubedspheredom3d), target :: hydvars_comm_gm
356 class(meshfieldcommbase), pointer :: hydvars_comm
357 type(meshfieldcontainer) :: hydvars_comm_list(1)
358 class(meshfieldbase), pointer :: field_ptr
359
360 type(tracerlocalmeshfield_ptr) :: tracer_field_list(max(1,QA))
361 integer :: iq
362
363 real(RP) :: xmin_gl, xmax_gl, ymin_gl, ymax_gl, zmin_gl, zmax_gl
364 !----------------------------------------------------------------------
365
366 mesh => model_mesh%ptr_mesh
367
368 do n=1, mesh%LOCAL_MESH_NUM
369 call atmosvars_getlocalmeshprgvars( n, &
370 mesh, atm_prgvars_manager, atm_auxvars_manager, &
371 ddens, momx, momy, momz, drhot, &
372 dens_hyd, pres_hyd, rtot, cvtot, cptot, &
373 lcmesh3d )
374
375 do iq=1, qa
376 call atmosvars_getlocalmeshqtrcvar( n, mesh, atm_trcvars_manager, &
377 iq, tracer_field_list(iq)%ptr )
378 end do
379
380 select type (mesh)
381 type is (meshcubedom3d)
382 xmin_gl = mesh%xmin_gl; xmax_gl = mesh%xmax_gl; ymin_gl = mesh%ymin_gl; ymax_gl = mesh%ymax_gl; zmin_gl = mesh%zmin_gl; zmax_gl = mesh%zmax_gl
383 type is (meshcubedspheredom3d)
384 xmin_gl = mesh%xmin_gl; xmax_gl = mesh%xmax_gl; ymin_gl = mesh%ymin_gl; ymax_gl = mesh%ymax_gl; zmin_gl = mesh%zmin_gl; zmax_gl = mesh%zmax_gl
385 end select
386 call this%setInitCond_lc( &
387 dens_hyd%val, pres_hyd%val, & ! (out)
388 ddens%val, momx%val, momy%val, momz%val, drhot%val, & ! (out)
389 tracer_field_list, & ! (inout)
390 lcmesh3d%pos_en(:,:,1), lcmesh3d%pos_en(:,:,2), lcmesh3d%pos_en(:,:,3), & ! (in)
391 xmin_gl, xmax_gl, ymin_gl, ymax_gl, zmin_gl, zmax_gl, & ! (in)
392 lcmesh3d, lcmesh3d%refElem3D ) ! (in)
393
394 end do
395
396 !------------------------------------------------------
397
398 call atm_auxvars_manager%Get(auxvar_preshydro_id, field_ptr)
399 select type(field_ptr)
400 type is (meshfield3d)
401 hydvars_comm_list(1)%field3d => field_ptr
402 end select
403 select type (mesh)
404 type is (meshcubedom3d)
405 call hydvars_comm_rm%Init(1, 0, 0, mesh)
406 hydvars_comm => hydvars_comm_rm
407 type is (meshcubedspheredom3d)
408 call hydvars_comm_gm%Init(1, 0, 0, mesh)
409 hydvars_comm => hydvars_comm_gm
410 end select
411
412 call hydvars_comm%Put(hydvars_comm_list, 1)
413 call hydvars_comm%Exchange()
414 call hydvars_comm%Get(hydvars_comm_list, 1)
415
416 !--------------------------------
417 do n=1, mesh%LOCAL_MESH_NUM
418 call atmosvars_getlocalmeshprgvars( n, &
419 mesh, atm_prgvars_manager, atm_auxvars_manager, &
420 ddens, momx, momy, momz, drhot, &
421 dens_hyd, pres_hyd, rtot, cvtot, cptot, &
422 lcmesh3d )
423
424 call this%geostrophic_balance_correction_lc( &
425 dens_hyd%val, pres_hyd%val, & ! (out)
426 ddens%val, momx%val, momy%val, momz%val, drhot%val, & ! (out)
427 lcmesh3d, lcmesh3d%refElem3D ) ! (in)
428 end do
429
430 call atm_auxvars_manager%Get(auxvar_denshydro_id, field_ptr)
431 select type(field_ptr)
432 type is (meshfield3d)
433 hydvars_comm_list(1)%field3d => field_ptr
434 end select
435 call hydvars_comm%Put(hydvars_comm_list, 1)
436 call hydvars_comm%Exchange()
437 call hydvars_comm%Get(hydvars_comm_list, 1)
438
439 select type (mesh)
440 type is (meshcubedom3d)
441 call hydvars_comm_rm%Final()
442 type is (meshcubedspheredom3d)
443 call hydvars_comm_gm%Final()
444 end select
445
446 return
447 end subroutine experiment_setinitcond
448
449 subroutine experiment_setinitcond_ocn( this, &
450 model_mesh, ocn_prgvars_manager, ocn_auxvars2D_manager )
451
455
457 use mod_ocean_mesh, only: oceanmesh
458
459 implicit none
460
461 class(experiment), intent(inout) :: this
462 class(oceanmesh), target, intent(in) :: model_mesh
463 class(modelvarmanager), intent(inout) :: ocn_prgvars_manager
464 class(modelvarmanager), intent(inout) :: ocn_auxvars2D_manager
465
466 class(localmeshfieldbase), pointer :: U, V, W, TEMP, SALT
467 class(localmeshfieldbase), pointer :: SFC_TEMP
468 class(localmeshfieldbase), pointer :: SFC_ALB_IR_dir, SFC_ALB_IR_dif, SFC_ALB_NIR_dir, SFC_ALB_NIR_dif, SFC_ALB_VIS_dir, SFC_ALB_VIS_dif
469 integer :: n
470 class(localmesh3d), pointer :: lcmesh3D
471 class(meshbase3d), pointer :: mesh
472
473 real(RP) :: xmin_gl, xmax_gl, ymin_gl, ymax_gl, zmin_gl, zmax_gl
474 !----------------------------------------------------------------------
475
476 mesh => model_mesh%ptr_mesh
477
478 do n=1, mesh%LOCAL_MESH_NUM
480 mesh, ocn_prgvars_manager, ocn_auxvars2d_manager, &
481 u, v, w, temp, salt, sfc_temp, &
482 sfc_alb_ir_dir, sfc_alb_ir_dif, &
483 sfc_alb_nir_dir, sfc_alb_nir_dif, &
484 sfc_alb_vis_dir, sfc_alb_vis_dif, &
485 lcmesh3d )
486
487 select type (mesh)
488 type is (meshcubedom3d)
489 xmin_gl = mesh%xmin_gl; xmax_gl = mesh%xmax_gl; ymin_gl = mesh%ymin_gl; ymax_gl = mesh%ymax_gl; zmin_gl = mesh%zmin_gl; zmax_gl = mesh%zmax_gl
490 type is (meshcubedspheredom3d)
491 xmin_gl = mesh%xmin_gl; xmax_gl = mesh%xmax_gl; ymin_gl = mesh%ymin_gl; ymax_gl = mesh%ymax_gl; zmin_gl = mesh%zmin_gl; zmax_gl = mesh%zmax_gl
492 end select
493
494 call this%setInitCond_lc_ocn( &
495 u%val, v%val, w%val, temp%val, salt%val, & ! (out)
496 sfc_temp%val, & ! (out)
497 sfc_alb_ir_dir%val, sfc_alb_ir_dif%val, sfc_alb_nir_dir%val, sfc_alb_nir_dif%val, & ! (out)
498 sfc_alb_vis_dir%val, sfc_alb_vis_dif%val, & ! (out)
499 lcmesh3d%pos_en(:,:,1), lcmesh3d%pos_en(:,:,2), lcmesh3d%pos_en(:,:,3), & ! (in)
500 xmin_gl, xmax_gl, ymin_gl, ymax_gl, zmin_gl, zmax_gl, & ! (in)
501 lcmesh3d, lcmesh3d%refElem3D, lcmesh3d%lcmesh2D, lcmesh3d%lcmesh2D%refElem2D ) ! (in)
502 end do
503 return
504 end subroutine experiment_setinitcond_ocn
505
506 !------
507!OCL SERIAL
508 subroutine experiment_setinitcond_lc_dummy( this, &
509 DENS_hyd, PRES_hyd, DDENS, MOMX, MOMY, MOMZ, DRHOT, tracer_field_list, &
510 x, y, z, dom_xmin, dom_xmax, dom_ymin, dom_ymax, dom_zmin, dom_zmax, &
511 lcmesh, elem )
512 implicit none
513
514 class(experiment), intent(inout) :: this
515 type(localmesh3d), intent(in) :: lcmesh
516 class(elementbase3d), intent(in) :: elem
517 real(RP), intent(out) :: DENS_hyd(elem%Np,lcmesh%NeA)
518 real(RP), intent(out) :: PRES_hyd(elem%Np,lcmesh%NeA)
519 real(RP), intent(out) :: DDENS(elem%Np,lcmesh%NeA)
520 real(RP), intent(out) :: MOMX(elem%Np,lcmesh%NeA)
521 real(RP), intent(out) :: MOMY(elem%Np,lcmesh%NeA)
522 real(RP), intent(out) :: MOMZ(elem%Np,lcmesh%NeA)
523 real(RP), intent(out) :: DRHOT(elem%Np,lcmesh%NeA)
524 type(tracerlocalmeshfield_ptr), intent(inout) :: tracer_field_list(:)
525 real(RP), intent(in) :: x(elem%Np,lcmesh%Ne)
526 real(RP), intent(in) :: y(elem%Np,lcmesh%Ne)
527 real(RP), intent(in) :: z(elem%Np,lcmesh%Ne)
528 real(RP), intent(in) :: dom_xmin, dom_xmax
529 real(RP), intent(in) :: dom_ymin, dom_ymax
530 real(RP), intent(in) :: dom_zmin, dom_zmax
531 !---------------------------------------------------
532
533 return
534 end subroutine experiment_setinitcond_lc_dummy
535
536 subroutine experiment_setinitcond_lc_ocn_dummy( this, &
537 U, V, W, TEMP, SALT, &
538 SFC_TEMP, &
539 SFC_ALB_IR_dir, SFC_ALB_IR_dif, SFC_ALB_NIR_dir, SFC_ALB_NIR_dif, &
540 SFC_ALB_VIS_dir, SFC_ALB_VIS_dif, &
541 x, y, z, dom_xmin, dom_xmax, dom_ymin, dom_ymax, dom_zmin, dom_zmax, &
542 lcmesh, elem, lcmesh2D, elem2D )
543 implicit none
544
545 class(experiment), intent(inout) :: this
546 type(localmesh3d), intent(in) :: lcmesh
547 class(elementbase3d), intent(in) :: elem
548 type(localmesh2d), intent(in) :: lcmesh2D
549 class(elementbase2d), intent(in) :: elem2D
550 real(RP), intent(out) :: U(elem%Np,lcmesh%NeA)
551 real(RP), intent(out) :: V(elem%Np,lcmesh%NeA)
552 real(RP), intent(out) :: W(elem%Np,lcmesh%NeA)
553 real(RP), intent(out) :: TEMP(elem%Np,lcmesh%NeA)
554 real(RP), intent(out) :: SALT(elem%Np,lcmesh%NeA)
555 real(RP), intent(out) :: SFC_TEMP(elem2D%Np,lcmesh2D%NeA)
556 real(RP), intent(out) :: SFC_ALB_IR_dir(elem2D%Np,lcmesh2D%NeA)
557 real(RP), intent(out) :: SFC_ALB_IR_dif(elem2D%Np,lcmesh2D%NeA)
558 real(RP), intent(out) :: SFC_ALB_NIR_dir(elem2D%Np,lcmesh2D%NeA)
559 real(RP), intent(out) :: SFC_ALB_NIR_dif(elem2D%Np,lcmesh2D%NeA)
560 real(RP), intent(out) :: SFC_ALB_VIS_dir(elem2D%Np,lcmesh2D%NeA)
561 real(RP), intent(out) :: SFC_ALB_VIS_dif(elem2D%Np,lcmesh2D%NeA)
562 real(RP), intent(in) :: x(elem%Np,lcmesh%Ne)
563 real(RP), intent(in) :: y(elem%Np,lcmesh%Ne)
564 real(RP), intent(in) :: z(elem%Np,lcmesh%Ne)
565 real(RP), intent(in) :: dom_xmin, dom_xmax
566 real(RP), intent(in) :: dom_ymin, dom_ymax
567 real(RP), intent(in) :: dom_zmin, dom_zmax
568 !---------------------------------------------------
569 return
570 end subroutine experiment_setinitcond_lc_ocn_dummy
571
572 subroutine experiment_geostrophic_balance_correction_lc_dummy( this, &
573 DENS_hyd, PRES_hyd, DDENS, MOMX, MOMY, MOMZ, DRHOT, &
574 lcmesh, elem )
575
576 implicit none
577 class(experiment), intent(inout) :: this
578 type(localmesh3d), intent(in) :: lcmesh
579 class(elementbase3d), intent(in) :: elem
580 real(RP), intent(inout) :: DENS_hyd(elem%Np,lcmesh%NeA)
581 real(RP), intent(in) :: PRES_hyd(elem%Np,lcmesh%NeA)
582 real(RP), intent(inout) :: DDENS(elem%Np,lcmesh%NeA)
583 real(RP), intent(inout) :: MOMX(elem%Np,lcmesh%NeA)
584 real(RP), intent(inout) :: MOMY(elem%Np,lcmesh%NeA)
585 real(RP), intent(inout) :: MOMZ(elem%Np,lcmesh%NeA)
586 real(RP), intent(inout) :: DRHOT(elem%Np,lcmesh%NeA)
587 !---------------------------------------------------
588 return
589 end subroutine experiment_geostrophic_balance_correction_lc_dummy
590
591end module mod_experiment
module Atmosphere / Mesh
module Atmosphere / Variables
module Ocean / Mesh
module Ocean / Variables
subroutine, public oceanvars_getlocalmeshprgvars(domid, mesh, prgvars_list, auxvars2d_list, u, v, w, therm, salt, sfc_temp, sfc_alb_ir_dir, sfc_alb_ir_dif, sfc_alb_nir_dir, sfc_alb_nir_dif, sfc_alb_vis_dir, sfc_alb_vis_dif, lcmesh3d)
module FElib / Fluid dyn solver / Atmosphere / Nonhydrostatic model / Common
module FElib / Element / Base
module FElib / Element / hexahedron
module FElib / Mesh / Local 2D
module FElib / Mesh / Local 3D
module FElib / Mesh / Base 3D
module FElib / Mesh / Cubic 3D domain
module FElib / Mesh / Cubed-sphere 3D domain
module FElib / Data / base
module FElib / Data / Communication base
module FElib / Data / Communication 3D cubic domain
module FElib / Data / Communication in 3D cubed-sphere domain
FElib / model framework / variable manager.
Derived type to manage a computational mesh (base class)
Derived type to manage a computational mesh (base class)
Derived type representing a 2D reference element.
Derived type representing a 3D reference element.
Derived type representing a hexahedral element.
Derived type representing a local mesh for 2D domain.
Derived type to manage a local 3D computational domain.
Derived type representing a field with local mesh (base type)
Derived type to manage a computational mesh (base type for 3D domain)
Derived type to manage a cubic 3D computational domain.
Derived type to manage a cubed-sphere 3D computational domain.
Derived type representing a field with 3D mesh.
Derived type representing a field (base type)
Base derived type to manage data communication.
Container to save a pointer of MeshField(1D, 2D, 3D) object.
Base derived type to manage data communication with 3D cubic domain.
Base derived type to manage data communication with 3D cubed-sphere domain.