| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=wp), | public | :: | cp | = | SEAWATER_CP |
Specific heat capacity (J/kg/K). |
|
| logical, | public | :: | enable | = | .false. |
Master switch. Default |
|
| real(kind=wp), | public | :: | h_min | = | 1.0e-3_wp |
Thickness floor for the lowest-massive-layer scan. |
|
| logical, | public | :: | is_init | = | .false. |
True between |
|
| real(kind=wp), | public | :: | q_geo_const | = | 0.0_wp |
Scalar constant bottom heat flux (W/m^2, positive into the ocean from below). Typical geothermal ~0.05-0.1 W/m^2. |
|
| real(kind=wp), | public | :: | rho0 | = | 1035.0_wp |
Boussinesq reference density (kg/m^3) — the |
| procedure, public :: destroy => ocean_geothermal_destroy | |
| procedure, public :: init => ocean_geothermal_init |
Add the geothermal bottom heat flux to the lowest massive
tracer layer. Operates in hTr space (concentration
thickness):
d(hT_{k=1})/dt = Q_geo / (rho0 * cp)
(units (W/m^2)/(kg/m^3 * J/kg/K) = Km/s, matching hTr).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(hgrid_t), | intent(in) | :: | grid | |||
| type(ocean_geothermal_t), | intent(in), | optional | :: | geo |
Optional — when absent the kernel is a no-op (no geothermal forcing configured). |
|
| type(multilayer_state_t), | intent(inout) | :: | ms | |||
| real(kind=wp), | intent(in) | :: | dt | |||
| logical, | intent(in), | optional | :: | active |
Optional gate (thermo cadence). Absent => kernel runs; present-and-false => early return. |
Stamp src * wet_mask(i,j) onto the lowest massive layer of
a tracer’s hTr array (first k with h_layer > h_min,
scanning k = k_bot(i,j)..nz from the first live layer up), mirror into the matching
budget contributor. Flat-impl over plain allocatables — the
outer subroutine reaches ms%tracers(idx)%hTr on the host
before calling this.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=wp), | intent(inout) | :: | hTr(:,:,:) | |||
| real(kind=wp), | intent(inout) | :: | budget(:,:,:) | |||
| real(kind=wp), | intent(in) | :: | wet_mask(:,:) | |||
| real(kind=wp), | intent(in) | :: | h_layer(:,:,:) | |||
| integer, | intent(in) | :: | k_bot(:,:) | |||
| real(kind=wp), | intent(in) | :: | src | |||
| integer, | intent(in) | :: | nz | |||
| real(kind=wp), | intent(in) | :: | h_min |
No-op shell mirroring the surface-flux destroy.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ocean_geothermal_t), | intent(inout) | :: | this |
No-op shell mirroring the surface-flux init; sets is_init.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ocean_geothermal_t), | intent(inout) | :: | this | |||
| type(hgrid_t), | intent(in) | :: | grid |