12 use scale_const,
only: &
16 cpdry => const_cpdry, &
17 cvdry => const_cvdry, &
42 character(len=H_SHORT) :: label
44 procedure(exp_setinitcond_lc_ocn),
pointer :: setinitcond_lc_ocn => null()
45 procedure(exp_geostrophic_balance_correction_lc),
pointer :: geostrophic_balance_correction_lc => null()
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
64 this, DENS_hyd, PRES_hyd, DDENS, MOMX, MOMY, MOMZ, DRHOT, &
66 x, y, z, dom_xmin, dom_xmax, dom_ymin, dom_ymax, dom_zmin, &
67 dom_zmax, lcmesh, 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)
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
94 subroutine exp_geostrophic_balance_correction_lc( this, &
95 DENS_hyd, PRES_hyd, DDENS, MOMX, MOMY, MOMZ, DRHOT, &
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
115 subroutine exp_setinitcond_lc_ocn( &
116 this, U, V, W, TEMP, SALT, &
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 )
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
174 subroutine experiment_init( this, exp_name )
177 character(len=*),
intent(in) :: exp_name
180 this%label = exp_name
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
187 end subroutine experiment_init
189 subroutine experiment_final( this )
195 end subroutine experiment_final
197 subroutine experiment_regist_set_initcond( this, exp_SetInitCond_lc )
203 DENS_hyd, PRES_hyd, DDENS, MOMX, MOMY, MOMZ, DRHOT, &
205 x, y, z, dom_xmin, dom_xmax, dom_ymin, dom_ymax, dom_zmin, &
206 dom_zmax, lcmesh, 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)
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
237 end subroutine experiment_regist_set_initcond
239 subroutine experiment_regist_set_initcond_ocn( this, exp_SetInitCond_lc_ocn )
243 subroutine exp_setinitcond_lc_ocn( &
244 this, U, V, W, TEMP, SALT, &
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 )
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
285 this%setInitCond_lc_ocn => exp_setinitcond_lc_ocn
287 end subroutine experiment_regist_set_initcond_ocn
289 subroutine experiment_regist_geostrophic_balance_correction( this, exp_geostrophic_balance_correction_lc )
293 subroutine exp_geostrophic_balance_correction_lc( this, &
294 DENS_hyd, PRES_hyd, DDENS, MOMX, MOMY, MOMZ, DRHOT, &
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
316 this%geostrophic_balance_correction_lc => exp_geostrophic_balance_correction_lc
318 end subroutine experiment_regist_geostrophic_balance_correction
320 subroutine experiment_setinitcond( this, &
321 model_mesh, atm_prgvars_manager, atm_auxvars_manager, atm_trcvars_manager )
323 use scale_tracer,
only: qa
334 atmosvars_getlocalmeshprgvars, &
335 atmosvars_getlocalmeshqtrcvar
341 class(
atmosmesh),
target,
intent(in) :: model_mesh
363 real(RP) :: xmin_gl, xmax_gl, ymin_gl, ymax_gl, zmin_gl, zmax_gl
366 mesh => model_mesh%ptr_mesh
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, &
376 call atmosvars_getlocalmeshqtrcvar( n, mesh, atm_trcvars_manager, &
377 iq, tracer_field_list(iq)%ptr )
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
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
386 call this%setInitCond_lc( &
387 dens_hyd%val, pres_hyd%val, &
388 ddens%val, momx%val, momy%val, momz%val, drhot%val, &
390 lcmesh3d%pos_en(:,:,1), lcmesh3d%pos_en(:,:,2), lcmesh3d%pos_en(:,:,3), &
391 xmin_gl, xmax_gl, ymin_gl, ymax_gl, zmin_gl, zmax_gl, &
392 lcmesh3d, lcmesh3d%refElem3D )
399 select type(field_ptr)
401 hydvars_comm_list(1)%field3d => field_ptr
405 call hydvars_comm_rm%Init(1, 0, 0, mesh)
406 hydvars_comm => hydvars_comm_rm
408 call hydvars_comm_gm%Init(1, 0, 0, mesh)
409 hydvars_comm => hydvars_comm_gm
412 call hydvars_comm%Put(hydvars_comm_list, 1)
413 call hydvars_comm%Exchange()
414 call hydvars_comm%Get(hydvars_comm_list, 1)
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, &
424 call this%geostrophic_balance_correction_lc( &
425 dens_hyd%val, pres_hyd%val, &
426 ddens%val, momx%val, momy%val, momz%val, drhot%val, &
427 lcmesh3d, lcmesh3d%refElem3D )
431 select type(field_ptr)
433 hydvars_comm_list(1)%field3d => field_ptr
435 call hydvars_comm%Put(hydvars_comm_list, 1)
436 call hydvars_comm%Exchange()
437 call hydvars_comm%Get(hydvars_comm_list, 1)
441 call hydvars_comm_rm%Final()
443 call hydvars_comm_gm%Final()
447 end subroutine experiment_setinitcond
449 subroutine experiment_setinitcond_ocn( this, &
450 model_mesh, ocn_prgvars_manager, ocn_auxvars2D_manager )
462 class(
oceanmesh),
target,
intent(in) :: model_mesh
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
473 real(RP) :: xmin_gl, xmax_gl, ymin_gl, ymax_gl, zmin_gl, zmax_gl
476 mesh => model_mesh%ptr_mesh
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, &
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
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
494 call this%setInitCond_lc_ocn( &
495 u%val, v%val, w%val, temp%val, salt%val, &
497 sfc_alb_ir_dir%val, sfc_alb_ir_dif%val, sfc_alb_nir_dir%val, sfc_alb_nir_dif%val, &
498 sfc_alb_vis_dir%val, sfc_alb_vis_dif%val, &
499 lcmesh3d%pos_en(:,:,1), lcmesh3d%pos_en(:,:,2), lcmesh3d%pos_en(:,:,3), &
500 xmin_gl, xmax_gl, ymin_gl, ymax_gl, zmin_gl, zmax_gl, &
501 lcmesh3d, lcmesh3d%refElem3D, lcmesh3d%lcmesh2D, lcmesh3d%lcmesh2D%refElem2D )
504 end subroutine experiment_setinitcond_ocn
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, &
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)
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
534 end subroutine experiment_setinitcond_lc_dummy
536 subroutine experiment_setinitcond_lc_ocn_dummy( this, &
537 U, V, W, TEMP, SALT, &
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 )
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
570 end subroutine experiment_setinitcond_lc_ocn_dummy
572 subroutine experiment_geostrophic_balance_correction_lc_dummy( this, &
573 DENS_hyd, PRES_hyd, DDENS, MOMX, MOMY, MOMZ, DRHOT, &
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)
589 end subroutine experiment_geostrophic_balance_correction_lc_dummy
module Atmosphere / 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
integer, parameter, public auxvar_preshydro_id
integer, parameter, public auxvar_denshydro_id
module FElib / Element / Base
module FElib / Element / hexahedron
module FElib / Mesh / Local 2D
module FElib / Mesh / Local 3D
module FElib / Data / base
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.