Returns the name of the c_type from iso_c_binding to use when declaring
        the output parameter for interaction with python ctypes.

def ctype(self):
        """Returns the name of the c_type from iso_c_binding to use when declaring
        the output parameter for interaction with python ctypes.
        """
        if self.dtype == "logical":
            return "C_BOOL"
        elif self.dtype == "complex":
            #We don't actually know what the precision of the complex numbers is because
            #it is defined by the developer when they construct the number with CMPLX()
            #We just return double to be safe; it is a widening conversion, so there
            #shouldn't be any issues.
            return "C_DOUBLE_COMPLEX"
        elif self.dtype == "character":
            return "C_CHAR"
        elif self.dtype in ["integer", "real"]:
            if self.kind is None:
                if self.dtype == "integer":
                    return "C_INT"
                else:
                    return "C_FLOAT"
                
            if self._kind_module is None and self.kind is not None:
                self.dependency()
            if self._kind_module is None and self.kind is not None:
                raise ValueError("Can't find the c-type for {}".format(self.definition()))
            elif self._kind_module is not None:
                #We look up the parameter in the kind module to find out its
                #precision etc.
                import re
                default = self._kind_module.members[self.kind].default
                vals = default.split("(")[1].replace(")", "")
                ints = list(map(int, re.split(",\s*", vals)))
                if self.dtype == "integer" and len(ints) == 1:
                    if ints[0] <= 15:
                        return "C_SHORT"
                    elif ints[0] <= 31:
                        return "C_INT"
                    elif ints[0] <= 63:
                        return "C_LONG"
                elif self.dtype == "real" and len(ints) == 2:
                    if ints[0] <= 24 and ints[1] < 127:
                        return "C_FLOAT"
                    elif ints[0] <= 53 and ints[1] < 1023:
                        return "C_DOUBLE"