Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
sfx
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
sfx
Commits
d0c77118
Commit
d0c77118
authored
5 months ago
by
数学の武士
Browse files
Options
Downloads
Patches
Plain Diff
ESM CXX impl refactor
parent
0dbab68b
No related branches found
No related tags found
No related merge requests found
Pipeline
#1706
failed
4 months ago
Stage: build
Stage: test
Changes
4
Pipelines
2
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
includeCXX/sfx-esm.h
+23
-61
23 additions, 61 deletions
includeCXX/sfx-esm.h
srcCU/sfx-esm.cu
+4
-9
4 additions, 9 deletions
srcCU/sfx-esm.cu
srcCXX/cxx-sfx-model-compute-flux.cpp
+4
-4
4 additions, 4 deletions
srcCXX/cxx-sfx-model-compute-flux.cpp
srcCXX/sfx-esm.cpp
+4
-28
4 additions, 28 deletions
srcCXX/sfx-esm.cpp
with
35 additions
and
102 deletions
includeCXX/sfx-esm.h
+
23
−
61
View file @
d0c77118
...
...
@@ -4,85 +4,47 @@
#include
"sfx-data.h"
template
<
typename
T
,
MemType
memIn
,
MemType
memOut
,
MemType
RunMem
>
class
FluxEsmBase
:
public
ModelBase
<
T
,
memIn
,
memOut
,
RunMem
>
{
public:
using
ModelBase
<
T
,
memIn
,
memOut
,
RunMem
>::
res_sfx
;
using
ModelBase
<
T
,
memIn
,
memOut
,
RunMem
>::
sfx
;
using
ModelBase
<
T
,
memIn
,
memOut
,
RunMem
>::
meteo
;
using
ModelBase
<
T
,
memIn
,
memOut
,
RunMem
>::
grid_size
;
using
ModelBase
<
T
,
memIn
,
memOut
,
RunMem
>::
ifAllocated
;
using
ModelBase
<
T
,
memIn
,
memOut
,
RunMem
>::
allocated_size
;
sfx_surface_param
surface
;
sfx_phys_constants
phys
;
sfx_esm_param_C
model
;
sfx_esm_numericsType_C
numerics
;
FluxEsmBase
(
sfxDataVecTypeC
*
sfx
,
meteoDataVecTypeC
*
meteo
,
const
sfx_esm_param_C
model
,
const
sfx_surface_param
surface
,
const
sfx_esm_numericsType_C
numerics
,
const
sfx_phys_constants
phys
,
const
int
grid_size
);
~
FluxEsmBase
();
};
template
<
typename
T
,
MemType
memIn
,
MemType
memOut
,
MemType
RunMem
>
class
FluxEsm
:
public
FluxEsmBase
<
T
,
memIn
,
memOut
,
RunMem
>
class
FluxEsm
:
public
ModelBase
<
T
,
memIn
,
memOut
,
RunMem
>
{};
template
<
typename
T
,
MemType
memIn
,
MemType
memOut
>
class
FluxEsm
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>
:
public
FluxEsm
Base
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>
class
FluxEsm
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>
:
public
Model
Base
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>
{
using
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>::
res_sfx
;
using
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>::
sfx
;
using
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>::
meteo
;
using
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>::
surface
;
using
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>::
phys
;
using
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>::
grid_size
;
using
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>::
ifAllocated
;
using
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>::
allocated_size
;
using
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>::
model
;
using
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>::
numerics
;
using
ModelBase
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>::
res_sfx
;
using
ModelBase
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>::
sfx
;
using
ModelBase
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>::
meteo
;
using
ModelBase
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>::
grid_size
;
using
ModelBase
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>::
ifAllocated
;
using
ModelBase
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>::
allocated_size
;
public:
FluxEsm
(
sfxDataVecTypeC
*
sfx
,
meteoDataVecTypeC
*
meteo
,
const
sfx_esm_param_C
model
,
const
int
grid_size
)
:
ModelBase
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>
(
sfx
,
meteo
,
grid_size
)
{}
~
FluxEsm
()
=
default
;
void
compute_flux
(
const
sfx_esm_param_C
model
,
const
sfx_surface_param
surface
,
const
sfx_esm_numericsType_C
numerics
,
const
sfx_phys_constants
phys
,
const
int
grid_size
)
:
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>
(
sfx
,
meteo
,
model
,
surface
,
numerics
,
phys
,
grid_size
)
{}
~
FluxEsm
()
=
default
;
void
compute_flux
();
const
sfx_phys_constants
phys
);
};
#ifdef INCLUDE_CUDA
template
<
typename
T
,
MemType
memIn
,
MemType
memOut
>
class
FluxEsm
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>
:
public
FluxEsm
Base
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>
class
FluxEsm
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>
:
public
Model
Base
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>
{
using
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>::
res_sfx
;
using
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>::
sfx
;
using
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>::
meteo
;
using
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>::
surface
;
using
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>::
phys
;
using
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>::
grid_size
;
using
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>::
ifAllocated
;
using
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>::
allocated_size
;
using
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>::
model
;
using
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>::
numerics
;
using
ModelBase
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>::
res_sfx
;
using
ModelBase
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>::
sfx
;
using
ModelBase
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>::
meteo
;
using
ModelBase
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>::
grid_size
;
using
ModelBase
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>::
ifAllocated
;
using
ModelBase
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>::
allocated_size
;
public:
FluxEsm
(
sfxDataVecTypeC
*
sfx
,
meteoDataVecTypeC
*
meteo
,
const
sfx_esm_param_C
model
,
const
int
grid_size
)
:
ModelBase
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>
(
sfx
,
meteo
,
grid_size
)
{}
~
FluxEsm
()
=
default
;
void
compute_flux
(
const
sfx_esm_param_C
model
,
const
sfx_surface_param
surface
,
const
sfx_esm_numericsType_C
numerics
,
const
sfx_phys_constants
phys
,
const
int
grid_size
)
:
FluxEsmBase
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>
(
sfx
,
meteo
,
model
,
surface
,
numerics
,
phys
,
grid_size
)
{}
~
FluxEsm
()
=
default
;
void
compute_flux
();
const
sfx_phys_constants
phys
);
};
#endif
\ No newline at end of file
This diff is collapsed.
Click to expand it.
srcCU/sfx-esm.cu
+
4
−
9
View file @
d0c77118
...
...
@@ -119,7 +119,10 @@ __global__ void sfx_kernel::compute_flux(sfxDataVecTypeC sfx,
}
template
<
typename
T
,
MemType
memIn
,
MemType
memOut
>
void
FluxEsm
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>::
compute_flux
()
void
FluxEsm
<
T
,
memIn
,
memOut
,
MemType
::
GPU
>::
compute_flux
(
const
sfx_esm_param_C
model
,
const
sfx_surface_param
surface
,
const
sfx_esm_numericsType_C
numerics
,
const
sfx_phys_constants
phys
)
{
const
int
BlockCount
=
int
(
ceil
(
float
(
grid_size
)
/
1024.0
));
dim3
cuBlock
=
dim3
(
1024
,
1
,
1
);
...
...
@@ -145,14 +148,6 @@ void FluxEsm<T, memIn, memOut, MemType::GPU>::compute_flux()
}
}
template
class
FluxEsmBase
<
float
,
MemType
::
GPU
,
MemType
::
GPU
,
MemType
::
GPU
>;
template
class
FluxEsmBase
<
float
,
MemType
::
GPU
,
MemType
::
GPU
,
MemType
::
CPU
>;
template
class
FluxEsmBase
<
float
,
MemType
::
GPU
,
MemType
::
CPU
,
MemType
::
GPU
>;
template
class
FluxEsmBase
<
float
,
MemType
::
CPU
,
MemType
::
GPU
,
MemType
::
GPU
>;
template
class
FluxEsmBase
<
float
,
MemType
::
CPU
,
MemType
::
CPU
,
MemType
::
GPU
>;
template
class
FluxEsmBase
<
float
,
MemType
::
CPU
,
MemType
::
GPU
,
MemType
::
CPU
>;
template
class
FluxEsmBase
<
float
,
MemType
::
GPU
,
MemType
::
CPU
,
MemType
::
CPU
>;
template
class
FluxEsm
<
float
,
MemType
::
GPU
,
MemType
::
GPU
,
MemType
::
GPU
>;
template
class
FluxEsm
<
float
,
MemType
::
GPU
,
MemType
::
GPU
,
MemType
::
CPU
>;
template
class
FluxEsm
<
float
,
MemType
::
GPU
,
MemType
::
CPU
,
MemType
::
GPU
>;
...
...
This diff is collapsed.
Click to expand it.
srcCXX/cxx-sfx-model-compute-flux.cpp
+
4
−
4
View file @
d0c77118
...
...
@@ -15,11 +15,11 @@ void esm_compute_flux (sfxDataVecTypeC* sfx,
const
int
grid_size
)
{
#ifdef INCLUDE_CUDA
static
FluxEsm
<
float
,
MemType
::
CPU
,
MemType
::
CPU
,
MemType
::
GPU
>
F
(
sfx
,
meteo
,
*
model_param
,
*
surface_param
,
*
numerics
,
*
constants
,
grid_size
);
F
.
compute_flux
();
static
FluxEsm
<
float
,
MemType
::
CPU
,
MemType
::
CPU
,
MemType
::
GPU
>
F
(
sfx
,
meteo
,
grid_size
);
F
.
compute_flux
(
*
model_param
,
*
surface_param
,
*
numerics
,
*
constants
);
#else
static
FluxEsm
<
float
,
MemType
::
CPU
,
MemType
::
CPU
,
MemType
::
CPU
>
F
(
sfx
,
meteo
,
*
model_param
,
*
surface_param
,
*
numerics
,
*
constants
,
grid_size
);
F
.
compute_flux
();
static
FluxEsm
<
float
,
MemType
::
CPU
,
MemType
::
CPU
,
MemType
::
CPU
>
F
(
sfx
,
meteo
,
grid_size
);
F
.
compute_flux
(
*
model_param
,
*
surface_param
,
*
numerics
,
*
constants
);
#endif
}
...
...
This diff is collapsed.
Click to expand it.
srcCXX/sfx-esm.cpp
+
4
−
28
View file @
d0c77118
...
...
@@ -10,26 +10,11 @@
#include
"sfx-surface.cuh"
#include
"sfx-model-compute-subfunc.cuh"
template
<
typename
T
,
MemType
memIn
,
MemType
memOut
,
MemType
RunMem
>
FluxEsmBase
<
T
,
memIn
,
memOut
,
RunMem
>::
FluxEsmBase
(
sfxDataVecTypeC
*
sfx_in
,
meteoDataVecTypeC
*
meteo_in
,
const
sfx_esm_param_C
model_param_in
,
const
sfx_surface_param
surface_param_in
,
const
sfx_esm_numericsType_C
numerics_in
,
const
sfx_phys_constants
phys_constants_in
,
const
int
grid_size_in
)
:
ModelBase
<
T
,
memIn
,
memOut
,
RunMem
>
(
sfx_in
,
meteo_in
,
grid_size_in
)
{
surface
=
surface_param_in
;
phys
=
phys_constants_in
;
model
=
model_param_in
;
numerics
=
numerics_in
;
}
template
<
typename
T
,
MemType
memIn
,
MemType
memOut
,
MemType
RunMem
>
FluxEsmBase
<
T
,
memIn
,
memOut
,
RunMem
>::~
FluxEsmBase
()
{}
template
<
typename
T
,
MemType
memIn
,
MemType
memOut
>
void
FluxEsm
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>::
compute_flux
()
void
FluxEsm
<
T
,
memIn
,
memOut
,
MemType
::
CPU
>::
compute_flux
(
const
sfx_esm_param_C
model
,
const
sfx_surface_param
surface
,
const
sfx_esm_numericsType_C
numerics
,
const
sfx_phys_constants
phys
)
{
T
h
,
U
,
dT
,
Tsemi
,
dQ
,
z0_m
;
T
Re
,
z0_t
,
B
,
h0_m
,
h0_t
,
u_dyn0
,
zeta
,
Rib
,
zeta_conv_lim
,
Rib_conv_lim
,
f_m_conv_lim
,
f_h_conv_lim
,
psi_m
,
psi_h
,
phi_m
,
phi_h
,
Km
,
Pr_t_inv
,
Cm
,
Ct
;
...
...
@@ -138,17 +123,8 @@ void FluxEsm<T, memIn, memOut, MemType::CPU>::compute_flux()
}
template
class
FluxEsm
<
float
,
MemType
::
CPU
,
MemType
::
CPU
,
MemType
::
CPU
>;
template
class
FluxEsmBase
<
float
,
MemType
::
CPU
,
MemType
::
CPU
,
MemType
::
CPU
>;
#ifdef INCLUDE_CUDA
template
class
FluxEsmBase
<
float
,
MemType
::
GPU
,
MemType
::
GPU
,
MemType
::
GPU
>;
template
class
FluxEsmBase
<
float
,
MemType
::
GPU
,
MemType
::
GPU
,
MemType
::
CPU
>;
template
class
FluxEsmBase
<
float
,
MemType
::
GPU
,
MemType
::
CPU
,
MemType
::
GPU
>;
template
class
FluxEsmBase
<
float
,
MemType
::
CPU
,
MemType
::
GPU
,
MemType
::
GPU
>;
template
class
FluxEsmBase
<
float
,
MemType
::
CPU
,
MemType
::
CPU
,
MemType
::
GPU
>;
template
class
FluxEsmBase
<
float
,
MemType
::
CPU
,
MemType
::
GPU
,
MemType
::
CPU
>;
template
class
FluxEsmBase
<
float
,
MemType
::
GPU
,
MemType
::
CPU
,
MemType
::
CPU
>;
template
class
FluxEsm
<
float
,
MemType
::
GPU
,
MemType
::
GPU
,
MemType
::
GPU
>;
template
class
FluxEsm
<
float
,
MemType
::
GPU
,
MemType
::
GPU
,
MemType
::
CPU
>;
template
class
FluxEsm
<
float
,
MemType
::
GPU
,
MemType
::
CPU
,
MemType
::
GPU
>;
...
...
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