10 use kinds,
only: kind_real
37 bind(c,name=
'soca_model2geovals_linear_changevar_f90')
38 integer(c_int),
intent(in) :: c_key_geom, c_key_dxin, c_key_dxout
50 do i=1,
size(dxout%fields)
51 call dxin%get(dxout%fields(i)%metadata%name, field)
53 if (field%metadata%getval_name == dxout%fields(i)%name)
then
54 dxout%fields(i)%val(:,:,:) = field%val(:,:,:)
55 elseif (field%metadata%getval_name_surface == dxout%fields(i)%name)
then
56 dxout%fields(i)%val(:,:,1) = field%val(:,:,1)
58 call abor1_ftn(
'error in soca_model2geovals_linear_changevar_f90 processing ' &
59 // dxout%fields(i)%name )
73 bind(c,name=
'soca_model2geovals_linear_changevarAD_f90')
74 integer(c_int),
intent(in) :: c_key_geom, c_key_dxin, c_key_dxout
86 do i=1,
size(dxin%fields)
87 call dxout%get(dxin%fields(i)%metadata%name, field)
89 if(field%metadata%getval_name == dxin%fields(i)%name)
then
90 field%val = field%val + dxin%fields(i)%val
91 elseif(field%metadata%getval_name_surface == dxin%fields(i)%name)
then
92 field%val(:,:,1) = field%val(:,:,1) + dxin%fields(i)%val(:,:,1)
94 call abor1_ftn(
'error in soca_model2geovals_linear_changevarAD_f90 processing ' &
95 // dxin%fields(i)%name )
109 bind(c,name=
'soca_model2geovals_changevar_f90')
110 integer(c_int),
intent(in) :: c_key_geom, c_key_xin, c_key_xout
121 do i=1,
size(xout%fields)
124 if (xout%fields(i)%metadata%dummy_atm) cycle
127 select case (xout%fields(i)%name)
130 case (
'distance_from_coast')
131 xout%fields(i)%val(:,:,1) = real(geom%distance_from_coast, kind=kind_real)
133 case (
'sea_area_fraction')
134 xout%fields(i)%val(:,:,1) = real(geom%mask2d, kind=kind_real)
136 case (
'mesoscale_representation_error')
139 xout%fields(i)%val(geom%isc:geom%iec, geom%jsc:geom%jec, 1) = &
140 geom%mask2d(geom%isc:geom%iec, geom%jsc:geom%jec) * &
141 sqrt(geom%cell_area(geom%isc:geom%iec, geom%jsc:geom%jec) / &
142 geom%rossby_radius(geom%isc:geom%iec, geom%jsc:geom%jec))
145 case (
'surface_temperature_where_sea')
146 call xin%get(
'tocn', field)
147 xout%fields(i)%val(:,:,1) = field%val(:,:,1) + 273.15_kind_real
149 case (
'sea_floor_depth_below_sea_surface')
150 call xin%get(
'hocn', field)
151 xout%fields(i)%val(:,:,1) = sum(field%val, dim=3)
155 call xin%get(xout%fields(i)%metadata%name, field)
156 if (field%metadata%getval_name == xout%fields(i)%name)
then
157 xout%fields(i)%val(:,:,:) = field%val(:,:,:)
158 elseif (field%metadata%getval_name_surface == xout%fields(i)%name)
then
159 xout%fields(i)%val(:,:,1) = field%val(:,:,1)
161 call abor1_ftn(
'error in soca_model2geovals_changevar_f90 processing ' &
162 // xout%fields(i)%name )
Handle fields for the model.
C++ interfaces for soca_geom_mod::soca_geom.
type(registry_t), public soca_geom_registry
Linked list interface - defines registry_t type.
registry for soca_increment_mod::soca_increment instances for use in Fortran/C++ interface of soca_in...
type(registry_t), public soca_increment_registry
Linked list interface - defines registry_t type.
C++ interface for converting model variables to geovals (mostly identity function)
subroutine soca_model2geovals_changevar_f90(c_key_geom, c_key_xin, c_key_xout)
C++ interface for the non-linear change of variables from model to geovals.
subroutine soca_model2geovals_linear_changevar_f90(c_key_geom, c_key_dxin, c_key_dxout)
C++ interface for linear change of variables from model to geovals.
subroutine soca_model2geovals_linear_changevarad_f90(c_key_geom, c_key_dxin, c_key_dxout)
C++ interface for linear change of variables from geovals to model.
registry for soca_state_mod::soca_state instances for use in Fortran/C++ interfaces of soca_state_mod...
type(registry_t), public soca_state_registry
Linked list interface - defines registry_t type.
Holds all data and metadata related to a single field variable.