Skip to content
Snippets Groups Projects
Commit a2dc94f4 authored by Moritz Hanke's avatar Moritz Hanke
Browse files

replaces XML with YAML configuration file in dummy toy

parent 72efb4ec
No related branches found
No related tags found
No related merge requests found
......@@ -827,6 +827,8 @@ AC_CONFIG_FILES([
examples/toy_multi/toy_multi.sh
examples/perf_toy/perf_toy.sh
examples/toy_atm_ocn/toy_atm_ocn.sh
examples/toy_dummy/dummy_c.sh
examples/toy_dummy/dummy.sh
python/examples/ex0_simple_reg2d/run.sh
python/examples/ex1_read_structured_netcdf/run.sh
python/examples/ex2_read_unstructured_netcdf/run.sh
......@@ -926,7 +928,6 @@ AC_CONFIG_LINKS(m4_foreach_w([file],
coupling_test6.yaml
coupling_test6_local.yaml
cube_10x10.csv
dummy_coupling.xml
instance_test_1_1.yaml
instance_test_1_10.yaml
instance_test_1_2.yaml
......
noinst_PROGRAMS = \
OASIS3_MCT_example/OASIS3_MCT_example.x \
dummy_atmosphere.x \
dummy_atmosphere_c.x \
dummy_io.x \
dummy_io_c.x \
dummy_ocean.x \
dummy_ocean_c.x \
toy_dummy/dummy_atmosphere.x \
toy_dummy/dummy_atmosphere_c.x \
toy_dummy/dummy_io.x \
toy_dummy/dummy_io_c.x \
toy_dummy/dummy_ocean.x \
toy_dummy/dummy_ocean_c.x \
dynamic_config.x \
perf_toy/perf_toy_cube.x \
perf_toy/perf_toy_icon.x \
......@@ -59,14 +59,12 @@ EXTRA_DIST = toy_common.h
OASIS3_MCT_example_OASIS3_MCT_example_x_LDADD = $(top_builddir)/contrib/libgridio.a $(LDADD)
dummy_atmosphere_x_LDADD = $(FCLDADD)
dummy_atmosphere_x_SOURCES = dummy_atmosphere.f90
dummy_io_x_LDADD = $(FCLDADD)
dummy_io_x_SOURCES = dummy_io.f90
dummy_ocean_x_LDADD = $(FCLDADD)
dummy_ocean_x_SOURCES = dummy_ocean.f90
toy_dummy_dummy_atmosphere_x_LDADD = $(FCLDADD)
toy_dummy_dummy_atmosphere_x_SOURCES = toy_dummy/dummy_atmosphere.f90
toy_dummy_dummy_io_x_LDADD = $(FCLDADD)
toy_dummy_dummy_io_x_SOURCES = toy_dummy/dummy_io.f90
toy_dummy_dummy_ocean_x_LDADD = $(FCLDADD)
toy_dummy_dummy_ocean_x_SOURCES = toy_dummy/dummy_ocean.f90
dynamic_config_x_LDADD = $(top_builddir)/contrib/libgridio.a $(LDADD)
......
A set of dummy components are used to test the c user interface
and the coupling between three components. The grids are defined
internally and are kept simple.
a) dummy_atmosphere_c.c
b) dummy_ocean_c.c
c) dummy_io_c.c
A similar set of components is provided in Fortran first to check the
functionality of the Fortran user interface and second to provide an
example about the usage of the YAC Fortran interface.
a) dummy_atmosphere.F90
b) dummy_ocean.F90
c) dummy_io.F90
toy_dummy.yaml is used for both, the Fortran and the c dummies.
To start the coupled setup use
mpirun -np 1 dummy_atmosphere_c.x : np 1 dummy_ocean_c.x : -np 1 dummy_io_c.x
and likewise for the Fortran dummies
mpirun -np 1 dummy_atmosphere.x : np 1 dummy_ocean.x : -np 1 dummy_io.x
Skipping the io component does also work:
mpirun -np 1 dummy_atmosphere_c.x : np 1 dummy_ocean_c.x
mpirun -np 1 dummy_atmosphere.x : np 1 dummy_ocean.x
#!@SHELL@
CONFIG_FILE=@top_srcdir@/input/toy_dummy.yaml
@TEST_MPI_FALSE@exit 77
@TEST_MPI_TRUE@@MPI_LAUNCH@ \
-n 1 dummy_atmosphere.x -c $CONFIG_FILE : \
-n 1 dummy_ocean.x -c $CONFIG_FILE : \
-n 1 dummy_io.x -c $CONFIG_FILE
......@@ -68,8 +68,8 @@ PROGRAM dummy_atmosphere
CHARACTER(LEN=max_char_length) :: dummy_name
CHARACTER(LEN=max_char_length) :: field_name(no_of_fields)
CHARACTER(LEN=max_char_length) :: xml_filename
CHARACTER(LEN=max_char_length) :: xsd_filename
INTEGER :: field_collection_size(no_of_fields)
CHARACTER(LEN=max_char_length) :: yaml_filename
CHARACTER(LEN=max_char_length) :: grid_name
CHARACTER(LEN=max_char_length) :: comp_name
CHARACTER(LEN=max_char_length) :: timestep_string
......@@ -98,10 +98,10 @@ PROGRAM dummy_atmosphere
CALL mpi_init (ierror)
! Initialise the coupler
xml_filename = "dummy_coupling.xml"
xsd_filename = "coupling.xsd"
CALL yac_finit ( )
CALL yac_fread_config_xml(xml_filename, xsd_filename)
yaml_filename = "toy_dummy.yaml" ! default configuration file name
CALL parse_arguments(yaml_filename)
CALL yac_fread_config_yaml(yaml_filename)
! Inform the coupler about what we are
comp_name = "dummy_atmosphere"
......@@ -224,33 +224,48 @@ PROGRAM dummy_atmosphere
field_name(13) = "atmos_out3" ! output field
field_name(14) = "atmos_out4" ! output field
field_collection_size(1) = 2
field_collection_size(2) = 2
field_collection_size(3) = 3
field_collection_size(4) = 1
field_collection_size(5) = 4
field_collection_size(6) = 4
field_collection_size(7) = 1
field_collection_size(8) = 1
field_collection_size(9) = 1
field_collection_size(10) = 5
field_collection_size(11) = 1
field_collection_size(12) = 1
field_collection_size(13) = 1
field_collection_size(14) = 1
ALLOCATE(field_id(no_of_fields))
! fields for coupling
DO i = 1, no_of_fields-4
CALL yac_fdef_field ( &
& field_name(i), &
& comp_id, &
& cell_point_ids, &
& 1, &
& 1, &
& "1", &
& YAC_TIME_UNIT_SECOND, &
CALL yac_fdef_field ( &
& field_name(i), &
& comp_id, &
& cell_point_ids, &
& 1, &
& field_collection_size(i), &
& "1", &
& YAC_TIME_UNIT_SECOND, &
& field_id(i) )
ENDDO
! fields for output server
DO i = no_of_fields-3, no_of_fields
CALL yac_fdef_field ( &
& field_name(i), &
& comp_id, &
& cell_point_ids, &
& 1, &
& 1, &
& "1", &
& YAC_TIME_UNIT_SECOND, &
CALL yac_fdef_field ( &
& field_name(i), &
& comp_id, &
& cell_point_ids, &
& 1, &
& field_collection_size(i), &
& "1", &
& YAC_TIME_UNIT_SECOND, &
& field_id(i) )
ENDDO
......@@ -381,4 +396,46 @@ PROGRAM dummy_atmosphere
CALL mpi_finalize (ierror)
CONTAINS
SUBROUTINE parse_arguments(configFilename)
CHARACTER(LEN=max_char_length) :: configFilename
CHARACTER(LEN=max_char_length) :: arg
INTEGER :: i
LOGICAL :: skip_arg = .false.
DO i = 1, command_argument_count()
IF (.NOT. skip_arg) THEN
CALL get_command_argument(i, arg)
SELECT CASE (arg)
CASE ('-c')
IF (i == command_argument_count()) THEN
print '(2a, /)', 'missing parameter for command-line option: ', arg
print '(a, /)', 'command-line options:'
print '(a)', ' -c configFilename'
STOP
ELSE
CALL get_command_argument(i+1, configFilename)
skip_arg = .true.
END IF
CASE default
print '(2a, /)', 'unrecognised command-line option: ', arg
print '(a, /)', 'command-line options:'
print '(a)', ' -c configFilename'
STOP
END SELECT
ELSE
skip_arg = .false.
END IF
END DO
END SUBROUTINE parse_arguments
END PROGRAM dummy_atmosphere
......@@ -38,6 +38,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include "yac_interface.h"
#include "utils.h"
......@@ -46,7 +47,19 @@
#define NBR_VERTICES 4
#define YAC_RAD (0.01745329251994329576923690768489) // M_PI / 180
int main () {
#define STR_USAGE "Usage: %s -c configFilename\n"
#define YAC_ASSERT_ARGS(exp, msg) \
{ \
if(!((exp))) { \
fprintf(stderr, "ERROR: %s\n" STR_USAGE, msg, argv[0]); \
exit(EXIT_FAILURE); \
} \
}
static void parse_arguments(
int argc, char ** argv, char const ** configFilename);
int main (int argc, char *argv[]) {
const int no_of_fields = 14;
......@@ -64,9 +77,21 @@ int main () {
"atmos_out2", // output field
"atmos_out3", // output field
"atmos_out4"}; // output field
char * xml_filename = "dummy_coupling.xml";
char * xsd_filename = "coupling.xsd";
int field_collection_size[] = {
2,
2,
3,
1,
4,
4,
1,
1,
1,
5,
1,
1,
1,
1};
char * comp_name = "dummy_atmosphere";
char * grid_name = "dummy_atmosphere_grid";
......@@ -101,8 +126,10 @@ int main () {
MPI_Init (0, NULL);
// Initialise the coupler
yac_cinit ( );
yac_cread_config_xml(xml_filename, xsd_filename);
char const * configFilename = "toy_dummy.yaml"; // default configuration file
parse_arguments(argc, argv, &configFilename);
yac_cinit ();
yac_cread_config_yaml(configFilename);
// Inform the coupler about what we are
yac_cdef_comp ( comp_name, &comp_id );
......@@ -199,8 +226,8 @@ int main () {
yac_cdef_field ( fieldName[i],
comp_id,
cell_point_ids,
1,
1, "1", YAC_TIME_UNIT_SECOND,
1,field_collection_size[i],
"1",YAC_TIME_UNIT_SECOND,
&field_id[i] );
yac_csearch ( &ierror );
......@@ -347,3 +374,17 @@ int main () {
return 0;
}
static void parse_arguments(
int argc, char ** argv, char const ** configFilename) {
int opt;
while ((opt = getopt(argc, argv, "c:")) != -1) {
YAC_ASSERT_ARGS((opt == 'c'), "invalid command argument")
switch (opt) {
default:
case 'c':
*configFilename = optarg;
break;
}
}
}
#!@SHELL@
CONFIG_FILE=@top_srcdir@/input/toy_dummy.yaml
@TEST_MPI_FALSE@exit 77
@TEST_MPI_TRUE@@MPI_LAUNCH@ \
-n 1 dummy_atmosphere_c.x -c $CONFIG_FILE : \
-n 1 dummy_ocean_c.x -c $CONFIG_FILE : \
-n 1 dummy_io_c.x -c $CONFIG_FILE
......@@ -64,8 +64,7 @@ PROGRAM dummy_io
REAL(wp), PARAMETER :: YAC_RAD = 0.017453292519943295769_wp ! M_PI / 180
CHARACTER(LEN=max_char_length) :: field_name(no_of_fields)
CHARACTER(LEN=max_char_length) :: xml_filename
CHARACTER(LEN=max_char_length) :: xsd_filename
CHARACTER(LEN=max_char_length) :: yaml_filename
CHARACTER(LEN=max_char_length) :: grid_name
CHARACTER(LEN=max_char_length) :: comp_name
......@@ -91,10 +90,10 @@ PROGRAM dummy_io
CALL mpi_init (ierror)
! Initialise the coupler
xml_filename = "dummy_coupling.xml"
xsd_filename = "coupling.xsd"
CALL yac_finit ()
CALL yac_fread_config_xml( xml_filename, xsd_filename )
CALL yac_finit ( )
yaml_filename = "toy_dummy.yaml" ! default configuration file name
CALL parse_arguments(yaml_filename)
CALL yac_fread_config_yaml(yaml_filename)
! Inform the coupler about what we are
comp_name = "dummy_io"
......@@ -257,4 +256,46 @@ PROGRAM dummy_io
CALL mpi_finalize (ierror)
CONTAINS
SUBROUTINE parse_arguments(configFilename)
CHARACTER(LEN=max_char_length) :: configFilename
CHARACTER(LEN=max_char_length) :: arg
INTEGER :: i
LOGICAL :: skip_arg = .false.
DO i = 1, command_argument_count()
IF (.NOT. skip_arg) THEN
CALL get_command_argument(i, arg)
SELECT CASE (arg)
CASE ('-c')
IF (i == command_argument_count()) THEN
print '(2a, /)', 'missing parameter for command-line option: ', arg
print '(a, /)', 'command-line options:'
print '(a)', ' -c configFilename'
STOP
ELSE
CALL get_command_argument(i+1, configFilename)
skip_arg = .true.
END IF
CASE default
print '(2a, /)', 'unrecognised command-line option: ', arg
print '(a, /)', 'command-line options:'
print '(a)', ' -c configFilename'
STOP
END SELECT
ELSE
skip_arg = .false.
END IF
END DO
END SUBROUTINE parse_arguments
END PROGRAM dummy_io
......@@ -38,6 +38,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include "yac_interface.h"
#include "utils.h"
......@@ -46,7 +47,19 @@
#define NBR_VERTICES 4
#define YAC_RAD (0.01745329251994329576923690768489) // M_PI / 180
int main () {
#define STR_USAGE "Usage: %s -c configFilename\n"
#define YAC_ASSERT_ARGS(exp, msg) \
{ \
if(!((exp))) { \
fprintf(stderr, "ERROR: %s\n" STR_USAGE, msg, argv[0]); \
exit(EXIT_FAILURE); \
} \
}
static void parse_arguments(
int argc, char ** argv, char const ** configFilename);
int main (int argc, char *argv[]) {
int no_of_fields = 8;
......@@ -59,9 +72,6 @@ int main () {
"ocean_out3",
"ocean_out4"};
char * xml_filename = "dummy_coupling.xml";
char * xsd_filename = "coupling.xsd";
char * comp_name = "dummy_io";
char * grid_name[] = { "ocean_grid",
......@@ -95,8 +105,10 @@ int main () {
MPI_Init (0, NULL);
// Initialise the coupler
yac_cinit ( );
yac_cread_config_xml(xml_filename, xsd_filename);
char const * configFilename = "toy_dummy.yaml"; // default configuration file
parse_arguments(argc, argv, &configFilename);
yac_cinit ();
yac_cread_config_yaml(configFilename);
// Inform the coupler about what we are
yac_cdef_comp ( comp_name, &comp_id );
......@@ -223,3 +235,17 @@ int main () {
return 0;
}
static void parse_arguments(
int argc, char ** argv, char const ** configFilename) {
int opt;
while ((opt = getopt(argc, argv, "c:")) != -1) {
YAC_ASSERT_ARGS((opt == 'c'), "invalid command argument")
switch (opt) {
default:
case 'c':
*configFilename = optarg;
break;
}
}
}
......@@ -34,8 +34,8 @@ PROGRAM dummy_ocean
CHARACTER(LEN=max_char_length) :: dummy_name
CHARACTER(LEN=max_char_length) :: field_name(no_of_fields)
CHARACTER(LEN=max_char_length) :: xml_filename
CHARACTER(LEN=max_char_length) :: xsd_filename
INTEGER :: field_collection_size(no_of_fields)
CHARACTER(LEN=max_char_length) :: yaml_filename
CHARACTER(LEN=max_char_length) :: grid_name
CHARACTER(LEN=max_char_length) :: comp_name
CHARACTER(LEN=max_char_length) :: timestep_string
......@@ -63,11 +63,12 @@ PROGRAM dummy_ocean
CALL mpi_init (ierror)
! Initialise the coupler
xml_filename = "dummy_coupling.xml"
xsd_filename = "coupling.xsd"
CALL yac_finit ( )
CALL yac_fread_config_xml( xml_filename, xsd_filename )
yaml_filename = "toy_dummy.yaml" ! default configuration file name
CALL parse_arguments(yaml_filename)
CALL yac_fread_config_yaml(yaml_filename)
! Inform the coupler about what we are
comp_name = "dummy_ocean"
......@@ -190,33 +191,48 @@ PROGRAM dummy_ocean
field_name(13) = "ocean_out3" ! output field
field_name(14) = "ocean_out4" ! output field
field_collection_size(1) = 2
field_collection_size(2) = 2
field_collection_size(3) = 3
field_collection_size(4) = 1
field_collection_size(5) = 4
field_collection_size(6) = 4
field_collection_size(7) = 1
field_collection_size(8) = 1
field_collection_size(9) = 1
field_collection_size(10) = 5
field_collection_size(11) = 1
field_collection_size(12) = 1
field_collection_size(13) = 1
field_collection_size(14) = 1
ALLOCATE(field_id(no_of_fields))
! fields for coupling
DO i = 1, no_of_fields-4
CALL yac_fdef_field ( &
& field_name(i), &
& comp_id, &
& cell_point_ids, &
& 1, &
& 1, &
& "1", &
& YAC_TIME_UNIT_SECOND, &
CALL yac_fdef_field ( &
& field_name(i), &
& comp_id, &
& cell_point_ids, &
& 1, &
& field_collection_size(i), &
& "1", &
& YAC_TIME_UNIT_SECOND, &
& field_id(i) )
ENDDO
! fields for output server
DO i = no_of_fields-3, no_of_fields
CALL yac_fdef_field ( &
& field_name(i), &
& comp_id, &
& cell_point_ids, &
& 1, &
& 1, &
& "1", &
& YAC_TIME_UNIT_SECOND, &
CALL yac_fdef_field ( &
& field_name(i), &
& comp_id, &
& cell_point_ids, &
& 1, &
& field_collection_size(i), &
& "1", &
& YAC_TIME_UNIT_SECOND, &
& field_id(i) )
ENDDO
......@@ -332,4 +348,46 @@ PROGRAM dummy_ocean
CALL mpi_finalize (ierror)
CONTAINS
SUBROUTINE parse_arguments(configFilename)
CHARACTER(LEN=max_char_length) :: configFilename
CHARACTER(LEN=max_char_length) :: arg
INTEGER :: i
LOGICAL :: skip_arg = .false.
DO i = 1, command_argument_count()
IF (.NOT. skip_arg) THEN
CALL get_command_argument(i, arg)
SELECT CASE (arg)
CASE ('-c')
IF (i == command_argument_count()) THEN
print '(2a, /)', 'missing parameter for command-line option: ', arg
print '(a, /)', 'command-line options:'
print '(a)', ' -c configFilename'
STOP
ELSE
CALL get_command_argument(i+1, configFilename)
skip_arg = .true.
END IF
CASE default
print '(2a, /)', 'unrecognised command-line option: ', arg
print '(a, /)', 'command-line options:'
print '(a)', ' -c configFilename'
STOP
END SELECT
ELSE
skip_arg = .false.
END IF
END DO
END SUBROUTINE parse_arguments
END PROGRAM dummy_ocean
......@@ -38,6 +38,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include "yac_interface.h"
#include "utils.h"
......@@ -46,7 +47,19 @@
#define NBR_VERTICES 4
#define YAC_RAD (0.01745329251994329576923690768489) // M_PI / 180
int main () {
#define STR_USAGE "Usage: %s -c configFilename\n"
#define YAC_ASSERT_ARGS(exp, msg) \
{ \
if(!((exp))) { \
fprintf(stderr, "ERROR: %s\n" STR_USAGE, msg, argv[0]); \
exit(EXIT_FAILURE); \
} \
}
static void parse_arguments(
int argc, char ** argv, char const ** configFilename);
int main (int argc, char *argv[]) {
const int no_of_fields = 14;
......@@ -64,9 +77,21 @@ int main () {
"ocean_out2", // output field
"ocean_out3", // output field
"ocean_out4"}; // output field
char * xml_filename = "dummy_coupling.xml";
char * xsd_filename = "coupling.xsd";
int field_collection_size[] = {
2,
2,
3,
1,
4,
4,
1,
1,
1,
5,
1,
1,
1,
1};
char * comp_name = "dummy_ocean";
char * grid_name = "dummy_ocean_grid";
......@@ -101,8 +126,10 @@ int main () {
MPI_Init (0, NULL);
// Initialise the coupler
yac_cinit ( );
yac_cread_config_xml(xml_filename, xsd_filename);
char const * configFilename = "toy_dummy.yaml"; // default configuration file
parse_arguments(argc, argv, &configFilename);
yac_cinit ();
yac_cread_config_yaml(configFilename);
// Inform the coupler about what we are
yac_cdef_comp ( comp_name, &comp_id );
......@@ -190,7 +217,8 @@ int main () {
yac_cdef_field ( fieldName[i],
comp_id,
cell_point_ids,
1,1,"1",YAC_TIME_UNIT_SECOND,
1,field_collection_size[i],
"1",YAC_TIME_UNIT_SECOND,
&field_id[i] );
yac_csearch ( &ierror );
......@@ -325,3 +353,17 @@ int main () {
return 0;
}
static void parse_arguments(
int argc, char ** argv, char const ** configFilename) {
int opt;
while ((opt = getopt(argc, argv, "c:")) != -1) {
YAC_ASSERT_ARGS((opt == 'c'), "invalid command argument")
switch (opt) {
default:
case 'c':
*configFilename = optarg;
break;
}
}
}
This diff is collapsed.
definitions:
- &time_config
src_lag: 1
tgt_lag: 1
coupling_period: 3600
- &config_model
<<: *time_config
time_reduction: none
interpolation:
- nnn
- fixed:
user_value: -999.0
- &config_io
<<: *time_config
time_reduction: accumulate
interpolation:
- conservative:
enforced_conservation: false
normalisation: fracarea
partial_coverage: false
- fixed:
user_value: -999.0
start_date: 2008-03-09T16:05:07
end_date: 2008-03-10T16:05:07
timestep_unit: second
calendar: proleptic-gregorian
coupling:
- src_component: dummy_atmosphere
src_grid: dummy_atmosphere_grid
tgt_component: dummy_ocean
tgt_grid: dummy_ocean_grid
<<: *config_model
field: [surface_downward_eastward_stress,
surface_downward_northward_stress,
surface_fresh_water_flux,
surface_temperature,
total_heat_flux,
atmosphere_sea_ice_bundle]
- src_component: dummy_ocean
src_grid: dummy_ocean_grid
tgt_component: dummy_atmosphere
tgt_grid: dummy_atmosphere_grid
<<: *config_model
field: [sea_surface_temperature,
eastward_sea_water_velocity,
northward_sea_water_velocity,
ocean_sea_ice_bundle]
- src_component: dummy_atmosphere
src_grid: dummy_atmosphere_grid
tgt_component: dummy_io
tgt_grid: atmos_grid
field: [atmos_out1, atmos_out2, atmos_out3, atmos_out4]
<<: *config_io
- src_component: dummy_ocean
src_grid: dummy_ocean_grid
tgt_component: dummy_io
tgt_grid: ocean_grid
field: [ocean_out1, ocean_out2, ocean_out3, ocean_out4]
<<: *config_io
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment