diff --git a/.DS_Store b/.DS_Store index 3422c8d..0e2cf95 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.github/.DS_Store b/.github/.DS_Store index add2bfd..4775b8c 100644 Binary files a/.github/.DS_Store and b/.github/.DS_Store differ diff --git a/.github/CSV_TEMPLATES/.DS_Store b/.github/CSV_TEMPLATES/.DS_Store index f880fb6..7e21c7a 100644 Binary files a/.github/CSV_TEMPLATES/.DS_Store and b/.github/CSV_TEMPLATES/.DS_Store differ diff --git a/.github/CSV_TEMPLATES/old/.DS_Store b/.github/CSV_TEMPLATES/old/.DS_Store new file mode 100644 index 0000000..b6a5dbb Binary files /dev/null and b/.github/CSV_TEMPLATES/old/.DS_Store differ diff --git a/.github/CSV_TEMPLATES/fix_reserved_words.py b/.github/CSV_TEMPLATES/old/fix_reserved_words.py similarity index 100% rename from .github/CSV_TEMPLATES/fix_reserved_words.py rename to .github/CSV_TEMPLATES/old/fix_reserved_words.py diff --git a/.github/CSV_TEMPLATES/templates/.DS_Store b/.github/CSV_TEMPLATES/templates/.DS_Store index cbd7a2c..4d164f0 100644 Binary files a/.github/CSV_TEMPLATES/templates/.DS_Store and b/.github/CSV_TEMPLATES/templates/.DS_Store differ diff --git a/.github/CSV_TEMPLATES/templates/horizontal_grid.csv b/.github/CSV_TEMPLATES/templates/horizontal_grid.csv new file mode 100644 index 0000000..2d8d2cd --- /dev/null +++ b/.github/CSV_TEMPLATES/templates/horizontal_grid.csv @@ -0,0 +1,21 @@ +field_order,field_type,field_id,label,description,data_source,required,placeholder,options_type,default_value +1,markdown,instructions,Instructions,"# Horizontal Grid Properties Documentation\n\nThis template documents horizontal grid specifications as compound objects referenced by model components. Based on EMD Section 4.1 requirements.",none,false,,, +2,dropdown,grid,Grid,"The horizontal grid type.\n\nMANDATORY field from Native horizontal grid Type CV.",horizontal_grid_types,true,,dict_keys, +3,textarea,description,Description (Optional),"Free-text description of the horizontal grid.\n\nOPTIONAL field.",none,false,"Additional horizontal grid details if needed",, +4,dropdown,grid_mapping,Grid Mapping,"The coordinate reference system of the horizontal coordinates.\n\nMANDATORY field from Grid Mapping CV.",grid_mappings,true,,list, +5,dropdown,region,Region,"The portion of the globe where calculations are performed.\n\nMANDATORY field from Region CV.",horizontal_regions,true,,dict_keys, +6,dropdown,temporal_refinement,Temporal Refinement,"How the distribution of grid cells varies with time.\n\nMANDATORY field from Temporal refinement CV.",temporal_refinements,true,,dict_keys, +7,dropdown,arrangement,Arrangement,"Grid arrangement of orthogonal physical quantities.\n\nMANDATORY field from Arrangement CV.",grid_arrangements,true,,list, +8,input,resolution_x,Resolution X,"Horizontal resolution in X direction.\n\nOPTIONAL float field.",none,false,"e.g., 1.25",, +9,input,resolution_y,Resolution Y,"Horizontal resolution in Y direction.\n\nOPTIONAL float field.",none,false,"e.g., 0.9375",, +10,dropdown,horizontal_units,Horizontal Units,"Units for resolution_x and resolution_y.\n\nOPTIONAL field - Required if resolution_x or resolution_y are set.",resolution_units,false,,dict_keys, +11,input,n_cells,N Cells,"Total number of grid cells.\n\nMANDATORY integer field.",none,true,"e.g., 139968",, +12,input,n_sides,N Sides,"Number of cell sides for unstructured grids.\n\nOPTIONAL integer field.",none,false,"e.g., 714274",, +13,input,n_vertices,N Vertices,"Number of vertices for unstructured grids.\n\nOPTIONAL integer field.",none,false,"e.g., 567145",, +14,dropdown,truncation_method,Truncation Method,"Method for truncating spherical harmonic expansion.\n\nOPTIONAL field from Truncation method CV.",truncation_methods,false,,list, +15,input,truncation_number,Truncation Number,"Truncation number for spectral grids.\n\nOPTIONAL integer field.",none,false,"e.g., 63",, +16,input,resolution_range_km,Resolution Range (km),"Minimum and maximum resolution in km.\n\nMANDATORY field as [float,float].\n\nFormat: min, max",none,true,"e.g., 57.0, 290",, +17,input,mean_resolution_km,Mean Resolution (km),"Mean resolution in km.\n\nMANDATORY float field.",none,true,"e.g., 234.5",, +18,dropdown,nominal_resolution,Nominal Resolution,"Nominal resolution characterizing the grid.\n\nMANDATORY field from Nominal resolution CV.",nominal_resolutions,true,,list, +19,dropdown,issue_category,Issue Type,This is pre-set and cannot be changed.,issue_category,true,,hardcoded,0 +20,dropdown,issue_kind,Issue Kind,Select whether this is a new submission or modification of existing entry.,issue_kind,true,,hardcoded,0 diff --git a/.github/CSV_TEMPLATES/templates/horizontal_grid.py b/.github/CSV_TEMPLATES/templates/horizontal_grid.py new file mode 100644 index 0000000..08597d4 --- /dev/null +++ b/.github/CSV_TEMPLATES/templates/horizontal_grid.py @@ -0,0 +1,52 @@ +# Horizontal Grid Properties Template Configuration + +TEMPLATE_CONFIG = { + 'name': 'Horizontal Grid Properties Documentation', + 'description': 'Document horizontal grid specifications as compound objects for EMD compliance.', + 'title': '[EMD] Horizontal Grid Properties', + 'labels': ['emd-submission', 'horizontal-grid'], + 'issue_category': 'horizontal-grid' +} + +import cmipld +from cmipld.utils.ldparse import * + +# Data for this template +DATA = { + 'horizontal_grid_types': { + 'no-horizontal-grid': {'id': 'no-horizontal-grid'}, + ** name_multikey_extract( + cmipld.get('universal:native-horizontal-grid-type/graph.jsonld')['@graph'], + ['id','validation-key','ui-label'],'validation-key' + ) + }, + 'grid_mappings': [ + 'albers_conical_equal_area', 'azimuthal_equidistant', 'geostationary', + 'lambert_azimuthal_equal_area', 'lambert_conformal_conic', 'lambert_cylindrical_equal_area', + 'latitude_longitude', 'orthographic', 'polar_stereographic', + 'rotated_latitude_longitude', 'sinusoidal', 'stereographic', + 'transverse_mercator', 'vertical_perspective' + ], + 'horizontal_regions': name_multikey_extract( + cmipld.get('universal:native-horizontal-grid-region/graph.jsonld')['@graph'], + ['id','validation-key','ui-label'],'validation-key' + ), + 'temporal_refinements': name_multikey_extract( + cmipld.get('universal:native-horizontal-grid-temporal-refinement/graph.jsonld')['@graph'], + ['id','validation-key','ui-label'],'validation-key' + ), + 'grid_arrangements': ['arakawa_A', 'arakawa_B', 'arakawa_C', 'arakawa_D', 'arakawa_E'], + 'truncation_methods': ['triangular', 'rhomboidal'], + 'nominal_resolutions': name_multikey_extract( + cmipld.get('universal:resolution/graph.jsonld')['@graph'], + ['id','validation-key','ui-label'],'validation-key' + ), + 'resolution_units': { + 'degrees': {'id': 'degrees', 'validation-key': 'degrees'}, + 'km': {'id': 'km', 'validation-key': 'km'}, + 'm': {'id': 'm', 'validation-key': 'm'} + }, + # Issue tracking fields + 'issue_category_options': ['horizontal-grid'], + 'issue_kind_options': ['new', 'modify'] +} diff --git a/.github/CSV_TEMPLATES/templates/new_component.csv b/.github/CSV_TEMPLATES/templates/new_component.csv index 40de1b3..c430c37 100644 --- a/.github/CSV_TEMPLATES/templates/new_component.csv +++ b/.github/CSV_TEMPLATES/templates/new_component.csv @@ -1,42 +1,41 @@ field_order,field_type,field_id,label,description,data_source,required,placeholder,options_type,default_value -1,markdown,instructions,Instructions,"# Model Component Documentation\n\nThis template documents individual components of your climate model (atmosphere, ocean, land, etc.) as required for CMIP7 participation. Each component description enables traceability across different models, supports scientific evaluation, and is mandatory for publishing model data to ESGF. The information you provide helps the climate modeling community understand your component's scientific basis, track how components are shared between institutions, and ensure proper attribution in research studies.",none,false,,, -2,dropdown,component_process,Component Process,"Select the process that this model component simulates.\n\nFrom Model component process CV: aerosol, atmosphere, atmospheric chemistry, land surface, land ice, ocean, ocean biogeochemistry, sea ice",realms,true,,dict_keys, -3,input,name,Name,"The name of the model component that simulated the process.\n\nE.g. BISICLES-UKESM-ISMIP6, MOSES2, ECHAM6.3",none,true,"e.g., ECHAM6.3, NEMO3.6",, -4,input,family,Family,"The name of the family of models that the model component belongs to.\n\nFamily components share code bases but may be configured differently (e.g. different resolutions, parameter choices).",none,true,"e.g., ECHAM, NEMO, CLM",, -5,textarea,description,Description,"A scientific overview of the model component.\n\nThe description should summarise the key processes simulated by the model component.\n\nEasy-to-answer MIP-relevant questions may be addressed using free text, such as:\n- For aerosol: 'Are aerosols driven by emissions or concentration?' 'What is the aerosol activation scheme?'\n- For atmosphere: 'What convection scheme is used?' 'How are clouds parameterized?'\n- For ocean: 'What mixing scheme is used?' 'How is overflow parameterized?'",none,true,"Provide a scientific overview summarizing key processes simulated, scientific basis, and MIP-relevant details.",, -7,input,reference_doi,Reference 1 - DOI,The persistent identifier (DOI) for the primary component reference. You may enter multiple separated by a comma.,none,true,https://doi.org/...,, -10,input,code_base,Code Base,"A URL (preferably DOI) for the source code.\n\nMust identify specific point in repository history if version controlled.\n\nSet to 'private' if not publicly available.",none,false,"https://github.com/organization/repo/tree/v1.2.3 or 'private'",, -11,multi-select,embedded_in,Embedded In,"Select the model component(s) in which this component is embedded.\n\nSelect all that apply.\n\nSee section 3.1 for definition of embedded components.\n\nOmit if not applicable.",realms,false,,dict_multiple, -12,multi-select,coupled_with,Coupled With,"Select the model component(s) to which this component is coupled.\n\nSelect all that apply.\n\nSee section 3.1 for definition of coupled components.\n\nOmit if not applicable.",realms,false,,dict_multiple, -13,markdown,horizontal_grid_header,Native Horizontal Grid,"## Native Horizontal Grid\n\nStandardised description of the model component's horizontal grid.",none,false,,, -14,dropdown,horizontal_same_as_component,Same as Component (Horizontal),"If this component uses the same horizontal grid as another component, select it here.\n\nIf set, no other horizontal grid properties are required.\n\nMost 'embedded in' component grids will share the same grid as their parent component.",realms,false,,list_with_na,0 -15,dropdown,horizontal_descriptor,Descriptor,"Common-usage short description of horizontal type and resolution.\n\nFrom Native horizontal grid Descriptor CV (e.g., N96, ORCA1, T63).",grid_descriptors,false,,list_with_na,0 -16,dropdown,horizontal_type,Type,"The horizontal grid type - method of distributing grid points over the sphere.\n\nFrom Native horizontal grid Type CV.",horizontal_grid_types,false,,dict_keys, -17,dropdown,horizontal_grid_mapping,Grid Mapping,"The coordinate reference system of the horizontal coordinates.\n\nFrom Native horizontal grid Grid Mapping CV (CF grid mapping names).",grid_mappings,false,,list, -18,dropdown,horizontal_region,Region,"The portion of the globe where horizontal grid calculations are performed.\n\nFrom Native horizontal grid Region CV.",horizontal_regions,false,,dict_keys, -19,dropdown,horizontal_temporal_refinement,Temporal Refinement,"How the distribution of grid cells varies with time.\n\nFrom Native horizontal grid Temporal refinement CV.",temporal_refinements,false,,dict_keys, -20,dropdown,horizontal_arrangement,Arrangement,"Grid arrangement of orthogonal physical quantities (Arakawa grid).\n\nFrom Native horizontal grid Arrangement CV.",grid_arrangements,false,,list_with_na,0 -21,textarea,horizontal_description,Grid Description (Optional),"Free-text description of the grid.\n\nOnly required if there is information not covered by other properties.",none,false,"Additional grid details if needed",, -22,input,horizontal_n_x,N x,"Number of grid cells in X direction for mass-related quantities.\n\nOmit when not applicable or not constant.",none,false,"e.g., 192",, -23,input,horizontal_n_y,N y,"Number of grid cells in Y direction for mass-related quantities.\n\nOmit when not applicable or not constant.",none,false,"e.g., 173",, -24,input,horizontal_n_xy,N xy,"Number of grid cells in horizontal plane for mass-related quantities.\n\nOmit when not applicable or not constant.",none,false,"e.g., 33216",, -25,input,horizontal_n_polygon,N polygon,"Number of primal polygons in an unstructured grid.\n\nOmit when not applicable or not constant.",none,false,"e.g., 265160",, -26,input,horizontal_n_side,N side,"Total number of unique primal cell sides (edges) in unstructured grid.\n\nOmit when not applicable or not constant.",none,false,"e.g., 714274",, -27,input,horizontal_n_vertex,N vertex,"Number of unique primal vertices (nodes) in unstructured grid.\n\nOmit when not applicable or not constant.",none,false,"e.g., 567145",, -28,dropdown,horizontal_truncation_method,Truncation Method,"Method for truncating spherical harmonic expansion of spectral grid.\n\nFrom Native horizontal grid Truncation method CV.\n\nOmit when not applicable.",truncation_methods,false,,list_with_na,0 -29,input,horizontal_truncation_number,Truncation Number,"Zonal (east-west) wave number at which spectral grid is truncated.\n\nOmit when not applicable.",none,false,"e.g., 63",, -30,input,horizontal_resolution_range_km,Resolution Range (km),"Minimum and maximum resolution in km (to 3 significant figures).\n\nCalculated as min/max values of dmax from CMIP6 metadata specifications.\n\nFormat: min, max",none,false,"e.g., 57.0, 290",, -31,input,horizontal_mean_resolution_km,Mean Resolution (km),"Mean resolution in km (to 3 significant figures) of the native grid.\n\nCalculated as mean of dmax values from CMIP6 metadata specifications.",none,false,"e.g., 234",, -32,dropdown,horizontal_nominal_resolution,Nominal Resolution,"Nominal resolution in km that characterises the grid resolution.\n\nCalculated using CMIP6 metadata specifications procedure.\n\nFrom Native horizontal grid Nominal resolution CV.",nominal_resolutions,false,,list, -33,markdown,vertical_grid_header,Native Vertical Grid,"## Native Vertical Grid\n\nStandardised description of the model component's vertical grid.",none,false,,, -34,dropdown,vertical_same_as_component,Same as Component (Vertical),"If this component uses the same vertical grid as another component, select it here.\n\nIf set, no other vertical grid properties are required.",realms,false,,list_with_na,0 -35,dropdown,vertical_coordinate,Coordinate,"The coordinate type of the vertical grid.\n\nFrom Native vertical grid Coordinate CV.\n\nSelect 'none' if no vertical dimension.",vertical_coordinates,true,,dict_keys, -36,textarea,vertical_description,Grid Description (Optional),"Free-text description of the vertical grid.\n\nOnly required if there is information not covered by other properties.",none,false,"Additional vertical grid details if needed",, -37,input,vertical_n_z,N z,"Number of grid cells in Z direction for mass-related quantities.\n\nOmit when not applicable or not constant.",none,false,"e.g., 70",, -38,input,vertical_n_z_range,N z Range,"For variable resolution grids: minimum and maximum number of Z grid cells.\n\nOmit if N z property has been set.\n\nFormat: min, max",none,false,"e.g., 5, 15",, -39,input,vertical_bottom_layer_thickness,Bottom Layer Thickness,"Thickness of bottom model layer for mass-related quantities.\n\nReport as dimensional quantity. Units given by Units property.\n\nOmit when not applicable or not constant.",none,false,"e.g., 10",, -40,input,vertical_top_layer_thickness,Top Layer Thickness,"Thickness of top model layer for mass-related quantities.\n\nReport as dimensional quantity. Units given by Units property.\n\nOmit when not applicable or not constant.",none,false,"e.g., 10",, -41,input,vertical_top_of_model,Top of Model,"Value of upper boundary of top model layer.\n\nRelative to lower boundary of bottom layer or appropriate datum (e.g., mean sea level).\n\nReport as dimensional quantity. Units given by Units property.",none,false,"e.g., 85003.5",, -42,dropdown,vertical_units,Units,"Physical units of Bottom layer thickness, Top layer thickness, and Top of Model values.\n\nFrom Native vertical grid Units CV.\n\nOmit when not applicable.",vertical_units,false,,dict_keys, -43,dropdown,issue_category,Issue Type,This is pre-set and cannot be changed.,issue_category,true,,hardcoded,0 -44,dropdown,issue_kind,Issue Kind,"Select whether this is a new submission or modification of existing entry.",issue_kind,true,,hardcoded,0 +1,markdown,instructions,Instructions,"# Model Component Documentation\n\nThis template documents individual components of your climate model as required for CMIP7 participation. Each component description enables traceability across different models, supports scientific evaluation, and is mandatory for publishing model data to ESGF. The information you provide helps the climate modeling community understand your component's scientific basis, track how components are shared between institutions, and ensure proper attribution in research studies.",none,false,,, +2,dropdown,component,Component,"Select the process that this model component simulates.\n\nMANDATORY field from Model component process CV.",realms,true,,dict_keys, +3,input,name,Name,"The name of the model component.\n\nMANDATORY field.",none,true,"e.g., ECHAM6.3, NEMO3.6",, +4,input,family,Family,"The name of the family of models that the model component belongs to.\n\nMANDATORY field.",none,true,"e.g., ECHAM, NEMO, CLM",, +5,textarea,description,Description,"A scientific overview of the model component.\n\nMANDATORY field.",none,true,"Provide a scientific overview summarizing key processes simulated, scientific basis, and MIP-relevant details.",, +6,markdown,references_header,References,"## References\n\nMANDATORY: Each reference must include both Citation and DOI properties.",none,false,,, +7,textarea,reference_1_citation,Reference 1 - Citation,"Human-readable citation for the primary component reference.\n\nMANDATORY field.",none,true,"Author(s). (Year). Title. Journal/Report.",, +8,input,reference_1_doi,Reference 1 - DOI,"The persistent identifier (DOI) for the primary component reference.\n\nMANDATORY field.",none,true,https://doi.org/...,, +9,input,code_base,Code Base,"A URL (preferably DOI) for the source code.\n\nMANDATORY field. Set to 'private' if not publicly available.",none,true,"https://github.com/org/repo/tree/v1.2.3 or 'private'",, +10,multi-select,embedded_in,Embedded In,"Select the model component(s) in which this component is embedded.\n\nSelect all that apply.\n\nOPTIONAL field from Model component process CV.",realms,false,,dict_multiple, +11,multi-select,coupled_with,Coupled With,"Select the model component(s) to which this component is coupled.\n\nSelect all that apply.\n\nOPTIONAL field from Model component process CV.",realms,false,,dict_multiple, +12,markdown,horizontal_grid_header,Native Horizontal Grid,"## Native Horizontal Grid\n\nMANDATORY compound object describing the component's horizontal grid.",none,false,,, +13,dropdown,horizontal_grid,Grid,"The horizontal grid type.\n\nMANDATORY field from Native horizontal grid Type CV.",horizontal_grid_types,true,,dict_keys, +14,textarea,horizontal_description,Description (Optional),"Free-text description of the horizontal grid.\n\nOPTIONAL field.",none,false,"Additional horizontal grid details if needed",, +15,dropdown,horizontal_grid_mapping,Grid Mapping,"The coordinate reference system of the horizontal coordinates.\n\nMANDATORY field from Grid Mapping CV.",grid_mappings,true,,list, +16,dropdown,horizontal_region,Region,"The portion of the globe where horizontal grid calculations are performed.\n\nMANDATORY field from Region CV.",horizontal_regions,true,,dict_keys, +17,dropdown,horizontal_temporal_refinement,Temporal Refinement,"How the distribution of grid cells varies with time.\n\nMANDATORY field from Temporal refinement CV.",temporal_refinements,true,,dict_keys, +18,dropdown,horizontal_arrangement,Arrangement,"Grid arrangement of orthogonal physical quantities.\n\nMANDATORY field from Arrangement CV.",grid_arrangements,true,,list, +19,input,horizontal_resolution_x,Resolution X,"Horizontal resolution in X direction (float).\n\nOPTIONAL field.",none,false,"e.g., 1.25",, +20,input,horizontal_resolution_y,Resolution Y,"Horizontal resolution in Y direction (float).\n\nOPTIONAL field.",none,false,"e.g., 0.9375",, +21,dropdown,horizontal_units,Horizontal Units,"Units for resolution_x and resolution_y.\n\nOPTIONAL field - Required if resolution_x or resolution_y are set.",resolution_units,false,,dict_keys, +22,input,horizontal_n_cells,N Cells,"Total number of grid cells.\n\nMANDATORY integer field.",none,true,"e.g., 139968",, +23,input,horizontal_n_sides,N Sides,"Number of cell sides (edges) for unstructured grids.\n\nOPTIONAL integer field.",none,false,"e.g., 714274",, +24,input,horizontal_n_vertices,N Vertices,"Number of vertices (nodes) for unstructured grids.\n\nOPTIONAL integer field.",none,false,"e.g., 567145",, +25,dropdown,horizontal_truncation_method,Truncation Method,"Method for truncating spherical harmonic expansion.\n\nOPTIONAL field from Truncation method CV.",truncation_methods,false,,list, +26,input,horizontal_truncation_number,Truncation Number,"Truncation number for spectral grids.\n\nOPTIONAL integer field.",none,false,"e.g., 63",, +27,input,horizontal_resolution_range_km,Resolution Range (km),"Minimum and maximum resolution in km.\n\nMANDATORY field as [float,float].\n\nFormat: min, max",none,true,"e.g., 57.0, 290",, +28,input,horizontal_mean_resolution_km,Mean Resolution (km),"Mean resolution in km.\n\nMANDATORY float field.",none,true,"e.g., 234.5",, +29,dropdown,horizontal_nominal_resolution,Nominal Resolution,"Nominal resolution characterizing the grid.\n\nMANDATORY field from Nominal resolution CV.",nominal_resolutions,true,,list, +30,markdown,vertical_grid_header,Native Vertical Grid,"## Native Vertical Grid\n\nMANDATORY compound object describing the component's vertical grid.",none,false,,, +31,dropdown,vertical_coordinate,Coordinate,"The coordinate type of the vertical grid.\n\nMANDATORY field from Coordinate CV.",vertical_coordinates,true,,dict_keys, +32,textarea,vertical_description,Description (Optional),"Free-text description of the vertical grid.\n\nOPTIONAL field.",none,false,"Additional vertical grid details if needed",, +33,input,vertical_n_z,N z,"Number of grid cells in Z direction.\n\nOPTIONAL integer field. Must be omitted if n_z_range is set.",none,false,"e.g., 70",, +34,input,vertical_n_z_range,N z Range,"Minimum and maximum number of Z grid cells for variable resolution.\n\nOPTIONAL field as [integer,integer]. Must be omitted if n_z is set.\n\nFormat: min, max",none,false,"e.g., 5, 15",, +35,input,vertical_bottom_layer_thickness,Bottom Layer Thickness,"Thickness of bottom model layer.\n\nOPTIONAL float field.",none,false,"e.g., 10.0",, +36,input,vertical_top_layer_thickness,Top Layer Thickness,"Thickness of top model layer.\n\nOPTIONAL float field.",none,false,"e.g., 10.0",, +37,input,vertical_top_of_model,Top of Model,"Value of upper boundary of top model layer.\n\nOPTIONAL float field.",none,false,"e.g., 85003.5",, +38,dropdown,vertical_units,Vertical Units,"Physical units for thickness and boundary values.\n\nOPTIONAL field - Required if any thickness/boundary values are set.",vertical_units,false,,dict_keys, +39,dropdown,issue_category,Issue Type,This is pre-set and cannot be changed.,issue_category,true,,hardcoded,0 +40,dropdown,issue_kind,Issue Kind,Select whether this is a new submission or modification of existing entry.,issue_kind,true,,hardcoded,0 diff --git a/.github/CSV_TEMPLATES/templates/new_component.py b/.github/CSV_TEMPLATES/templates/new_component.py index 8fa4466..f2d4e9b 100644 --- a/.github/CSV_TEMPLATES/templates/new_component.py +++ b/.github/CSV_TEMPLATES/templates/new_component.py @@ -11,29 +11,18 @@ import cmipld from cmipld.utils.ldparse import * - - -# Data for this template - includes all CV data needed for component documentation +# Data for this template - updated to match EMD property requirements DATA = { 'realms': name_multikey_extract( - cmipld.get('universal:realm/graph.jsonld')['@graph'], - ['id','validation-key','ui-label'],'validation-key' + cmipld.get('universal:realm/graph.jsonld')['@graph'], + ['id','validation-key','ui-label'],'validation-key' ), - - 'grid_descriptors': [ - 'N48', 'N96', 'N216', 'N512', 'N1280', - 'ORCA2', 'eORCA2', 'ORCA1', 'eORCA1', - 'ORCA025', 'eORCA025', 'ORCA012', 'eORCA012', - 'T42', 'T63', 'T85', 'T106', 'T127', 'T255', - 'TL95', 'TL159', 'TL255', 'TL319', 'TL511', 'TL959', 'TL1279', - 'Tco199', 'Tco399', 'R30', 'C96' - ], 'horizontal_grid_types': { 'no-horizontal-grid': {'id': 'no-horizontal-grid', 'validation-key': 'no-horizontal-grid'}, ** name_multikey_extract( cmipld.get('universal:native-horizontal-grid-type/graph.jsonld')['@graph'], ['id','validation-key','ui-label'],'validation-key' - ) + ) }, 'grid_mappings': [ 'albers_conical_equal_area', 'azimuthal_equidistant', 'geostationary', @@ -43,32 +32,36 @@ 'transverse_mercator', 'vertical_perspective' ], 'horizontal_regions': name_multikey_extract( - cmipld.get('universal:native-horizontal-grid-region/graph.jsonld')['@graph'], - ['id','validation-key','ui-label'],'validation-key' + cmipld.get('universal:native-horizontal-grid-region/graph.jsonld')['@graph'], + ['id','validation-key','ui-label'],'validation-key' ), 'temporal_refinements': name_multikey_extract( - cmipld.get('universal:native-horizontal-grid-temporal-refinement/graph.jsonld')['@graph'], - ['id','validation-key','ui-label'],'validation-key' + cmipld.get('universal:native-horizontal-grid-temporal-refinement/graph.jsonld')['@graph'], + ['id','validation-key','ui-label'],'validation-key' ), 'grid_arrangements': ['arakawa_A', 'arakawa_B', 'arakawa_C', 'arakawa_D', 'arakawa_E'], 'truncation_methods': ['triangular', 'rhomboidal'], - 'nominal_resolutions': name_multikey_extract( - cmipld.get('universal:resolution/graph.jsonld')['@graph'], - ['id','validation-key','ui-label'],'validation-key' - ) , + cmipld.get('universal:resolution/graph.jsonld')['@graph'], + ['id','validation-key','ui-label'],'validation-key' + ), 'vertical_coordinates': { 'no-vertical-grid': {'id': 'no-vertical-grid', 'validation-key': 'no-vertical-grid'}, ** name_multikey_extract( cmipld.get('universal:native-vertical-grid-coordinate/graph.jsonld')['@graph'], ['id','validation-key','ui-label'],'validation-key' - ) + ) }, 'vertical_units': name_multikey_extract( - cmipld.get('universal:native-vertical-grid-units/graph.jsonld')['@graph'], - ['id','validation-key','ui-label'],'validation-key' + cmipld.get('universal:native-vertical-grid-units/graph.jsonld')['@graph'], + ['id','validation-key','ui-label'],'validation-key' ), + 'resolution_units': { + 'degrees': {'id': 'degrees', 'validation-key': 'degrees'}, + 'km': {'id': 'km', 'validation-key': 'km'}, + 'm': {'id': 'm', 'validation-key': 'm'} + }, # Issue tracking fields 'issue_category_options': ['component'], 'issue_kind_options': ['new', 'modify'] -} \ No newline at end of file +} diff --git a/.github/CSV_TEMPLATES/templates/top_level_model.csv b/.github/CSV_TEMPLATES/templates/top_level_model.csv index f4285b6..d1ab270 100644 --- a/.github/CSV_TEMPLATES/templates/top_level_model.csv +++ b/.github/CSV_TEMPLATES/templates/top_level_model.csv @@ -1,17 +1,17 @@ field_order,field_type,field_id,label,description,data_source,required,placeholder,options_type,default_value 1,markdown,instructions,Instructions,"# Top Level Model Documentation\n\nThis template documents your complete climate model as required for CMIP7 participation and is mandatory for publishing datasets to ESGF. The documentation enables model discovery and comparison across institutions, provides essential context for interpreting model output, and supports automated validation workflows that ensure data quality and scientific reproducibility in the global climate research community.",none,false,,, -2,input,name,Name,"The name of the model.\n\nFor CMIP7, must be a registered source_id.\n\nMay include family indication but not version.\n\nE.g. HadGEM3-GC31-HH, CESM2, ICON-ESM",none,true,"e.g., HadGEM3-GC31-HH, CESM2",, -3,input,family,Family,"The name of the family of models that this model belongs to.\n\nFamily models share code bases but may be configured differently.\n\nE.g. HadCM2, HadGEM3",none,true,"e.g., HadGEM3, CESM",, -4,multi-select,components,Components,"Select the processes that are dynamically simulated by the model components.\n\nSelect all that apply.\n\nEach process must be further described by model component properties.\n\nFrom Model component process CV.\n\nE.g. atmosphere, aerosol, land surface, ocean, sea ice",realms,true,,dict_multiple, -5,textarea,description,Description,"A brief, free-text scientific overview of the model.\n\nInclude mention of dynamically simulated processes but avoid duplicating component-level information.\n\nShould provide high-level model purpose and capabilities.",none,true,"Brief scientific overview of the model, its purpose, and key capabilities. Mention the dynamically simulated processes selected above.",, -6,multi-select,calendar,Calendar,"The calendars that define which dates are permitted in the model.\n\nSelect all that apply.\n\nMultiple calendars may be selected for different simulations.\n\nFor CMIP7, note that simulation calendar is defined in output datasets.\n\nFrom Model Calendar CV.",calendars,false,,dict_multiple, -7,input,release_year,Release Year,"The year in which this model configuration was released, or first used for published simulations.\n\nE.g. 2016, 2019, 2023",none,true,"e.g., 2016, 2019, 2023",, -8,markdown,references_header,References,"## References\n\n**Instructions for References:** Each reference must include both Citation and DOI properties.\nA DOI is required for all references - if one doesn't exist, you must create one (e.g., with Zenodo).",none,false,,, -9,textarea,reference_1_citation,Reference 1 - Citation,"Human-readable citation for the primary model reference.\n\nMust include complete bibliographic information.",none,true,"Smith, R. S., et al. (2021). Model Name: Description of the model. Journal Name, Volume, Pages. https://doi.org/...",, -10,input,reference_1_doi,Reference 1 - DOI,The persistent identifier (DOI) for the primary model reference.,none,true,https://doi.org/10.1029/2021MS002520,, -11,textarea,reference_2_citation,Reference 2 - Citation (Optional),Human-readable citation for additional model reference.,none,false,"Additional reference citation (optional)",, -12,input,reference_2_doi,Reference 2 - DOI (Optional),DOI for additional model reference.,none,false,https://doi.org/...,, -13,textarea,reference_3_citation,Reference 3 - Citation (Optional),Human-readable citation for additional model reference.,none,false,"Additional reference citation (optional)",, -14,input,reference_3_doi,Reference 3 - DOI (Optional),DOI for additional model reference.,none,false,https://doi.org/...,, +2,input,name,Name,"The name of the model.\n\nFor CMIP7, must be a registered source_id.\n\nMANDATORY field.",none,true,"e.g., HadGEM3-GC31-HH, CESM2",, +3,input,family,Family,"The name of the family of models that this model belongs to.\n\nMANDATORY field.",none,true,"e.g., HadGEM3, CESM",, +4,multi-select,dynamic_components,Dynamic Components,"Select the processes that are dynamically simulated by the model components.\n\nSelect all that apply.\n\nMANDATORY field from Model component process CV.",realms,true,,dict_multiple, +5,multi-select,prescribed_components,Prescribed Components,"Select the processes that use prescribed (externally provided) data rather than dynamic simulation.\n\nSelect all that apply.\n\nMANDATORY field from Model component process CV.",realms,true,,dict_multiple, +6,multi-select,omitted_components,Omitted Components,"Select the processes that are completely absent from this model.\n\nSelect all that apply.\n\nMANDATORY field from Model component process CV.",realms,true,,dict_multiple, +7,textarea,description,Description,"A brief, free-text scientific overview of the model.\n\nMANDATORY field.",none,true,"Brief scientific overview of the model, its purpose, and key capabilities.",, +8,multi-select,calendar,Calendar,"The calendars that define which dates are permitted in the model.\n\nSelect all that apply.\n\nMANDATORY field from Model Calendar CV.",calendars,true,,dict_multiple, +9,input,release_year,Release Year,"The year in which this model configuration was released.\n\nMANDATORY integer field.",none,true,"e.g., 2016, 2019, 2023",, +10,markdown,references_header,References,"## References\n\nMANDATORY: Each reference must include both Citation and DOI properties.",none,false,,, +11,textarea,reference_1_citation,Reference 1 - Citation,"Human-readable citation for the primary model reference.\n\nMANDATORY field.",none,true,"Smith, R. S., et al. (2021). Model Name: Description. Journal, Volume, Pages.",, +12,input,reference_1_doi,Reference 1 - DOI,"The persistent identifier (DOI) for the primary model reference.\n\nMANDATORY field.",none,true,https://doi.org/10.1029/2021MS002520,, +13,textarea,reference_2_citation,Reference 2 - Citation (Optional),Human-readable citation for additional model reference.,none,false,"Additional reference citation (optional)",, +14,input,reference_2_doi,Reference 2 - DOI (Optional),DOI for additional model reference.,none,false,https://doi.org/...,, 15,dropdown,issue_category,Issue Type,This is pre-set and cannot be changed.,issue_category,true,,hardcoded,0 16,dropdown,issue_kind,Issue Kind,Select whether this is a new submission or modification of existing entry.,issue_kind,true,,hardcoded,0 diff --git a/.github/CSV_TEMPLATES/templates/vertical_grid.csv b/.github/CSV_TEMPLATES/templates/vertical_grid.csv new file mode 100644 index 0000000..51c267b --- /dev/null +++ b/.github/CSV_TEMPLATES/templates/vertical_grid.csv @@ -0,0 +1,12 @@ +field_order,field_type,field_id,label,description,data_source,required,placeholder,options_type,default_value +1,markdown,instructions,Instructions,"# Vertical Grid Properties Documentation\n\nThis template documents vertical grid specifications as compound objects referenced by model components. Based on EMD Section 4.2 requirements.",none,false,,, +2,dropdown,coordinate,Coordinate,"The coordinate type of the vertical grid.\n\nMANDATORY field from Coordinate CV.",vertical_coordinates,true,,dict_keys, +3,textarea,description,Description (Optional),"Free-text description of the vertical grid.\n\nOPTIONAL field.",none,false,"Additional vertical grid details if needed",, +4,input,n_z,N z,"Number of grid cells in Z direction.\n\nOPTIONAL integer field. Must be omitted if n_z_range is set.",none,false,"e.g., 70",, +5,input,n_z_range,N z Range,"Minimum and maximum number of Z grid cells for variable resolution.\n\nOPTIONAL field as [integer,integer]. Must be omitted if n_z is set.\n\nFormat: min, max",none,false,"e.g., 5, 15",, +6,input,bottom_layer_thickness,Bottom Layer Thickness,"Thickness of bottom model layer.\n\nOPTIONAL float field.",none,false,"e.g., 10.0",, +7,input,top_layer_thickness,Top Layer Thickness,"Thickness of top model layer.\n\nOPTIONAL float field.",none,false,"e.g., 10.0",, +8,input,top_of_model,Top of Model,"Value of upper boundary of top model layer.\n\nOPTIONAL float field.",none,false,"e.g., 85003.5",, +9,dropdown,vertical_units,Vertical Units,"Physical units for thickness and boundary values.\n\nOPTIONAL field - Required if any thickness/boundary values are set.",vertical_units,false,,dict_keys, +10,dropdown,issue_category,Issue Type,This is pre-set and cannot be changed.,issue_category,true,,hardcoded,0 +11,dropdown,issue_kind,Issue Kind,Select whether this is a new submission or modification of existing entry.,issue_kind,true,,hardcoded,0 diff --git a/.github/CSV_TEMPLATES/templates/vertical_grid.py b/.github/CSV_TEMPLATES/templates/vertical_grid.py new file mode 100644 index 0000000..6cb377e --- /dev/null +++ b/.github/CSV_TEMPLATES/templates/vertical_grid.py @@ -0,0 +1,30 @@ +# Vertical Grid Properties Template Configuration + +TEMPLATE_CONFIG = { + 'name': 'Vertical Grid Properties Documentation', + 'description': 'Document vertical grid specifications as compound objects for EMD compliance.', + 'title': '[EMD] Vertical Grid Properties', + 'labels': ['emd-submission', 'vertical-grid'], + 'issue_category': 'vertical-grid' +} + +import cmipld +from cmipld.utils.ldparse import * + +# Data for this template +DATA = { + 'vertical_coordinates': { + 'no-vertical-grid': {'id': 'no-vertical-grid', 'validation-key': 'no-vertical-grid'}, + ** name_multikey_extract( + cmipld.get('universal:native-vertical-grid-coordinate/graph.jsonld')['@graph'], + ['id','validation-key','ui-label'],'validation-key' + ) + }, + 'vertical_units': name_multikey_extract( + cmipld.get('universal:native-vertical-grid-units/graph.jsonld')['@graph'], + ['id','validation-key','ui-label'],'validation-key' + ), + # Issue tracking fields + 'issue_category_options': ['vertical-grid'], + 'issue_kind_options': ['new', 'modify'] +} diff --git a/.github/ISSUE_TEMPLATE/.DS_Store b/.github/ISSUE_TEMPLATE/.DS_Store index e3a7b47..2da754a 100644 Binary files a/.github/ISSUE_TEMPLATE/.DS_Store and b/.github/ISSUE_TEMPLATE/.DS_Store differ diff --git a/.github/ISSUE_TEMPLATE/horizontal_grid.yml b/.github/ISSUE_TEMPLATE/horizontal_grid.yml new file mode 100644 index 0000000..757d328 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/horizontal_grid.yml @@ -0,0 +1,291 @@ +name: Horizontal Grid Properties Documentation +description: Document horizontal grid specifications as compound objects for EMD compliance. +title: "[EMD] Horizontal Grid Properties" +labels: ['emd-submission', 'horizontal-grid'] +body: + - type: markdown + attributes: + value: | + # Horizontal Grid Properties Documentation + + This template documents horizontal grid specifications as compound objects referenced by model components. Based on EMD Section 4.1 requirements. + + - type: dropdown + id: grid + attributes: + label: Grid + description: | + The horizontal grid type. + + MANDATORY field from Native horizontal grid Type CV. + options: + - "no-horizontal-grid" + - "cubed-sphere" + - "cubic-octahedral-spectral-reduced-gaussian" + - "displaced-pole" + - "icosahedral-geodesic-dual" + - "icosahedral-geodesic" + - "linear-spectral-gaussian" + - "no-grid" + - "plane-projection" + - "quadratic-spectral-gaussian" + - "reduced-gaussian" + - "regular-gaussian" + - "regular-latitude-longitude" + - "rotated-pole" + - "spectral-gaussian" + - "spectral-reduced-gaussian" + - "stretched" + - "tripolar" + - "unstructured-polygonal" + - "unstructured-triangular" + - "yin-yang" + validations: + required: true + + - type: textarea + id: description + attributes: + label: Description (Optional) + description: | + Free-text description of the horizontal grid. + + OPTIONAL field. + placeholder: "Additional horizontal grid details if needed" + + - type: dropdown + id: grid_mapping + attributes: + label: Grid Mapping + description: | + The coordinate reference system of the horizontal coordinates. + + MANDATORY field from Grid Mapping CV. + options: + - "albers_conical_equal_area" + - "azimuthal_equidistant" + - "geostationary" + - "lambert_azimuthal_equal_area" + - "lambert_conformal_conic" + - "lambert_cylindrical_equal_area" + - "latitude_longitude" + - "orthographic" + - "polar_stereographic" + - "rotated_latitude_longitude" + - "sinusoidal" + - "stereographic" + - "transverse_mercator" + - "vertical_perspective" + validations: + required: true + + - type: dropdown + id: region + attributes: + label: Region + description: | + The portion of the globe where calculations are performed. + + MANDATORY field from Region CV. + options: + - "antarctica" + - "global" + - "greenland" + - "limited-area" + validations: + required: true + + - type: dropdown + id: temporal_refinement + attributes: + label: Temporal Refinement + description: | + How the distribution of grid cells varies with time. + + MANDATORY field from Temporal refinement CV. + options: + - "adaptive" + - "dynamically-stretched" + - "static" + validations: + required: true + + - type: dropdown + id: arrangement + attributes: + label: Arrangement + description: | + Grid arrangement of orthogonal physical quantities. + + MANDATORY field from Arrangement CV. + options: + - "arakawa_A" + - "arakawa_B" + - "arakawa_C" + - "arakawa_D" + - "arakawa_E" + validations: + required: true + + - type: input + id: resolution_x + attributes: + label: Resolution X + description: | + Horizontal resolution in X direction. + + OPTIONAL float field. + placeholder: "e.g., 1.25" + + - type: input + id: resolution_y + attributes: + label: Resolution Y + description: | + Horizontal resolution in Y direction. + + OPTIONAL float field. + placeholder: "e.g., 0.9375" + + - type: dropdown + id: horizontal_units + attributes: + label: Horizontal Units + description: | + Units for resolution_x and resolution_y. + + OPTIONAL field - Required if resolution_x or resolution_y are set. + options: + - "degrees" + - "km" + - "m" + + - type: input + id: n_cells + attributes: + label: N Cells + description: | + Total number of grid cells. + + MANDATORY integer field. + placeholder: "e.g., 139968" + validations: + required: true + + - type: input + id: n_sides + attributes: + label: N Sides + description: | + Number of cell sides for unstructured grids. + + OPTIONAL integer field. + placeholder: "e.g., 714274" + + - type: input + id: n_vertices + attributes: + label: N Vertices + description: | + Number of vertices for unstructured grids. + + OPTIONAL integer field. + placeholder: "e.g., 567145" + + - type: dropdown + id: truncation_method + attributes: + label: Truncation Method + description: | + Method for truncating spherical harmonic expansion. + + OPTIONAL field from Truncation method CV. + options: + - "triangular" + - "rhomboidal" + + - type: input + id: truncation_number + attributes: + label: Truncation Number + description: | + Truncation number for spectral grids. + + OPTIONAL integer field. + placeholder: "e.g., 63" + + - type: input + id: resolution_range_km + attributes: + label: Resolution Range (km) + description: | + Minimum and maximum resolution in km. + + MANDATORY field as [float,float]. + + Format: min, max + placeholder: "e.g., 57.0, 290" + validations: + required: true + + - type: input + id: mean_resolution_km + attributes: + label: Mean Resolution (km) + description: | + Mean resolution in km. + + MANDATORY float field. + placeholder: "e.g., 234.5" + validations: + required: true + + - type: dropdown + id: nominal_resolution + attributes: + label: Nominal Resolution + description: | + Nominal resolution characterizing the grid. + + MANDATORY field from Nominal resolution CV. + options: + - "0.5 km" + - "10000 km" + - "1000 km" + - "100 km" + - "10 km" + - "1 km" + - "1x1 degree" + - "2.5 km" + - "2500 km" + - "250 km" + - "25 km" + - "5000 km" + - "500 km" + - "50 km" + - "5 km" + validations: + required: true + + - type: dropdown + id: issue_category + attributes: + label: Issue Type + description: This is pre-set and cannot be changed. + options: + - "horizontal-grid" + default: 0 + validations: + required: true + + - type: dropdown + id: issue_kind + attributes: + label: Issue Kind + description: Select whether this is a new submission or modification of existing entry. + options: + - "new" + - "modify" + default: 0 + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/new_component.yml b/.github/ISSUE_TEMPLATE/new_component.yml index 430d0c6..63be2d2 100644 --- a/.github/ISSUE_TEMPLATE/new_component.yml +++ b/.github/ISSUE_TEMPLATE/new_component.yml @@ -8,16 +8,16 @@ body: value: | # Model Component Documentation - This template documents individual components of your climate model (atmosphere, ocean, land, etc.) as required for CMIP7 participation. Each component description enables traceability across different models, supports scientific evaluation, and is mandatory for publishing model data to ESGF. The information you provide helps the climate modeling community understand your component's scientific basis, track how components are shared between institutions, and ensure proper attribution in research studies. + This template documents individual components of your climate model as required for CMIP7 participation. Each component description enables traceability across different models, supports scientific evaluation, and is mandatory for publishing model data to ESGF. The information you provide helps the climate modeling community understand your component's scientific basis, track how components are shared between institutions, and ensure proper attribution in research studies. - type: dropdown - id: component_process + id: component attributes: - label: Component Process + label: Component description: | Select the process that this model component simulates. - From Model component process CV: aerosol, atmosphere, atmospheric chemistry, land surface, land ice, ocean, ocean biogeochemistry, sea ice + MANDATORY field from Model component process CV. options: - "aerosol" - "atmos" @@ -35,9 +35,9 @@ body: attributes: label: Name description: | - The name of the model component that simulated the process. + The name of the model component. - E.g. BISICLES-UKESM-ISMIP6, MOSES2, ECHAM6.3 + MANDATORY field. placeholder: "e.g., ECHAM6.3, NEMO3.6" validations: required: true @@ -49,7 +49,7 @@ body: description: | The name of the family of models that the model component belongs to. - Family components share code bases but may be configured differently (e.g. different resolutions, parameter choices). + MANDATORY field. placeholder: "e.g., ECHAM, NEMO, CLM" validations: required: true @@ -61,22 +61,38 @@ body: description: | A scientific overview of the model component. - The description should summarise the key processes simulated by the model component. - - Easy-to-answer MIP-relevant questions may be addressed using free text, such as: - - For aerosol: 'Are aerosols driven by emissions or concentration?' 'What is the aerosol activation scheme?' - - For atmosphere: 'What convection scheme is used?' 'How are clouds parameterized?' - - For ocean: 'What mixing scheme is used?' 'How is overflow parameterized?' + MANDATORY field. placeholder: "Provide a scientific overview summarizing key processes simulated, scientific basis, and MIP-relevant details." validations: required: true + - type: markdown + attributes: + value: | + ## References + + MANDATORY: Each reference must include both Citation and DOI properties. + + - type: textarea + id: reference_1_citation + attributes: + label: Reference 1 - Citation + description: | + Human-readable citation for the primary component reference. + + MANDATORY field. + placeholder: "Author(s). (Year). Title. Journal/Report." + validations: + required: true + - type: input - id: reference_doi + id: reference_1_doi attributes: label: Reference 1 - DOI description: | - The persistent identifier (DOI) for the primary component reference. You may enter multiple separated by a comma. + The persistent identifier (DOI) for the primary component reference. + + MANDATORY field. placeholder: "https://doi.org/..." validations: required: true @@ -88,10 +104,10 @@ body: description: | A URL (preferably DOI) for the source code. - Must identify specific point in repository history if version controlled. - - Set to 'private' if not publicly available. - placeholder: "https://github.com/organization/repo/tree/v1.2.3 or 'private'" + MANDATORY field. Set to 'private' if not publicly available. + placeholder: "https://github.com/org/repo/tree/v1.2.3 or 'private'" + validations: + required: true - type: dropdown attributes: @@ -102,9 +118,7 @@ body: Select all that apply. - See section 3.1 for definition of embedded components. - - Omit if not applicable. + OPTIONAL field from Model component process CV. options: - "aerosol" - "atmos" @@ -124,9 +138,7 @@ body: Select all that apply. - See section 3.1 for definition of coupled components. - - Omit if not applicable. + OPTIONAL field from Model component process CV. options: - "aerosol" - "atmos" @@ -142,80 +154,16 @@ body: value: | ## Native Horizontal Grid - Standardised description of the model component's horizontal grid. - - - type: dropdown - id: horizontal_same_as_component - attributes: - label: Same as Component (Horizontal) - description: | - If this component uses the same horizontal grid as another component, select it here. - - If set, no other horizontal grid properties are required. - - Most 'embedded in' component grids will share the same grid as their parent component. - options: - - "Not applicable" - - "aerosol" - - "atmos" - - "atmosChem" - - "land" - - "landIce" - - "ocean" - - "ocnBgchem" - - "seaIce" - default: 0 + MANDATORY compound object describing the component's horizontal grid. - type: dropdown - id: horizontal_descriptor + id: horizontal_grid attributes: - label: Descriptor + label: Grid description: | - Common-usage short description of horizontal type and resolution. + The horizontal grid type. - From Native horizontal grid Descriptor CV (e.g., N96, ORCA1, T63). - options: - - "Not applicable" - - "N48" - - "N96" - - "N216" - - "N512" - - "N1280" - - "ORCA2" - - "eORCA2" - - "ORCA1" - - "eORCA1" - - "ORCA025" - - "eORCA025" - - "ORCA012" - - "eORCA012" - - "T42" - - "T63" - - "T85" - - "T106" - - "T127" - - "T255" - - "TL95" - - "TL159" - - "TL255" - - "TL319" - - "TL511" - - "TL959" - - "TL1279" - - "Tco199" - - "Tco399" - - "R30" - - "C96" - default: 0 - - - type: dropdown - id: horizontal_type - attributes: - label: Type - description: | - The horizontal grid type - method of distributing grid points over the sphere. - - From Native horizontal grid Type CV. + MANDATORY field from Native horizontal grid Type CV. options: - "no-horizontal-grid" - "cubed-sphere" @@ -238,6 +186,18 @@ body: - "unstructured-polygonal" - "unstructured-triangular" - "yin-yang" + validations: + required: true + + - type: textarea + id: horizontal_description + attributes: + label: Description (Optional) + description: | + Free-text description of the horizontal grid. + + OPTIONAL field. + placeholder: "Additional horizontal grid details if needed" - type: dropdown id: horizontal_grid_mapping @@ -246,7 +206,7 @@ body: description: | The coordinate reference system of the horizontal coordinates. - From Native horizontal grid Grid Mapping CV (CF grid mapping names). + MANDATORY field from Grid Mapping CV. options: - "albers_conical_equal_area" - "azimuthal_equidistant" @@ -262,6 +222,8 @@ body: - "stereographic" - "transverse_mercator" - "vertical_perspective" + validations: + required: true - type: dropdown id: horizontal_region @@ -270,12 +232,14 @@ body: description: | The portion of the globe where horizontal grid calculations are performed. - From Native horizontal grid Region CV. + MANDATORY field from Region CV. options: - "antarctica" - "global" - "greenland" - "limited-area" + validations: + required: true - type: dropdown id: horizontal_temporal_refinement @@ -284,97 +248,94 @@ body: description: | How the distribution of grid cells varies with time. - From Native horizontal grid Temporal refinement CV. + MANDATORY field from Temporal refinement CV. options: - "adaptive" - "dynamically-stretched" - "static" + validations: + required: true - type: dropdown id: horizontal_arrangement attributes: label: Arrangement description: | - Grid arrangement of orthogonal physical quantities (Arakawa grid). + Grid arrangement of orthogonal physical quantities. - From Native horizontal grid Arrangement CV. + MANDATORY field from Arrangement CV. options: - - "Not applicable" - "arakawa_A" - "arakawa_B" - "arakawa_C" - "arakawa_D" - "arakawa_E" - default: 0 - - - type: textarea - id: horizontal_description - attributes: - label: Grid Description (Optional) - description: | - Free-text description of the grid. - - Only required if there is information not covered by other properties. - placeholder: "Additional grid details if needed" + validations: + required: true - type: input - id: horizontal_n_x + id: horizontal_resolution_x attributes: - label: N x + label: Resolution X description: | - Number of grid cells in X direction for mass-related quantities. + Horizontal resolution in X direction (float). - Omit when not applicable or not constant. - placeholder: "e.g., 192" + OPTIONAL field. + placeholder: "e.g., 1.25" - type: input - id: horizontal_n_y + id: horizontal_resolution_y attributes: - label: N y + label: Resolution Y description: | - Number of grid cells in Y direction for mass-related quantities. + Horizontal resolution in Y direction (float). - Omit when not applicable or not constant. - placeholder: "e.g., 173" + OPTIONAL field. + placeholder: "e.g., 0.9375" - - type: input - id: horizontal_n_xy + - type: dropdown + id: horizontal_units attributes: - label: N xy + label: Horizontal Units description: | - Number of grid cells in horizontal plane for mass-related quantities. + Units for resolution_x and resolution_y. - Omit when not applicable or not constant. - placeholder: "e.g., 33216" + OPTIONAL field - Required if resolution_x or resolution_y are set. + options: + - "degrees" + - "km" + - "m" - type: input - id: horizontal_n_polygon + id: horizontal_n_cells attributes: - label: N polygon + label: N Cells description: | - Number of primal polygons in an unstructured grid. + Total number of grid cells. - Omit when not applicable or not constant. - placeholder: "e.g., 265160" + MANDATORY integer field. + placeholder: "e.g., 139968" + validations: + required: true - type: input - id: horizontal_n_side + id: horizontal_n_sides attributes: - label: N side + label: N Sides description: | - Total number of unique primal cell sides (edges) in unstructured grid. + Number of cell sides (edges) for unstructured grids. - Omit when not applicable or not constant. + OPTIONAL integer field. placeholder: "e.g., 714274" - type: input - id: horizontal_n_vertex + id: horizontal_n_vertices attributes: - label: N vertex + label: N Vertices description: | - Number of unique primal vertices (nodes) in unstructured grid. + Number of vertices (nodes) for unstructured grids. - Omit when not applicable or not constant. + OPTIONAL integer field. placeholder: "e.g., 567145" - type: dropdown @@ -382,25 +343,21 @@ body: attributes: label: Truncation Method description: | - Method for truncating spherical harmonic expansion of spectral grid. - - From Native horizontal grid Truncation method CV. + Method for truncating spherical harmonic expansion. - Omit when not applicable. + OPTIONAL field from Truncation method CV. options: - - "Not applicable" - "triangular" - "rhomboidal" - default: 0 - type: input id: horizontal_truncation_number attributes: label: Truncation Number description: | - Zonal (east-west) wave number at which spectral grid is truncated. + Truncation number for spectral grids. - Omit when not applicable. + OPTIONAL integer field. placeholder: "e.g., 63" - type: input @@ -408,33 +365,35 @@ body: attributes: label: Resolution Range (km) description: | - Minimum and maximum resolution in km (to 3 significant figures). + Minimum and maximum resolution in km. - Calculated as min/max values of dmax from CMIP6 metadata specifications. + MANDATORY field as [float,float]. Format: min, max placeholder: "e.g., 57.0, 290" + validations: + required: true - type: input id: horizontal_mean_resolution_km attributes: label: Mean Resolution (km) description: | - Mean resolution in km (to 3 significant figures) of the native grid. + Mean resolution in km. - Calculated as mean of dmax values from CMIP6 metadata specifications. - placeholder: "e.g., 234" + MANDATORY float field. + placeholder: "e.g., 234.5" + validations: + required: true - type: dropdown id: horizontal_nominal_resolution attributes: label: Nominal Resolution description: | - Nominal resolution in km that characterises the grid resolution. + Nominal resolution characterizing the grid. - Calculated using CMIP6 metadata specifications procedure. - - From Native horizontal grid Nominal resolution CV. + MANDATORY field from Nominal resolution CV. options: - "0.5 km" - "10000 km" @@ -451,33 +410,15 @@ body: - "500 km" - "50 km" - "5 km" + validations: + required: true - type: markdown attributes: value: | ## Native Vertical Grid - Standardised description of the model component's vertical grid. - - - type: dropdown - id: vertical_same_as_component - attributes: - label: Same as Component (Vertical) - description: | - If this component uses the same vertical grid as another component, select it here. - - If set, no other vertical grid properties are required. - options: - - "Not applicable" - - "aerosol" - - "atmos" - - "atmosChem" - - "land" - - "landIce" - - "ocean" - - "ocnBgchem" - - "seaIce" - default: 0 + MANDATORY compound object describing the component's vertical grid. - type: dropdown id: vertical_coordinate @@ -486,9 +427,7 @@ body: description: | The coordinate type of the vertical grid. - From Native vertical grid Coordinate CV. - - Select 'none' if no vertical dimension. + MANDATORY field from Coordinate CV. options: - "no-vertical-grid" - "air-potential-temperature" @@ -515,11 +454,11 @@ body: - type: textarea id: vertical_description attributes: - label: Grid Description (Optional) + label: Description (Optional) description: | Free-text description of the vertical grid. - Only required if there is information not covered by other properties. + OPTIONAL field. placeholder: "Additional vertical grid details if needed" - type: input @@ -527,9 +466,9 @@ body: attributes: label: N z description: | - Number of grid cells in Z direction for mass-related quantities. + Number of grid cells in Z direction. - Omit when not applicable or not constant. + OPTIONAL integer field. Must be omitted if n_z_range is set. placeholder: "e.g., 70" - type: input @@ -537,9 +476,9 @@ body: attributes: label: N z Range description: | - For variable resolution grids: minimum and maximum number of Z grid cells. + Minimum and maximum number of Z grid cells for variable resolution. - Omit if N z property has been set. + OPTIONAL field as [integer,integer]. Must be omitted if n_z is set. Format: min, max placeholder: "e.g., 5, 15" @@ -549,24 +488,20 @@ body: attributes: label: Bottom Layer Thickness description: | - Thickness of bottom model layer for mass-related quantities. - - Report as dimensional quantity. Units given by Units property. + Thickness of bottom model layer. - Omit when not applicable or not constant. - placeholder: "e.g., 10" + OPTIONAL float field. + placeholder: "e.g., 10.0" - type: input id: vertical_top_layer_thickness attributes: label: Top Layer Thickness description: | - Thickness of top model layer for mass-related quantities. + Thickness of top model layer. - Report as dimensional quantity. Units given by Units property. - - Omit when not applicable or not constant. - placeholder: "e.g., 10" + OPTIONAL float field. + placeholder: "e.g., 10.0" - type: input id: vertical_top_of_model @@ -575,21 +510,17 @@ body: description: | Value of upper boundary of top model layer. - Relative to lower boundary of bottom layer or appropriate datum (e.g., mean sea level). - - Report as dimensional quantity. Units given by Units property. + OPTIONAL float field. placeholder: "e.g., 85003.5" - type: dropdown id: vertical_units attributes: - label: Units + label: Vertical Units description: | - Physical units of Bottom layer thickness, Top layer thickness, and Top of Model values. - - From Native vertical grid Units CV. + Physical units for thickness and boundary values. - Omit when not applicable. + OPTIONAL field - Required if any thickness/boundary values are set. options: - "K" - "m" diff --git a/.github/ISSUE_TEMPLATE/top_level_model.yml b/.github/ISSUE_TEMPLATE/top_level_model.yml index 3d43b0e..2271161 100644 --- a/.github/ISSUE_TEMPLATE/top_level_model.yml +++ b/.github/ISSUE_TEMPLATE/top_level_model.yml @@ -19,9 +19,7 @@ body: For CMIP7, must be a registered source_id. - May include family indication but not version. - - E.g. HadGEM3-GC31-HH, CESM2, ICON-ESM + MANDATORY field. placeholder: "e.g., HadGEM3-GC31-HH, CESM2" validations: required: true @@ -33,9 +31,7 @@ body: description: | The name of the family of models that this model belongs to. - Family models share code bases but may be configured differently. - - E.g. HadCM2, HadGEM3 + MANDATORY field. placeholder: "e.g., HadGEM3, CESM" validations: required: true @@ -43,17 +39,57 @@ body: - type: dropdown attributes: multiple: true - label: Components + label: Dynamic Components description: | Select the processes that are dynamically simulated by the model components. Select all that apply. - Each process must be further described by model component properties. + MANDATORY field from Model component process CV. + options: + - "aerosol" + - "atmos" + - "atmosChem" + - "land" + - "landIce" + - "ocean" + - "ocnBgchem" + - "seaIce" + validations: + required: true + + - type: dropdown + attributes: + multiple: true + label: Prescribed Components + description: | + Select the processes that use prescribed (externally provided) data rather than dynamic simulation. - From Model component process CV. + Select all that apply. - E.g. atmosphere, aerosol, land surface, ocean, sea ice + MANDATORY field from Model component process CV. + options: + - "aerosol" + - "atmos" + - "atmosChem" + - "land" + - "landIce" + - "ocean" + - "ocnBgchem" + - "seaIce" + validations: + required: true + + - type: dropdown + attributes: + multiple: true + label: Omitted Components + description: | + Select the processes that are completely absent from this model. + + Select all that apply. + + MANDATORY field from Model component process CV. options: - "aerosol" - "atmos" @@ -73,10 +109,8 @@ body: description: | A brief, free-text scientific overview of the model. - Include mention of dynamically simulated processes but avoid duplicating component-level information. - - Should provide high-level model purpose and capabilities. - placeholder: "Brief scientific overview of the model, its purpose, and key capabilities. Mention the dynamically simulated processes selected above." + MANDATORY field. + placeholder: "Brief scientific overview of the model, its purpose, and key capabilities." validations: required: true @@ -89,11 +123,7 @@ body: Select all that apply. - Multiple calendars may be selected for different simulations. - - For CMIP7, note that simulation calendar is defined in output datasets. - - From Model Calendar CV. + MANDATORY field from Model Calendar CV. options: - "no-calendar" - "360-day" @@ -103,15 +133,17 @@ body: - "none" - "proleptic-gregorian" - "standard" + validations: + required: true - type: input id: release_year attributes: label: Release Year description: | - The year in which this model configuration was released, or first used for published simulations. + The year in which this model configuration was released. - E.g. 2016, 2019, 2023 + MANDATORY integer field. placeholder: "e.g., 2016, 2019, 2023" validations: required: true @@ -121,8 +153,7 @@ body: value: | ## References - **Instructions for References:** Each reference must include both Citation and DOI properties. - A DOI is required for all references - if one doesn't exist, you must create one (e.g., with Zenodo). + MANDATORY: Each reference must include both Citation and DOI properties. - type: textarea id: reference_1_citation @@ -131,8 +162,8 @@ body: description: | Human-readable citation for the primary model reference. - Must include complete bibliographic information. - placeholder: "Smith, R. S., et al. (2021). Model Name: Description of the model. Journal Name, Volume, Pages. https://doi.org/..." + MANDATORY field. + placeholder: "Smith, R. S., et al. (2021). Model Name: Description. Journal, Volume, Pages." validations: required: true @@ -140,7 +171,10 @@ body: id: reference_1_doi attributes: label: Reference 1 - DOI - description: The persistent identifier (DOI) for the primary model reference. + description: | + The persistent identifier (DOI) for the primary model reference. + + MANDATORY field. placeholder: "https://doi.org/10.1029/2021MS002520" validations: required: true @@ -159,20 +193,6 @@ body: description: DOI for additional model reference. placeholder: "https://doi.org/..." - - type: textarea - id: reference_3_citation - attributes: - label: Reference 3 - Citation (Optional) - description: Human-readable citation for additional model reference. - placeholder: "Additional reference citation (optional)" - - - type: input - id: reference_3_doi - attributes: - label: Reference 3 - DOI (Optional) - description: DOI for additional model reference. - placeholder: "https://doi.org/..." - - type: dropdown id: issue_category attributes: diff --git a/.github/ISSUE_TEMPLATE/vertical_grid.yml b/.github/ISSUE_TEMPLATE/vertical_grid.yml new file mode 100644 index 0000000..5fdc991 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/vertical_grid.yml @@ -0,0 +1,140 @@ +name: Vertical Grid Properties Documentation +description: Document vertical grid specifications as compound objects for EMD compliance. +title: "[EMD] Vertical Grid Properties" +labels: ['emd-submission', 'vertical-grid'] +body: + - type: markdown + attributes: + value: | + # Vertical Grid Properties Documentation + + This template documents vertical grid specifications as compound objects referenced by model components. Based on EMD Section 4.2 requirements. + + - type: dropdown + id: coordinate + attributes: + label: Coordinate + description: | + The coordinate type of the vertical grid. + + MANDATORY field from Coordinate CV. + options: + - "no-vertical-grid" + - "air-potential-temperature" + - "air-pressure" + - "atmosphere-hybrid-height-coordinate" + - "atmosphere-hybrid-sigma-pressure-coordinate" + - "atmosphere-ln-pressure-coordinate" + - "atmosphere-sigma-coordinate" + - "atmosphere-sleve-coordinate" + - "depth" + - "geopotential-height" + - "height" + - "ocean-double-sigma-coordinate" + - "ocean-s-coordinate-g1" + - "ocean-s-coordinate-g2" + - "ocean-s-coordinate" + - "ocean-sigma-coordinate" + - "ocean-sigma-z-coordinate" + - "sea-water-potential-temperature" + - "sea-water-pressure" + validations: + required: true + + - type: textarea + id: description + attributes: + label: Description (Optional) + description: | + Free-text description of the vertical grid. + + OPTIONAL field. + placeholder: "Additional vertical grid details if needed" + + - type: input + id: n_z + attributes: + label: N z + description: | + Number of grid cells in Z direction. + + OPTIONAL integer field. Must be omitted if n_z_range is set. + placeholder: "e.g., 70" + + - type: input + id: n_z_range + attributes: + label: N z Range + description: | + Minimum and maximum number of Z grid cells for variable resolution. + + OPTIONAL field as [integer,integer]. Must be omitted if n_z is set. + + Format: min, max + placeholder: "e.g., 5, 15" + + - type: input + id: bottom_layer_thickness + attributes: + label: Bottom Layer Thickness + description: | + Thickness of bottom model layer. + + OPTIONAL float field. + placeholder: "e.g., 10.0" + + - type: input + id: top_layer_thickness + attributes: + label: Top Layer Thickness + description: | + Thickness of top model layer. + + OPTIONAL float field. + placeholder: "e.g., 10.0" + + - type: input + id: top_of_model + attributes: + label: Top of Model + description: | + Value of upper boundary of top model layer. + + OPTIONAL float field. + placeholder: "e.g., 85003.5" + + - type: dropdown + id: vertical_units + attributes: + label: Vertical Units + description: | + Physical units for thickness and boundary values. + + OPTIONAL field - Required if any thickness/boundary values are set. + options: + - "K" + - "m" + - "Pa" + + - type: dropdown + id: issue_category + attributes: + label: Issue Type + description: This is pre-set and cannot be changed. + options: + - "vertical-grid" + default: 0 + validations: + required: true + + - type: dropdown + id: issue_kind + attributes: + label: Issue Kind + description: Select whether this is a new submission or modification of existing entry. + options: + - "new" + - "modify" + default: 0 + validations: + required: true diff --git a/.github/README.md b/.github/README.md deleted file mode 100644 index 7f0a975..0000000 --- a/.github/README.md +++ /dev/null @@ -1 +0,0 @@ -These files are mostly auto generated from the template_generate folder using a cron action. diff --git a/docs/Essential Model Documentation (EMD) POST community review - version 0.90.pdf b/docs/Essential Model Documentation (EMD) POST community review - version 0.90.pdf new file mode 100644 index 0000000..d2ea305 Binary files /dev/null and b/docs/Essential Model Documentation (EMD) POST community review - version 0.90.pdf differ diff --git a/docs/emd_property_requirements.md b/docs/emd_property_requirements.md new file mode 100644 index 0000000..451655a --- /dev/null +++ b/docs/emd_property_requirements.md @@ -0,0 +1,76 @@ +# EMD property requirements (2025-08-29) + +For each section, the following are given: + + + +where + + is the per-section name of each property (e.g. family, prescribed_components, etc.) + + indicates if the providing a property value is mandatory or optional. + + indicates the type of values expected (e.g. string, integer, CV). Other compound types (such as ) may also be indicated. + +, if present on optional properties, indicates at least some (not necessarily all) cases where the property does/doesn't need to be provided. + +## 2. Top-level model + +- name MANDATORY string +- family MANDATORY string +- dynamic_components MANDATORY CV +- prescribed_components MANDATORY CV +- omitted_components MANDATORY CV +- description MANDATORY string +- calendar MANDATORY CV +- release_year MANDATORY integer +- references MANDATORY + +## 3. Model components + +- component MANDATORY CV +- name MANDATORY string +- family MANDATORY string +- description MANDATORY string +- references MANDATORY +- code_base MANDATORY string +- embedded_in OPTIONAL CV +- coupled_with OPTIONAL CV +- native_horizontal_grid MANDATORY +- native_vertical_grid MANDATORY + +## 4.1. Horizontal grid + +- grid MANDATORY CV +- description OPTIONAL string +- grid_mapping MANDATORY CV +- region MANDATORY CV +- temporal_refinement MANDATORY CV +- arrangement MANDATORY CV +- resolution_x OPTIONAL float +- resolution_y OPTIONAL float +- horizontal_units OPTIONAL CV NOTE: Required if any of resolution_x, resolution_y are set +- n_cells MANDATORY integer +- n_sides OPTIONAL integer +- n_vertices OPTIONAL integer +- truncation_method OPTIONAL CV +- truncation_number OPTIONAL integer +- resolution_range_km MANDATORY [float,float] +- mean_resolution_km MANDATORY float +- nominal_resolution MANDATORY CV + +## 4.2. Vertical grid + +- coordinate MANDATORY CV +- description OPTIONAL string +- n_z OPTIONAL integer NOTE: Must be omitted if n_z_range is set +- n_z_range OPTIONAL [integer,integer] NOTE: Must be omitted if n_z is set +- bottom_layer_thickness OPTIONAL float +- top_layer_thickness OPTIONAL float +- top_of_model OPTIONAL float +- vertical_units OPTIONAL CV NOTE: Required if any of bottom_layer_thickness, top_layer_thickness, top_of_model are set + +## 5. References + +- citation MANDATORY string +- doi MANDATORY string diff --git a/emd_property_requirements.md b/emd_property_requirements.md new file mode 100644 index 0000000..451655a --- /dev/null +++ b/emd_property_requirements.md @@ -0,0 +1,76 @@ +# EMD property requirements (2025-08-29) + +For each section, the following are given: + + + +where + + is the per-section name of each property (e.g. family, prescribed_components, etc.) + + indicates if the providing a property value is mandatory or optional. + + indicates the type of values expected (e.g. string, integer, CV). Other compound types (such as ) may also be indicated. + +, if present on optional properties, indicates at least some (not necessarily all) cases where the property does/doesn't need to be provided. + +## 2. Top-level model + +- name MANDATORY string +- family MANDATORY string +- dynamic_components MANDATORY CV +- prescribed_components MANDATORY CV +- omitted_components MANDATORY CV +- description MANDATORY string +- calendar MANDATORY CV +- release_year MANDATORY integer +- references MANDATORY + +## 3. Model components + +- component MANDATORY CV +- name MANDATORY string +- family MANDATORY string +- description MANDATORY string +- references MANDATORY +- code_base MANDATORY string +- embedded_in OPTIONAL CV +- coupled_with OPTIONAL CV +- native_horizontal_grid MANDATORY +- native_vertical_grid MANDATORY + +## 4.1. Horizontal grid + +- grid MANDATORY CV +- description OPTIONAL string +- grid_mapping MANDATORY CV +- region MANDATORY CV +- temporal_refinement MANDATORY CV +- arrangement MANDATORY CV +- resolution_x OPTIONAL float +- resolution_y OPTIONAL float +- horizontal_units OPTIONAL CV NOTE: Required if any of resolution_x, resolution_y are set +- n_cells MANDATORY integer +- n_sides OPTIONAL integer +- n_vertices OPTIONAL integer +- truncation_method OPTIONAL CV +- truncation_number OPTIONAL integer +- resolution_range_km MANDATORY [float,float] +- mean_resolution_km MANDATORY float +- nominal_resolution MANDATORY CV + +## 4.2. Vertical grid + +- coordinate MANDATORY CV +- description OPTIONAL string +- n_z OPTIONAL integer NOTE: Must be omitted if n_z_range is set +- n_z_range OPTIONAL [integer,integer] NOTE: Must be omitted if n_z is set +- bottom_layer_thickness OPTIONAL float +- top_layer_thickness OPTIONAL float +- top_of_model OPTIONAL float +- vertical_units OPTIONAL CV NOTE: Required if any of bottom_layer_thickness, top_layer_thickness, top_of_model are set + +## 5. References + +- citation MANDATORY string +- doi MANDATORY string