Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
O
ocean-mixing
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
inmcm-mirror
ocean-mixing
Commits
8603d1ec
Commit
8603d1ec
authored
7 months ago
by
Evgeny Mortikov
Browse files
Options
Downloads
Patches
Plain Diff
scm output update
parent
89d4bccc
No related branches found
No related tags found
No related merge requests found
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
CMakeLists.txt
+1
-0
1 addition, 0 deletions
CMakeLists.txt
obl_def.fi
+1
-1
1 addition, 1 deletion
obl_def.fi
obl_main.f90
+51
-116
51 additions, 116 deletions
obl_main.f90
obl_output.f90
+173
-0
173 additions, 0 deletions
obl_output.f90
with
226 additions
and
117 deletions
CMakeLists.txt
+
1
−
0
View file @
8603d1ec
...
...
@@ -19,6 +19,7 @@ set(SOURCES
obl_grid.f90
obl_tslice.f90
obl_state.f90
obl_output.f90
obl_time_and_space.f90
obl_common_phys_parameters.f90
obl_math.f90
...
...
This diff is collapsed.
Click to expand it.
obl_def.fi
+
1
−
1
View file @
8603d1ec
...
...
@@ -6,4 +6,4 @@
!#define OBL_USE_GRID_DATATYPE
!
#define OBL_USE_TSLICE_OUTPUT
#define OBL_USE_TSLICE_OUTPUT
This diff is collapsed.
Click to expand it.
obl_main.f90
+
51
−
116
View file @
8603d1ec
...
...
@@ -14,6 +14,7 @@ program obl_main
use
obl_tslice
#endif
use
obl_state
use
obl_output
use
obl_time_and_space
use
obl_initial_conditions
use
obl_forcing_and_boundary
...
...
@@ -46,11 +47,6 @@ program obl_main
! turbulence closure parameters
type
(
pacanowskiParamType
)
::
param_pacanowski
#ifdef OBL_USE_TSLICE_OUTPUT
! time slice
type
(
oblTimeSlice
)
::
output_Theta
,
output_Salin
#endif
real
::
t
!< time, [s]
integer
::
nt
!< number of time steps
integer
::
nf
!< number of time steps for forcing
...
...
@@ -78,6 +74,8 @@ program obl_main
!1 - pacanowski-philander, 2 - pacanowski-philander+,
!3 - k-epsilon explicit, 4 - k-epsilon semiimplicit, 5 - inmom
integer
,
parameter
::
output_mode
=
1
! 1 -- netcdf, 2 -- ascii, 3 -- tecplot
real
::
Rho_dyn_surf
,
Rho_dyn_bot
!< density dynamic, [kg / m**3]
real
::
mld
!< mixed layer depth, [m]
...
...
@@ -116,18 +114,7 @@ program obl_main
real
,
allocatable
::
time_hrs
(:)
real
,
allocatable
::
time_hrs_tslice
(:)
real
,
allocatable
::
Theta_write
(:,:)
real
,
allocatable
::
Salin_write
(:,:)
real
,
allocatable
::
U_write
(:,:)
real
,
allocatable
::
V_write
(:,:)
real
,
allocatable
::
Rho_write
(:,:)
real
,
allocatable
::
N2_write
(:,:)
real
,
allocatable
::
S2_write
(:,:)
real
,
allocatable
::
Ri_grad_write
(:,:)
real
,
allocatable
::
Kh_write
(:,:)
real
,
allocatable
::
Km_write
(:,:)
real
,
allocatable
::
mld_write
(:)
real
,
allocatable
::
Theta_C_write
(:,:)
real
,
allocatable
::
lab_mld_write
(:)
closure_mode
=
4
!< 1 - pacanowski-philander, 2 - pacanowski-philander+, 3 - k-epsilon explicit, 4 - k-epsilon semiimplicit, 5 - inmom
...
...
@@ -255,18 +242,8 @@ program obl_main
allocate
(
time_hrs
(
1
:
nt
))
allocate
(
time_hrs_tslice
(
1
:
nt
))
allocate
(
Theta_write
(
nz
,
nt
))
allocate
(
Salin_write
(
nz
,
nt
))
allocate
(
U_write
(
nz
,
nt
))
allocate
(
V_write
(
nz
,
nt
))
allocate
(
Rho_write
(
nz
,
nt
))
allocate
(
N2_write
(
nz
,
nt
))
allocate
(
S2_write
(
nz
,
nt
))
allocate
(
Ri_grad_write
(
nz
,
nt
))
allocate
(
Kh_write
(
nz
,
nt
))
allocate
(
Km_write
(
nz
,
nt
))
allocate
(
mld_write
(
nt
))
allocate
(
Theta_C_write
(
nz
,
nt
))
allocate
(
lab_mld_write
(
nt
))
! initialization of main fields
...
...
@@ -390,32 +367,16 @@ program obl_main
call
get_lab_mld
(
lab_mld
,
u_dynH
,
N2_0
,
time_current
,
z
)
endif
!do k = 1, nz
! Theta (k) = Theta(k) + Theta_0
!end do
Theta_write
(:,
i
)
=
Theta_dev
Salin_write
(:,
i
)
=
Salin_dev
U_write
(:,
i
)
=
U
V_write
(:,
i
)
=
V
Rho_write
(:,
i
)
=
Rho
!Rho_dev
N2_write
(:,
i
)
=
N2
S2_write
(:,
i
)
=
S2
Ri_grad_write
(:,
i
)
=
Ri_grad
Kh_write
(:,
i
)
=
Kh
Km_write
(:,
i
)
=
Km
mld_write
(
i
)
=
mld
!lab_mld_write(i) = lab_mld
!write(199,*) time_current, mld, lab_mld
!write(20,*) time_current, Theta_dev(nz) + Theta_ref
!> advancing time
!> advance time
i
=
i
+
1
time_current
=
time_current
+
dt
time_hrs
(
i
)
=
time_current
/
3600.0
!> advance screen output
if
(
mod
(
i
,
nscreen
)
==
0
)
then
write
(
*
,
'(a,g0)'
)
' mld = '
,
mld
write
(
*
,
'(a,g0)'
)
' Theta(surface) = '
,
Theta_dev
(
grid
%
cz
)
+
Theta_ref
...
...
@@ -424,77 +385,58 @@ program obl_main
write
(
*
,
'(a)'
)
'-------------------------------------------------'
endif
! time slice output
#ifdef OBL_USE_TSLICE_OUTPUT
!> advance file output
if
(
mod
(
i
,
noutput
)
==
0
)
then
call
push_profile_to_tslice
(
output_Theta
,
Theta_dev
,
nz
)
call
push_profile_to_tslice
(
output_Salin
,
Salin_dev
,
nz
)
call
push_state_vec
(
nz
)
time_hrs_tslice
(
output_Theta
%
num
)
=
time_current
/
3600.0
endif
#endif
enddo
Theta_C_write
=
Theta_write
-
273.15
Theta_write
=
Theta_write
+
Theta_ref
Salin_write
=
Salin_write
+
Salin_ref
!Rho_write = Rho_write + Rho_ref
output_Theta
%
data
(:,
1
:
output_Theta
%
num
)
=
output_Theta
%
data
(:,
1
:
output_Theta
%
num
)
+
Theta_ref
output_Salin
%
data
(:,
1
:
output_Salin
%
num
)
=
output_Salin
%
data
(:,
1
:
output_Salin
%
num
)
+
Salin_ref
output_TinC
%
data
(:,
1
:
output_TinC
%
num
)
=
output_TinC
%
data
(:,
1
:
output_TinC
%
num
)
+
Theta_ref
-
273.15
if
(
output_mode
.eq.
1
)
then
write
(
*
,
*
)
' >> writing netcdf output ...'
#ifndef OBL_USE_TSLICE_OUTPUT
! Writing 2D arrays (variables with depth and time)
call
write_2d_real_nc
(
Theta_write
,
'output.nc'
,
meta_theta
)
call
write_2d_real_nc
(
Salin_write
,
'output.nc'
,
meta_salin
)
call
write_2d_real_nc
(
U_write
,
'output.nc'
,
meta_u
)
call
write_2d_real_nc
(
V_write
,
'output.nc'
,
meta_v
)
call
write_2d_real_nc
(
Rho_write
,
'output.nc'
,
meta_rho
)
call
write_2d_real_nc
(
N2_write
,
'output.nc'
,
meta_n2
)
call
write_2d_real_nc
(
S2_write
,
'output.nc'
,
meta_s2
)
call
write_2d_real_nc
(
Ri_grad_write
,
'output.nc'
,
meta_ri_grad
)
call
write_2d_real_nc
(
Kh_write
,
'output.nc'
,
meta_kh
)
call
write_2d_real_nc
(
Km_write
,
'output.nc'
,
meta_km
)
call
write_2d_real_nc
(
Theta_C_write
,
'output.nc'
,
meta_theta_C
)
#endif
call
write_netcdf
! Writing 1D arrays (scalar variables over time)
call
write_1d_real_nc
(
mld_write
,
'output.nc'
,
meta_mld
)
call
write_1d_real_nc
(
lab_mld_write
,
'output.nc'
,
meta_lab_mld
)
!call write_1d_real_nc(Tau_x_surf, 'output.nc', meta_tau_u)
!call write_1d_real_nc(Tau_y_surf, 'output.nc', meta_tau_v)
call
write_1d_real_nc
(
lab_mld_write
,
'output.nc'
,
meta_lab_mld
)
endif
if
(
output_mode
.eq.
2
)
then
write
(
*
,
*
)
' >> writing ascii output ...'
#ifndef OBL_USE_TSLICE_OUTPUT
! Writing 2D arrays (variables with depth and time) to ASCII files
call
write_2d_real_ascii
(
Theta_write
,
'output_Theta.txt'
,
meta_theta
)
call
write_2d_real_ascii
(
Salin_write
,
'output_Salin.txt'
,
meta_salin
)
call
write_2d_real_ascii
(
U_write
,
'output_U.txt'
,
meta_u
)
call
write_2d_real_ascii
(
V_write
,
'output_V.txt'
,
meta_v
)
call
write_2d_real_ascii
(
Rho_write
,
'output_Rho.txt'
,
meta_rho
)
call
write_2d_real_ascii
(
N2_write
,
'output_N2.txt'
,
meta_n2
)
call
write_2d_real_ascii
(
S2_write
,
'output_S2.txt'
,
meta_s2
)
call
write_2d_real_ascii
(
Ri_grad_write
,
'output_Ri_grad.txt'
,
meta_ri_grad
)
call
write_2d_real_ascii
(
Kh_write
,
'output_Kh.txt'
,
meta_kh
)
call
write_2d_real_ascii
(
Km_write
,
'output_Km.txt'
,
meta_km
)
#endif
call
write_ascii
! Writing 1D arrays (scalar variables over time) to ASCII files
!
call write_1d_real_ascii(mld_write, 'output_mld.txt', meta_mld)
!
call write_1d_real_ascii(lab_mld_write, 'output_lab_mld.txt', meta_lab_mld)
call
write_1d_real_ascii
(
mld_write
,
'output_mld.txt'
,
meta_mld
)
call
write_1d_real_ascii
(
lab_mld_write
,
'output_lab_mld.txt'
,
meta_lab_mld
)
!call write_1d_real_ascii(Tau_x_surf, 'output_tau_u.txt', meta_tau_u)
!call write_1d_real_ascii(Tau_y_surf, 'output_tau_v.txt', meta_tau_v)
endif
if
(
output_mode
.eq.
3
)
then
write
(
*
,
*
)
' >> writing tecplot output ...'
! time slice output
call
write_tecplot
(
grid
%
z
,
time_hrs_tslice
)
! Writing 1D arrays (scalar variables over time) to Tecplot files
call
write_1d_real_plt
(
mld_write
,
time_hrs
,
'output_mld.plt'
,
meta_mld
)
call
write_1d_real_plt
(
lab_mld_write
,
time_hrs
,
'output_lab_mld.plt'
,
meta_lab_mld
)
!call write_1d_real_ascii(Tau_x_surf, 'output_tau_u.txt', meta_tau_u)
!call write_1d_real_ascii(Tau_y_surf, 'output_tau_v.txt', meta_tau_v)
#ifdef OBL_USE_TSLICE_OUTPUT
! time slice output
call
write_2d_real_ascii
(
output_Theta
%
data
(:,
1
:
output_Theta
%
num
),
'Theta_tslice.txt'
,
meta_theta
)
call
write_2d_real_ascii
(
output_Salin
%
data
(:,
1
:
output_Salin
%
num
),
'Salin_tslice.txt'
,
meta_salin
)
call
write_2d_real_plt
(
output_Theta
%
data
(:,
1
:
output_Theta
%
num
),
grid
%
z
,
time_hrs_tslice
(
1
:
output_Theta
%
num
),
'Theta_tslice.plt'
,
meta_theta
)
#endif
endif
!close(199)
!close(20)
...
...
@@ -537,20 +479,13 @@ program obl_main
deallocate
(
time_hrs
)
deallocate
(
time_hrs_tslice
)
deallocate
(
Theta_write
)
deallocate
(
Salin_write
)
deallocate
(
U_write
)
deallocate
(
V_write
)
deallocate
(
Rho_write
)
deallocate
(
N2_write
)
deallocate
(
S2_write
)
deallocate
(
Ri_grad_write
)
deallocate
(
Kh_write
)
deallocate
(
Km_write
)
deallocate
(
mld_write
)
deallocate
(
Theta_C_write
)
deallocate
(
lab_mld_write
)
!> removing time slice data
call
output_cleanup
! > removing grid data
call
deallocate_grid
(
grid
)
...
...
This diff is collapsed.
Click to expand it.
obl_output.f90
0 → 100644
+
173
−
0
View file @
8603d1ec
module
obl_output
!< @brief obl output def.
! --------------------------------------------------------------------------------
! modules used
! --------------------------------------------------------------------------------
use
obl_tslice
! directives list
implicit
none
private
! public interface
! --------------------------------------------------------------------------------
public
::
push_state_vec
public
::
output_cleanup
public
::
write_netcdf
,
write_ascii
,
write_tecplot
! --------------------------------------------------------------------------------
!> @brief state output
type
(
oblTimeSlice
),
public
::
output_Theta
,
output_Salin
type
(
oblTimeSlice
),
public
::
output_Rho
type
(
oblTimeSlice
),
public
::
output_U
,
output_V
type
(
oblTimeSlice
),
public
::
output_N2
,
output_S2
,
output_Ri_grad
type
(
oblTimeSlice
),
public
::
output_Km
,
output_Kh
type
(
oblTimeSlice
),
public
::
output_TinC
contains
! --------------------------------------------------------------------------------
subroutine
push_state_vec
(
cz
)
!> @brief allocate state vector
! ----------------------------------------------------------------------------
use
obl_state
integer
,
intent
(
in
)
::
cz
! ----------------------------------------------------------------------------
call
push_profile_to_tslice
(
output_Theta
,
Theta_dev
,
cz
)
call
push_profile_to_tslice
(
output_Salin
,
Salin_dev
,
cz
)
call
push_profile_to_tslice
(
output_Rho
,
Rho
,
cz
)
call
push_profile_to_tslice
(
output_U
,
U
,
cz
)
call
push_profile_to_tslice
(
output_V
,
V
,
cz
)
call
push_profile_to_tslice
(
output_N2
,
N2
,
cz
)
call
push_profile_to_tslice
(
output_S2
,
S2
,
cz
)
call
push_profile_to_tslice
(
output_Ri_grad
,
Ri_grad
,
cz
)
call
push_profile_to_tslice
(
output_Km
,
Km
,
cz
)
call
push_profile_to_tslice
(
output_Kh
,
Kh
,
cz
)
call
push_profile_to_tslice
(
output_TinC
,
Theta_dev
,
cz
)
end
subroutine
push_state_vec
! --------------------------------------------------------------------------------
subroutine
write_netcdf
!> @brief write netcdf data
! ----------------------------------------------------------------------------
use
io
use
io_metadata
! ----------------------------------------------------------------------------
call
write_2d_real_nc
(
output_Theta
%
data
(:,
1
:
output_Theta
%
num
),
'output.nc'
,
meta_theta
)
call
write_2d_real_nc
(
output_Salin
%
data
(:,
1
:
output_Salin
%
num
),
'output.nc'
,
meta_salin
)
call
write_2d_real_nc
(
output_Rho
%
data
(:,
1
:
output_Rho
%
num
),
'output.nc'
,
meta_rho
)
call
write_2d_real_nc
(
output_U
%
data
(:,
1
:
output_U
%
num
),
'output.nc'
,
meta_u
)
call
write_2d_real_nc
(
output_V
%
data
(:,
1
:
output_V
%
num
),
'output.nc'
,
meta_v
)
call
write_2d_real_nc
(
output_N2
%
data
(:,
1
:
output_N2
%
num
),
'output.nc'
,
meta_n2
)
call
write_2d_real_nc
(
output_S2
%
data
(:,
1
:
output_S2
%
num
),
'output.nc'
,
meta_s2
)
call
write_2d_real_nc
(
output_Ri_grad
%
data
(:,
1
:
output_Ri_grad
%
num
),
'output.nc'
,
meta_ri_grad
)
call
write_2d_real_nc
(
output_Km
%
data
(:,
1
:
output_Km
%
num
),
'output.nc'
,
meta_km
)
call
write_2d_real_nc
(
output_Kh
%
data
(:,
1
:
output_Kh
%
num
),
'output.nc'
,
meta_kh
)
call
write_2d_real_nc
(
output_TinC
%
data
(:,
1
:
output_TinC
%
num
),
'output.nc'
,
meta_theta_C
)
end
subroutine
write_netcdf
! --------------------------------------------------------------------------------
subroutine
write_ascii
!> @brief write ascii data
! ----------------------------------------------------------------------------
use
io
use
io_metadata
! ----------------------------------------------------------------------------
call
write_2d_real_ascii
(
output_Theta
%
data
(:,
1
:
output_Theta
%
num
),
'output_Theta.txt'
,
meta_theta
)
call
write_2d_real_ascii
(
output_Salin
%
data
(:,
1
:
output_Salin
%
num
),
'output_Salin.txt'
,
meta_salin
)
call
write_2d_real_ascii
(
output_Rho
%
data
(:,
1
:
output_Rho
%
num
),
'output_Rho.txt'
,
meta_rho
)
call
write_2d_real_ascii
(
output_U
%
data
(:,
1
:
output_U
%
num
),
'output_U.txt'
,
meta_u
)
call
write_2d_real_ascii
(
output_V
%
data
(:,
1
:
output_V
%
num
),
'output_V.txt'
,
meta_v
)
call
write_2d_real_ascii
(
output_N2
%
data
(:,
1
:
output_N2
%
num
),
'output_N2.txt'
,
meta_n2
)
call
write_2d_real_ascii
(
output_S2
%
data
(:,
1
:
output_S2
%
num
),
'output_S2.txt'
,
meta_s2
)
call
write_2d_real_ascii
(
output_Ri_grad
%
data
(:,
1
:
output_Ri_grad
%
num
),
'output_Ri_grad.txt'
,
meta_ri_grad
)
call
write_2d_real_ascii
(
output_Km
%
data
(:,
1
:
output_Km
%
num
),
'output_Km.txt'
,
meta_km
)
call
write_2d_real_ascii
(
output_Kh
%
data
(:,
1
:
output_Kh
%
num
),
'output_Kh.txt'
,
meta_kh
)
call
write_2d_real_ascii
(
output_TinC
%
data
(:,
1
:
output_TinC
%
num
),
'output_TinC.txt'
,
meta_theta_C
)
end
subroutine
write_ascii
! --------------------------------------------------------------------------------
subroutine
write_tecplot
(
zcoord
,
tcoord
)
!> @brief write tecplot data
! ----------------------------------------------------------------------------
use
io
use
io_metadata
use
obl_io_plt
real
,
allocatable
,
intent
(
in
)
::
zcoord
(:)
real
,
allocatable
,
intent
(
in
)
::
tcoord
(:)
! ----------------------------------------------------------------------------
call
write_2d_real_plt
(
output_Theta
%
data
(:,
1
:
output_Theta
%
num
),
zcoord
,
tcoord
(
1
:
output_Theta
%
num
),
'Theta_tslice.plt'
,
meta_theta
)
call
write_2d_real_plt
(
output_Salin
%
data
(:,
1
:
output_Salin
%
num
),
zcoord
,
tcoord
(
1
:
output_Salin
%
num
),
'Salin_tslice.plt'
,
meta_salin
)
call
write_2d_real_plt
(
output_Rho
%
data
(:,
1
:
output_Rho
%
num
),
zcoord
,
tcoord
(
1
:
output_Rho
%
num
),
'Rho_tslice.plt'
,
meta_rho
)
call
write_2d_real_plt
(
output_U
%
data
(:,
1
:
output_U
%
num
),
zcoord
,
tcoord
(
1
:
output_U
%
num
),
'U_tslice.plt'
,
meta_u
)
call
write_2d_real_plt
(
output_V
%
data
(:,
1
:
output_V
%
num
),
zcoord
,
tcoord
(
1
:
output_V
%
num
),
'V_tslice.plt'
,
meta_v
)
call
write_2d_real_plt
(
output_N2
%
data
(:,
1
:
output_N2
%
num
),
zcoord
,
tcoord
(
1
:
output_N2
%
num
),
'N2_tslice.plt'
,
meta_n2
)
call
write_2d_real_plt
(
output_S2
%
data
(:,
1
:
output_S2
%
num
),
zcoord
,
tcoord
(
1
:
output_S2
%
num
),
'S2_tslice.plt'
,
meta_s2
)
call
write_2d_real_plt
(
output_Ri_grad
%
data
(:,
1
:
output_Ri_grad
%
num
),
zcoord
,
tcoord
(
1
:
output_Ri_grad
%
num
),
'Ri_grad_tslice.plt'
,
meta_ri_grad
)
call
write_2d_real_plt
(
output_Km
%
data
(:,
1
:
output_Km
%
num
),
zcoord
,
tcoord
(
1
:
output_Km
%
num
),
'Km_tslice.plt'
,
meta_km
)
call
write_2d_real_plt
(
output_Kh
%
data
(:,
1
:
output_Kh
%
num
),
zcoord
,
tcoord
(
1
:
output_Kh
%
num
),
'Kh_tslice.plt'
,
meta_kh
)
call
write_2d_real_plt
(
output_TinC
%
data
(:,
1
:
output_TinC
%
num
),
zcoord
,
tcoord
(
1
:
output_TinC
%
num
),
'TinC_tslice.plt'
,
meta_theta_C
)
end
subroutine
write_tecplot
! --------------------------------------------------------------------------------
subroutine
output_cleanup
!> @brief cleanup output data
! ----------------------------------------------------------------------------
! ----------------------------------------------------------------------------
call
deallocate_tslice
(
output_Theta
)
call
deallocate_tslice
(
output_Salin
)
call
deallocate_tslice
(
output_Rho
)
call
deallocate_tslice
(
output_U
)
call
deallocate_tslice
(
output_V
)
call
deallocate_tslice
(
output_N2
)
call
deallocate_tslice
(
output_S2
)
call
deallocate_tslice
(
output_Ri_grad
)
call
deallocate_tslice
(
output_Km
)
call
deallocate_tslice
(
output_Kh
)
call
deallocate_tslice
(
output_TinC
)
end
subroutine
output_cleanup
end
module
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment