MOM6
generic_tracer.F90
1 !> A non-functioning template of the GFDL ocean BGC
3 
4  use time_manager_mod, only : time_type
5  use coupler_types_mod, only : coupler_2d_bc_type
6 
8 
9  implicit none ; private
10 
11  public generic_tracer_register
12  public generic_tracer_init
13  public generic_tracer_register_diag
14  public generic_tracer_source
15  public generic_tracer_update_from_bottom
16  public generic_tracer_coupler_get
17  public generic_tracer_coupler_set
18  public generic_tracer_end
19  public generic_tracer_get_list
20  public do_generic_tracer
21  public generic_tracer_vertdiff_g
22  public generic_tracer_get_diag_list
23  public generic_tracer_coupler_accumulate
24 
25  !> Turn on generic tracers (note dangerous use of module data)
26  logical :: do_generic_tracer = .true.
27 
28 contains
29 
30  !> Unknown
31  subroutine generic_tracer_register
32  end subroutine generic_tracer_register
33 
34  !> Initialize generic tracers
35  subroutine generic_tracer_init(isc,iec,jsc,jec,isd,ied,jsd,jed,nk,ntau,axes,grid_tmask,grid_kmt,init_time)
36  integer, intent(in) :: isc !< Computation start index in i direction
37  integer, intent(in) :: iec !< Computation end index in i direction
38  integer, intent(in) :: jsc !< Computation start index in j direction
39  integer, intent(in) :: jec !< Computation end index in j direction
40  integer, intent(in) :: isd !< Data start index in i direction
41  integer, intent(in) :: ied !< Data end index in i direction
42  integer, intent(in) :: jsd !< Data start index in j direction
43  integer, intent(in) :: jed !< Data end index in j direction
44  integer, intent(in) :: nk !< Number of levels in k direction
45  integer, intent(in) :: ntau !< Unknown
46  integer, intent(in) :: axes(3) !< Domain axes?
47  type(time_type), intent(in) :: init_time !< Time
48  real, dimension(:,:,:),target, intent(in) :: grid_tmask !< Mask
49  integer, dimension(:,:) , intent(in) :: grid_kmt !< Number of wet cells in column
50  end subroutine generic_tracer_init
51 
52  !> Unknown
53  subroutine generic_tracer_register_diag
54  end subroutine generic_tracer_register_diag
55 
56  !> Get coupler values
57  subroutine generic_tracer_coupler_get(IOB_struc)
58  type(coupler_2d_bc_type), intent(in) :: iob_struc !< Ice Ocean Boundary flux structure
59  end subroutine generic_tracer_coupler_get
60 
61  !> Unknown
62  subroutine generic_tracer_coupler_accumulate(IOB_struc, weight, model_time)
63  type(coupler_2d_bc_type), intent(in) :: iob_struc !< Ice Ocean Boundary flux structure
64  real, intent(in) :: weight !< Unknown
65  type(time_type), optional,intent(in) :: model_time !< Time
66  end subroutine generic_tracer_coupler_accumulate
67 
68  !> Calls the corresponding generic_X_update_from_source routine for each package X
69  subroutine generic_tracer_source(Temp,Salt,rho_dzt,dzt,hblt_depth,ilb,jlb,tau,dtts,&
70  grid_dat,model_time,nbands,max_wavelength_band,sw_pen_band,opacity_band,internal_heat,&
71  frunoff,grid_ht, current_wave_stress, sosga)
72  real, dimension(ilb:,jlb:,:), intent(in) :: temp !< Potential temperature [deg C]
73  real, dimension(ilb:,jlb:,:), intent(in) :: salt !< Salinity [psu]
74  real, dimension(ilb:,jlb:,:), intent(in) :: rho_dzt !< Unknown
75  real, dimension(ilb:,jlb:,:), intent(in) :: dzt !< Ocean layer thickness [m]
76  real, dimension(ilb:,jlb:), intent(in) :: hblt_depth !< Boundary layer depth
77  integer, intent(in) :: ilb !< Lower bounds of x extent of input arrays on data domain
78  integer, intent(in) :: jlb !< Lower bounds of y extent of input arrays on data domain
79  integer, intent(in) :: tau !< Time step index of %field
80  real, intent(in) :: dtts !< Unknown
81  real, dimension(ilb:,jlb:), intent(in) :: grid_dat !< Unknown
82  type(time_type), intent(in) :: model_time !< Time
83  integer, intent(in) :: nbands !< Unknown
84  real, dimension(:), intent(in) :: max_wavelength_band !< Unknown
85  real, dimension(:,ilb:,jlb:), intent(in) :: sw_pen_band !< Shortwave penetration
86  real, dimension(:,ilb:,jlb:,:), intent(in) :: opacity_band !< Unknown
87  real, dimension(ilb:,jlb:),optional, intent(in) :: internal_heat !< Unknown
88  real, dimension(ilb:,jlb:),optional, intent(in) :: frunoff !< Unknown
89  real, dimension(ilb:,jlb:),optional, intent(in) :: grid_ht !< Unknown
90  real, dimension(ilb:,jlb:),optional , intent(in) :: current_wave_stress !< Unknown
91  real, optional , intent(in) :: sosga !< Global average sea surface salinity
92  end subroutine generic_tracer_source
93 
94  !> Update the tracers from bottom fluxes
95  subroutine generic_tracer_update_from_bottom(dt, tau, model_time)
96  real, intent(in) :: dt !< Time step increment
97  integer, intent(in) :: tau !< Time step index used for the concentration field
98  type(time_type), intent(in) :: model_time !< Time
99  end subroutine generic_tracer_update_from_bottom
100 
101  !> Vertically diffuse all generic tracers for GOLD ocean
102  subroutine generic_tracer_vertdiff_g(h_old, ea, eb, dt, kg_m2_to_H, m_to_H, tau)
103  real, dimension(:,:,:), intent(in) :: h_old !< Unknown
104  real, dimension(:,:,:), intent(in) :: ea !< Unknown
105  real, dimension(:,:,:), intent(in) :: eb !< Unknown
106  real, intent(in) :: dt !< Unknown
107  real, intent(in) :: kg_m2_to_h !< Unknown
108  real, intent(in) :: m_to_h !< Unknown
109  integer, intent(in) :: tau !< Unknown
110  end subroutine generic_tracer_vertdiff_g
111 
112  !> Set the coupler values for each generic tracer
113  subroutine generic_tracer_coupler_set(IOB_struc, ST,SS,rho,ilb,jlb,tau, dzt, sosga,model_time)
114  type(coupler_2d_bc_type), intent(inout) :: iob_struc !< Ice Ocean Boundary flux structure
115  integer, intent(in) :: ilb !< Lower bounds of x extent of input arrays on data domain
116  integer, intent(in) :: jlb !< Lower bounds of y extent of input arrays on data domain
117  integer, intent(in) :: tau !< Time step index of %field
118  real, dimension(ilb:,jlb:), intent(in) :: st !< Sea surface temperature [deg C]
119  real, dimension(ilb:,jlb:), intent(in) :: ss !< Sea surface salinity [psu]
120  real, dimension(ilb:,jlb:,:,:), intent(in) :: rho !< Ocean density [kg m-3]
121  real, dimension(ilb:,jlb:,:), optional, intent(in) :: dzt !< Layer thickness [m]
122  real, optional, intent(in) :: sosga !< Unknown
123  type(time_type),optional, intent(in) :: model_time !< Time
124  end subroutine generic_tracer_coupler_set
125 
126  !> End this module by calling the corresponding generic_X_end for each package X
127  subroutine generic_tracer_end
128  end subroutine generic_tracer_end
129 
130  !> Get a pointer to the head of the generic tracers list
131  subroutine generic_tracer_get_list(list)
132  type(g_tracer_type), pointer :: list !< Pointer to head of the linked list
133  end subroutine generic_tracer_get_list
134 
135  !> Unknown
136  subroutine generic_tracer_get_diag_list(list)
137  type(g_diag_type), pointer :: list !< Pointer to head of the linked list
138  end subroutine generic_tracer_get_diag_list
139 
140 end module generic_tracer
g_tracer_utils module consists of core utility subroutines to be used by all generic tracer modules...
A non-functioning template of the GFDL ocean BGC.
Each generic tracer node is an instant of a FORTRAN type with the following member variables...