FV3-JEDI
FieldsMetadata.interface.cc
Go to the documentation of this file.
1 /*
2  * (C) Copyright 2020 UCAR
3  *
4  * This software is licensed under the terms of the Apache Licence Version 2.0
5  * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
6  */
7 
8 #include <algorithm>
9 #include <string>
10 
11 #include "oops/util/abor1_cpp.h"
12 
15 
16 namespace fv3jedi {
17 
18  void checkStringLength(const std::string strCheck) {
19  unsigned fortranStrLen = 2048;
20  if (strCheck.size() >= fortranStrLen) {
21  ABORT("FieldMetadataInterface.check_string_length "+strCheck+" exceeds length from Fortran");
22  }
23  }
24 
25  void fields_metadata_get_field_f(const FieldsMetadata* fieldsMetadata, const char fieldIONameC[],
26  char fieldNameC[], char kindC[], int& levels,
27  char longNameC[], char spaceC[], char staggerLocC[],
28  bool& tracer, char unitsC[], char io_fileC[]) {
29  // Get meta data for requested field
30  oops::Log::trace() << "Calling FieldsMetaData.GetField for " << fieldIONameC << std::endl;
31  const std::string fieldIOName(fieldIONameC);
32  FieldMetadata fieldMetadata = fieldsMetadata->getField(fieldIOName);
33 
34  // Bool, int outputs
35  levels = fieldMetadata.getLevels();
36  tracer = fieldMetadata.getTracer();
37 
38  // Prepare char outputs
39  std::string fieldName = fieldMetadata.getFieldName();
40  std::string kind = fieldMetadata.getKind();
41  std::string longName = fieldMetadata.getLongName();
42  std::string space = fieldMetadata.getSpace();
43  std::string staggerLoc = fieldMetadata.getStaggerLoc();
44  std::string units = fieldMetadata.getUnits();
45  std::string io_file = fieldMetadata.getIOFile();
46 
47  // Check string lengths
48  checkStringLength(fieldName);
49  checkStringLength(kind);
50  checkStringLength(longName);
51  checkStringLength(space);
52  checkStringLength(staggerLoc);
53  checkStringLength(units);
54  checkStringLength(io_file);
55 
56  // Fill char outputs
57  std::copy(fieldName.begin(), fieldName.end(), fieldNameC);
58  std::copy(kind.begin(), kind.end(), kindC);
59  std::copy(longName.begin(), longName.end(), longNameC);
60  std::copy(space.begin(), space.end(), spaceC);
61  std::copy(staggerLoc.begin(), staggerLoc.end(), staggerLocC);
62  std::copy(units.begin(), units.end(), unitsC);
63  std::copy(io_file.begin(), io_file.end(), io_fileC);
64  }
65 
66 } // namespace fv3jedi
fv3jedi::fields_metadata_get_field_f
void fields_metadata_get_field_f(const FieldsMetadata *fieldsMetadata, const char fieldIONameC[], char fieldNameC[], char kindC[], int &levels, char longNameC[], char spaceC[], char staggerLocC[], bool &tracer, char unitsC[], char io_fileC[])
Definition: FieldsMetadata.interface.cc:25
fv3jedi_fields_mod::copy
subroutine copy(self, other)
Definition: fv3jedi_fields_mod.f90:203
fv3jedi::FieldMetadata::getTracer
bool getTracer() const
Definition: FieldsMetadata.h:68
fv3jedi::FieldMetadata::getStaggerLoc
std::string getStaggerLoc() const
Definition: FieldsMetadata.h:64
fv3jedi::FieldMetadata::getLongName
std::string getLongName() const
Definition: FieldsMetadata.h:56
fv3jedi::checkStringLength
void checkStringLength(const std::string strCheck)
Definition: FieldsMetadata.interface.cc:18
fv3jedi::FieldMetadata::getIOFile
std::string getIOFile() const
Definition: FieldsMetadata.h:76
fv3jedi::FieldMetadata::getUnits
std::string getUnits() const
Definition: FieldsMetadata.h:72
FieldsMetadata.h
fv3jedi::FieldMetadata::getLevels
int getLevels() const
Definition: FieldsMetadata.h:52
fv3jedi::FieldMetadata::getKind
std::string getKind() const
Definition: FieldsMetadata.h:48
fv3jedi::FieldMetadata
Definition: FieldsMetadata.h:33
fv3jedi::FieldMetadata::getFieldName
std::string getFieldName() const
Definition: FieldsMetadata.h:44
fv3jedi
Configuration files should be formatted as e.g.
Definition: ErrorCovariance.cc:20
fv3jedi::FieldsMetadata::getField
FieldMetadata getField(const std::string &) const
Definition: FieldsMetadata.cc:182
fv3jedi::FieldsMetadata
Definition: FieldsMetadata.h:159
FieldsMetadata.interface.h
fv3jedi::FieldMetadata::getSpace
std::string getSpace() const
Definition: FieldsMetadata.h:60